# 使用機器學習解決問題的五步驟：定義問題


<!--more-->

## 前言

在前幾篇文章中，我們談過「什麼是機器學習」，也談過模型、模型訓練與模型推論之間的關係，知道機器學習能處理傳統程式寫死規則處理不了的問題。但知道機器學習能做什麼，跟真的把一個問題交給機器學習來解，中間還隔了一段距離。

這篇文章要補上的就是這段距離：用機器學習解決問題時，實際上會走過哪五個步驟，以及第一步「定義問題」到底在做什麼。不管你面對的是房價預測還是圖片分類，模型換成什麼、訓練方式換成什麼，這五個步驟大致都跑不掉。心裡先有這張流程圖，動手做的時候比較不會迷失方向。

## 機器學習五步驟

{{< image src="machine-learning-in-five-steps.jpg" alt="機器學習解決問題流程的五個步驟循環示意圖。" caption="機器學習解決問題的五個步驟" >}}

用機器學習解決問題，通常會走過這五步：

1. **定義問題 (Define Problem)**
2. **建立資料集 (Build Dataset)**
3. **訓練模型 (Train Model)**
4. **評估模型 (Evaluate Model)**
5. **使用模型 (Use Model)**

實務上這不是走完一輪就結束的直線流程，而是反覆繞圈：模型評估的結果不如預期，往往得回頭補資料，甚至回頭重新定義問題。接下來的幾篇文章會逐一深入這五個步驟，今天先從第一步開始。

## 步驟 1：定義問題

{{< image src="define-problem-in-machine-learning.jpg" alt="機器學習流程第一個步驟「定義問題」的示意圖。" caption="機器學習解決問題的第一步：定義問題" >}}

「定義問題」就是字面上的意思：先把你想解決的到底是什麼問題講清楚。這一步有兩個目標要盡量達成。

### 定義更具體的問題

假設我們正在做房地產投資，希望能有好的報酬。一開始腦中冒出來的問題可能是：「怎樣才能在房地產投資中獲利？」

這個問題太廣了。廣告投放、裝潢翻新、看準地段、挑對時機，每一條路都能算是答案，反而讓人不知道從哪裡下手。所以要把問題縮小。想在房地產投資中獲利，說白了就是希望以低於房屋實際價值的價格買進，那麼問題就可以收斂成：「如何預測房屋的價值？」

問題定義得越具體，就越清楚該用哪一種機器學習演算法來解它。這也是為什麼「定義問題」值得單獨拉成一個步驟：這一步偷懶，後面挑模型、準備資料都會跟著模糊掉。

### 辨識問題屬於機器學習中的什麼任務

在「什麼是機器學習」那篇文章中提過，機器學習的演算法可以分成三類：監督式學習 (Supervised Learning)、非監督式學習 (Unsupervised Learning) 與強化學習 (Reinforcement Learning)。每一種學習方法都有它擅長的任務類型，所以定義完問題之後，下一件事就是判斷這個問題屬於哪一類任務。這篇文章聚焦在監督式學習與非監督式學習各自適合處理的任務。

## 監督式 vs 非監督式

{{< image src="supervised-learning-vs-unsupervised-learning.jpg" alt="監督式學習與非監督式學習的差異對照示意圖。" caption="機器學習中監督式學習與非監督式學習的差異" >}}

監督式與非監督式學習的關鍵差異，在於有沒有一個「監督者」站在電腦旁邊看它學習。當電腦答錯時，監督者會告訴它正確答案是什麼。

換成資料的語言來說，就是有沒有替資料準備**標籤 (Label)**。所謂標籤，就是這筆資料對應到的正確答案。每一筆資料都有對應標籤的，是監督式學習；沒有標籤、要讓模型自己從資料中找規律的，就是非監督式學習。

## 監督式學習的任務

回到「房價預測」的例子。我們希望把「坪數」輸入模型，模型輸出對應的「價格」。訓練資料中會包含非常多的樣本 (Sample)，每一個樣本代表「一間房子」，記錄了這間房子的**坪數**與**實際價格**。

**樣本：(坪數、實際價格)**

監督式學習的訓練過程中，針對每一個樣本會做四件事：

- 把坪數輸入模型
- 模型輸出一個預測價格
- 比較模型輸出的價格與實際價格
- 調整模型的參數，讓輸出更接近實際價格

樣本中的實際價格就是標籤，代表這個樣本的正確答案。而因為這個標籤是「數值型」的，這種由模型預測一個數值的任務又稱為**「回歸」(Regression)**。

標籤當然也可以是「非數值型」的，例如「類別型」標籤。想像我們要訓練一個模型，輸入一個人的基本資訊之後，模型輸出這個人的「性別」。此時每一個樣本代表一個人，記錄了這個人的資訊，例如身高、體重、年齡、年級、性別。

**樣本：(身高、體重、年齡、年級、性別)**

在這個情境下，「性別」就是每個樣本的標籤，也就是正確答案，可能是「男生」、「女生」或「其餘」。這種標籤屬於類別型，而由模型預測一個類別的任務又稱為**「分類」(Classification)**。

## 非監督式學習的任務

非監督式學習的資料裡沒有標籤，所以模型要做的事情也不一樣。一樣拿房子當例子：這次我們不是要模型預測每一間房子的實際價格，而是希望模型把一大堆房子「分群」。

手上的每個樣本一樣代表一間房子，記錄了房子的許多資訊，例如坪數、屋齡、房間數量、浴室數量、目前售價等等。

**樣本：(坪數、屋齡、房間數量、浴室數量、目前售價)**

我們希望模型把這些樣本分群，也就是替每個樣本指定一個群集。模型在分群的過程中，必須自己去理解樣本與樣本之間的關係，把相似度較高的樣本歸為同一群。整個過程中我們沒有提供任何標籤，最後分出幾群、每群長什麼樣子，都是模型自己從資料的結構中學出來的。這也意味著群集的「意義」得由人來解讀，例如某一群可能剛好都是市中心的小坪數老屋。

**「分群」(Clustering)** 是非監督式學習中最基本、也最常見的任務。

## 任務類型總覽

{{< image src="task-in-machine-learning.jpg" alt="機器學習任務依監督式與非監督式分類的示意圖。" caption="機器學習中任務的簡單分類" >}}

把前面三種任務放在一起對照，差別會更清楚：

| 任務 | 屬於 | 標籤型態 | 模型輸出 | 例子 |
|---|---|---|---|---|
| 回歸 (Regression) | 監督式學習 | 數值型 | 一個數值 | 由坪數預測房價 |
| 分類 (Classification) | 監督式學習 | 類別型 | 一個類別 | 由基本資訊預測性別 |
| 分群 (Clustering) | 非監督式學習 | 無標籤 | 樣本所屬的群集 | 把房子分成幾種類型 |

定義問題時真正要回答的，其實就是這張表最左邊那一欄：你手上的問題，最後要模型吐出一個數值、一個類別，還是一種分群結果？

## 結論

這篇文章介紹了用機器學習解決問題必經的五個步驟，並深入談了第一步「定義問題」：把問題縮得夠具體，再辨識它屬於機器學習中的哪一種任務。我們也看到監督式學習底下有「回歸」與「分類」兩種任務，非監督式學習則有「分群」。

下一篇文章會接著介紹流程中的第二個步驟：「[建立資料集](../prepare-dataset/)」。

