张嘉琪,张月琴,陈健
(太原理工大学信息与计算机学院,山西晋中 030600)
中医是我国的传统医学,脉诊是中医理论中始创于公元前的独特疾病诊断方法之一,李时珍所著的《濒湖脉学》通过七言诗对脉象特征进行了简洁、形象的描述。目前脉诊多通过医生的主观触感来实现,由于缺乏脉象识别的统一标准,同一个病人可能会被诊断出不同的脉象;而且医生通常以自己的呼吸作为时间单位来计算病人的脉搏[1]。所以,如何用现代技术获得脉象的特征,并依此特征客观准确地诊断疾病成为受关注的研究课题。
最早记载脉诊的是《史记》,叙述了春秋时期扁鹊善于望、闻、问、切而成为当时的名医,其中“切”即切脉,也就是脉诊[2]。除此之外,从春秋时期的《黄帝内经》《难经》等,到东汉时期的具有传世意义的《伤寒杂病论》,再到之后的《脉经》《濒湖脉学》等,中医诊脉在我国的历史长河中已传世两千多年[3]。在古代,为了方便老百姓就医看病,记载最多的方法就是“赐药”。尤其是在宋元时期,“赐药”的实例更多:如在南宋朝廷给京城临安的居民送药;宋高宗时期要求派出医官为百姓看病巡诊开方治病;宋孝宗时期要求大多数的医官挨家挨户巡诊百姓并发放药品。当时,受地理条件、交通能力的制约,能够受此恩泽的百姓仍然有限。而今,虽然医学有了更大的发展,但由于多种多样的原因,看病难的问题依然存在。在互联网高度发展的今天,人们已通过互联网做到千里诊病,其中最常见的就是电子病历、远程会诊、远程护理等新科技的产物[4]。对于脉诊,也已出现通过脉象仪与人体的接触,获取脉象的信息进而绘制成脉象波形图,之后通过这些信息和脉象波形图并依据中医脉诊知识进行数据分析,推断出具体的脉象进而诊断测试者的身体状况。因此,脉诊的准确率直接关系到诊断的准确率,既降低资源和时间的消耗,也有助于高效准确的科学脉诊。
针对上述问题,本文提出了一种以脉象图分析法为指导思想,以强化学习为框架,融和马尔可夫决策和蒙特卡罗搜索(Monte Carlo Search,MCS)算法的脉象诊断方法,以达到减少训练数据集和训练学习时间,对整个诊断过程进行可视化的解释说明并提高准确率的目标。
目前的脉象识别研究大多采用脉象信号、脉象波形图以及脉象图谱的特征参数作为研究数据,并采用深度学习的方法进行数据挖掘,最终对脉象进行识别判断。脉象图是脉象的重要描述工具,它形象地展现出心脏循环脉动对血管造成挤压、变形及振动而形成实时的变化,通过具体的10 个特征参数用数字来精准描述脉象。同理脉象图谱则是通过8 个不同的图谱参数来反映脉象的实时特征。中医脉象是一种受多种因素影响的不平稳的周期信号,脉象图的变化常常会由未知原因在短时间内迅速发生变化,内含未知的模糊边界,加之脉象的生成机制尚不完全明确,因此对脉象信号的分析研究仍不能对中医脉诊进行定性分析的研究[5]。中医脉诊要参照人手动脉的寸、关、尺等部位的脉搏信号进行全面分析诊断,而脉象信号图缺乏对脉象典型特点的定性分析和脉位、脉数、脉形、脉势的准确信息[5]。因此对脉位、脉数、脉形、脉势等脉象特征进行定量并作为客观、科学的脉象分析的重要参考特征成为研究的主要内容之一。
针对脉象波形图的分析方法,目前有采用支持向量机、随机森林等浅层机器学模型以及反向传播神经网络(Back Propagation Neural Network,BPNN)、卷积神经网络(Convolutional Neural Network,CNN)、循环神经网络(Recurrent Neural Network,RNN)以及概率神经网络(Probabilistic Neural Network,PNN)等深度学习模型。郭红霞等[6]将PNN 方法和脉象图谱数据运用到了脉象识别,PNN 相较其他神经网络模型学习过程简单,训练速度更快,适合分类,表现出较好的容错性;利用相同的数据,李磊[7]使用三层BPNN 对脉象进行识别分析。陈星池等[8]利用脉搏波信号数据,将极限学习机(Extreme Learning Machine,ELM)、BPNN 和支持向量机进行脉象识别的对比;郭彦杰[9]、胡杨生[10]分别在eox 移动智能血氧监测仪器获得脉搏波形数据集,使用RNN和CNN进行了脉象识别的研究,RNN 的时序性特征适用于通过脉搏波的变化过程对脉象进行分类识别;颜建军等[11]使用了Z-BOXI型脉象数字化采集分析仪获得的冠心病脉象数据,并利用递归图、CNN对健康脉象和冠心病脉象进行了区分研究。
从现有脉象识别的研究来看,神经网络类的方法都有效达到了良好的识别效果。神经网络等深度学习算法存在一些可待改善的地方:1)神经网络类算法需要进行数据训练,这需要大量的标记数据;2)训练过程缺乏可解释性等问题,难以说明所以然的问题仍然存在;3)大量训练导致的数据处理时间较长,开发框架相对复杂,对环境有较高的要求。因此,本文针对以上三个问题提出相应的解决方法:在中医诊脉的理论基础上,结合强化学习的理论知识,根据数据特征和脉诊过程选择了强化学习方案。其中,马尔可夫决策被用于描述脉象数据间的关系,蒙特卡罗搜索被用于强化学习的奖励策略。强化学习,是一种通过交互的目标导向学习的方法,不断探索与试错,利用基于正/负奖励的方式进行学习,而马尔可夫决策过程则是用于模拟这个学习过程,蒙特卡罗搜索通过求解学习过程并获得最优策略。该方法是一种自我学习过程,不需要大量训练数据集,且识别过程可解释,处理时间相对较少。
脉象识别相关研究多对训练数据集有较高要求,不但数量要求多且质量要求高。因此,本文研究以中医诊断中的脉象图分析法为指导思想,选择马尔可夫决策过程(Markov Decision Process,MDP)和蒙特卡罗搜索相结合作为主要的研究方法。该方法可根据先验知识,并根据每一种脉象的特征数据的取值范围,对先验知识数据进行标记。针对脉象诊断的行为过程和具体情况,特征选择和路径分类被用于缩短经验轨迹、降低资源占用并提高准确率的目标。直接使用马尔可夫决策过程和蒙特卡罗搜索,容易产生冗长的路径,进而影响到识别结果的准确性。为解决此问题,本文提出了一种改进方法:首先,采用特征选择方法,通过与正常脉象的对比,优先选出异常脉象的显著特征;其次,以筛选出的显著特征为基础,分别建立脉位失常、脉率失常和脉型失常3 条路径;最后,通过马尔可夫决策过程和蒙特卡罗搜索对处理后的数据集进行分析处理,从而达到减少经历不必要的状态和行为,最终改善较长训练时间和资源浪费等问题。除此之外,在模型不断的训练中,将形成经验轨迹记忆库,不断地更新模型的转移概率,达到脉象识别的目标。本文系统的框架如图1所示。
图1 本文系统框架Fig.1 Framework of proposed system
模型首先要通过学习先验知识,获得每种脉象所形成的经验轨迹、状态阈值,并作为实验数据的识别依据,然后将每种脉象在状态变化时的转换概率进行记录并用于模型的更新。在这之后将实验数据根据专家结果分为单一脉象和相兼脉象。本文首先把单一脉象的识别作为研究对象,通过提案模型计算得到相应的状态值,并与状态阈值集的数据进行对比得出相应的模型识别结果。将模型识别结果和专家结果进行对比:如果结果一致说明识别正确;若结果不一致,则将经验轨迹存入经验轨迹记忆库,并更新相应脉象的状态阈值集,进一步更新模型的参数。
《濒湖脉学》中对脉象的触感给出了清晰的定义,而文献[12]则采用现代仪器作为描述的方式,将各类异常脉象在脉象波形图的特点进行了具体的数值定义。心脏在一次跳动之后,血管会受到压力而发生变形,致使动脉的容积和血液流动发生一系列的变化。这些变化就被脉象仪捕捉到并绘制成波形图,如图2 所示是一个基本的脉象波形图,并在图中注明了重要参数。脉象图分析法中给出的具体参数以及《濒湖脉学》中对脉象特征定义的具体参数,将作为实验所用的先验知识,让本文方法能判断具体脉型需要哪些对应的行为参数。
图2 脉象波形Fig.2 Pulse condition waveform
根据脉象仪所获取的波形图数据,可以获取到波段常用的指标。
1)U 角:又称上升角,为主波上升支与时间横轴所形成的夹角,反映血管弹性、粘性。
2)P 波:即主波幅、主波峰顶的垂直距离,代表心脏收缩期动脉管壁所承受的压力和容积。
3)P 角:主波的上升支和下降支之间所形成的夹角,反映血管弹性和血流情况。
4)t1:U→P 为流入时间,即到达主波顶的时间,与血液流入动脉所受阻力大小相关。
5)T波:重搏前波,T波的数值是脉象分类的重要指标。
6)V波:降中峡,其幅度反映了外周血管的特征。
7)D波:重搏波,反映血管弹性和血液流动状态。
8)t:U→U'时间为脉波周期时间。
由此,脉搏波形图从血管、血液等特征对脉象进行了状态描述。
除此之外,文献[12]根据脉象的典型特征将异常脉象分为脉率失常、脉位失常、脉型失常3 大类以及10 大特殊脉象。本文首先选择3 大类的异常脉象作为研究对象。3 大异常脉象类型分别为:脉率异常、脉位异常、脉型异常,具体的分类在2.4 节中介绍。相关的识别数据除上述脉象图指标外,脉率、脉位等脉象特征,也是该实验的两个重要数据项。实验设计将依照中医理论给出的具体思想和参数作为本文脉象分类的理论基础。
强化学习是一套通用的学习框架,主要是在环境交互过程中,通过奖励r、状态s、动作a这3个信号实现学习和求解最优策略的过程。强化学习的数学基础理论是基于马尔可夫决策过程,并构建相应的数学表达,然后利用诸如动态规划、蒙特卡罗、时间差分等数学方法对其进行求解,从而搭建一套自适应、自学习的强化学习决策体系[13]。针对马尔可夫决策过程中抽象出的经验轨迹集,本文采用蒙特卡罗搜索方法进行求解,并获取最优策略。蒙特卡罗搜索需要完整的经验轨迹,这一特点可用于对后期的脉象识别过程进行相应的解释。将用马尔可夫决策过程详细地模拟脉象识别的强化学习的学习过程,以及蒙特卡罗搜索对强化学习的求解过程。
2.3.1 马尔可夫决策过程
马尔可夫决策过程(MDP)被用于强化学习,它要求系统的一个状态与当前状态有关,而与之前或者更早的状态没有关系,以及其序贯决策的特点与本文实验所用数据中数据项无关联的特征相符。马尔可夫决策过程如下:
其中,S代表状态集,且S={s1,s2,…,sn},si表示时间状态i下的实时状态。本文将脉诊识别需要考察的15 个重要脉象特征和判断学习过程是否“终止”作为状态,则S的定义如下:
S={“脉位”,“节律”,“脉力”,“脉型”,“脉冲”,“脉率”,“脉搏”,“U 角”,“P 波”,“P 角”,“t1”,“T 波”,“D 波”,“V波”,“t”,“终止”}
Xi={xi,0,xi,1,…,xi,14}是本文实验的数据,将作为马尔可夫决策过程的输入数据。p表示在状态si执行动作ai之后,转移到下一个状态s'的概率,例如psa=P(s'|si,ai),初始的转移概率都设为1,伴随着模型的不断学习转移概率也会不断更新。而A则为动作集,其表达式为A={a1,a2,…,an},其中,ai表示时间状态i下所采取的动作,例如在状态si=“脉力”时所采取的具体动作有“无力”及“有力”,分别记作:ai,0=“无力”和ai,1=“有力”,这里ai=ai,1=“有力”。相应的r作为奖励,即在状态si执行动作ai后转移到状态s'所获得的奖励ri,其中ri=R(si,ai)。最终生成一条由S、A、r组成的经验轨迹序列,记为:{S,A,r}。
为使用本文的实验数据,在未经数据选择和路径分类处理的情况下得到一条经历全部状态和行为的结脉的经验轨迹,其具体步骤如下:
步骤1 当前所在的状态s0(脉位),执行动作a0(脉位:中),状态转移到s1(节律),获得奖励为0。
步骤2 此时状态为s1(节律),执行动作a1(节律:不齐),状态转移到s2(脉力),获得奖励为-1(节律:不齐时,相应的奖励为-1;齐时,奖励为0)。
步骤3 此时状态处于s2(脉力),执行动作a2(脉力:有力),获得奖励为1(脉力分为:有力、中、无力、软、不齐,相对应的奖励值为1、0、-1、-2、-3),状态转移到s3(脉型)。
……
步骤15 此时状态处于s14(t),执行动作a14(U→U'时间:0.67,在正常值范围),获得奖励为0,状态转移到s15(终止)。
根据特征数据的正常值与异常值的差异程度,本文研究对奖励给予相应的定义。当特征值优于正常值时,给予的奖励为正的分值;当特征值劣于正常值时给予为负的分值。奖励的分值依据特征的不同程度给予定义。例如对脉力有5 种程度的定义,分别为有力、中、无力、软和不齐,其中:中为正常值,故定义脉力程度为中时,奖励分值为0;脉力程度为有力时,其特征值优于脉力程度中,故定义其奖励分值为1;脉力程度无力、软和不齐均劣于脉力程度中,其中脉力程度软和不齐更劣于脉力程度无力,故其分值分别定义为-1、-2和-3。
到这里,一个完整的马尔可夫决策过程结束了,获得一条经验轨迹:s0(脉位),a0(中),r0,s1(节律),a1(不齐),r1,s2(脉力),a2(有力),r2,s3(脉型),…,s14(t),a14(0.67),r14,s15(终止),如图3所示。
2.3.2 蒙特卡罗搜索
蒙特卡罗搜索(MCS)能够处理免模型的任务,其无须依赖环境的完备知识,只需重复收集从环境中进行采样得到的经验轨迹(由马尔可夫决策过程获得),基于经验轨迹级数据的计算,可获得最终的累积奖励。
利用蒙特卡罗搜索直接从环境中采集获得经验轨迹,并根据经验轨迹的数据进行计算,最终获得该策略下的累计奖励。
在环境未知时,则根据策略π进行采样,从起始状态s0出发,执行该策略T步后达到一个终止状态sT,从而获得一条完整的经验轨迹,如式(1)所示:
由2.3.1 节的介绍可得s0(脉位)、a0(中)、r0=0、s1(节律)、a1(不齐)、r1=-1、s2(脉力)、a2(有力)、r2=1、s3(脉型)、……、s14(t)、a14(0.67)、r14=0、s15(终止)。
对于m时刻状态为sT,未来折扣累计奖励如式(2)所示:
蒙特卡罗法利用经验轨迹的平均未来折扣累计奖励G作为状态值的期望:
而强化学习的目标是求解最优策略π*,得到最优策略的一个常用方法是求解状态值函数νπ(s)的期望:
根据本文研究的部分数据项具有取值范围的限定这一特性,相应得到的结果也具有相应的范围特性,故本文采用先验知识中每种脉象的每项数据的最小值及最大值都进行模型计算,获取相应的最小状态值νmin以及最大状态值νmax,从而得到相应脉象的状态阈值集并记作νpulse⁃name,i。本文使用部分脉象的数据作说明如表1 所示,限于篇幅,给出了除P 角之外的其他14 个脉象特征,可见部分脉象特征为范围特性,应用其最小值和最大值分别计算最小状态值νmin以及最大状态值νmax。因此,本文方法改用阈值状态值作为判断依据。将训练过程中识别某个脉象时产生的策略及该策略下所获得的状态值νπ(s)不断更新到状态阈值集中,即:
表1 脉象阈值Tab.1 Pulse condition thresholds
在实验前,根据每项特征数值可取的范围对数据进行检测,以察觉异常值,因此阈值会确定在有限范围内,以保证每种识别策略的可信性。
因为部分数据项有限定值的情况导致结果出现雷同值;其次由于直接采用原始数据会产生冗长的经验轨迹,导致准确率降低以及冗余的状态和行为;为此本文提出了一种改方法:路径分类和特征选择。
对经验轨迹进行分类改进,依照中医脉象图分析法,根据脉象的典型特征将脉象进行分类,分类依据如图4 所示,并设置不同的经验轨迹的初始状态,如下:
图4 脉象经验轨迹初始状态分类Fig.4 Initial state classification of pulse condition experience trajectories
S0={“节律”,“脉力”,“速率”,“脉速”}
除此之外,为了达到每种脉象都独有一条经验轨迹和缩短经验轨迹的目标,通过与正常脉象进行特征对比,抽取异常特征构成相应的特征组合,从而达到缩短经验轨迹的目标。根据脉象数据的特征,本文将使用适合低维数据的异常数据检测方法Z-score 评分机制[14]进行改进之后作为特征选择的方法。例如,Xi={xi,0,xi,1,…,xi,14}对每一项数据进行距离计算,计算式如下:
其中:xi,j代表一个数据点;μj是第j个脉象特征数据的均值。根据脉象识别的特点,将平脉(正常脉)的特征值作为比较对象,那么μj就是平脉第j个脉象特征的值。δj是j列数据的标准差,其值将随着数据量的增加逐值更新。获取Zi,j值之后对其进行判断,如式(7)所示:
如果|Zi,j|大于阈值Zthr,j则说明该值为异常值,将其数据存入到新的数组序列中,作为后续实验的实际数据值脉率失常的一条脉象数据的经验路径,经过与正常脉象的特征进行对比,从15 个特征值中选择出5 个具有显著异常的特征。由经验轨迹分类可知,其初始状态s0=“节律”,相应的经验轨迹为:s0(速率),a0(慢),r0=-1,s1(脉力),a1(有力),r1=1,s2(节律),a2(不齐),r2=-1,s3(脉速),a3(65),r3=-1,s4(终止)。其长度由原来的15 个状态、14 个行为及其奖励,缩短到5 个状态和4 个行为及其奖励,达到了缩短经验轨迹和状态值唯一性的目标。如图5 所示,通过路径选择和特征选择的操作,每一次脉象识别都有唯一的经验轨迹和对应的状态结果值,最终达到准确识别的目标。具体过程如算法1所示。
Fig.5 优化的经验轨迹效果Fig.5 Effect of optimized experience trajectory
算法1 优化路径特征分类脉象识别算法getPulseCondition(Xi)。
算法 2 Z-score 评分机制的特征选择算法getEigenvalues(Xi)。
其中:μj是j列数据的均值;δj是j列数据的标准差;Zthr,j为阈值。
算法3 马尔可夫决策与蒙特卡罗搜索算法getPulseName(F,Xi)。
本文实验的先验知识,包括27 种基础脉象,其中包括:平、滑、动、涩、弦等,并分别对每一种脉象进行了14 项特征参数的具体值描述。而先验知识的来源有两部分:一部分是中医医生对《濒湖脉学》中的定义进行总结,而这部分主要是脉象的基础特征;而另一部分则是文献[12]所提供,其对每一种脉象波形图中重要参数给出了具体的取值范围。
实验的数据通过脉象信息采集仪采集,对象为60 岁左右的老年人,采集时间历时约半年。所采集的数据有中医专家的标注,经过标注后的数据中分为单一脉象和相兼脉象两种。本文先选择单一脉象用于验证模型的可行性。每一组数据都由15项具体参数值组成,具体如下。
1)Pulse position:脉位,用于描述脉象所出现的位置,分为浮、中、沉三种。
2)Pulse rhythm:节律,用于描述脉象的跳动节奏,分为齐、不齐。
3)Pulse force:脉力,描述把脉时感受到的脉象的力量,有软、无力、中、有力、不齐五种。
4)Pulse shape:脉型,简单将脉象的形状分为b、abc、ac、a这四类,其中a、b、c分别表示主波、重搏前波和重搏波。
5)Pulse potential:脉势,从另一个角度来描述脉象的力量,即分为低平虚、正常和强三种。
6)Pulse rate:脉搏,即对脉搏进行慢、缓、中、迟和快的分类。
7)Pulse speed:脉搏速率,即对脉搏进行具体数字的采集。
而其他数据参数为脉象波形图的重要参数项,如图2 及相关说明。为了实验的操作方便对数据进行预处理,并将数据转换成集合的形式,每一个集合包括脉象名称及上述的15项参数值,例如X1={x1,0,x1,1,…,x1,14}。
实验中,把预处理后未经优化的数据直接运用到由马尔可夫决策过程和蒙特卡罗搜索组成的模型中,实验结果表明存在经验轨迹混杂和资源浪费等问题。为此,本文实验根据文献[12]中所给出的分类标准,将重点参数值作为经验轨迹的起始状态;此外,将每组数据与正常脉象(平脉)的各数据项进行了对比,将异常数据项作为特征提取的对象。经过路径选择和特征优化处理,最终达到了缩短经验轨迹、减少时间和资源的浪费、提高准确率的目标。
为验证本文方法,将同一数据分别使用PNN 模型、RNN模型进行脉象识别,将每一组数据归一化为样本矢量。其中,在PNN 模型中不考虑代价因子对脉象诊断的影响都取值为1;文献[6]研究表明PNN 对脉象诊断准确率的结果不会因为模型超参数的取值而过于敏感。其次,选择RNN 模型作为对比,RNN 模型类似于本文模型的状态之间相关性特征,并在脉象识别研究中表现良好[15]。文献[6]为了满足RNN 模型的训练要求,将数据划分70%作为训练数据集,30%作为测试集。
对实验结果进行分析,选择模型识别脉型的真正率(True Positive Rate,TPR)、真负率(True Negative Rate,TNR)作为模型评估的指标,TPR 描述模型真正识别的能力,TNR 表示在噪声数据情况下识别的能力,具体的计算式如下:
其中:TP表示真正脉象的数量;FN表示没被正确识别的数量;FP表示错误识别的数量;TN表示正确识别错误数据的数量。为了应用该评估模型,实验数据分别增设了K={0.1,0.2,0.3,0.5}比例的噪声数据,用于检测模型对噪声样本的敏感度。表2为模型在不同比例噪声数据下的真正率(TPR)、真负率(TNR)以及准确率(Accuracy)。
表2 不同模型诊断性能对比Tab.2 Comparison of diagnostic performance of different models
除了通过真正率和真负率评估模型针对不同比例噪声数据的识别能力,本文还采用F1度量来评价模型的稳定性和诊断性能。F1度量的计算式如下:
其中Total为样本总量。根据F1度量值越大越稳定、性能就越好的原则,可以得出本文所提出的模型相较于其他两种模型表现出更好的诊断性能和稳定性;且在面对含有不同比例噪声数据的情况,本文所提出的模型都表现较好,如表3所示。
表3 不同模型诊断F1对比 单位:%Tab.3 F1comparison of different model diagnosis unit:%
在实验用时方面,本文模型相较于其他模型的实验时间减少了约90%,明显降低了时间消耗。依照该实验的数据特点:部分数据为具体数字,部分有限定取值范围(脉位、脉型、节律等),PNN模型相较于单一脉象图数据的实验表现出脉象识别准确率明显降低的特征。而RNN 模型在本文所用数据的情况下,仍保持较高的准确率和良好的性能。本文模型的准确率在对比实验中相对较优,针对真数据和噪声数据的识别都有良好表现,验证了其可行性及对本文实验数据特征拥有较好的适应性。综合实验结果显示,本文模型可较大幅度缩短识别时间,且模型构建过程相对简单,能应对稀疏数据集的处理。同时,经验轨迹可以作为脉象识别的过程,用于解决数据处理过程中的“黑箱”问题。
为解决中医医生脉诊时由医生的个体感知差异带来的脉象诊断不一致的问题,本文利用脉象仪获取的数据,并依据传统中医诊脉的思想,探寻利用强化学习方法以实现准确诊断脉象。本文采用马尔可夫决策过程结合蒙特卡罗搜索的方法设计诊断模型,为了降低冗余,设计出脉诊数据特征选择及路径分类策略。本文模型与概率神经网络(PNN)模型和循环神经网络(RNN)模型进行对比的实验结果表明:本文模型提高了准确率,减少了时间消耗,同时减少了实验所需训练标记数据集。与此同时,实验过程中对经验轨迹的存储,可用于说明和解释诊断过程。目前,本文仅对单一脉象进行了分析和研究,在今后的工作中,我们将改进方法对相兼脉象的分析,以进一步验证本文模型的可行性和实用性。