為自己Coding
為自己Coding

YO~~ 剛跨入AI人工智慧領域的小小工程師, 熱愛自學, 熱愛分享, 下班後的我想為自己Coding, 積極撰寫教學文, 想將自學的程式知識分享給大家, 不斷追求進步的自己, 希望有一天能回饋社會,幫助需要幫助的人, 如果您有什麼很酷的想法,也覺得我還行,歡迎您找我合作~~ IG: https://www.instagram.com/coding_4_me/

Machine Learning 機器學習 - H2O.AI - AutoML (Automatic Machine Learning) 自動機器學習 - 不知道手邊數據該使用什麼模型來分析嗎? - 讓H2OAutoML來幫助您 - 超強大的 H2OAutoML 教學筆記


Github連結


1. 動機

嗨~~ 今天來跟大家介紹我最近學習的一個超強大的方法 - AutoML (Automatic Machine Learning),我們過去要建立機器學習模型時,總是要好好思考著這個數據到底需要用什麼演算法來分析好,而終於選則好演算法,也訓練好後,卻不知道它是不是最佳的解,但難道要我們一個一個演算法去嘗試看看嗎,看誰的效能最好嗎?


攝影師:Simon Berger,連結:Pexels




2. AutoML (Automatic Machine Learning) 自動機器學習

  • 簡單來說它幫助我們一次性的比較各類型演算法模型的表現,並根據評估指標進行排名,讓我們可以清楚地瞭解應該用什麼機器學習的演算法模型
  • 讓非專業的人士也能夠輕鬆進行機器學習實驗



3. H2OAutoML() 參數介紹

  • H2OAutoML() 函式

必須有的停止參數



補充: Stacked Ensembles 是將很多不同的演算法組合,造就最佳的模型表現,所以它在 H2O 產出的排行榜都是第一

可選的參數



  • Auto: 預設情況下,logloss用於分類(classification)問題,deviance用於迴歸(regression)問題
  • deviance(平均殘餘偏差)
  • logloss
  • MSE
  • RMSE
  • MAE
  • RMSLE
  • AUC: 位於 ROC 曲線底下的面積
  • AUCPR: 位於 Precision-Recall曲線底下的面積
  • lift_top_group
  • misclassification
  • mean_per_class_error




  • AUTO: 預設情況下,AUC會用二進制分類(binary classification),mean_per_class_error 用在多項式迴歸,而 deviance 用在迴歸(regression)
  • deviance: 平均殘餘偏差 (mean residual deviance)
  • logloss
  • MSE
  • RMSE
  • MAE
  • RMSLE
  • AUC: 位於 ROC 曲線底下的面積
  • AUCPR: Precision-Recall 曲線底下的面積
  • mean_per_class_error



  • DRF: 包含了隨機森林模型(Random Forest) 和極端隨機森林(XRT)模型
  • GLM
  • XGBoost (XGBoost GBM)
  • GBM (H2O GBM)
  • DeepLearning (Fully-connected multi-layer artificial neural network)
  • StackedEnsemble



4. H2OAutoML.train() 參數介紹

  • H2OAutoML.train()

必須有的參數



可選的參數


5. 實作

STEP 1: 導入 H2O 套件與啟動(初始化) H2O

## 導入H2O套件
import h2o
​
## 導入H2O中的AutoML套件
from h2o.automl import H2OAutoML
​
​
## 初始化H2O
h2o.init()

執行結果


STEP 2: 導入數據集,並把數據集中的自變量名稱裝入串列

  • winequality-white.csv - 這是一個關於用各種特徵來預測紅酒品質的數據集喔,我會放在 Githuhb 中,大家可以自行下載

網路上也可以找到下載連結 - https://archive.ics.uci.edu/ml/datasets/wine+quality

## 導入數據集
wine_data = h2o.import_file("data/winequality-white.csv")
​
## 定義我們的預測變量,也就是自變量x
predictors = wine_data.columns
​
## 將響應變量(目標值),也就是應變量y拿掉
predictors.remove('quality')

## 顯示數據集
wine_data

執行結果



STEP 3: 將數據集切割成訓練集與測試集

  • 將數據集拆成訓練集與測試集,並設置比例為0.7
## 將數據集拆成訓練集與測試集,並設置比例為0.7,隨機種子設123456
dataset_split = wine_data.split_frame(ratios = [0.7], seed = 123456)
​
## 顯示分割結果
print(dataset_split)
​
## 設定對應的數據集給訓練集與測試集,70%給訓練集,30%給測試集
wine_train = dataset_split[0]
wine_test = dataset_split[1]
​
## 顯示訓練集與測試集大小
print("Training Set: ", wine_train.shape)
print("Test Set: ", wine_test.shape)
​

執行結果



STEP 4: 導入 AutoML 套件與啟動它,來訓練各種模型

  • 這邊我設定最大的模型數量(max_models)為20,最大的執行時間(max_runtimes_secs)為200,因為這邊是迴歸問題,所以我設定 sort_metric = "deviance"
## 導入AutoML套件
from h2o.automl import H2OAutoML
​
## 設定H2OAutoML
aml = H2OAutoML(max_models = 20, max_runtime_secs = 200, seed = 1, sort_metric = "deviance")
​
## 啟動H2OAutoML來訓練模型
aml.train(x = predictors, y = 'quality', training_frame = wine_train, validation_frame = wine_test)
​

執行結果



STEP 5: 印出模型排行榜

  • 小筆記: 最佳的模型會被存為 aml.leader 喔
## 印出模型排行榜
lb = aml.leaderboard
print(lb)
​
## 印出所有行數
# lb.head(rows = lb.nrows)
​
## 顯示最佳模型資訊
print(aml.leader)
​
## 顯示最佳模型的詳細資訊
print(aml.leader.metalearner)

執行結果



結果: 排行第一名的模型為 model_id 是 StackedEnsemble_AllModles_AutoML的模型



STEP 6: 視覺化 - 最佳模型底下的各種演算法模型的標準化係數比較

## 取得最佳模型的model_id,也就是模型資料中的 Model Key
metalearner = h2o.get_model(aml.leader.metalearner()['name'])
​
## 視覺化: 最佳模型底下的各種演算法模型的標準化係數比較
metalearner.std_coef_plot()

執行結果



疑惑解答: 為什麼明明是抓取第一名的模型來視覺化標準化係數,裡面卻出現這麼多演算法模型的名稱,一個模型不是應該只有一種演算法?

重要筆記: 由於 Stacked Ensemble是組合了很多種的演算法來構建模型,所以它的分數也當然會比較好,下一步去印它裡面的標準化係數的大小比較圖時,才會出現那麼多的演算法名稱,一般的情況下,我們會選擇 Stacked Ensemble 以外的第一名演算法模型當成算法



STEP 7: 拿表現最佳的模型來預測測試集,和評估最佳模型性能表現

## 拿最佳模型預測測試集資料
preds = aml.leader.predict(wine_test)
print(preds)
​
## 評估最佳模型的性能表現
score = aml.leader.model_performance(wine_test)
print(score)
​
## 關閉H2O
h2o.shutdown()
​

執行結果





想要更詳細的 AutoML 用法,可以直接參考官網 - https://dos.h2o.ai/h2o/latest-stable/h2o-docs/automl.html?highlight=autml,但提醒大家一件事,因為我發現 H2O 會保留舊版的線上文檔,所以還是要確定一下版本喔,今天我們一起學習了好多東西,超級強大的 AutoML 會帶給我們非常多的幫助,感謝大家的閱讀喔



Reference

https://dos.h2o.ai/h2o/latest-stable/h2o-docs/automl.html?highlight=autml

https://kknews.cc/zh-tw/tech/qgvjzzr.html


CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…

发布评论