人工智能自动组方-根据病症相似性进行匹配推荐药方

以下为该项目的系列文章
工作记录
萤火虫算法
FCM模糊C聚类
爬虫及python代码
数据预处理
中医分类及python代码
数据预处理python代码
基于字典的最大正向匹配
基于欧式距离的方剂推荐
基于方剂相似性的方剂推荐
GitHub地址

根据病症相似性进行匹配推荐药方

数据预处理

  • 对于有证型标签的279条带下病的数据进行人工标注实体分为病名、病症、证型、治疗方法四个类别,其列表长度分别为37、1082、62、183
  • 对于1082维的病症类别,通过与中医字典进行对比,计算L式编辑距离与人工操作,将病症化简为471种病症,得到有关带下病病症字典,其中默认每种病症的第一个描述方式为标准描述方式。(例:[偏头痛 头偏痛 偏头风 偏正头风]为描述同一种病症的不同表达,所以将其合并成一个病症,默认第一个描述方法“偏头痛”为标准描述方式)
  • 将有关带下病的279条数据依据得到的病症字典转化为onehot向量,并计算在279条药方中471类病症出现的频数,将病症仅出现了0,1,2次的病症删除,进一步降低了字典维度。删除低频病症之后得到一个165维的字典。
  • 利用降维之后的新字典再对药方数据转化为onehot向量,得到一个 165$$279的病症药方矩阵。
  • 将病例所输入的病情描述通过实体识别(待)得到其病症实体,并通过字典匹配得到输入病例的病症onehot向量。

#####推荐药方

  • 计算输入病例病症与病症 ∗ * 药方矩阵中每个药方的可以治疗病症的相似度。对于病症 ∗ * 药方矩阵中的每一个药方而言,如果某药方可以治疗输入病例的一个病症,则该药方的相似度+1,计算该药方可以治疗输入病例病症的个数,及得到该药方与输入病例的相似度。
  • 计算输入病例病症与计算输入病例病症与病症 ∗ * 药方矩阵中每个药方的可以治疗病症的拟合程度。因病症 ∗ * 药方矩阵中的每一个药方能够治疗的病症不仅仅是输入病例病症还有其他的内容,所以通过计算拟合程度来表达该药方和输入病例病症集所匹配的程度。计算公式为 p = N 共 有 + 1 N 药 方 + 1 p ={N_{共有}+1 \over {N_{药方}+1}} p=N+1N+1
    其中 N 共 有 N_{共有} N指该药方与输入病例中共有的病症个数, N 药 方 N_{药方} N是指该药方所能够治疗的病症个数,分子分母均 + 1 +1 +1进行平滑处理。
  • 按照药方相似度从高到低对药方进行排序,如果有多个药方相似程度相同,则对于这些药方在按照拟合程度从高到低进行排序,如果相似度和拟合程度均相同,则排序不分先后,最终推荐出排名前N个药方
    #####示例
    根据前期数据预处理得到如下所示35 的病症药方矩阵,输入病例为{病症1.病症2},则输入病例病症onehot向量为[1,1,0]。

| | |药方1|药方2|药方3|药方4|药方5|
|-|
|病症1|0|1|0|1|0|
|病症2|1|1|0|1|1|
|病症3|1|1|1|0|0|

对于该病例通过上述计算方法则可以得到如下所示的相似度和拟合程度表:

| ||药方1|药方2|药方3|药方4|药方5|
|-|
|相似度|1|2|0|2|1|
|拟合程度|0.5|0.6|0|1|1|

那么按照先对相似度进行排序再对拟合程度进行排序的规则,得到的最终推荐药方顺序是:药方4,药方2,药方5,药方1,药方3.

你可能感兴趣的:(人工智能自动组方)