Python数据挖掘与机器学习——关联分析算法代码实现

目录

一、关联分析概述

1.1事务数据库

1.2关联规则

1.3频繁项集

1.4挖掘关联规则的基本过程

APRIORI算法

基本APRIORI算法

二、代码实现


一、关联分析概述

        关联分析是关联规则挖掘,目标是发现事务数据库中不同项之间的联系,这些联系构成的规则可以帮助用户找出某些行为的特征。

1.1事务数据库

定义I=\left \{ i1,i2,...,im \right \}是全局项的集合,其中ij是项的唯一标识。事务数据库D=\left \{ t1,t2,...,tn \right \}是一个事务的集合,每个事务ti都对应I上的一个子集。由中部分或者全部项构成的一个集合为项集,任何非空项集中均不含有重复项。

1.2关联规则

        关联规则表示项之间的关系,形如:X\rightarrow Y,分别成为规则的前后件。关联规则的强度可以用它的支持度 support(I_1)=\frac{\left | \left \{ t_i|I_1\subseteq t_i,t_i\in D \right \} \right |}{\left | D \right |} ,即I_1包含的事物在D中所占百分比,和置信度 confience(X\rightarrow Y)=\frac{\#D\cap (X\cup Y)}{\#(D\cap X)} 衡量。D上最小支持度和最小置信度分为成为最小支持度阈值和最小置信度阈值,同时满足两者的关联规则成为强规则。

1.3频繁项集

        给定全局项集和事务数据库,对于前者的非空项集,若其支持度大于或等于最小支持度阈值,则称其为频繁项集,若其中包含有k个项,则称其为频繁k-项集。

1.4挖掘关联规则的基本过程

        1、找频繁项集:通过用户给定的最小支持度阈值,寻找所有频繁项集,即仅保留大于或等于最小支持度阈值的项集。

        2、生成强关联规则:通过用户给定的最小置信度阈值,在频繁项集中寻找关联规则,即删除不满足最小置信度阈值的规则。

APRIORI算法

Apriori性质:若A是一个频繁项集,则A的每一个子集都是频繁项集。

同时,该性质具有有反单调性:对于项集A,若有AB成立,则称B为A的超集。如果一个项集不是频繁的,则其所有超集也一定不是频繁的。

基本APRIORI算法

       基本思路为层次搜索迭代法,有候选的(k-1)项集来寻找候选k-项集,并判断其是否频繁。

二、代码实现

from apyori import apriori
transactions=[['A','B','C'],['A','B'],['B','C'],['A','B','C','D'],['B','C','D']]
rules=apriori(transactions,min_support=0.4,min_confidence=0.8)
results=list(rules)
for i in results:
    for j in i.ordered_statistics:
        X=j.items_base
        Y=j.items_add
        x=','.join([item for item in X])
        y=','.join([item for item in Y])
        if x!='':
            print(x+'->'+y)

        除apyori之外还可以通过mlxtend库来实现apriori算法

from mlxtend.preprocessing import TransactionEncoder
import pandas as pd
TE=TransactionEncoder()#构造转换模型
data=TE.fit_transform(transactions)#将原始数据转化为bool值
df=pd.DataFrame(data,columns=TE.columns_)#用DataFrame储存

from mlxtend.frequent_patterns import aprior
items=apriori(df,min_support=0.1,use_colnames=True)
from mlxtend.frequent_patterns import association_rules
rules=association_rules(items,min_threshold=0.7)
for i,j in rules,iterrows():#遍历二维表格的每一元素
    X=j['antecedents']#关联规则前件
    Y=j['consequents']#关联规则后件
    x=','.join([item for item in X])#前件中元素
    y=','.join([item for item in Y])#后件中元素
    print(x+'->'+y)#通过字符串链接打印关联规则

本文为笔者个人学习所得,若有不妥之处,还望温和批评指正。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值