由于 Apriori 关联规则算法无法处理连续型数值变量,为了将原 始数据格式转换为适合建模的格式,需要对数据进行离散化。本章采用聚类算法对各个证型系数进行离散化处理,将每个属性聚成 4 类,其离散化后的数据格式见下表。
(1) Apriori 算法主要用于寻找数据集中项之间的关联关系。它 揭示了数据项间的未知关系,基于样本的统计规律,进行关联规则挖掘。根据所挖掘的关联关系,可以从一个属性的信息来推断另一个属性的信息。当置信度达到某一阈值时,就可以认为规则成立。
1) A3、F4=>H4 支持度最大,达到 7.85%, 置信度最大,达到87.96%, 说明肝气郁结证型系数处于(0.258, 0.35], 肝肾阴虚证型系数处于( 0.353,0.607] 范围内,TNM 分期诊断为 H4 期的可能性为 87.96%,而这种情况发生的可能性为 7.85%。
2) C3、F4=>H4 支持度 7.53%, 置信度 87.5%, 说明冲任失调证型系数处于(0.201,0.288],肝肾阴虚证型系数处于( 0.353,0.607] 范围内,TNM 分期诊断为 H4 期的可能性为 87.5%,而这种情况发生的可能性为 7.53%。
3) B2、F4=>H4 支持度 6.24%,置信度 79.45%,说明热毒蕴结证型系数处于(0.15,0.296],肝肾阴虚证型系数处于( 0.353,0.607] 范围内,TNM 分期诊断为 H4 期的可能性为 79. 45%,而这种情况发生的可能性为 6.24%。
综合以上分析,TNM 分期为 H4 期的三阴乳腺癌患者证型主要为肝肾阴虚证、热毒蕴结证、肝气郁结证和冲任失调,H4 期患者肝肾阴虚证和肝气郁结证的临床表现较为突出,其置信度最大达到
import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori,association_rules
te = TransactionEncoder()
df = pd.read_excel("C:/Users/wcj770801/Desktop/Python/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)
b = df.values.tolist()
te_ary = te.fit(b).transform(b)
df = pd.DataFrame(te_ary, columns=te.columns_)
fre_itemset = apriori(df, min_support=0.06,use_colnames=True)
rules =association_rules(fre_itemset, metric='confidence', min_threshold=1, support_only=False)
consequents = rules['consequents'] #frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
idx = consequents.apply(lambda x: 'H4' in set(x))
aim_rules = rules[idx]
print(aim_rules)