iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 26
0
Google Developers Machine Learning

透視Google Machine Learning的奧秘系列 第 26

[Day26] Python在建立機器學習模型與超參數的技巧

前一天我們介紹了機器學習的模型與優化器,今天來介紹Python在建立機器學習模型與超參數的技巧。

建立模型

在 Scikit-learn 中,建立一個機器學習的模型其實非常簡單

讀進資料,並檢查資料的 shape (有多少 samples (rows), 多少 features (columns),label 的型態是什麼?)
讀取資料的方法:

  • 使用 pandas 讀取 .csv 檔:pd.read_csv
  • 使用 numpy 讀取 .txt 檔:np.loadtxt
  • 使用 Scikit-learn 內建的資料集:sklearn.datasets.load_xxx
  • 檢查資料數量:data.shape (data should be np.array or dataframe)

使用train_test_split將資料切為訓練 (train) / 測試 (test),通常切分成訓練資料集0.7測試資料集0.3

train_test_split(data)

建立模型,將資料 fit 進模型開始訓練

clf = LinearRegression()
clf.fit(x_train, y_train)

將測試資料 (features) 放進訓練好的模型中,得到 prediction,與測試資料的 label (y_test) 做評估

clf.predict(x_test)
accuracy_score(y_test, y_pred)
f1_score(y_test, y_pred)

超參數調整方法

  • 窮舉法 (Grid Search):直接指定超參數的組合範圍,每一組參數都訓練完成,再根據驗證集 (validation) 的結果選擇最佳參數
  • 隨機搜尋 (Random Search):指定超參數的範圍,用均勻分布進行參數抽樣,用抽到的參數進行訓練,再根據驗證集的結果選擇最佳參數
  • 隨機搜尋通常都能獲得更佳的結果

正確的超參數調整步驟

若持續使用同一份驗證集 (validation) 來調參,可能讓模型的參數過於擬合該驗證集,正確的步驟是使用 Cross-validation 確保模型泛化性

  • 先將資料切分為訓練/測試集,測試集保留不使用
  • 將剛切分好的訓練集,再使用Cross-validation 切分 K 份訓練/驗證集
  • 用 grid/random search 的超參數進行訓練與評估
  • 選出最佳的參數,用該參數與全部訓練集建模
  • 最後使用測試集評估結果

超參數調整通常都是機器學習專案的最後步驟,因為這對於最終的結果影響不會太多,多半是近一步提升 3-5 % 的準確率,但是好的特徵工程與資料清理是能夠一口氣提升 10-20 %的準確率!因此超參數調整對最終結果影響沒有特徵工程來得大,建議一開始時多花費時間在特徵工程上面

今天先介紹到這,明天我們來介紹隨機森林與梯度提升機。

參考資料與圖片來源


上一篇
[Day25] 認識常見的機器學習模型與優化器
下一篇
[Day27] 認識損失函數
系列文
透視Google Machine Learning的奧秘30

尚未有邦友留言

立即登入留言