吳燎


摘要:疾病的診斷準確性是中醫臨床用藥的關鍵,利用神經網絡診斷中醫疾病有利于提高疾病診斷的準確性,有利于中醫數字化的發展。在MATLAB環境下,利用BP神經網絡技術,通過癥狀預測糖尿病、高血壓、咳嗽、冠心病、胃病。通過數據的整理,并提煉出網絡模型,臨床驗證咳嗽的正確率達到93%,糖尿病正確率達到91%,高血壓正確率達到94%,冠心病正確率達到97%,胃病的正確率達到90%,利用人工神經網絡成功實現了疾病的診斷。
關鍵詞:中醫;神經網絡;預測;診斷
中圖分類號:G642? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2019)22-0200-03
開放科學(資源服務)標識碼(OSID):
1 引言
通過國內期刊數據庫對BP神經網絡和中醫臨床診斷檢索了87篇相關論文,其中關于神經網絡報道16篇,BP神經網絡報道27篇,人工神經網絡報道10篇,與神經網絡相關的論文一共43篇。關于神經網絡應用于疾病診斷,關于中醫診斷9篇,中醫證候9篇,中醫專家系統6篇,高血壓3篇,哮喘2篇,大腸癌2篇,冠心病3篇,糖尿病3篇。在以前疾病的診斷中,一直試想如何提高診斷率是我們一直在努力思考的問題之一,雖然在利用BP神經網絡達到了90%以上的準確率,大多數在92%左右。此研究通過數據整理,增加了樣本采集量,準確率可以達到98%左右。之前,研究的病歷資源較少,大腸癌癥型分類研究中應用數據為338例,糖尿病腎病中醫侯癥中研究數據為449個,數據量往往只有200至400個左右。本次增加了樣本采集量,通過1565個數據實驗,其中包括不同的疾病,糖尿病,高血壓,冠心病,咳嗽,胃病。使得疾病的類型覆蓋面大大提高,得到各種急病的診斷率有所提高。
2 采集數據
采用的數據來四川省各個縣市醫院的臨床數據,由于實際情況臨床的診斷對象表現出不止一種病,可能患其他各種疾病,所以研究又引入了高血壓、咳嗽、冠心病、胃病等疾病一同建立模型,模擬真實的就醫環境。數據針對糖尿病、高血壓、咳嗽、冠心病,胃病共1565例。病例包括乏力、便秘、心悸等310個癥狀,以及Ⅱ型糖尿病、高血壓、咳嗽、冠心病、胃病5個疾病診斷。
2.1數據清洗規則
數據的收集過程中,會產生各種難以避免的錯誤和不規范操作,導致數據庫中有噪聲(noise),不完整(missing),不一致(inconsistent)的數據[1],要保證數據的規范正確,為此,首先要進行數據的清洗。對于數據的清洗采用:填補遺漏的數據值、平滑噪聲數據等[2]。對于疾病的描述不準確、遺漏的數據。采取舍去的方法,保證數據的完整性。對于癥狀與描述的不統一,疾病的診斷不統一。按照國家中醫藥管理局發布的術語規范進行規范化降噪,保證數據的一致性和真實性。對于空白,錯誤的數據,一律舍去,保證數據的正確和完整。在數據清洗之后,將數據整理,進行數字化編碼處理。數字化編碼以0、1編碼[3],0代表不存在,1代表存在。
2.2清洗方法
數據預處理:刪除錯誤和空白的數據,保證數據的正確性。替換不規范的數據,保證數規范統一,得到1020例正確數據。其中確診糖尿病590例,確診高血壓61例,確診咳嗽205例,確診冠心病21例,確診胃病143例。
主成分分析:對歸一化處理后的數據進行主成分分析[4],由于1565條數據涵蓋的癥狀有302個。如果將每一個癥狀輸入神經網絡,會大大增加網絡復雜度。所以在不影響診斷的情況下,選擇主成分即可。主成分的選定標準為頻數大于15的癥狀,經過篩選前27個癥狀的頻數大于15,輸入癥狀從302個提煉至27個。
3 BP神經網絡設計
3.1網絡層數
BP神經網絡[6]可以包含一個或者多個隱含層,理論上已經證明,單個隱含層可以通過適當增加神經元節點的個數實現任意非線性映射。對于大多數應用場合,單個隱含層即可滿足需要。但如果樣本過多,增加一個隱含層可以明顯減少網絡規模。因為樣本數據輸入層有27個輸入節點,所構成的網絡較復雜,因此采用2個隱藏層。
3.2輸入層節點數
輸入層節點數由于輸入向量的維數決定。此研究輸入27個癥狀,所以有27個輸入節點。
3.3隱含層節點數
隱含層節點數[7]決定了神經網絡的結構。目前對確定隱含層節點個數沒有一個明確方法,需要參考公式,再結合實驗調整節點個數,確定最佳的訓練效果。經過實驗調整,最終確定了兩個隱含層個數為6和3的訓練的時間最短,網絡誤差最小,最后的準確率也較高。
3.4輸出層神經元個數
輸出層的神經元個數即為需要預測的疾病個數。本次研究分別有糖尿病、咳嗽、冠心病、高血壓、胃病五個疾病,所以對應有五個輸出節點。
3.5隱含層傳輸函數的選擇
BP網絡的輸入節點傳遞函數[8]有多種。最常見的兩種為Log-sigmoid和Tan-sigmoid。Log-sig型函數的輸入值可以取任意的值,輸出值一般為(0,1)之間,Tansig函數的輸入值可以為任意值,輸出值一般在(-1,1)之間。由于本次研究的期望輸出都是(0,1),所以選擇對應的Log-sig作為傳遞函數。輸出節點轉移函數選用tansig函數或purelin函數。對于函數的選擇,本實驗分別試用了兩個函數,結果表明tansig函數在65次達到最小梯度,purelin函數在15次達到最小梯度。所以采用purelin函數的訓練效果較好。
3.6訓練函數選擇
訓練函數[9]的選擇用trainlm( Levenberg-Marquardt )提供數非線性最小化的數值解。此算法能借由執行時修改參數達到結合高斯-牛頓算法以及梯度下降法的優點,并對兩者之不足作改善。函數的速度很快,但該函數運行過程會消耗大量的內存資源。如果計算機內存不夠大,采用訓練函數trainbfg或trainrp。雖然這兩個函數的運行速度比較慢,但它們的共同特點是內存占用量小,不至于出現訓練過程死機的情況。
4 BP神經網絡建立
在MATLAB 7.0 環境下,建立BP 網絡模型。該網絡包括一個輸入層、2個隱含層和一個輸出層, 其中輸入層包含27個輸入神經元;2個隱含層分別有6、3個神經元;輸出層包含4個輸出神經元。2個隱含層之間通過正切S型傳遞函數(tansig)連接,隱含層與輸出層之間用對數s型傳遞函數(logsig)連接。設定網絡的系統誤差為小于0.001,最大迭代次數為 2000次,最小下降梯度為1*e-7。
4.1 BP網絡的輸出方式
將具有糖尿病、高血壓、冠心病、咳嗽、胃病5種證型診斷樣本的期望輸出值分別定為(1,0),(1,0),(1,0),(1,0),(1,0)。
4.2 BP網絡的訓練
第1次訓練經過20次迭代以后,網絡的誤差低于0.0082363289,訓練自動停止;第2次訓練經過 42次迭代后,網絡的系統誤差降至0.0013009759;上述數值均小于規定的最小誤差0.01, 網絡趨于穩定,網絡性能達標,訓練自動停止。
4.3 BP網絡的測試
將研究的數據分為三份,其中兩份數據作為訓練數據,一份數據用于檢驗。用檢驗數據對訓練好的神經網絡做檢驗。并重復三次實驗,測試結果,保證訓練方法的正確性。
4.4結果與討論
從結果中可以看到,該網絡模型對于糖尿病,具有較高的辨識率相對穩定可靠。糖尿病、咳嗽和高血壓、胃病準確率達90%以上,冠心病準確率達97%。每種疾病的準確率不相同,其中冠心病的準確率最高,三次測試,達到了97%,而胃病、糖尿病的準確率相比之下較低,為92%左右。造成準確率不同的原因有多種,可能與訓練數據的量有關,可能與疾病本身的癥狀相關。此次研究糖尿病的病例最多,糖尿病590例,咳嗽205例,冠心病21例,高血壓61例,胃病143例。冠心病的數據量相對較少,但是準確率也很高,可能和疾病的本身特異性癥狀相關。高血壓準比例數量較多,但確率較低,可能和共有癥狀混淆有關。我們從臨床上了解到,高血壓和糖尿病常為并發疾病,糖尿病的患者同時也容易患高血壓[10],二者的癥狀常常共同出現,在1020例數據中,同時患有高血壓和糖尿病的達55例,所以糖尿病的診斷很可能會影響到高血壓的診斷,對于高血壓的診斷造成一定的誤診。但是此猜想還有待今后的研究進一步確認。
5 結論
此實驗基于模擬真實的就診環境,利用真實的電子臨床數據,結合matlab軟件,可以輔助預測了糖尿病,咳嗽,高血壓,冠心病的診斷。說明BP神經網絡不僅可以成功地模擬非線性關系,從大量的數據中學習,自主的進行判斷,從而幾乎完美的逼近真實的數據。而且此網絡模型成功地預測了多種疾病。但是,本次實驗還有諸多問題需要改進。
5.1 數據的量小,質量不高
雖然本次處理的數據達到了1565條,但是跟實際的臨床環境需要的大量數據還是有很大的差距。一個良好的神經網絡要學到幾十年中醫的臨床經驗,其需要的訓練量是百萬級別的。所以數據量還遠遠不夠。而且,本次實驗從1565條數據中清理后只剩下了1020條數據.其中不合格的數據量達到了34.8%,說明電子數據的質量還有待提高。
5.2 數據編碼得不斷優化
本次處理數據采用二進制編碼對癥狀編碼。每一個癥狀只有0,1兩種輸入選項。所以此方法造成BP神經網絡輸入的節點數龐大,而且并沒有涵蓋所有的癥狀。為此,以后的研究中可以通過分類編碼的方式。將所有的癥狀分類,并且在每一個類別中進行編碼。這樣既可以減少輸入節點的數量,也可以涵蓋所有的癥狀。最終減少了網絡的規模,也保證了數據的完整性。
5.3 診斷復雜度不夠
研究采用的數據涵蓋了五個疾病診斷。包括咳嗽,糖尿病,高血壓,冠心病,胃病。五種疾病在癥狀上的差異較大,正確率很高。以后要研究在癥狀相似的疾病間的診斷,增加復雜度。這樣才能真正做到模擬中醫思維,提高疾病的診斷率。
中醫診斷智能模型從不同的癥狀,共有癥狀之間去辨別,利用癥狀之間的聯系和差別從而診斷出不同的疾病,成功地模擬了臨床的診斷。此研究在matlab環境下實現了神經網絡的疾病診斷,未來人工智能應用是醫療行業發展的方向,期待將神經網絡模型應用于現實的醫院HIS系統,進一步完善神經網絡在醫療行業的應用。
參考文獻:
[1] 孟祥逢, 魯漢榕, 郭玲. 基于遺傳神經網絡的相似重復記錄檢測方法[J]. 計算機工程與設計, 2010,31(7):1550-1553.
[2] 覃華, 蘇一丹, 李陶深. 基于遺傳神經網絡的數據清洗方法[J]. 計算機工程與應用, 2004,40(3):45-46.
[3] 宋擒豹, 沈鈞毅. 神經網絡數據挖掘方法中的數據準備問題[J]. 計算機工程與應用, 2000,36(12):102-104.
[4] 賀昌政, 俞海. BP人工神經網絡主成分分析預測模型及應用[J]. 數量經濟技術經濟研究, 2001,18(9):104-106.
[5] 邱龍金, 賀昌政. 神經網絡穩定性的交叉驗證模型[J]. 計算機工程與應用, 2010,46(34):43-45.
[6] 陳朝陽, 行小帥, 李玥. 共軛梯度BP算法在Matlab 7.0中的實現[J]. 現代電子技術, 2009,32(18):125-127.
[7] 沈花玉, 王兆霞, 高成耀,等. BP神經網絡隱含層單元數的確定[J]. 天津理工大學學報, 2008,24(5):13-15.
[8] 張曉文,楊煜普,許曉鳴. 神經網絡傳遞函數的功能分析與仿真研究[J]. 計算機仿真, 2005,22(10):176-178.
[9] 陳楊,王茹,林輝. Matlab6.0版本中神經網絡工具箱訓練算法的使用與比較[J]. 電腦與信息技術, 2002(3):1-6.
[10] 孔德坤, 張曉斌. 糖尿病與高血壓[J]. 中華內分泌代謝雜志, 2005,21(5):68-70.
【通聯編輯:王力】