中医证型关联规则挖掘

  • 背景
  • 显然,如今的中医治疗再度火了起来,归根到底的原因还是中医在某些疾病处理上具有天然优势。
  • 而且,中医治疗没有西医治疗的很多毒副作用。
  • “先证而治”。
  • 挖掘目标
  • 发现中医症状间的关联联系和诸多症状之间的规律性,并且依据规则分析病因、预测病情发展以及为未来临床诊治提供有效借鉴。
  • 也就是说,借助乳腺癌患者病理信息,挖掘患者的症状与中医证型之间的关联联系,对截断治疗提供依据,挖掘潜性证素。
  • 分析
  • 由于患者在特定的病程阶段会有特定的临床症状,所以可以运用中医截断疗法进行治疗,在辨病的基础上围绕各个病程的特殊症候先证而治。截断扭转的主要观点是强调早期治疗,力图快速控制病情,截断病情的邪变深入,扭转阻止疾病恶化。
  • 由于数据纸质化,只能使用问卷调查获取数据,采用关联规则算法,挖掘各中医证素与乳腺癌TNM分期之间的联系。(乳腺癌基本分期原则,I比较轻,IV比较严重。
  • 处理过程
  • 数据获取
  • 问卷收集并整理数据。
  • 数据探索
  • 由于问卷由我指定,基本结构和问题点已知,这里无需数据探索,可以直接处理。
  • 数据预处理
  • 对原始数据进行数据预处理,包括数据清洗(存在无效问卷)、属性规约(去除无关属性)、数据变换。
  • 这里数据变换包含了属性构造和数据离散化。
  • 为了更好的反映证素分布特征,采用证型系数代替单证型的证素得分:证型系数 = 该证型得分/该证型总分。
  • 由于Apriori关联规则算法不能处理连续型数值变量,原始数据需要离散化。(使用聚类方法)
  • 数据挖掘建模
  • 利用建模数据,采用关联规则算法,调整模型输入参数,获取各中医证素与乳腺癌TNM分期之间的关系。
  • 本案例的目标是探索乳腺癌患者TNM分期与中医证型系数之间的关系,使用关联规则算法,挖掘它们之间的联系。
  • 关联规则算法主要用于寻找数据集中项之间的关联联系,它揭示数据项之间的位置关系,基于样本的统计规律,进行关联规则的挖掘,根据所挖掘的关联关系,可以从一个属性的信息来推断另一个属性信息,当置信度达到某一阈值时,可以认为规则成立。
  • 使用Apriori需要设置建模参数的最小支持度和最小置信度,调整到合适为止,如何设置没有统一标准,一般认为根据经验设置。遗憾的是主流的库中均没有Apriori等关联规则函数,自行编写。
  • 根据结果如A3---F4---H4,理解为A3,F4=H4,很多得到的规则,我们只需要以H开头的为规则结果的项。
  • 后续处理
  • 结合实际业务,对模型结果进行分析,将模型结果应用到实际业务中,输出关联规则结果。
  • 补充说明
  • 首先,尽管关联规则算法是机器学习、深度学习、数据挖掘中常用的模型,然而很遗憾的是主流的sklearn、keras等机器学习深度学习主流库没有进行封装。本案例使用自行编写的Apriori算法。
  • 参考书《Python数据分析与挖掘》
# -*- coding: utf-8 -*-
"""
利用Apriori算法进行关联规则分析
"""
import pandas as pd
from apriori import *

if __name__ == '__main__':
    # 根据离散化处理的文件
    inputFile = './data/apriori.txt'
    data = pd.read_csv(inputFile, header=None, dtype=object)
    print('\n转换原始数据至0-1矩阵...')
    # 转换0-1矩阵的过渡函数
    ct = lambda x: pd.Series(1, index=x[pd.notnull(x)])
    b = map(ct, data.values)
    # 实现矩阵转换,空值用0填充
    data = pd.DataFrame(list(b)).fillna(0)
    # 删除中间变量b,节省内存
    del b
    # 最小支持度
    support = 0.06
    # 最小置信度
    confidence = 0.75
    ms = '---'
    print('\n开始搜索关联规则...')
    find_rule(data, support, confidence, ms)

这里只列举了建模的代码,数据集和更多代码可以访问我的github,欢迎star或者fork。