本文將介紹機器學習(Machine Learning,ML)模型建構的完整流程,其涵蓋資料處理、模型設計、模型訓練及模型評估等四大核心步驟。儘管在實務中,ML 模型建構會涉及到模型部署等進階議題,本系列文章將著重在資料處理到模型訓練與評估的流程與相關的核心概念,讓讀者能夠專注於建構模型本身。具體的程式碼實作與範例,將於本系列後續文章中詳細介紹。
模型開發循環
整個 ML 模型建構的主要流程分別為以下的四大步驟:
- 資料處理(Data Processing):主要對原始資料進行清洗、轉換與預處理,確保資料品質,例如處理缺值或異常值。
- 模型設計(Model Design):根據問題類型與資料特性,選擇或設計合適的模型架構,以捕捉資料中的模式與關係。
- 模型訓練(Model Training):運用學習演算法,透過訓練資料集來最佳化模型參數,使模型能從資料中學習。
- 模型評估(Model Evaluation):利用獨立的測試資料集(Test Dataset)評估模型的效能與泛化能力,判斷其是否能有效預測新資料。
為了確保模型效能,如果模型評估的結果未達預期,除了調整模型架構與超參數外,也要回溯到資料處理階段。在此階段,需要重新審視特徵的選擇、缺失值的處理、資料不平衡等潛在問題,或考慮擴充資料集。隨後,再次進行模型訓練與評估,以形成一個持續迭代優化的循環。
資料處理
資料處理的目標是讓資料乾淨和一致,並且適合用來訓練模型。這個步驟包括資料的收集、清理與轉換,例如,探索性資料分析(Exploratory Data Analysis,EDA)、填補缺漏值、刪除不必要的欄位,以及進行特徵擷取(Feature Extraction)。
常見的探索性資料分析項目如下:
分析項目 | 解決方案 | Pandas 工具範例 |
---|---|---|
資料預覽 | 快速了解欄位名稱、資料格式、內容概況 | df.head() / df.info() |
統計摘要 | 檢查數值範圍、平均、中位數、標準差等 | df.describe() |
缺值檢查 | 找出有缺值的欄位,決定補值或刪除 | df.isnull().sum() |
類別欄位分布 | 檢查類別型欄位的分布與不平衡情況 | df['col'].value_counts() |
欄位間相關性 | 確認數值欄位之間的線性關係 | df.corr() |
最後把清理後的資料切割成三個部分:
- 訓練資料集(Training Dataset):佔比 70%,用來訓練模型。
- 驗證資料集(Validation Dataset):佔比 15%,用來調整模型架構,例如微調超參數(Hyperparameters)和選擇適合的模型。
- 測試資料集(Test Dataset):佔比 15%,用來評估模型預測新資料的能力。
模型設計
模型設計的目標是建立一個適合資料與任務的模型架構。這個步驟重點是選擇適合的模型類型,如線性回歸(Linear Regression)、邏輯回歸(Logistic Regression)或類神經網路(Neural Network),並定義具體的模型架構、損失函數(Loss Function)和超參數。
模型設計最重要的考量是問題類型,因為這會決定我們該選擇哪一種模型,例如輸出數字要用線性迴歸(Linear Regression)、二元分類要用邏輯迴歸(Logistic Regression),分群則是需要無監督式演算法如 K-means。
損失函數是用來衡量模型預測結果與實際答案之間差距的函數。 學習演算法會根據這個差距調整模型參數,最終的損失值越小,就表示模型的預測越準確。例如線性迴歸模型會採用均方誤差(Mean Squared Error,MSE):
超參數是用來控制訓練過程的變數,主要用來設定模型要如何從資料中學習資料的模式,和模型內部學習出來的參數不同。常見的超參數如下:
- 學習率(Learning Rate):決定模型在每次迭代中更新模型參數的強度。此超參數對訓練收斂速度與穩定性有顯著影響。太大的話,模型可能會無法收斂;太小的話,模型需要更長的訓練次數才有可能收斂。
- 訓練次數(Epochs):指整個訓練資料集被模型完整處理的次數。
- 訓練資料的批次大小(Batch Size):指在單次訓練迭代中,模型處理的資料樣本數量。此設定會影響訓練的記憶體消耗與梯度更新的穩定性。
- 最佳化演算法(Optimizer):負責根據損失函數的梯度來更新模型參數,以最小化損失。常見的演算法包括隨機梯度下降(Stochastic Gradient Descent,SGD)等。
模型訓練
模型訓練的核心目標是讓模型從大量資料中學習潛在模式,並找到一組能最佳化模型性能的參數。此過程主要利用訓練資料集,透過最佳化演算法(如梯度下降,Gradient Descent)來逐步最小化模型預測與實際值之間的「損失」(由損失函數計算得出)。同時,驗證資料集則用於調整模型的超參數(Hyperparameter Tuning),以確保模型對新資料的泛化能力。
為了有效地最小化損失函數並找出最佳參數,我們需要理解參數變動對損失函數的影響。這就是「梯度」所扮演的角色。梯度本質上描述了當模型中特定參數發生微小變化時,損失函數值變化的方向與程度。
為了更直觀地理解梯度,我們可以將其想像成在濃霧籠罩的山上尋找最低點的過程。我們的目標是抵達山谷的最低點(這代表著損失函數的最小值)。我們無法看清全貌,但是手持的「指南針」—也就是梯度—能提供關鍵資訊:
- 方向:從你當前位置出發,哪個方向的坡度下降最陡峭。
- 坡度:量化坡度的陡峭程度。
因此,梯度就像一個導航工具,它精確地告訴你:如果你微調某個模型參數(如同在山上移動一小步),你的模型損失(如同你在山上的高度)將如何變化,以及朝哪個方向調整能最快地降低損失。
在模型訓練過程中,我們正是反覆地依循這個「指南針」所指引的「最陡峭下降方向」進行參數調整,每次邁出一小步,直到最終抵達損失函數的最低點,即找到最佳的模型參數。
模型評估
模型評估的目標是判斷模型是否具備良好的泛化能力,能否正確地預測新資料。這個步驟使用測試資料集來評估模型表現,常用指標如用來評估迴歸模型的均方根誤差(Root Mean Squared Error,RMSE)或 分類模型的 F1 Score 等。如果表現不夠好的話,則退回到資料處理階段調整,直到表現良好為止。
RMSE 就是對 MSE 開平方根,其計算公式為:
這使得 RMSE 的單位與原始資料的單位保持一致,大幅提升了其可解釋性與直觀性。舉例來說,在房價預測模型中,若 RMSE 為 50,000
,這意味著模型的預測值平均偏離實際房價約 50,000
元。
然而,判斷 RMSE 值是否「良好」並沒有一個絕對的標準。這需要根據實際的應用場景、資料特性和業務目標進行綜合判斷。舉例而言,若平均房價為 300,000
元,而模型 RMSE 為 50,000
,則平均誤差約為 17%。此誤差是否在可接受範圍內,將決定該模型是否可以被視為「良好」。
總結
- 模型開發的四大步驟: 機器學習模型建構主要包含資料處理、模型設計、模型訓練和模型評估,這是一個持續迭代優化的循環過程。
- 資料準備與分割: 資料處理階段旨在清洗、轉換原始資料,並將其切割為訓練資料集(70%)、驗證資料集(15%)和測試資料集(15%),以確保模型能有效學習、調整和評估。
- 模型優化的關鍵概念: 模型設計與訓練涉及選擇合適的模型架構、定義損失函數來衡量預測誤差,並透過調整超參數(如學習率、訓練次數)和利用梯度下降等最佳化演算法來最小化損失,從而找到最佳的模型參數。