好久没学宋老师的数据挖掘了,今天补一下
###第一题
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules
# 文件中没有列名 文件中的数据按空格分隔
df = pd.read_csv("mushroom.dat", header=None, sep=' ')
# 提取只有毒蘑菇的数据
ind = (df.iloc[:, 0]==2) # 设置筛选条件
df = df.loc[ind] # 对数据进行筛选
# print(df)
df= df.iloc[:,:-1].values.tolist() # 将数据集先转换为数组再转换为列表,确保数据的格式和结构得到正确地转换
# # 使用TransactionEncoder进行编码
te = TransactionEncoder() # 将数据集转换为一种适合于使用 Apriori 算法进行频繁项集挖掘的交易矩阵格式
te_ary = te.fit(df).transform(df)# 先拟合数据再进行数据格式的转换
# print(te_ary)
df = pd.DataFrame(te_ary, columns=te.columns_)
# 进行频繁项集挖掘
freq_itemsets = apriori(df, min_support=0.6)
# 打印结果
print(freq_itemsets)
###第二题
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules
te = TransactionEncoder()
df = pd.read_excel("cancer.xls")
# 将数据集进行分箱
# 使左区间闭合
df["肝气郁结证型系数"] = pd.cut(df["肝气郁结证型系数"], [0, 0.179, 0.258, 0.35, 0.504], labels=["A1", "A2", "A3", "A4"],include_lowest=True)
df["热毒蕴结证型系数"] = pd.cut(df["热毒蕴结证型系数"], [0, 0.15, 0.296, 0.485, 0.78], labels=["B1", "B2", "B3", "B4"],include_lowest=True)
df["冲任失调证型系数"] = pd.cut(df["冲任失调证型系数"], [0, 0.201, 0.288, 0.415, 0.61], labels=["C1", "C2", "C3", "C4"],include_lowest=True)
df["气血两虚证型系数"] = pd.cut(df["气血两虚证型系数"], [0, 0.172, 0.251, 0.357, 0.552], labels=["D1", "D2", "D3", "D4"],include_lowest=True)
df["脾胃虚弱证型系数"] = pd.cut(df["脾胃虚弱证型系数"], [0, 0.154, 0.256, 0.375, 0.526], labels=["E1", "E2", "E3", "E4"],include_lowest=True)
df["肝肾阴虚证型系数"] = pd.cut(df["肝肾阴虚证型系数"], [0, 0.178, 0.261, 0.353, 0.607], labels=["F1", "F2", "F3", "F4"],include_lowest=True)
# 转换数据
df = df.values.tolist()
# 使数据符合TransactionEncoder
te_ary = te.fit(df).transform(df)
df = pd.DataFrame(te_ary, columns=te.columns_)
# 进行频繁项集挖掘
# 使用列名而不是列索引使数据呈现更直观
fre_itemset = apriori(df, min_support=0.06, use_colnames=True)
# 进行关联规则挖掘
# association_rules:生成关联规则
# "confidence"是用于衡量关联规则强度的指标之一,它表示当一个项集出现时另一个项集也同时出现的概率。
# min_threshold=1:只有完全确凿的关联规则会被返回
# support_only=False:除了置信度之外,还会计算支持度等指标
rules = association_rules(fre_itemset, metric='confidence', min_threshold=1, support_only=False)
# 获取关联规则的后项,包括项集、支持度、置信度、Lift等
consequents = rules['consequents']
# 检查每个集合是否包含元素H4
idx = consequents.apply(lambda x: 'H4' in set(x))
# 挑选出符合关联规则的集合
aim_rules = rules[idx]
print(aim_rules)
# 项集:单个项集(Singleton Itemset):包含单个物品或特征的集合,例如 {苹果}、{橙子}、{香蕉} 等。
# 频繁项集(Frequent Itemset):在数据集中频繁出现的项集,也就是经常以某种组合出现的物品集合。频繁项集的发现是关联规则挖掘的重要任务之一,它能够揭示数据中的潜在模式和关联关系。
# 支持度:支持度是衡量某个项集在整个数据集中出现的频率,通过支持度可以确定哪些项集是频繁的
# 置信度:置信度可以理解为在包含项集 X 的事务中,同时包含项集 Y 的比例。
Apriori具体的实现的方法我还不会,等我以后水平达到了进行深入的学习后,就发出来