挖掘频繁模式(考试版2)

关联规则简介

关联规则反映一个事物与其他事物之间的相互依存性和关联性。若两个或多个事物之间存在一定的关联关系,则其中一个事物就能够通过其他事物预测到。

典型的关联规则发现问题是对超市中的货篮数据(Marker Basket)进行分析,通过发现顾客放入货篮中的不同商品之间的关系来分析顾客的购买习惯。

基本概念
事务:由事务号和项集组成。事务是一次购买行为
项:最小处理单位,即购买的物品
项集:由一个或多个项组成
支持度计数:包含某个项集的事务数
支持度:包含某个项集的事务数的比例
在这里插入图片描述
支持度:包含某个项集的事务数的比例
在这里插入图片描述

置信度:在所有包含X项集的事务中包含Y项集事务的比例在这里插入图片描述
频繁项集:支持度不小于指定阈值的项集
关联规则:X和Y都是项集,X->Y(s,c)
在这里插入图片描述

关联规则评估指标:支持度不小于指定阈值和置信度不小于指定阈值

在这里插入图片描述
上图是尿布到啤酒的关联规则,从可以看出支持度小于置信度,所以我们一般取支持度为判断标准,但如果全体顾客很大,导致支持度相对很小,但是置信度很大要另行考虑,比如有10000万顾客,100个同时买啤酒和尿布,买尿布的150,所以支持度0.01,置信度0.66。

在这里插入图片描述
***pip install mlxtend***下载

在这里插入图片描述
在这里插入图片描述
实验代码:

from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori
import numpy as np
import pandas as pd
import csv	
data=pd.read_csv("mushroom.dat",encoding="gbk",sep=" ",header=None)
#删除缺失值
data.dropna(how="all",axis=1,inplace=True)
#取数毒蘑菇数据2
data=data[data[0]==2]
#index重置
data.reset_index(drop=True,inplace=True)
#转变成TransactionEncoder能处理的格式 列表的嵌套
data=data.values.tolist()
#类似于独热编码,转换成True,False数据
Encoder=TransactionEncoder()	
encoded_data=Encoder.fit_transform(data)
#Encoder.columns_各种种类的集合
df=pd.DataFrame(encoded_data,columns=Encoder.columns_)	
#调用函数                 最小支持度       确定使用名字      频繁项集长度 按support排序           从大到小
frequent_items=apriori(df,min_support=0.85,use_colnames=True,max_len=10).sort_values(by='support',ascending=False)
#index重置
frequent_items.reset_index(drop=True,inplace=True)
print(frequent_items)

for i in range(0,frequent_items.index.stop):
    if 2 in list(frequent_items["itemsets"][i]):
        print("支持度与频繁项集:",frequent_items["support"][i],list(frequent_items["itemsets"][i]))
    
import numpy as np
import pandas as pd
import csv
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori	
data=pd.read_csv("Cancer.csv",encoding="gbk")

#cut数据划分
data["肝气郁结证型系数"] = pd.cut(data["肝气郁结证型系数"], [0,0.179,0.258,0.35,0.504], labels=["A1", "A2", "A3", "A4"])
data["热毒蕴结证型系数"] = pd.cut(data["热毒蕴结证型系数"], [0,0.15,0.296,0.485,0.78], labels=["B1", "B2", "B3", "B4"])
data["冲任失调证型系数"] = pd.cut(data["冲任失调证型系数"], [0,0.201,0.288,0.415,0.61], labels=["C1", "C2", "C3", "C4"])
data["气血两虚证型系数"] = pd.cut(data["气血两虚证型系数"], [0,0.172,0.251,0.357,0.552], labels=["D1", "D2", "D3", "D4"])
data["脾胃虚弱证型系数"] = pd.cut(data["脾胃虚弱证型系数"], [0,0.154,0.256,0.375,0.526], labels=["E1", "E2", "E3", "E4"])
data["肝肾阴虚证型系数"] = pd.cut(data["肝肾阴虚证型系数"], [0,0.178,0.261,0.353,0.607], labels=["F1", "F2", "F3", "F4"])

#把每一列的数据删除男值并转换为列表
def deal(data):
 	return data.dropna().tolist()
#            调用函数,按行计算,apply函数1为行,0为列
df=data.apply(deal,axis=1)
df=df.values.tolist()
#类似于独热编码,转换成True,False数据
Encoder=TransactionEncoder()	
encoded_data=Encoder.fit_transform(df)
#Encoder.columns_各种种类的集合
df=pd.DataFrame(encoded_data,columns=Encoder.columns_)	
#调用函数                 最小支持度       确定使用名字      频繁项集长度 按support排序           从大到小
frequent_items=apriori(df,min_support=0.06,use_colnames=True,max_len=10).sort_values(by='support',ascending=False)
#index重置
frequent_items.reset_index(drop=True,inplace=True)
print(frequent_items)

for i in range(0,frequent_items.index.stop):
    if 'H1' in list(frequent_items["itemsets"][i]):
        print("支持度与频繁项集:",frequent_items["support"][i],list(frequent_items["itemsets"][i]))

课外新方法,可以同时设置置信度和支持度

from mlxtend.preprocessing import TransactionEncoder
from efficient_apriori import apriori
import numpy as np
import pandas as pd
import csv
#数据处理
data=pd.read_csv("关联规则-数据.csv",encoding="gbk")#读入
data=data.drop("咨询师ID",axis=1)#删除ID
data=data.dropna()#删除nan值
data.reset_index(drop=True,inplace=True)#index重置
data=data.values.tolist()#转换数据格式

frequent_items,rules = apriori(data,min_support=0.1,min_confidence=0.5)#设置支持度和置信度
print(frequent_items)
print(rules)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聆听我的召唤,菜鸟进化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值