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

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
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!

- 来自作者
- 相关推荐