訓練醫學模型的相關挑戰彙總

訓練醫學模型的相關挑戰彙總

在醫學數據集的訓練算法期間面臨的許多問題中,如下三個是最多見:算法

  1. 類別不均衡
  2. 多任務
  3. 數據集大小
    對於這些問題,本文將分享一些解決的方法。
    類別不均衡挑戰
    在現實世界中,咱們看到的健康人遠遠比患病的人要多得多,這也反映了在醫學數據集中,健康和患病類別的樣本數量是不平均。在醫療數據集和信用卡欺詐數據集中,你可能會看到正樣本的數量是負樣本的一百倍。
    因此模型訓練的結果每每被誤認爲是表現出色的,然而實際上卻並不是如此。若是使用accuracy_score準確度這樣的簡單度量,就會發生這種狀況。準確度對於這類數據集來講不是一個很好的度量標準,由於標籤嚴重傾斜,因此一個只輸出正常標籤的神經網絡的準確率甚至還能略高於90%。
    解決方案:
    終上所述,咱們能夠定義更有用的指標,例如F1度量或"精確度/召回率"。精確度定義爲"真正例個數/(真正例個數+假正例個數)",在假正例不少的狀況下,這是一個很好的度量;另外一方面,召回率定義爲"真正例個數/(真正例個數+假反例個數)",在假反例本不少的狀況下,這是一個很好的度量。醫療領域的大多數模型是這種狀況,可是咱們也常常須要同時考慮假正例個數和假反例個數,這就是F1度量的功能,它在精確度(Precision)和召回率(Recall)之間取得均衡,由公式2 ((PrecisionRecall) / (Precision+Recall))給出。
    處理類不均衡的另外一種流行技術是"重採樣",這是從多數類(樣本過多的那一類)中刪除樣本(稱爲欠採樣)或在少數類中添加樣本(稱爲過採樣)來在這兩個類之間取得均衡的行爲。儘管它們能夠經過使用複雜的重採樣技術來解決,但它們具備本身的缺點,如信息丟失和過擬合。
    多任務挑戰
    在現實世界中,一般僅預測健康或患病是不夠的,咱們常常須要將醫療數據分爲多個類別或標籤,例如,僅從心律中檢測出心律失常並無什麼市場,對患者進行分析判斷獲得哪一種心律失常更有價值,例如病狀多是房顫,室上性心動過速或任何其餘類型。
    從理論上講,能夠爲須要分類的每一個標籤訓練單獨的神經網絡模型,可是這對於寫代碼來講是很是不切實際的,若是咱們能夠將全部這些分類模型組合到一個返回多個預測的單個深度神經網絡中,就比較有價值。
    解決方案:
    咱們可使用一種稱爲"多類別分類"或"多標籤分類"的方法來應對這一挑戰。這兩種方法略有不一樣,在多類別中,數據樣本的類別是互斥的,而在多標籤中,數據樣本能夠屬於多個類別。在醫學領域,咱們一般使用多標籤分類,由於若是患者被診斷爲肺不張(肺的膨脹不全),則並不意味着他/她就不會有心臟肥大。咱們將模型最後一層的分數再傳遞給Sigmoid激活函數,這會把最後一層的每一個分數轉換爲0到1之間的值,而與其餘分數無關。
    對於多標籤分類,咱們選擇的損失函數變爲binary_crossentropy,其中因爲咱們使用了Sigmoid激活函數,所以每一個標籤都被視爲獨立的伯努利分佈。在須要多類的狀況下,能夠用損失函數設置爲categorical_crossentropy的softmax激活函數來替換Sigmoid激活函數。
    數據集大小挑戰
    另一個處理醫學數據集的挑戰爲數據集的大小。大型訓練數據集除了具備良好的體系結構外,還對模型的性能起着重要的做用,但可用於疾病的患者數據數量每每不夠。低數據集大小會致使高誤差和高方差,這些緣由致使模型的推廣和優化困難。
    解決方案:
    爲了解決模型優化的困難,咱們可使用一種稱爲"遷移學習"的方法,其中咱們使用從相關網絡較低層中學習來訓練較高層,而無需它們從頭開始學習。因爲先前的訓練,較低的圖層能夠用做良好的特徵提取器,所以咱們能夠根據數據集對其進行微調,該技術優化速度更快,並減小了訓練新模型所需的數據量。
    爲了解決模型泛化的困難,咱們可使用一種稱爲"數據加強"的技術,將數據提供給模型以前,能夠對樣本進行一些隨機轉換,這樣咱們可使模型對於大小或亮度等微小變化保持不變。諸如水平或垂直翻轉圖像,更改圖像的亮度或對比度,將圖像旋轉或縮放到必定程度之類的作法都有助於數據擴充。此技術在小型數據集中避免過分擬合很是有用。
    參考連接:https://medium.com/aiformedicine/challenges-of-training-models-on-medical-data-7ecc03db2d65
相關文章
相關標籤/搜索