# 使用機器學習解決問題的五步驟：模型評估


<!--more-->

## 前言

模型訓練跑完之後，馬上會冒出一個很現實的問題：這個模型到底好不好用？回答這個問題，就是機器學習五步驟中第四步「模型評估」(Model Evaluation) 的工作。

本篇是機器學習入門觀念系列的第六篇。前一篇「[使用機器學習解決問題的五步驟：模型訓練](../model-training/)」談的是模型怎麼被訓練出來，以及常見的模型種類。這篇要接著談的是：訓練完之後，我們用什麼方式量化模型的表現、Overfitting 是怎麼一回事，以及分類任務與回歸任務各自會用到哪些評估指標。

{{< image src="machine-learning-process-1.jpg" alt="機器學習解決問題五步驟的流程示意圖，標示出目前所在的第四個步驟「模型評估」。" caption="用機器學習解決問題的第四步驟：模型評估" >}}

## 模型評估的概念

在前面「[建立資料集](../prepare-dataset/)」的步驟中，我們把手上的資料切成訓練資料與測試資料兩份。訓練模型時只餵訓練資料，評估模型時則刻意換上測試資料，也就是模型從頭到尾都沒看過的那一份。

為什麼一定要用沒看過的資料？拿考試來比喻最好懂。考前寫一大堆練習題，等於模型的「訓練」階段；考試當天則是「評估」階段，用一份沒寫過的考卷來檢驗練習的成果。考卷的題型通常跟練習題差不多，所以只要練習時真的把觀念搞懂，考試至少拿得到基本分。

反過來說，如果練習時只是死記硬背，把題目連同答案整組背下來，考試換個問法就傻眼了，畢竟出現一模一樣題目的機率不高。

模型也會犯同樣的毛病。訓練階段表現得很漂亮、評估階段卻慘不忍睹，這種狀況稱為**「過度擬合」(Overfitting)**：模型並沒有真的從訓練資料中學到解決問題的方法，只是把答案記了下來。用模型沒看過的測試資料來評估，正是為了把這種模型抓出來。

## 分類任務常用的指標

要說一個模型「好」或「不好」，得先有一個算得出分數的指標。延續考試的比喻：假設整張考卷都是是非題，老師改考卷時不是全對就是全錯，沒有對一半這種事，那整張考卷的分數就取決於總共「對了幾題」。

分類模型也是同樣的道理。以圖片分類為例，每一張圖片都有唯一正確的類別，把模型分類正確的張數除以圖片總數，得到的分數就是**「準確率」(Accuracy)**。100 張圖片分對 92 張，Accuracy 就是 92%。

除了 Accuracy 之外，**F1 Score** 也是分類任務常見的評估指標，之後的文章會再詳細介紹。

## 回歸任務常用的指標

在「[使用機器學習解決問題的五步驟：定義問題](../define-problem/)」一文中提過，常見的機器學習任務分成「分類」與「回歸」兩種。分類任務可以數對錯，但回歸模型輸出的是連續數值，沒有「對」或「錯」可以數，那要怎麼評估？

比較直觀的方式，是看預測值跟正確答案差了多少。例如回歸模型預測房價為 12300，而正確的房價是 15000，則這個模型在這一筆樣本上的 Error 為 | 12300 – 15000 | = 2700。

把每一筆樣本的 Error 取絕對值並加總，再除以總樣本數，就得到一個平均 Error，稱為 **Mean Absolute Error (MAE)**。也可以做一些變形，改成將每一筆樣本的 Error 取平方，再除以總樣本數，此時得到的 Error 稱為 **Mean Square Error (MSE)**。

## scikit-learn 中的評估指標

這些指標實務上不需要自己刻，scikit-learn 都有現成的實作可以直接呼叫。下面兩張圖分別列出 scikit-learn 在評估「回歸」與「分類」模型時經常用到的指標：

{{< image src="loss-function-for-regression.jpg" alt="scikit-learn 中回歸任務常用評估指標的一覽表。" caption="Regression 常用的 Loss Function [source: scikit-learn]" >}}

{{< image src="loss-function-for-classification.jpg" alt="scikit-learn 中分類任務常用評估指標的一覽表。" caption="Classification 常用的 Loss Function [source: scikit-learn]" >}}

完整的清單與各指標的說明，可以參考 [scikit-learn 官方文件的 Model evaluation 章節](https://scikit-learn.org/stable/modules/model_evaluation.html#the-scoring-parameter-defining-model-evaluation-rules)。

## 結論

{{< image src="machine-learning-process-2.jpg" alt="機器學習五步驟的流程示意圖，以箭頭標示評估結果不佳時回頭修正前面步驟的循環。" caption="模型評估的結果如果不佳，可能是前面的某個步驟有問題" >}}

這篇文章介紹了模型評估 (Model Evaluation) 的概念：用模型沒看過的測試資料來檢驗訓練成果，並依據任務類型選擇合適的指標，分類任務常用 Accuracy，回歸任務則常用 MAE 與 MSE。我們也談到 Overfitting，也就是模型把訓練資料背起來、導致評估階段表現不佳的情況。

評估結果不理想時，問題不一定出在評估這一步，往往是前面某個環節出了狀況：可能需要重新定義問題、重新建立資料集，或是重新訓練模型。在進入下一個步驟「使用模型」之前，這前四個步驟通常會反覆跑上好幾輪，直到得到一個品質夠好的模型為止。
</content>

