极速赛车微信群-如何使用Oracle SQL生成Apriori项集

Apriori原则由以下描述给出:

极速赛车微信群如果项集是频繁的,那么它的所有子集也必须是频繁的。相反,如果一个子集很少,那么它的所有超集也必须是罕见的。

在本文中,我尝试使用Oracle SQL生成最常用的项目。

本文中使用的数据如下:

市场篮子数据

首先,我使用以下脚本创建了一个名为“APR_ITEMS_BOUGHT”的表,并手动将数据插入表中:

 
创建  APR_ITEMS_BOUGHT
 
 
TID NUMBER
 
ITEMS VARCHAR250
 
 

创建上表后,项目集将按列插入到新表中。生成表的脚本是:

 
创建  APRIORI
 
 
    TID NUMBER
 
    ITEM_A varchar210),
 
    ITEM_B varchar210),
 
    ITEM_C varchar210),
 
    ITEM_D varchar210),
 
    ITEM_E varchar210),
 
    ITEM_F varchar210
 
 

查找频繁项目集有两个步骤:

  • 生成候选项集
  • 生成频繁的项目集

赛车微信群现在可以启动项集生成。第一个候选表“C1”在以下脚本中创建;

 
创建  C1 AS
 
选择项目ITEM_1,CNT,ALL_CNT FROM
 
    选择 'A'的项目,SUMCASE  WHEN ITEM_A = 'A'  THEN  1  ELSE  0  END)CNT,COUNT(*)ALL_CNT
 
  来自 apriori
 
    UNION  ALL
 
    选择 'B' ITEM,SUMCASE  WHEN ITEM_B = 'B'  THEN  1  ELSE  0  END)CNT,COUNT(*)ALL_CNT
 
  来自 apriori
 
    UNION  ALL
 
    选择 'C' ITEM,SUMCASE  WHEN ITEM_C = 'C'  THEN  1  ELSE  0  END)CNT,COUNT(*)ALL_CNT
 
  来自 apriori
 
    UNION  ALL
 
    选择 'd' ITEM,SUMCASE  WHEN ITEM_D = 'd'  THEN  1  ELSE  0  END)CNT,COUNT(*)ALL_CNT
 
  来自 apriori
 
    UNION  ALL
 
    选择 'E' ITEM,SUMCASE  WHEN ITEM_E = 'E'  THEN  1  ELSE  0  END)CNT,COUNT(*)ALL_CNT
 
  来自 apriori
 
    UNION  ALL
 
    选择 'F' ITEM,SUMCASE  WHEN ITEM_F = 'F'  THEN  1  ELSE  0  END)CNT,COUNT(*)ALL_CNT
 
  来自 apriori    
 
 

然后创建频繁项目集。我选择最小支持和最小置信度值为:

  • 最低支持%40
  • 最低信心%60
 
创建  F1 AS
 
SELECT ITEM_1,SUPPORT,CNT FROM
 
    选择 ITEM_1,CNT / ALL_CNT支持,CNT 来自 C1
 
 
在哪里支持> = 0.4  -  预测
 

“C1”和“F1”组的结果如下所示;

C1项目集生成表

C1表有三列:ITEM列给出了市场篮子中的项目,CNT列给出了项目有多少交易,ALL_CNT列给出了所有交易计数。修剪%40支持值后,我们留下以下频繁项目集:

图片标题

F1表还有三列:ITEM列,每列的SUPPORT值以及CNT列中的事务计数。

对于第二个项目集生成和频繁项目集,将使用已修剪的F1表。

 
CREATE  TABLE APRIORI_VERTICAL AS
 
 APRIORI A中选择 TID,ITEM_A项目
 
在哪里 ITEM_A <> '0'
 
UNION  ALL
 
SELECT TID,ITEM_B 来自 APRIORI的项目
 
在哪里 ITEM_B <> '0'
 
UNION  ALL
 
来自 APRIORI的SELECT TID,ITEM_C项目
 
在哪里 ITEM_C <> '0'
 
UNION  ALL
 
来自 APRIORI的SELECT TID,ITEM_D项目
 
在哪里 ITEM_D <> '0'
 
UNION  ALL
 
 APRIORI A中选择 TID,ITEM_E项目
 
在哪里 ITEM_E <> '0'
 
UNION  ALL
 
来自 APRIORI的SELECT TID,ITEM_F项目
 
在哪里 ITEM_F <> '0'
 

							
 
CREATE  TABLE FREQ_ITEM_2 AS 
 
SELECT A.ITEM_1,B.ITEM_1 ITEM_2
 
来自 F1 A,F1 B.
 
在哪里 A.ITEM_1 <B.ITEM_1
 

							
 
创建  C2 AS
 
选择 Z.ITEM_1 ITEM_1,Z.ITEM_2 ITEM_2,CNT,REC_CNT ALL_CNT,FIRST_INSTANCE_COUNT
 
 
 
    SELECT C.ITEM_1,C.ITEM_2,COUNTDISTINCT C.TID)CNT
 
    
 
 
        SELECT * FROM FREQ_ITEM_2
 
    ) X
 
    内部联接 
 
 
        SELECT A1.TID,A1.ITEM ITEM_1,A2.ITEM ITEM_2
 
        来自 APRIORI_VERTICAL A1 CROSS JOIN APRIORI_VERTICAL A2
 
        WHERE A1.TID = A2.TID
 
        AND A1.ITEM <A2.ITEM  
 
    ) C 
 
     X.ITEM_1 = C.ITEM_1  X.ITEM_2 = C.ITEM_2
 
    GROUP  BY C.ITEM_1,C.ITEM_2
 
)Z
 
交叉加入 
 
 
    SELECT  COUNT(*)REC_CNT
 
    
 
 
        SELECT * FROM FREQ_ITEM_2
 
    )Z    
 
)D
 
内部联接 
 
 
    SELECT A.ITEM_1,COUNTDISTINCT TID)FIRST_INSTANCE_COUNT
 
    来自 FREQ_ITEM_2 A,APRIORI_VERTICAL B
 
    在哪里 A.ITEM_1 = B.ITEM
 
    GROUP  BY A.ITEM_1
 
)E ON Z.ITEM_1 = E.ITEM_1
 

F2表

 
创建  F2 AS
 
SELECT ITEM_1,ITEM_2,SUPPORT,CONFIDENCE,CNT FROM
 
    SELECT ITEM_1,ITEM_2,TRUNC(CNT / ALL_CNT,2)支持,TRUNC(CNT / FIRST_INSTANCE_COUNT,2信心,CNT 来自 C2
 
 
在哪里支持> = 0.4  -  预测
 
或者信心 > = 0.6  -  正在进行
 

创建F2表后,我们留下以下记录,这意味着最常见的夫妇:

图片标题

第三步最常用的项目:

 
CREATE  TABLE FREQ_ITEM_3 AS
 
SELECT A.ITEM_1 ITEM_1,A.ITEM_2 ITEM_2,B.ITEM_2 ITEM_3  
 
 
 
    F2 A,F2 B.
 
在哪里 A.ITEM_1 = B.ITEM_1
 
AND A.ITEM_2 <B.ITEM_2
 
为了 通过 A.ITEM_1,A.ITEM_2,B.ITEM_2
 

第3个C3表:

 
创建  C3 AS
 
选择 Z.ITEM_1 ITEM_1,Z.ITEM_2 ITEM_2,Z.ITEM_3 ITEM_3,CNT,REC_CNT ALL_CNT,FIRST_INSTANCE_COUNT
 
 
 
    SELECT C.Item_1,C.ITEM_2,C.ITEM_3,COUNTDISTINCT C.TID)CNT
 
    
 
 
        SELECT * FROM FREQ_ITEM_3
 
    ) X
 
    内部联接 
 
 
        SELECT A1.TID,a1.item ITEM_1,a2.item ITEM_2,A3.ITEM ITEM_3
 
        来自 APRIORI_VERTICAL A1
 
        CROSS JOIN APRIORI_VERTICAL A2
 
        CROSS JOIN APRIORI_VERTICAL A3 
 
        其中 A1.TID = A2.TID
 
        AND A1.TID = A3.TID
 
        AND A1.ITEM <A2.ITEM
 
        AND A1.ITEM <A3.ITEM    
 
         A2.ITEM <A3.ITEM
 
    ) C 
 
     X.ITEM_1 = C.ITEM_1  X.ITEM_2 = C.ITEM_2  X.ITEM_3 = C.ITEM_3
 
    GROUP  BY C.ITEM_1,C.ITEM_2,C.ITEM_3
 
)Z
 
交叉加入 
 
 
    选择 COUNT(*)REC_CNT
 
    
 
 
        SELECT * FROM FREQ_ITEM_3
 
    )Z    
 
)D
 
内部联接 
 
 
    SELECT A.ITEM_1,A.ITEM_2,COUNTDISTINCT B.TID)FIRST_INSTANCE_COUNT
 
    来自 FREQ_ITEM_3 A,APRIORI_VERTICAL B,APRIORI_VERTICAL C.
 
    在哪里 A.ITEM_1 = B.ITEM
 
    AND A.ITEM_2 = C.ITEM
 
    AND B.TID = C.TID
 
    GROUP  BY A.ITEM_1,A.ITEM_2
 
)E ON Z.ITEM_1 = E.ITEM_1  Z.ITEM_2 = E.ITEM_2
 

频繁项目集的第3个修剪步骤,F1表:

 
创建  F3 AS
 
SELECT ITEM_1,ITEM_2,ITEM_3,SUPPORT,CONFIDENCE,CNT FROM
 
    SELECT ITEM_1,ITEM_2,ITEM_3,TRUNC(CNT / ALL_CNT,2)支持,TRUNC(CNT / FIRST_INSTANCE_COUNT,2信心,CNT 来自 C3
 
 
在哪里支持> = 0.4  -  预测
 
或者信心 > = 0.6  -  正在进行
 

在第4步中,频繁项集表中没有数据:

 
CREATE  TABLE FREQ_ITEM_4 AS
 
SELECT A.ITEM_1 I1,A.ITEM_2 I2,a.ITEM_3,b.item_3 ITEM_4
 
 
 
    F3 A. 
 
    ,F3 B.
 
在哪里 A.ITEM_1 = B.ITEM_1
 
AND A.ITEM_2 = B.ITEM_2
 
AND A.ITEM_3 <B.ITEM_3
 
为了 通过 A.ITEM_1,A.ITEM_2,a.ITEM_3,b.item_3
 

因此我们可以得出赛车微信群结论,最常见的项目集是:

图片标题

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.jnyfchery.com/a/jsscgw/185.html