利用K-means的甲狀腺病情預測分析

queena Wu
4 min readApr 19, 2019

--

媽祖托夢我說做甲狀腺資料分析(老師一定會給100….www)

不久前我到梧棲童綜合醫院參與關於影像處理的教育課程,得知了網路上有 ICD -10 國際疾病分類的資料集可以使用,當時童綜合的資訊長有提及:可使用 KNN 的方式,因此我希望也可以尋找 ICD 中的資料,並採用不同的方式執行。

(業一下童綜合的研習課程www)

但實際上網爬文後,並沒有找到可開放給一般民眾使用 ICD 資料,因此我轉往 UCI 尋找類似的疾病dataset。

在 UCI 首頁的 Most Popular Data Sets 中發現心臟疾病居於榜內,因此我想另找較少人使用過的資料集,為醫療做更多貢獻,最後找到了「Thyroid Disease 甲狀腺疾病」資料集。

資料集原始樣貌

由於原始資料集過於雜亂(ex.包含缺失值、年齡>200歲...等),因此做了資料前處理,由於資料集數量較大,因此將具有缺失值的資料的該筆資料刪除,並不會對資料分析有太大的影響,原為F/T的資料轉換為0/1,其下圖為我將原始資料集又重新做了一次整理,以符合資料分群需要的規格。

使用的資料特徵:

資料集的特徵說明

根據原始提供的資料集可以知道,該資料集將甲狀腺病情結果分為六大類:

  • -:沒有任何甲狀腺病情徵兆
  • A:甲狀腺亢進
  • B:T3有毒
  • C:有毒甲狀腺腫
  • D:中毒
  • E:甲狀腺功能退減

在整理完成乾淨的資料後,我擷取了測試資料中所有的欄位,建立分群模型(K Means),為的是預測受試者的甲狀腺病情歸類於6個分類中的哪一類

應用模組:K-means介紹

由於甲狀腺疾病這份資料集必須使用非監督式學習,所以我採用了 K-means 方法,且可以確定的是k的值是所有甲狀腺病情的分類總數,故k為6。

K-means 集群分析是一種聚類 (Cluster) 的方式,給予一組資料,將之分為k類 (k由使用者設定) 就是「K means」的用處。

K-means的運作流程如下:

  1. 先設定好要分為多少(k)群。
  2. 接著在feature space(x軸身高和y軸體重組出來的2維空間,假設資料是d維,則會組出d維空間)隨機給k個群心。
  3. 每個資料都會與所有的k個群心計算歐式距離。
  4. 將每筆資料分類判給距離最近的那個群心。
  5. 每個群心內都會有被分類過來的資料,用這些資料更新一次新的群心。
  6. 一直重複3–5,直到所有群心不再有太大的變動(收斂)。

Getting Start

詳細做法

圖像化分群結果:

結論

如上圖,此次的分析並未相當成功,因為資料並未明顯的呈現分群結果,由於資料屬性過多,需做詳細的資料降維處理。

可以參考小妹今年iT鐵人邦對Scikit learn的基礎教學: https://ithelp.ithome.com.tw/users/20107244/ironman/1726

--

--