---
# System prepended metadata

title: Execution description
tags: [機器學習作業]

---

# Execution description
本次實驗會用到 libsvm 套件，請在執行程式前安裝
```
pip install -U libsvm-official
```
此外，本程式還使用到了常見的 `numpy`, `sklearn`, `scipy.io` 等等套件，需要事先進行安裝

環境安裝完畢後，直接執行附檔的 `SVM.py` 即可

# Experimental results
## min-max scaling
![image](https://hackmd.io/_uploads/ByukxjSUC.png)


## standard scaling
![image](https://hackmd.io/_uploads/BkSWxsHIR.png)


## robust scaling
![image](https://hackmd.io/_uploads/ryRzlsrLR.png)


## 不用scaling
![image](https://hackmd.io/_uploads/Hy-Ckjr8C.png)


## 實驗結果說明
觀察實驗結果發現，若以 testing accuracy 作為衡量模型表現的標準，則三種 scaling 的方法及不 scaling 的表現分別為

min-max scaling > standard scaling > robust scaling > 不用 scaling

需要特別留意的是，使用 robust scaling 時，training accuracy 為 100，但 testing accuracy 只有 54.32098765432099，可能發生 overfitting 的現象

# Conclusion
* 使用不同的 (C ,γ) 參數組合，會對結果產生一些影響，每種 scaling 方法最適合的參數組合也可能不一樣，建議使用 grid search 的方式，把每個組合都試過一遍，以找出最好的那一組參數
* 使用不同 scaling 的方法，會對結果產生極大的影響，甚至在某些情況下會導致 overfitting 的發生；以本次實驗的結果來說，最推薦使用 min-max scaling，其次是 standard scaling

# Discussion
這次實驗讓我能有機會親自使用 svm 進行手寫數字分類，其中遇到的最大困難是對 libsvm 這個套件不熟悉，不好找關於這個套件在 python 下的語法以及使用方式，不過最後還是成功克服。本次實驗最令我感到意外的便是，使用不同 scaling 的方法，對於結果會有巨大的影響，這跟我最初想的剛好相反，也讓我多累積了一些經驗，下次模型訓練的不好時，也許可以試試不同的 scaling 方法，說不定會有奇效。