盛雅蘭 王珍 佘侃侃
摘要:目的 分析脈象識別誤差大小的影響因素,提高對海量脈診數(shù)據(jù)的處理速度,探索減小脈象主觀識別誤差的方法。方法 運(yùn)用基于Hadoop環(huán)境的MapReduce分布式計(jì)算方法改進(jìn)BP算法,采用改進(jìn)的BP算法對脈診樣本數(shù)據(jù)進(jìn)行自學(xué)習(xí),從而減小擬和誤差。將中醫(yī)電子脈診儀采集的脈診數(shù)據(jù)作為神經(jīng)網(wǎng)絡(luò)輸入層,采用動量-學(xué)習(xí)率自適應(yīng)調(diào)整快速BP算法對神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。結(jié)果 在訓(xùn)練集(75%)768 M共35 890條數(shù)據(jù)中,單機(jī)模式正確預(yù)測29 150條,正確率為81.22%;MapRedece并行改進(jìn)的BP算法模式正確預(yù)測35 841條,正確率為99.86%。結(jié)論 與傳統(tǒng)BP算法相比,基于Hadoop環(huán)境的MapReduce分布式計(jì)算方法改進(jìn)的BP算法模型擬合度誤差更小,精確度更高。
關(guān)鍵詞:Hadoop;MapReduce;BP算法;脈象識別
DOI:10.3969/j.issn.1005-5304.2018.03.023
中圖分類號:R2-05;R241.1 文獻(xiàn)標(biāo)識碼:A 文章編號:1005-5304(2018)03-0102-05
Abstract: Objective To analyze the factors of errors in the pulse recognition; To improve the speed of processing massive data; To explore the method of reducing the subjective errors in pulse recognition. Methods BP algorithm based on distributed MapReduce in Hadoop environment was optimized. Optimized BP algorithm was used to self-learn pulse-sequence data to reduce fitting errors. The pulse-counting data collected by TCM electronic pulse diagnosis instrument were used as input layer of neural network. Momentum-learning rate adaptive fast BP algorithm was adopted to train neural network. Results In the training set (75%) of 768 M, a total of 35 890 data were collected, and 29 150 items were correctly predicted in stand-alone mode, with the correct rate of 81.22%. MapRedece parallel improved BP algorithm model correctly predicted 35 841 items, with the correct rate of 99.86%. Conclusion Compared with traditional BP algorithm, BP algorithm based on distributed MapReduce in Hadoop environment has smaller fitting errors, with higher accuracy.
Keywords: Hadoop; MapReduce; BP algorithm; pulse recognition
脈診為中醫(yī)四診之一,是辨證論治必不可少的客觀依據(jù)。傳統(tǒng)的診脈主要通過觸覺和壓覺,并結(jié)合主觀判斷,故難以形成統(tǒng)一、規(guī)范的標(biāo)準(zhǔn)。因此,將中醫(yī)脈象識別與電子信息技術(shù)相結(jié)合,對中醫(yī)脈診標(biāo)準(zhǔn)化具有重要意義。為提高脈象識別的準(zhǔn)確率和可靠性,本研究將基于Hadoop環(huán)境優(yōu)化的BP神經(jīng)網(wǎng)絡(luò)算法應(yīng)用到脈象識別中。
隨著信息化社會的飛速發(fā)展,有研究價(jià)值的數(shù)據(jù)達(dá)到了海量級別,而傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練環(huán)境是單機(jī)串行的處理數(shù)據(jù)集,在處理海量數(shù)據(jù)集時(shí)有較大局限性,如耗時(shí)長、運(yùn)行內(nèi)存不足導(dǎo)致訓(xùn)練中途停止等[1]。為解決傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練方法存在的問題,采用并行方式是較優(yōu)選擇,如新興的云計(jì)算[2]平臺Hadoop技術(shù)為一項(xiàng)非常適合的技術(shù)。本研究在開源云計(jì)算平臺Hadoop[3]環(huán)境的基礎(chǔ)上,探索基于算法權(quán)值改進(jìn)的BP神經(jīng)網(wǎng)絡(luò)MapReduce[4]并行實(shí)現(xiàn)方法,其中包括HDFS的文件處理系統(tǒng)[5-6]并行實(shí)現(xiàn)方法及研究提出的結(jié)合單樣本訓(xùn)練特點(diǎn)的BP神經(jīng)網(wǎng)絡(luò)批量訓(xùn)練方法。
1 Hadoop環(huán)境下的BP神經(jīng)網(wǎng)絡(luò)算法設(shè)計(jì)
1.1 Hadoop架構(gòu)
Hadoop是目前應(yīng)用最廣泛的開源分布式云計(jì)算技術(shù),Hadoop以HDFS和MapReduce為核心,向用戶提供了底層系統(tǒng)透明的分布式基礎(chǔ)架構(gòu)[7]。其中,HDFS的容錯(cuò)性、可靠性極高,允許用戶將Hadoop平臺部署在低廉的硬件設(shè)施上,形成分布式系統(tǒng),提高讀寫速度、擴(kuò)大存儲容量。
MapReduce分布式計(jì)算框架由一個(gè)統(tǒng)籌控制所有節(jié)點(diǎn)的主節(jié)點(diǎn)(Job Tracker)和分布于子機(jī)器上的從節(jié)點(diǎn)(Task Tracker)群一并組成。主節(jié)點(diǎn)負(fù)責(zé)對從節(jié)點(diǎn)的資源、任務(wù)分配以及子節(jié)點(diǎn)的生命監(jiān)控。從節(jié)點(diǎn)執(zhí)行主節(jié)點(diǎn)分配的任務(wù),并實(shí)時(shí)向主節(jié)點(diǎn)報(bào)告任務(wù)執(zhí)行情況和本身的運(yùn)行狀態(tài)。MapReduce作為分布式計(jì)算的主要運(yùn)行框架,旨在將大量的數(shù)據(jù)計(jì)算細(xì)分到各從節(jié)點(diǎn)上,在計(jì)算完成后對數(shù)據(jù)進(jìn)行統(tǒng)一的約減操作,得到最終的有效數(shù)據(jù)。
在MapReduce過程中,Job Tracker將任務(wù)分解為多個(gè)子任務(wù),分配給Hadoop環(huán)境下空閑的機(jī)器進(jìn)行Map過程,Map過程將完成對數(shù)據(jù)的大部分的處理,并將結(jié)果以鍵值對(key,value)的方式返回。Reduce的工作是將Map運(yùn)算的結(jié)果進(jìn)行匯總,運(yùn)行模型見圖1。即使使用者無編程經(jīng)驗(yàn),僅需將Job Tracker的工作信息配置好,Map函數(shù)和Reduce函數(shù)會分別完成任務(wù)處理及結(jié)果收集。
1.2 BP神經(jīng)網(wǎng)絡(luò)
BP神經(jīng)網(wǎng)絡(luò)是一種典型的多層前向網(wǎng)絡(luò),由輸入層、隱含層和輸出層組成。一個(gè)3層的BP神經(jīng)網(wǎng)絡(luò)可完成由任意N維到M維的映射[8]。BP神經(jīng)網(wǎng)絡(luò)模型為多層感知機(jī)結(jié)構(gòu),其中不僅包含輸入和輸出節(jié)點(diǎn),而且還有一層或者多層隱層。標(biāo)準(zhǔn)BP神經(jīng)網(wǎng)絡(luò)拓?fù)鋱D見圖2。
輸入層有M個(gè)神經(jīng)元,即輸入矢量為X={X1,X2,…,XM},輸入矢量的每個(gè)分量分別為歸一化的脈象信號特征值,輸入層的傳遞函數(shù)選用比例系數(shù)為1的線性函數(shù)。隱含層有L個(gè)神經(jīng)元,采用(0,1)型Sigmoid函數(shù)[9]作為激活函數(shù),節(jié)點(diǎn)的輸出總被約束在(0,1)取值區(qū)間內(nèi)。輸出層有N個(gè)神經(jīng)元,其傳遞函數(shù)選用比例系數(shù)為k的線性函數(shù),輸出值為Y={Y1,Y2,…,YN}。
由于BP算法模型的誤差收斂速度是由快變慢的,最后幾乎趨于平穩(wěn),極易陷入局部極小值,在誤差的收斂時(shí)間上呈幾何倍數(shù)上升。在實(shí)際建立模型過程中發(fā)現(xiàn),當(dāng)誤差達(dá)到這個(gè)極值點(diǎn)時(shí),程序運(yùn)行的時(shí)間性能陷入瓶頸,普通PC端難以承受這種計(jì)算量,程序時(shí)間消耗過于龐大。
1.3 Hadoop環(huán)境下BP算法設(shè)計(jì)
為解決收斂時(shí)誤差達(dá)到某個(gè)極值點(diǎn)所造成的時(shí)間消耗過大的問題,本研究采用Hadoop環(huán)境下的MapReduce的鏈?zhǔn)絒10]計(jì)算模式。Hadoop提供了專門的鏈?zhǔn)紺hainMapper和ChainReducer來處理鏈?zhǔn)饺蝿?wù),ChainMapper允許一個(gè)Map任務(wù)中添加多個(gè)Map的子任務(wù),ChainReducer可以在Reducer執(zhí)行之后,在加入多個(gè)Map的子任務(wù)。其中,ChainReducer專門提供了一個(gè)setReducer()方法來設(shè)置整個(gè)作業(yè)唯一的Reducer[11]。
實(shí)現(xiàn)BP算法的MapReduce化具體步驟如下:
①數(shù)據(jù)劃分:將存放在HDFS中的數(shù)據(jù)樣本分為訓(xùn)練集和測試集2部分,并將訓(xùn)練集分解成塊,分布到DataNode機(jī)器上進(jìn)行MapReduce計(jì)算。
②Map處理:Map函數(shù)在接收訓(xùn)練集數(shù)據(jù)塊后,根據(jù)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)生成期望輸出及輸入變量讀入在HDFS上的神經(jīng)網(wǎng)絡(luò)權(quán)值記錄,并通過這些權(quán)值構(gòu)造神經(jīng)網(wǎng)絡(luò),對提取的數(shù)據(jù)進(jìn)行訓(xùn)練。神經(jīng)網(wǎng)絡(luò)收斂后,獲取新的網(wǎng)絡(luò)權(quán)值作為Map的輸出。偽代碼如下:
Map ()
{
IF第一次map處理THEN
隨機(jī)初始化權(quán)重
使用訓(xùn)練集訓(xùn)練
Else
使用訓(xùn)練集訓(xùn)練
更新權(quán)值
}
③數(shù)據(jù)聚合:在把經(jīng)過Map處理過的數(shù)據(jù)傳遞給Reduce前,MapReduce機(jī)制會將每個(gè)節(jié)點(diǎn)上神經(jīng)網(wǎng)絡(luò)的所有權(quán)值歸為1個(gè)權(quán)值組,聚合所有節(jié)點(diǎn)上的權(quán)值組,傳入Reduce進(jìn)行下一步運(yùn)算。
④Reduce處理:Reduce函數(shù)接收到權(quán)值組后,使用HDFS中的標(biāo)準(zhǔn)值對其進(jìn)行輸出測試,并對結(jié)果進(jìn)行誤差精度分析和排序,選擇誤差精度最高的1/6置于下一次的MapReduce循環(huán)當(dāng)中。偽代碼如下:
Reduce ()
{
使用測試集測試神經(jīng)網(wǎng)絡(luò)的誤差
while (誤差不在規(guī)定范圍內(nèi))
{
取誤差較小的1/6組
將權(quán)重返回給map過程迭代訓(xùn)練
}
神經(jīng)網(wǎng)絡(luò)訓(xùn)練完成
保存計(jì)算結(jié)果
}
實(shí)現(xiàn)BP算法的MapReduce化的流程圖見圖3。
2 Hadoop環(huán)境BP算法脈象識別
2.1 實(shí)驗(yàn)環(huán)境
采用7臺普通臺式機(jī),單機(jī)配置為:CPU型號Intel? Core? i5-7400;CPU最高頻率3.50 GHz;CPU緩存6 Mb;內(nèi)存8 G,DDR4;硬盤1 TB。Hadoop集群配置為:1臺設(shè)置為主節(jié)點(diǎn),配置JobTracjerhe和NameNode,其余6臺設(shè)置為從節(jié)點(diǎn),配置TaskTracker和DataNode。Hadoop集群主要軟件的安裝版本為JDK1.8,Hadoop2.7.3。
2.2 實(shí)驗(yàn)數(shù)據(jù)
采用食指、中指、無名指3根手指在腕動脈寸、關(guān)、尺3個(gè)部分進(jìn)行舉、按、尋操作,通過脈搏波動頻率反饋的信息判斷人體的機(jī)能狀態(tài)[12],采用呂炳奎發(fā)明的中醫(yī)電子脈診儀來測出辨識指標(biāo)[13]。Xi={X1,X2,X3,X4,X5,X6,X7,X8},X1~X8分別表示左寸脈、左關(guān)脈、左尺脈、右寸脈、右關(guān)脈、右尺脈、左手脈、右手脈[14],Yi={Y }表示脈象的實(shí)際值,脈象數(shù)據(jù)示例見表1。
2.3 預(yù)測模型
將中醫(yī)電子診脈儀的8個(gè)輸出結(jié)果作為神經(jīng)網(wǎng)絡(luò)的輸入層數(shù)據(jù),并決定輸入層節(jié)點(diǎn)個(gè)數(shù)。中醫(yī)脈象類型的指標(biāo)個(gè)數(shù)決定輸出層節(jié)點(diǎn)數(shù),隱含層節(jié)點(diǎn)個(gè)數(shù)的確定采用公式m=√rn,式中m為隱節(jié)點(diǎn)數(shù),r為輸入層節(jié)點(diǎn)數(shù),n為輸出層節(jié)點(diǎn)數(shù),確定大概節(jié)點(diǎn)個(gè)數(shù),在此基礎(chǔ)上探索m+1、m-1等節(jié)點(diǎn)個(gè)數(shù)的網(wǎng)絡(luò),直至得到最優(yōu)結(jié)構(gòu)性網(wǎng)絡(luò)8∶6∶1。
將1 G條脈象數(shù)據(jù)樣本分為75%訓(xùn)練集(768 M)和25%測試集(256 M),采用動量-學(xué)習(xí)率自適應(yīng)[15-17]調(diào)整快速BP算法對神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練。訓(xùn)練結(jié)束時(shí)的網(wǎng)絡(luò)最終誤差設(shè)定為10-4,訓(xùn)練過程采用自動停止,即當(dāng)網(wǎng)絡(luò)輸出誤差達(dá)到10-4,網(wǎng)絡(luò)訓(xùn)練過程自動停止。
在實(shí)驗(yàn)中,隨機(jī)生成n組初始化的權(quán)值數(shù)組,并將首次迭代次數(shù)設(shè)置為5000,以達(dá)到基本的誤差收斂平緩階段,然后將權(quán)重組中誤差精度最高的1/6選出,進(jìn)入下一次MapReduce過程,程序設(shè)置時(shí)間上限為3 h和誤差接受范圍為(0~0.000 1),如果運(yùn)算時(shí)間達(dá)到了規(guī)定的上限時(shí)間,誤差還沒有被接受,將繼續(xù)選擇誤差最接近的1/6組,進(jìn)行下一次MapReduce過程,依次循環(huán)下去,若誤差到達(dá)約定范圍之內(nèi),便跳出循環(huán),接受權(quán)重。預(yù)測結(jié)果見表2。
在768 M共35 890條數(shù)據(jù)中,單機(jī)模式預(yù)測正確預(yù)測29 150條,正確率為81%;MapRedece并行模式正確預(yù)測35 841條,正確率為99.86%。表明Hadoop環(huán)境下的BP算法能夠準(zhǔn)確地進(jìn)行脈象識別。
2.4 結(jié)果分析
BP算法傳統(tǒng)單機(jī)串行模式下要到達(dá)程序設(shè)定的誤差精度,普通的PC端難以承受該計(jì)算量,運(yùn)算時(shí)耗太長。本研究針對上述問題設(shè)置了2個(gè)對照組。
第1組:使單串行機(jī)模式和MapReduce并行模式在同一時(shí)間點(diǎn)運(yùn)行,并在運(yùn)行至30 s時(shí)截止取得權(quán)值,然后對256 M數(shù)據(jù)進(jìn)行運(yùn)算并與標(biāo)準(zhǔn)數(shù)據(jù)比較取得誤差作圖,見圖4。
第2組:將2個(gè)程序分別設(shè)定相同的誤差接受范圍,并在同一個(gè)時(shí)間點(diǎn)運(yùn)行,比較2個(gè)程序到達(dá)誤差范圍所需的時(shí)間,見表3。
圖4表明,在程序運(yùn)行30 s時(shí)終止程序,對256 M實(shí)驗(yàn)數(shù)據(jù)傳統(tǒng)串行處理模式和MapReduce鏈?zhǔn)讲⑿刑幚砟J降乃苓_(dá)到的誤差的精確度對比,結(jié)果顯示MapReduce鏈?zhǔn)讲⑿刑幚砟J降恼`差精度遠(yuǎn)高于傳統(tǒng)串行處理模式。
表3表明,要到達(dá)相同精度的誤差區(qū)間時(shí),MapReduce鏈?zhǔn)讲⑿刑幚砟J剿脮r(shí)間遠(yuǎn)少于傳統(tǒng)串行模式。
網(wǎng)絡(luò)訓(xùn)練學(xué)習(xí)完畢后,將檢驗(yàn)樣本輸入神經(jīng)網(wǎng)絡(luò)進(jìn)行脈象分類檢驗(yàn)。相同時(shí)間內(nèi),并行MapReduce所能達(dá)到的誤差精度比傳統(tǒng)單機(jī)串行所能到達(dá)的精度要高,當(dāng)對誤差的精度要求提高達(dá)萬分之一點(diǎn)時(shí),傳統(tǒng)的計(jì)算方法甚至無法算出符合要求的權(quán)值,且運(yùn)算時(shí)間超過1 d,資源消耗巨大。而MapReduce模型下的計(jì)算僅需4 min便能接受誤差,返回多組符合要求的權(quán)值。通過分析脈象識別中誤差大小的影響因素,可提高對海量脈診數(shù)據(jù)處理的速度,探索減小脈象主觀識別誤差的方法。
3 小結(jié)
診脈“在心易了,指下難明”,學(xué)習(xí)者需長期積累經(jīng)驗(yàn)且難以達(dá)到精確、客觀、統(tǒng)一的標(biāo)準(zhǔn)。計(jì)算機(jī)技術(shù)、信號處理技術(shù)、人工智能等多種現(xiàn)代技術(shù)的出現(xiàn),促成了脈象儀產(chǎn)生,脈診相關(guān)研究逐漸呈現(xiàn)信息化發(fā)展態(tài)勢。將多種計(jì)算機(jī)信息技術(shù)與中醫(yī)研究相結(jié)合,使中醫(yī)脈診的客觀化、標(biāo)準(zhǔn)化成為可能。
本研究基于Hadoop環(huán)境改進(jìn)的BP神經(jīng)網(wǎng)絡(luò)算法大大減小了脈象識別中BP算法模型的誤差,實(shí)驗(yàn)結(jié)果表明,采用Hadoop平臺下的鏈?zhǔn)組apReduce方式建模,在時(shí)間性能和準(zhǔn)確率上遠(yuǎn)遠(yuǎn)優(yōu)越于傳統(tǒng)的串行處理方式。對于中醫(yī)脈象的識別分類和輔助診斷疾病具有一定的臨床應(yīng)用價(jià)值。
參考文獻(xiàn):
[1] 朱晨杰,楊永麗.基于MapReduce的BP神經(jīng)網(wǎng)絡(luò)算法研究[J].微型電腦應(yīng)用,2012,28(10):9-12,19.
[2] MILLER M. Cloud computing:Web-based applications that change the way you work and collaborate online[J]. Que Publishing Company, 2008,82(3):303-318.
[3] 崔杰,李陶深,蘭紅星.基于Hadoop的海量數(shù)據(jù)存儲平臺設(shè)計(jì)與開發(fā)[J].計(jì)算機(jī)研究與發(fā)展,2012,49(S1):12-18.
[4] DEAN J. Experiences with map reduce:An abstraction for large scale computation[C]//Proceeding of the 15th International Conferenceon Parallel Architectures and Compilation Techniques. Washington DC:IEEE Press, 2006.
[5] 郝樹魁.Hadoop HDFS和MapReduce架構(gòu)淺析[J].郵電設(shè)計(jì)技術(shù), 2012(7):37-42.
[6] 武森,馮小東,楊杰,等.基于MapReduce的大規(guī)模文本聚類并行化[J].北京科技大學(xué)學(xué)報(bào),2014,36(10):1411-1419.
[7] YANG D S, LIU Z W, ZHAO Y, et al. Exponential networked synchronization of master-slave chaotic systems with time- varying communication topologies[J]. Chinese Physics B,2012, 21(4):155-162.
[8] 王穎純,白麗娜.基于BP神經(jīng)網(wǎng)絡(luò)的中醫(yī)脈診體質(zhì)類型判定[J].中醫(yī)雜志,2014,55(15):1288-1291.
[9] 張雪偉,王焱.基于Sigmoid函數(shù)參數(shù)調(diào)整的雙隱層BP神經(jīng)網(wǎng)絡(luò)的板形預(yù)測[J].化工自動化及儀表,2010,37(4):42-44,48.
[10] 黃山,王波濤,王國仁,等.MapReduce優(yōu)化技術(shù)綜述[J].計(jì)算機(jī)科學(xué)與探索,2013,7(10):885-905.
[11] 吳斌,劉心光.一種基于改進(jìn)的鏈?zhǔn)組apReduce的并行ETL應(yīng)用[J]. 電信科學(xué),2013,29(12):1-8.
[12] 朱欽士.切脈“寸關(guān)尺”有何依據(jù)[J].大眾科學(xué),2014(12):32-33.
[13] 張麗娜,李垠含,張文順.脈診儀在實(shí)驗(yàn)教學(xué)中存在的問題及改進(jìn)對策[J].遼寧中醫(yī)藥大學(xué)學(xué)報(bào),2011,13(6):271-272.
[14] 黨宏智.寸關(guān)尺部位脈搏信息檢測系統(tǒng)[D].蘭州:蘭州理工大學(xué), 2011.
[15] 宮寧生,錢春陽,張媛.一種BP網(wǎng)的學(xué)習(xí)速率與動量項(xiàng)自適應(yīng)算法[J].小型微型計(jì)算機(jī)系統(tǒng),2013,34(8):1872-1876.
[16] MAN Z H, WU H R, LIU S, et al. A new adaptive backpropagation algorithm based on Lyapunov stability theory for neural networks[J]. IEEE Trans on Neural Networks,2006,17(6):1580?1591.
[17] WONG W K, YUAN C W M, FAN D D. Stitching defect detection and classification using wavelet transform and BP neural network[J]. Expert Systems with Applications,2009,36:3845-3856.
(收稿日期:2017-04-10)
(修回日期:2017-05-03;編輯:向宇雁)