基于深度学习和机器学习的心电图智能分析参赛总结
文章目錄
- 前言
- 一、參賽經(jīng)過
- 二、深度學習算法
- 1.網(wǎng)絡結(jié)構(gòu)
- 2.數(shù)據(jù)處理
- 3.訓練和調(diào)參
- 三、機器學習算法
- 1.特征構(gòu)造
- 2.訓練
- 四、結(jié)果及討論
前言
??2019年夏天我參加了清華大學主辦的首屆中國心電智能大賽,獲得復賽第1,決賽第6;后來趁熱打鐵,又參加了天池平臺上的合肥高新杯心電人機智能大賽,獲得初賽第2,決賽第9。這兩個比賽已經(jīng)過去一年多時間了,現(xiàn)在經(jīng)過一定時間的沉淀,可能認識更加深刻一些,就想寫一寫總結(jié),把其中一些技巧和思考記錄下來。
??由于心電圖是一維數(shù)據(jù),既可以用一維卷積神經(jīng)網(wǎng)絡來做,也可以用傳統(tǒng)的機器學習方法人工提取特征做,我兩種方法都用了,發(fā)現(xiàn)各有所長。關于這兩次比賽,CSDN和知乎上已經(jīng)有幾篇介紹,兩種方法的都有,我的算法結(jié)構(gòu)、特征提取和他們大同小異,所以這方面就不多介紹,只介紹一下我的不同的地方,并重點對預測結(jié)果進行分析討論。
一、參賽經(jīng)過
??清華賽初賽僅需要分析是正常還是異常心電圖,復賽異常心電圖又細分為AF、FDAVB、RBBB、LAFB、PVC、PAC、ER、TWC供8類,決賽的時候又增加了其他類,復賽和決賽在京東云平臺進行,數(shù)據(jù)無法下載。為了這個比賽,我先啃了兩厚本心電圖醫(yī)學專著,當然這比賽必須用編程實現(xiàn),我是從參加這個比賽才首次接觸深度學習,得益于開源精神,群里有人開源,我在別人開源基礎上修改,也順利進入了復賽。嘗到站在別人肩膀上的幸福感后,復賽我下了很大的功夫查找相關文獻和開源代碼,經(jīng)過仔細吸收消化,合并了一套自己的代碼,并且又花了大量時間來分析數(shù)據(jù),調(diào)參優(yōu)化,復賽竟然拿下了第一。決賽開始后,一方面可能高手開始發(fā)力;另一方面,主辦方臨時修改游戲規(guī)則,改成48小時黑客松,就是現(xiàn)場48小時連續(xù)編程跑結(jié)果,然后緊接著立即開始答辯,我這年齡根本沒法和年輕人比,想當年我做數(shù)學建模時也熬過72小時,但現(xiàn)在實在是熬不起,到后面頭腦已經(jīng)完全暈了,僅拿到了第6名。
??天池賽難度比清華賽更高,初賽是54類異常,復賽是有33類異常,幾乎把各種心電病癥都囊括了,初賽和復賽的訓練數(shù)據(jù)總共有4萬多條。數(shù)據(jù)在天池網(wǎng)站可下載,但標注質(zhì)量不是很高。畢竟天池的高手更多,我初賽拿到第2,復賽只拿到第9.
兩個比賽的鏈接:清華賽,天池賽
二、深度學習算法
1.網(wǎng)絡結(jié)構(gòu)
??清華賽提供的是12導聯(lián)心電圖數(shù)據(jù),天池賽提供8導聯(lián),但是另外4個導聯(lián)可以推導出來,所以都可以認為是12導聯(lián)數(shù)據(jù)。可以使用1維卷積神經(jīng)網(wǎng)絡來做,至于網(wǎng)絡結(jié)構(gòu),我發(fā)現(xiàn)只要主流組件用上,其實各種結(jié)構(gòu)并沒有很大差別,不需要迷信某種結(jié)構(gòu)有神奇的效果,無非是調(diào)參見高低。我在清華賽中使用了15層較深的網(wǎng)絡,在合肥賽中用了非常寬的網(wǎng)絡,都可以做到不錯的效果,這兩個賽的網(wǎng)絡結(jié)構(gòu)在CSDN和知乎上也有好幾篇分享,我就不再展開。
2.數(shù)據(jù)處理
??因為深度學習算法是數(shù)據(jù)驅(qū)動的,數(shù)據(jù)處理很重要。樣本數(shù)據(jù)長度不一,數(shù)據(jù)對齊是為了把不同長度的數(shù)據(jù)通過截斷或補零對齊,對齊后的長度太短會浪費一些信息,太長則增加計算量。我使用了15000點長度,對應時長是30秒。
??數(shù)據(jù)增強更重要一些。數(shù)據(jù)增強要保證兩點,1是保證標簽是正確的,2是新增的樣本要和已有樣本盡量有較大的差異性。我使用增強方法是:選擇一個已有訓練樣本,在其中隨機選擇一定時長的一段(但不少于5000),然后再乘以隨機數(shù)進行幅值伸縮。這樣可以保證標簽不變且數(shù)據(jù)和原樣本不同。
圖1 數(shù)據(jù)增強方法
??
圖2 數(shù)據(jù)對齊方法,超過15000的截斷,不足15000的統(tǒng)一左側(cè)補零補足15000
3.訓練和調(diào)參
??調(diào)參非常重要,所有的操作措施,包括網(wǎng)絡結(jié)構(gòu)、數(shù)據(jù)增強等等,都可以認為是模型的一種超參,都需要用本地驗證來確定這種操作是否有效,還是那句老話:實踐是檢驗真理的唯一標準。
調(diào)參的口訣:快、準、狠。
快:一定要嘗試更多種可能才能發(fā)現(xiàn)更好的參數(shù),時間總是有限的,如果我們能夠把每次驗證的速度加快,我們就可以驗證更多的參數(shù)可能性,就能夠找到更好的參數(shù)。那怎么加快呢?這可是一套大學問,除了硬件、浮點精度等常規(guī)操作外,我通過這次比賽也總結(jié)了一套數(shù)據(jù)使用技巧。概要來說就是先確定多少訓練樣本是剛好夠用的,多大的采樣頻率/分辨率是剛好夠用的,在調(diào)參之初先通過幾次試驗確定這些數(shù)據(jù),我們就不必使用全量訓練樣本,而是使用一個小比例但又不影像結(jié)果判斷的小訓練集來做為基準進行調(diào)參,這樣可以大大提高速度。
準:只有快不行,必須保證驗證是準確有效的。
狠:就是調(diào)參時要大膽嘗試各種可能,不要迷信書本上的理論,什么方法都可以試一試,一切以實踐為準。
三、機器學習算法
在清華賽中使用機器學習算法各類的效果都不如深度學習,但在天池賽中由于類別特別多,有些類別的分類精度機器學習算法比深度學習還高。所以天池賽可以使用兩種方法最后再合并(或融合)。
1.特征構(gòu)造
深度學習網(wǎng)絡會自帶濾波功能,所以可以實現(xiàn)端到端的操作,但機器學習通常要先濾波操作一下。我使用小波濾波。然后需要提取R峰,可以使用biosppy庫實現(xiàn)。得到所有R峰位置之后,可以用統(tǒng)計法得到以下幾類特征。(1)心率類,RR間期的各種統(tǒng)計指標。(2)波形類,根據(jù)R峰劃分每個心動周期,統(tǒng)計每個周期內(nèi)的波形特征,包括P波、QRS、T波的長度、幅值等等。總之盡量根據(jù)心電圖診斷的人類醫(yī)學經(jīng)驗來構(gòu)造特征,但很多特征并不易構(gòu)造,只能盡量逼近。
2.訓練
我使用lightgbm建立模型,常規(guī)技術都用上,包括特征重要性排序及篩選、訓練參數(shù)調(diào)參、f1指標跟蹤早停,5折交叉融合等。
四、結(jié)果及討論
因為我是外行跨界做這個的,我做這個題的初衷之一是想知道AI到底有多神奇,它能在多大程度上替代人類,能夠有多大的實用價值,我想這也是很多像我這樣的外行面對這幾年AI大火的形勢下想知道的問題。那么通過心電圖智能分析賽這么個點深入刺探之后,我覺得有了一定的認識,下面總結(jié)一下。
1,AI的水平高于普通人。心電圖還是很難的,我看了兩本心電圖醫(yī)學書籍之后,只能判斷一些非常簡單的癥狀,我遠不如我的程序準確度高。下圖例1~例4是清華賽復賽數(shù)據(jù)中隨機抽取的一些AI診斷結(jié)果。
例1↓
例2↓
例3↓
例4↓
2,AI水平不如專科醫(yī)生。我專門找了我一位同學,北京某大醫(yī)院心內(nèi)科專家,我對他進行了盲測,結(jié)果發(fā)現(xiàn)他和AI的結(jié)果大多數(shù)是一致的,但不一致的基本都是AI錯。我們又進一步把不一致的情況分為幾種:一是癥狀比較模棱兩可,AI的結(jié)論和他的結(jié)論都有一定道理,如下圖例5;二是訓練集中數(shù)據(jù)不足導致AI沒有學到某些情況,如下圖例6;三是訓練集標注錯誤導致AI學到了假知識,如下圖例7;四是有一些圖的病癥確實比較復雜,AI沒有掌握,如下圖例8。我同學也承認AI水平還是讓他吃驚的,如果能夠補充更多數(shù)據(jù),并修正標注錯誤,準確度還可進一步提高。
例5↓
例6↓
例7↓
例8↓
??總的來說,訓練樣本都是由人類專家標注的,AI又基于這些訓練樣本進行學習,所以它不可能超過人類專家,答辯會時一位醫(yī)學專家也提到:醫(yī)生能看出來的AI不一定能看出來,專家看不出來的AI肯定看不出來,我要這AI有何用呢?另外,由于深度學習的不可解釋性,它所提取的特征難以被看懂并修改,所以即使我們通過錯例分析知道它犯了哪些錯誤,我們也很難糾正它。結(jié)論是目前AI還不能夠達到替代專科醫(yī)生的水平,但它可以用在非心電科醫(yī)生輔助診斷,病人自主預診斷,或疾病大規(guī)模篩查中,用以解決我國專科醫(yī)生不足的痛點。
總結(jié)
以上是生活随笔為你收集整理的基于深度学习和机器学习的心电图智能分析参赛总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 之江杯2020零样本目标分割题参赛总结
- 下一篇: 用户偏好类结构化数据分析题参赛总结