【Python】关联规则实例

系统 1476 0

这是最近找机器学习实习的一个笔试题:
【Python】关联规则实例_第1张图片
看到这个题的时候第一想法就是用关联规则(Apriori算法)来实现。
关联规则最重要的就是支持度Support和置信度Confidence。
支持度的计算方法:

            
              #下面式中X∩Y表示X和Y同时发生的次数,N表示总事物数
support(X->Y) = X∩Y/N

            
          

置信度的计算方法:

            
              confidence(X->Y) = support(X->Y) / support(X)

            
          

知道支持度和置信度的计算方法之后就可以实现上面算法了,首先本题给的数据集比较大,有六百多个项,因此直接对数据进行循环操作的话时间复杂度太高,我们先根据支持度对数据进行基本筛选。

            
              已知:若A->Z不满足支持度,则AB->Z亦不满足支持度。

            
          

因此我们先找出规则左边只有一项且满足支持度的数据,即初步剔除不满足支持度的数据,代码如下:

            
              import pandas as pd
import numpy as np
#读取数据
path = r"Test2_Data.csv"
df = pd.read_csv(path,engine='python')
#sup支持度大于等于0.1
sup = 0.1
#N为事务数目
N = df.shape[0]
#初步筛选频繁1项集,将df更新,其中列Label为数据的最后一列
data = df[df['Label']==1]
df = df[data.sum()[(data.sum()>=N*sup)].index]

            
          

然后根据通过双层循环来选取满足置信度条件的规则,其中在左边有两项的规则中需要加入支持度条件,代码如下:

            
              #con置信度大于等于0.7
con = 0.7
#定义变量apriori存放符合要求的关联规则X->Y
apriori = []
for i in range(df.shape[1]-1):
    #X->Y的置信度等于XY同时出现的次数除以X出现的次数
    #选取左边只有一项的规则
    XY = df[(df['Label']==1)&(df.ix[:,i]==1)].shape[0]
    Y = df[df.ix[:,i]==1].shape[0]
    if(Y!=0 and XY/Y>=con):
        apriori.append(df.columns[i] + '->' + 'Label')
    elif(i == df.shape[1]-1):
        break
    for j in range(i+1,df.shape[1]-1):
        # 选取左边有两项的规则
        XY = df[(df['Label']==1)&(df.ix[:,i]==1)&(df.ix[:,j]==1)].shape[0]
        Y = df[(df.ix[:,i]==1)&(df.ix[:,j]==1)].shape[0]
        if(Y!=0 and XY/Y>=con and XY>=N*sup):
            apriori.append(df.columns[i]+ df.columns[j] + '->' + 'Label')

            
          

到这里就完成了这个机器学习的笔试题。

欢迎添加个人微信号:liu2536036458。
想进入交流群的,备注: 数据分析交流群


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论