关联规则简介
关联规则反映一个事物与其他事物之间的相互依存性和关联性。若两个或多个事物之间存在一定的关联关系,则其中一个事物就能够通过其他事物预测到。
典型的关联规则发现问题是对超市中的货篮数据(Marker Basket)进行分析,通过发现顾客放入货篮中的不同商品之间的关系来分析顾客的购买习惯。
基本概念
事务:由事务号和项集组成。事务是一次购买行为
项:最小处理单位,即购买的物品
项集:由一个或多个项组成
支持度计数:包含某个项集的事务数
支持度:包含某个项集的事务数的比例
支持度:包含某个项集的事务数的比例
频繁项集:支持度不小于指定阈值的项集
关联规则: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)
data=data[data[0]==2]
data.reset_index(drop=True,inplace=True)
data=data.values.tolist()
Encoder=TransactionEncoder()
encoded_data=Encoder.fit_transform(data)
df=pd.DataFrame(encoded_data,columns=Encoder.columns_)
frequent_items=apriori(df,min_support=0.85,use_colnames=True,max_len=10).sort_values(by='support',ascending=False)
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")
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()
df=data.apply(deal,axis=1)
df=df.values.tolist()
Encoder=TransactionEncoder()
encoded_data=Encoder.fit_transform(df)
df=pd.DataFrame(encoded_data,columns=Encoder.columns_)
frequent_items=apriori(df,min_support=0.06,use_colnames=True,max_len=10).sort_values(by='support',ascending=False)
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)
data=data.dropna()
data.reset_index(drop=True,inplace=True)
data=data.values.tolist()
frequent_items,rules = apriori(data,min_support=0.1,min_confidence=0.5)
print(frequent_items)
print(rules)
Original: https://blog.csdn.net/qq_45889931/article/details/122257349
Author: 聆听我的召唤,菜鸟进化
Title: 挖掘频繁模式(考试版2)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/677829/
转载文章受原作者版权保护。转载请注明原作者出处!