媽祖托夢我說做甲狀腺資料分析(老師一定會給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的運作流程如下:
- 先設定好要分為多少(k)群。
- 接著在feature space(x軸身高和y軸體重組出來的2維空間,假設資料是d維,則會組出d維空間)隨機給k個群心。
- 每個資料都會與所有的k個群心計算歐式距離。
- 將每筆資料分類判給距離最近的那個群心。
- 每個群心內都會有被分類過來的資料,用這些資料更新一次新的群心。
- 一直重複3–5,直到所有群心不再有太大的變動(收斂)。
Getting Start
詳細做法
圖像化分群結果:
結論
如上圖,此次的分析並未相當成功,因為資料並未明顯的呈現分群結果,由於資料屬性過多,需做詳細的資料降維處理。
可以參考小妹今年iT鐵人邦對Scikit learn的基礎教學: https://ithelp.ithome.com.tw/users/20107244/ironman/1726