主要用到了构建词典、分词、特征提取、词向量化、文本聚类、文本分类
代码在文章后面
基于文本挖掘的中医药诊治失眠用药分析
摘要:这些年来,中医药在治疗疑难杂症等顽疾的研究取得了一定的进展,随着生活压力的的不断加大,越来越多的人陷入的失眠的困境,严重影响到了人们的日常生活。文本挖掘能够从海量文本数据中获取有价值的信息和知识,并且能利用这些知识更好地组织信息,取得更具有代表性和更高可信度的结果。文本挖掘在中医药领域的应用越来越多并越来越广泛。论文通过文本挖掘技术对医生病人症状的描述以及开出的药方,做进一步分析,来探索总结药物之间的关联。
关键词:文本挖掘;K-Means聚类;机器学习;中医;失眠
1 前言
1.1项目研究背景
截至到2019-11-12日,中国成年人失眠率已高达38.2%,而且90后失眠比老年人严重,1/3的90后在凌晨1点才入睡。失眠的主要表现为入睡困难、睡眠维持困难、早醒以及睡眠质量差。从中意的角度来看,失眠基本为五种类型:
- 肝郁化火:多由恼怒烦闷而生,表现为少寐,急躁易怒、目赤口苦、大便干结、舌红苔黄、脉弦而数。
- 痰热内扰:常由饮食不节,暴饮暴食、恣食肥甘生冷、或嗜酒成癖,导致肠胃受热,痰热上扰。表现为不寐、头重、胸闷、心烦、喛气、吞酸、不思饮食,苔黄腻,脉滑数。
- 阴虚火旺:多因身体虚精亏,纵欲过度,遗精,使肾阴耗竭,心火独亢,表现为心烦不寐,五心烦热,耳鸣健忘,舌红,脉细数。
- 心脾两虚:于年迈体虚,劳心伤神或久病大病之后,引起气虚血亏,表现为多梦易醒,头晕目眩,神疲乏力,面黄色少华,舌淡苔溥,脉细弱。
- 心胆气虚由于突然受惊,或耳闻巨响,目暏异物,或涉险临危,表现为噩梦惊扰,夜寐易醒,胆怯心悸,遇事易惊,舌淡脉细弦。
长期睡眠不足会对人们的生活、工作以及健康带来影响,在生物学领域,由于科学技术不断进步发展,生物学数据和生物医学文献数量增长迅猛。通过数据挖掘寻找潜在规律成了生物学研究的一个新热点和新方向[1]。文本挖掘是数据挖掘中的一个研究分支,能够从海量文本数据中挖掘出具有价值的信息[2],再对这些信息进行分析可以取得更具有代表性和更高可信度的结果。目前,文本挖掘已经成为数据挖掘领域的一个热点研究方向。
1.2 研究意义
国内有关中医药诊治失眠基础研究的文献较多,但许多科研和临床工作者很难全面、系统地掌握失眠的中医药治疗规律研究状况并总结出中医诊治失眠的用药规律。因此,分析失眠的中医诊治用药规律的研究必要性得到体现,本研究利用文本挖掘技术探讨失眠的中医诊治及其用药规律,对中医药防治失眠的临床和研究工作提供参考也具有重大意义。
2 数据来源及清洗
2.1 数据来源说明
数据集来源于某地中医病案,总共有11列属性,包括序号时间 、病人ID、性别、年龄、主诉、(现病史、自诉、症状)、既往史、脉象、舌象 、处方。共有2417条数据,都有不同程度的缺失,也有部分异常值,其中数据集中不仅包含失眠的病人也包含一些其他病症的病人,所以要进行数据清洗,部分数据展示如下:
表2-1
序号 |
时间 |
病人ID |
性别 |
年龄 |
主诉 |
现病史、自诉、症状 |
1 |
2012.01.31 |
p0202 |
女 |
43 |
失眠 |
病史如前。仍旧入睡困难,每日需服安定1-2#方能入睡,易醒,服药后烦躁,盗汗明显好转。 |
2 |
2012.01.31 |
p0686 |
女 |
成 |
病史如前。 |
|
3 |
2012.01.31 |
p1116 |
男 |
成 |
失眠 |
病史如前。烦躁较前好转,入睡困难,易醒,舌尖红苔白。 |
4 |
2012.01.31 |
p0272 |
男 |
成 |
(家属代诉)服药后记忆力好转,晚上起夜有时尿失禁。便可,纳尚可,笑时嘴歪。 |
|
5 |
2012.01.31 |
p1002 |
女 |
58 |
病史如前。头晕较前好转,偶有头胀(与环境有关)。自诉矢气较频繁,睡眠较前好转,但下肢仍无力,晨起脸肿。 |
既往史 |
脉象 |
舌象 |
处方1 |
舌尖红苔白质稍暗。 |
玄参15 龙眼肉15 龙齿15 黄芩10 黄连10 栀子10 薏苡仁30 黄芪30 桂枝10 白芍15 神曲10 夏枯草10 生晒参10 炙甘草6 14付 |
||
玄参20 龙眼肉15 煅龙齿20 枣仁30 决明子15 枸杞子15 焦楂曲各15 苍术15 厚朴15 合欢皮15 黄芪20 灯心草2 薏苡仁20 14付 |
|||
枣仁30 川芎15 知母10 茯神15 百合15 夜交藤20 合欢皮15 黄芩10 煅龙牡15 神曲10 珍珠母15 葛根15 玄参15 薏苡仁20 灯心草2 14付 |
|||
黄芪30 黄连10 大黄10 栀子10 生地15 怀牛膝15 当归10 川芎10 赤芍10 玄参15 厚朴15 枳实10 水蛭10 全蝎10 神曲10 炙甘草6 14付 |
|||
舌淡苔白。 |
柴胡15 白芍15 当归10 郁金10 玄参15 黄精15 枳壳10 川芎10 怀牛膝15 生熟地15 珍珠母15 煅龙牡15 胆草6 炙甘草6 14付 |
2.2 数据清洗过程
为了方便对数据集进行进一步的研究,需要对数据集进行清洗工作,首先要做的是根据主诉与现病史、自诉、症状这2列属性,筛选并保留有失眠相关症状病人的信息;然后,根据有的病人有相同的病人ID,相互之间缺少了部分内容,可通过病人ID来填补相应的缺失值,在现病史、自诉和症状列中,有些复诊病人的记录是病史如前又补充了一些内容, 可以据此累加补充完整;在处方这一列属性中,有的中医药材是一个名字却是由多位药组成,如煅龙牡是煅牡蛎和煅龙骨两味药,焦楂曲是炒山楂和炒神曲两味药等等,需要将中药分开,
有的脉象、舌象颠倒,也需要处理区分。最后剩余287列数据,其中空值比例既往史为84%、脉象为44%,缺失比例很高,故后续不对此做分析处理,清洗后数据如下:
表2-2
序号 |
时间 |
病人ID |
性别 |
年龄 |
主诉 |
现病史、自诉、症状 |
1 |
2012.01.31 |
p0202 |
女 |
43 |
失眠6月余 失眠 |
病史如前。仍旧入睡困难,每日需服安定1-2#方能入睡,易醒,服药后烦躁,盗汗明显好转。 |
3 |
2012.01.31 |
p1116 |
男 |
成 |
失眠 |
病史如前。烦躁较前好转,入睡困难,易醒,舌尖红苔白。 |
6 |
2012.01.31 |
p0163 |
女 |
成 |
失眠 |
病史如前。仍旧易醒,醒后难以入睡,身体较前好转。 |
9 |
2012.01.31 |
p1104 |
女 |
成 |
失眠 |
头晕(与睡眠有关)。易醒。大便不成形。偶有便秘。 |
36 |
2012.02.14 |
p0202 |
女 |
43 |
失眠6月余 失眠 |
病史如前。入睡困难。不盗汗,不燥。 |
既往史 |
脉象 |
舌象 |
处方1 |
NaN |
NaN |
舌尖红苔白质稍暗。 |
玄参15 龙眼肉15 龙齿15 黄芩10 黄连10 栀子10 薏苡仁30 黄芪30 桂枝10… |
NaN |
NaN |
NaN |
枣仁30 川芎15 知母10 茯神15 百合15 夜交藤20 合欢皮15 黄芩10 煅龙牡1… |
NaN |
NaN |
舌尖红苔白。 |
党参15 白术15 茯苓15 焦楂曲各10 煅瓦楞子15 佛手15 黄连8 生熟地各15 煅… |
NaN |
脉弦 |
舌质暗苔白边有齿痕。 |
枣仁30 茯神15 川芎10 知母10 苍术15 合欢皮15 白芍15 厚朴15 黄连10… |
NaN |
NaN |
NaN |
玄参15 栀子10 黄连10 薏苡仁30 夏枯草10 桂枝10 龙齿30 合欢皮20 远志1… |
3 文本预处理
3.1 文件转换
数据集是表格形式的数据,别后方便后续分词处理,根据时间、病人ID、性别分组,每个病人生成2个txt文本,分别为:失眠症状文本和失眠处方文本,每个txt文件的名字由时间、病人ID、性别组成,文件转换后如下:
图3-1
失眠症状文本内容为各自的现病史、自诉、症状加舌象,失眠处方文本内容为处方属性。
3.2 构建词典
在完成上述文件转化后,我们使用pynlpir库里的一些函数分别从这些文本中提取了新词,并且通过爬取中医网站药智数据上的一些专业文章来获取新词,扩充词典。最后生成了失眠症状词典和失眠处方词典。
3.3 分词处理
在构建了上述2个词典后,为了使分词后的文本更具有代表性,我们又构建了停用词词典,如“是”、“的”、“了”、“和”等等。通过jieba库,我们删除了处方中药材后面的数字,以及数据录入过程的一些乱码、字母,并导入了之前构建的2个词典,完成分词,并将分词结果保存到失眠症状分词文本和失眠处方分词文本中。
3.4 关键词提取和文本向量化处理
为了方便后续的处理,这里将失眠症状文本、分词文本和失眠处方文本、分词文本,读入到DataFram中,存储为新的DataFrame,如下:
表3-1(失眠处方DataFrame)
index |
text |
wordlist |
src |
0 |
黄连10 竹茹10 法夏10 陈皮10 厚朴15 白术15 枣仁30 夜交藤30 合欢皮15… |
[黄连, 竹茹, 法夏, 陈皮, 厚朴, 白术, 枣仁, 夜交藤, 合欢皮, 栀子, 淡竹叶… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
1 |
柴胡15 白芍15 当归10 丹参20 浮小麦30 合欢皮15 苍术15 栀子1… |
[柴胡, 白芍, 当归, 丹参, 浮小麦, 合欢皮, 苍术, 栀子, 郁金, 沙参, 枣仁,… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
2 |
柴胡15 白芍15 当归10 丹参10 浮小麦20 合欢皮10 苍术10 栀子10 沙参… |
[柴胡, 白芍, 当归, 丹参, 浮小麦, 合欢皮, 苍术, 栀子, 沙参, 夜交藤, 灯心… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
3 |
党参20 白术15 茯苓20 焦楂曲(炒山楂 炒神曲)10 丹参15 合欢皮15 … |
[党参, 白术, 茯苓, 焦楂曲, 山楂, 神曲, 丹参, 合欢皮, 枸杞, 沙参, 灯心草… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
4 |
党参20 白术15 茯苓20 焦楂曲(炒山楂 炒神曲)10 丹参15 合欢皮15 … |
[党参, 白术, 茯苓, 焦楂曲, 山楂, 神曲, 丹参, 合欢皮, 枸杞, 沙参, 灯心草… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
表3-2(失眠症状DataFrame)
index |
text |
wordlist |
src |
clsres |
0 |
“失眠\n睡眠不佳,梦多,晚间两次服用安眠药,年轻时因眼疾压力失眠。易上火焦虑,胀气,无便秘… |
[不佳, 梦多, 晚间, 两次, 安眠药, 年轻, 时因, 眼疾, 压力, 易上火, 焦虑,… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
3 |
1 |
” 紧张时头痛 头晕头痛 仍有头痛 失眠复诊 腰部疼痛\n病史如前。睡眠时间5-6… |
[紧张, 头痛, 头晕, 头痛, 头痛, 复诊, 腰部疼痛, 时间, 小时, 每晚, 至少,… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
1 |
2 |
” 紧张时头痛 头晕头痛 仍有头痛 失眠复诊 腰部疼痛\n病史如前。烦躁、焦虑、紧… |
[紧张, 头痛, 头晕, 头痛, 头痛, 复诊, 腰部疼痛, 烦躁, 焦虑, 紧张, 乏力,… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
1 |
3 |
” 紧张时头痛 头晕头痛 仍有头痛 失眠复诊 腰部疼痛\n病史如前。Bp:123/… |
[紧张, 头痛, 头晕, 头痛, 头痛, 复诊, 腰部疼痛, 焦虑, 心烦, 精神, 近期,… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
1 |
4 |
” 紧张时头痛 头晕头痛 仍有头痛 失眠复诊 腰部疼痛\n病史如前。睡眠较前好转,… |
[紧张, 头痛, 头晕, 头痛, 头痛, 复诊, 腰部疼痛, 较前, 但易醒, 醒后, 难以… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
1 |
特征选择有很多种方法,有基于文档频率的特征提取方法,也有基于信息熵的提取方法,在本次研究主要用到的是TF-IDF、word2vec、LDA、卡方检验提取特征。
3.4.1 TF-IDF
首先介绍TF-IDF,IF-IDF是信息检索(IR)中最常用的一种文本表示法。算法的思想也很简单,就是统计每个词出现的词频(TF),然后再为其附上一个权值参数(IDF),通过这种方法我们可以降低一些“的”、“是”、“为”词的权重,这里给出TF和IDF的计算公式:
为了计算IDF我们需要事先准备一个语料库用来模拟语言的使用环境,如果一个词越是常见,那么式子中分母就越大,逆文档频率就越小越接近于0。这里的分母+1是为了避免分母为0的情况出现。TF-IDF的计算公式如下:
根据TF-IDF的值与该词在文章中出现的频率成正比,与该词在整个语料库中出现的频率成反比,从而可以很好的实现提取文章中关键词的目的。
根据之前的832个文档,使用tf-idf生成了文档向量如下:
图3-2
3.4.2 卡方检验信息增益
TF-IDF可以有效评估一词对于一个文件集或一个语料库中的其中一份文件的重要程度。因为它综合表征了该词在文档中的重要程度和文档区分度。但在文本分类中单纯使用TF-IDF来判断一个特征是否有区分度是不够的。
卡方检验最基本的思想就是通过观察实际值与理论值的偏差来确定理论的正确与否。其特征提取的具体流程为:
1.卡方检验
1.1 :统计样本集中文档总数(N)。
1.2 :统计每个词的正文档出现频率(A)、负文档出现频率(B)、正文档不出现频率)、负文档不出现频率。
1.3 :计算每个词的卡方值,公式如下:
1.4 :将每个词按卡方值从大到小排序,选取前k个词作为特征,k即特征维数。
2. 信息增益
2.1: 统计正负分类的文档数:N1、N2。
2.2 :统计每个词的正文档出现频率(A)、负文档出现频率(B)、正文档不出现频率)、负文档不出现频率。
2.3 :计算信息熵
2.4 :计算每个词的信息增益
2.5 :将每个词按信息增益值从大到小排序,选取前k个词作为特征,k即特征维数。
在后面的4.2.3节中,使用了卡方检验提取特征后,再进行文本分类,主要目的也是为了优化文本分类的结果。
3.4.3 word2vec词向量化
Word2vec通常可以用来作为分类或聚类的输入和计算文档相似度(找出某一个词向量最相近的词集合、看两个词向量的相近程度、找出不同类的词),在训练模型时指定了向量的维度为300,只选取在至少10个文档中出现过的词,2种类型文本, 各143个词(处方),267个词(症状)。部分如下图所示:
图3-4 Word2vec词向量化(症状部分)
3.4.4 使用gensim训练LDA模型
LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,是一种非监督机器学习技术,可以用来识别大规模文档集或语料库中潜藏的主题信息。它采用了词袋的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。
本次实验在经过doc2bow转化词频矩阵后,又继续使用tf-idf处理后训练出来的词频矩阵,然后假定为5个主题,训练LDA模型,5个主题的词药方症状分布分别如下:
药方主题分布:
(0, ‘0.020*”枳壳” + 0.019*”郁金” + 0.019*”龙齿” + 0.017*”茯神” + 0.017*”苍术…
(1, ‘0.017*”生地” + 0.015*”三七” + 0.015*”玄参” + 0.015*”黄连” + 0.015*”薏苡仁…
(2, ‘0.016*”诃子” + 0.015*”砂仁” + 0.014*”独活” + 0.013*”二花” + 0.013*”怀牛膝…
(3, ‘0.030*”煅牡蛎” + 0.030*”煅龙骨” + 0.029*”煅龙” + 0.017*”浮小麦” + 0.017…
(4, ‘0.018*”茯苓” + 0.017*”山茱萸” + 0.016*”焦楂曲” + 0.016*”生晒参” + 0.015…
症状主题分布:
(0, ‘0.015*”头痛” + 0.008*”头晕” + 0.008*”紧张” + 0.006*”疼痛” + 0.006*”腰部…
(1, ‘0.006*”隐痛” + 0.006*”腹痛” + 0.006*”肝炎” + 0.006*”失眠反复” + 0.006*”…
(2, ‘0.006*”胸痛” + 0.005*”腰痛” + 0.005*”甲状腺肿大” + 0.005*”齿痕” + 0.005…
(3, ‘0.006*”脉弦细” + 0.005*”较前” + 0.005*”入睡” + 0.005*”舌质暗苔白” + 0.005…
(4, ‘0.007*”头痛” + 0.007*”咽痛” + 0.007*”易醒” + 0.007*”脱眉” + 0.007*”仍痛”…
由于我们采用的数据均为与中医失眠相关的,看不出来各词和主题间的关系,这里提供了一种方法思路,后续不做深入研究。
4 文本挖掘与分析
4.1 文本聚类K-Means
4.1.1 K-means原理
在1.5.2简要概述了k-means, 这里会具体的解释算法原理。假定给定数据样本X,包含了n个对象, 其中每个对象都具有m个维度的属性。Kmeans算法的目标是将n个对象依据对象间的相似性聚集到指定的k个类簇中,每个对象属于且仅属于一个其到类簇中心距离最小的类簇中。对于Kmeans,首先需要初始化k个聚类中心,然后通过计算每一个对象到每一个聚类中心的欧式距离,如下式所示:
上式中,表示第i个对象表示第j个聚类中心的表示第i个对象的第t个属性,表示第j个聚类中心的第t个属性。
依次比较每一个对象到每一个聚类中心的距离,将对象分配到距离最近的聚类中心的类簇中,得到k个类簇,K-means算法用定义了类簇的原型,类簇中心就是类簇内所有对象在各个维度的均值,其计算公式如下:
上式中,表示第l个聚类的中心,表示第l个类簇中对象的个数,表示第l个类簇中第i个对象,。
4.1.2 K-means算法流程
算法流程具体为:
输入:样本集,聚类簇数k
过程:
1:从D中随机选择k个样本作为初始均值向量
2:repeat
3: 令
4: for j=1,2,…,m do
5: 计算样本,与各均值向量的距离:
7: 将样本划入相应的簇
8: end for
9: for i=1,2,…,k do
10: 计算新均值向量:
11: if then
12: 将当前均值向量更新为
13: else
14: 保持当前均值不变
15: end if
16: end for
17:until 当前均值向量均未更新
输出:簇划分
4.1.3 使用K-means聚类
在前面我们已经通过TF-IDF对文本进行了特征提取,转化为了向量矩阵,接着就可以进行聚类了,将类簇的数目设置为5,进行聚类,按文本文件名给每个项目打上了类簇标签(最后一列属性为类簇)。数据如下:
表4-1
index |
text |
wordlist |
src |
clsres |
0 |
黄连10 竹茹10 法夏10 陈皮10 厚朴15 白术15 枣仁30 夜交藤30 合欢皮15… |
[黄连, 竹茹, 法夏, 陈皮, 厚朴, 白术, 枣仁, 夜交藤, 合欢皮, 栀子, 淡竹叶… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
2 |
1 |
柴胡15 白芍15 当归10 丹参20 浮小麦30 合欢皮15 苍术15 栀子1… |
[柴胡, 白芍, 当归, 丹参, 浮小麦, 合欢皮, 苍术, 栀子, 郁金, 沙参, 枣仁,… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
1 |
2 |
柴胡15 白芍15 当归10 丹参10 浮小麦20 合欢皮10 苍术10 栀子10 沙参… |
[柴胡, 白芍, 当归, 丹参, 浮小麦, 合欢皮, 苍术, 栀子, 沙参, 夜交藤, 灯心… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
1 |
3 |
党参20 白术15 茯苓20 焦楂曲(炒山楂 炒神曲)10 丹参15 合欢皮15 … |
[党参, 白术, 茯苓, 焦楂曲, 山楂, 神曲, 丹参, 合欢皮, 枸杞, 沙参, 灯心草… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
2 |
4 |
党参20 白术15 茯苓20 焦楂曲(炒山楂 炒神曲)10 丹参15 合欢皮15 … |
[党参, 白术, 茯苓, 焦楂曲, 山楂, 神曲, 丹参, 合欢皮, 枸杞, 沙参, 灯心草… |
C:/Users/meika/Desktop/Temp/蔡/实训汇总3/2.生成文本文件/失… |
2 |
接着按照类簇合并特征词,显示每个类簇中出现频率较高的有代表性的药方如下:
表4-2
类簇 |
药材名 |
0 |
枣仁, 夜交藤, 合欢皮, 茯神, 知母, 川芎, 甘草, 苍术, 郁金, 龙齿 |
1 |
枣仁, 合欢皮, 白芍, 黄芪, 白术, 甘草, 夜交藤, 浮小麦, 柴胡, 玄参 |
2 |
煅牡蛎, 煅龙骨, 煅龙, 合欢皮, 枣仁, 浮小麦, 夜交藤, 茯神, 甘草, 川芎 |
3 |
焦楂曲, 神曲, 山楂, 枣仁, 合欢皮, 白术, 黄芪, 甘草, 夜交藤, 白芍 |
4 |
熟地, 山药, 黄芪, 山茱萸, 枣仁, 甘草, 夜交藤, 茯苓, 白术, 玄参 |
接着按照类簇合并特征词,显示每个类簇中出现频率较高的有代表性的症状如下:
表4-3
类簇 |
症状 |
0 |
入睡, 易醒, 多梦, 脉弦细, 安定, 失眠反复, 醒后, 困难, 齿痕, 舌质 |
1 |
头痛, 酸痛, 夜间咽痛, 头晕, 经行, 胃痛, 腰部疼痛, 复诊, 雨天, 脉弦细 |
2 |
腰痛, 胸痛, 经前, 甲状腺肿大, 偶伴, 无咽, 复诊, 甲亢, 齿痕, 多梦 |
3 |
咽痛, 脱眉, 仍痛, 近日咽痒痛, 咽喉, 脉弦细, 眉毛, 舌尖红苔白, 齿痕, 质暗 |
4 |
脉弦细, 齿痕, 多梦, 舌质, 质暗, 舌尖, 大便, 苔白, 脉细, 耳鸣 |
4.2 文本分类(逻辑回归、SVM)
文本自动分类简称文本分类(text categorization),是模式识别与自然语言处理密切结合的研究课题。传统的文本分类是基于文本内容的,研究如何将文本自动划分成政治的、经济的、军事的、体育的、娱乐的等各种类型。文本分类是在预定义的分类体系下,根据文本的特征(内容或属性),将给定文本与一个或多个类别相关联的过程。因此,文本分类研究涉及文本内容理解和模式分类等若干自然语言理解和模式识别问题。
我们假定之前聚类后的类簇作为各文本的正确答案,然后尝试用逻辑回归和SVM中的线性核函数和高斯核函数分类器对下述3个小节分别进行分类。最后通过包括召回率、正确率、F-测度值作为分类结果的评测指标。
4.2.1 直接分类
首先采用直接分类的方法,按照词频分类,将数据集以8:2的比例分为训练集和测试集,以TF-IDF获得特征向量后K-Means聚类后的结果作为正确答案,分别采用逻辑回归和SVM中的线性核函数和高斯核函数分类器输出结果如下:
表4-4普通文本分类指标(处方)
准确率 |
召回率 |
F-测度值 |
||
逻辑回归 |
0.96 |
0.96 |
0.96 |
|
SVM(线性核) |
0.93 |
0.93 |
0.93 |
|
SVM(高斯核) |
0.85 |
0.89 |
0.86 |
表4-5普通文本分类指标(症状)
准确率 |
召回率 |
F-测度值 |
|
逻辑回归 |
0.93 |
0.93 |
0.93 |
SVM(线性核) |
0.92 |
0.92 |
0.92 |
SVM(高斯核) |
0.41 |
0.6 |
0.46 |
4.2.2 PCA降维后分类
PCA是一种统计方法,通过正交变换将一组可能存在相关性的变量转换成一组线性不相关的变量,转换后的这组变量叫主成分。PCA的思想是将n维特征映射到m维上(m<n),这m维是全新的正交特征,称为主成分,这m维的特征是重新构造出来的,不是简单的从n维特征中减去n-m维特征。PCA的核心思想就是将数据沿最大方向投影,数据更易于区分。
本次实验将n_components设置为0.9,即保留下来的个数为原来的0.9倍,由于PCA不支持对稀疏矩阵的操作,这里将其转化为标准矩阵后,分别采用逻辑回归和SVM中的线性核函数和高斯核函数分类器输出结果如下:
表4-6 PCA降维后文本分类指标(处方)
准确率 |
召回率 |
F-测度值 |
|
逻辑回归 |
0.94 |
0.94 |
0.94 |
SVM(线性核) |
0.95 |
0.95 |
0.95 |
SVM(高斯核) |
0.9 |
0.89 |
0.89 |
表4-7 PCA降维后文本分类指标(症状)
准确率 |
召回率 |
F-测度值 |
|
逻辑回归 |
0.94 |
0.94 |
0.94 |
SVM(线性核) |
0.95 |
0.95 |
0.95 |
SVM(高斯核) |
0.75 |
0.79 |
0.75 |
4.2.3 卡方检验进行特征选择后再分类
在3.4.2已经简短介绍了卡方检验进行特征选择的步骤,这里选取前100个最好的特征,
将数据集以8:2的比例分为训练集和测试集,以TF-IDF获得特征向量后K-Means聚类后的结果作为正确答案,分别采用逻辑回归和SVM中的线性核函数和高斯核函数分类器输出结果如下:
准确率 |
召回率 |
F-测度值 |
|
逻辑回归 |
0.96 |
0.96 |
0.96 |
SVM(线性核) |
0.92 |
0.92 |
0.92 |
SVM(高斯核) |
0.91 |
0.9 |
0.9 |
表4-9 卡方检验进行特征选择后文本分类指标(症状)
准确率 |
召回率 |
F-测度值 |
|
逻辑回归 |
0.94 |
0.94 |
0.94 |
SVM(线性核) |
0.91 |
0.91 |
0.91 |
SVM(高斯核) |
0.87 |
0.86 |
0.85 |
4.3 关联分析
因为本次实验是用聚类结果作为依据,来评价分类结果的,所以并不一定准确。通过比较普通分类、PCA降维后分类、卡方检验特征选择后再分类分别使用逻辑回归、SVM(线性核)、SVM(高斯核),有以下发现,经过卡方检验进行特征选择后再分类的结果有较好的效果。其中3种分类方法中,逻辑回归的效果最好,处方分类准确率0.94、召回率0.92、F-测度值0.96,症状分类准确率0.94、召回率0.94、F-测度值0.94,均处在一个较好的水平,其中也不排除可能有过拟合因素的影响。
聚类是无监督学习的类型,本次实验大致将症状和药方分成了5类,也试着从中找出内在的关联。在处方的5个类簇中,均筛选出了10个具有代表性的中药,甘草和枣仁每个类簇中是都存在的,我们可以大概判断出,甘草和枣仁是治疗失眠的最基本的2味药,在现代药理实验成分研究表明:甘草中的甘草甜素可改善血清脂质,有镇静效果,从而从精神改善
睡眠质量。东汉医圣张仲景在其撰写的《伤寒杂病论》中提到,炙甘草汤具有滋阴养血,补气温阳,宁心复脉作用。主治阴血不足,气虚血弱,赢瘦少气,心悸心慌,虚烦失眠, 大便干结,舌质淡红少苔,脉结代;或虚劳肺痿, 久咳不止,涎唾甚多,咽燥而渴,痰中有血,心悸、心烦,少气,失眠,自汗盗汗,脉虚数。酸枣仁含有生物碱,苷和黄酮等多种药理成分。具賄镇静、催眠、镇痛、抗惊厥、降血脂、抗血小板聚集、增强免疫功能、降压、抗缺氧、抗心肌缺血、抗心率失常、抗衰老、抗辐射等作用。5个类簇中,在这2味药的基础上又增加了其他药材,可能用于治疗不同类型失眠病人,但这5个类簇是自己主观臆断的,所以不做深入探讨。在失眠症状中,本次实验一样分为5个类簇,尝试将失眠病人的症状分为5个类型,可以看到第一类病人的主要症状可能是多梦、反复失眠引起的;第二类病人则侧重于疼痛,如腰疼、胃痛、头晕头痛,可以初步推测这类失眠病人为老人居多;第三类病人则主要伴有经期、甲亢,初步判断主要人群为妇女;第四类病人,侧重于候补的疼痛而引起的失眠;最后一类病人,脉弦细、舌质暗、耳鸣,也可初步判断为老年人。
在探究5类症状和5类处方之间的相关关系时,因为数据量的关系,以及聚类结果的不准确性,这里没做过多的研究,在下一阶段会尝试。
5 总结
5.1 小结
本次实验,完完整整的经历一遍文本挖掘的流程,感谢中医院提供的数据。在实验的开始阶段,根据研究的目的,或有目标或无目标的进行了数据清洗;在构建词典、分词阶段,为了增加分词的准确性,在相关网站爬取了许多中医名词作为词典的一部分,也从数据集中获取了一部分新词,人为添加了停用词词典;在特征提取、词向量化处理阶段,尝试了许多方法,如tf-idf、textrank、word2vec、doc2bow、LDA,略知了各方法的优缺点;在文本聚类、分类阶段,聚类使用了常使用的K-Means聚类,分类尝试使用了SVM和逻辑回归,且在分类前做了对数据的3种不同的处理方法,以供研究探讨。
5.2 展望
近年来,中医药的发展越来越受到国内外的关注,国家频频发布政策支持中医药发展,在对中医的信息化研究上也应该加大重视。本次实验,主要是对事先未做分类标记的数据进行聚类,再依据聚类的结果,进行分类分析,精度不高是会发生的,由此,粗略分析了药方和症状每个种类的关联,并适时根据中医学说验证治疗失眠的可靠性,并根据症状假设出了5类失眠病人。
在下一阶段,希望尝试对大量已经做好分类标记的文档进行相同的处理分析,来判断研究结果的可靠性。
6 参考文献
[1]Rodriguez-Esteban R. Biomedical text mining and its applications[J]. PLoS Compute Biol,2009,5(12):e1000597.
[2]高子任,李跃华. 中医药治疗老年痴呆的基础研究[J]. 中华中医药杂志,2016,31(12):5358-5359
查看代码请翻页