# HW2
## Question
### Dataset introduction
[NIH Chest X-ray Dataset](https://www.kaggle.com/datasets/nih-chest-xrays/data):此資料集由112,120的X-Ray照片(30,805位病患)所組成。而Label有15種,分別為(Atelectasis, Consolidation, Infiltration, Pneumothorax, Edema, Emphysema, Fibrosis, Effusion, Pneumonia, Pleural_thickening, Cardiomegaly, Nodule, Mass, Hernia, No finding)
在 Dataentry2017.csv 中有其他相關的資料訊息(ex:Follow-up #, Patient ID, Patient Age, Patient Gender,...)
### Task
1. 從圖片判斷是否有機率獲得Label中的疾病
2. 查看變更Loss function會產生什麼結果
3. 查看在不同的Learning rate下會產生什麼成果
## Process
### Data preprocessing
1. 將Dataentry2017.csv輸入且找到對應圖片的檔案位置加入path的欄位中,呈現結果如下圖

1. 分析各個label在資料集中所佔的比例(可以看到No Finding占比大量,取訓練集時要注意各個樣本的平衡)

1. 取樣利用不同的權重進行取樣(40000個,注意因為一張圖可能會有多種疾病的特徵)

1. 查看各個feature對於得病相關性如何(相關性低,不納入考慮)
1. 將資料的Label做處理使Model可以看得懂使Label變成一個list有14個element其中的index代表分別的疾病若為1則為其得病

1. 使用keras所提供的function將照片檔讀入,且利用function的功能稍微對照片的角度集角度進行些微的改變增加學習的多樣性。
### Train Model
使用MobileNet model進行操作,加速運作時間以及減輕運作的負擔(因為資料量大)

測試使用浮動的learning rate或固定的learning rate會對解果造成甚麼影響
### Loss function
使用hinge以及binary_crossentropy進行測試看看不同的loss function會對其造成甚麼影響。
## Result
1. Optimizor: Adam, Learning Rate: static, Loss fuction: binary_crossentropy


2. Optimizor: Adam, Learning Rate: decay rate, Loss fuction: binary_crossentropy


3. Optimizor: Adam, Learning Rate: decay rate, Loss fuction: hinge


## Experience
### Try and Error
* Loss function: 在測試過不同的Loss function後發現選用的函式是非常重要的,不只是效能的問題,甚至會向上述之hinge所產出的結果完全沒有預測的能力。
* 雖然Hinge適用於二分法,但其對於分類標籤的需求造成Hinge沒有預測能力(標籤大於1或小於-1為其確認的分類,但在我們的訓練中我們將其標籤設定為1,0因此會完全沒有預測能力)
試著將Label成1,-1後變有預測的能力了,但準確率不佳

* Learning Rate: 可以看到使用浮動(decay)之後,所產出的結果較為準確(比較不會造成疾病的誤診),可以看到預測的圖中,比較不會出現沒有這種病的時候測出有病的機率
### Future
* 使用Image Crop 鎖定相片中致病的部位,可以較為準確的判斷疾病,但因為沒有相關的醫學知識,所以無法往這方面進行操作。
* 準確率很難再進一步,觀看討論區之後才發現有些Label不正確的問題,這可能是造成準確率上不去的原因。