HyperGBM介紹
本文章主要是對autoML開源框架HyperGBM的一個介紹,
文章目錄
- HyperGBM介紹
- 一、關于HyperGBM
- 二、功能特性總覽
- 二、如何安裝HyperGBM
- 三、HyperGBM入門樣例
- 1. 準備資料集
- 2. 創建實驗并進行訓練
- 3. 保存模型
- 4. 評價模型
- 四、HyperGBM基礎應用
- 五、HyperGBM高級應用
- 六、HyperGBM處理樣本不均衡問題
- 1. 利用ClassWeight建模
- 2. 欠采樣或過采樣
- 七、HyperGBM自定義搜索空間
- 八、HyperGBM自定義建模演算法
一、關于HyperGBM
HyperGBM是一款全Pipeline自動機器學習工具,可以端到端的完整覆寫從資料清洗、預處理、特征加工和篩選以及模型選擇和超引數優化的全程序,是一個真正的結構化資料AutoML工具包,
大部分的自動機器學習工具主要解決的是演算法的超引數優化問題,而HyperGBM是將從資料清洗到演算法優化整個的程序放入同一個搜索空間中統一優化,這種端到端的優化程序更接近于SDP(Sequential Decision Process)場景,因此HyperGBM采用了強化學習、蒙特卡洛樹搜索等演算法并且結合一個meta-leaner來更加高效的解決全Pipeline優化的問題,并且取得了非常出色的效果,
正如名字中的含義,HyperGBM中的機器學習演算法使用了目前最流行的幾種GBM演算法(更準確的說是梯度提升樹模型),目前包括XGBoost、LightGBM、CatBoost和HistGridientBoosting,同時,HyperGBM也引入了Hypernets的CompeteExperiment在資料清洗、特征工程、模型融合等環節的很多高級特性,
HyperGBM中的優化演算法和搜索空間表示技術以及CompeteExperiment由 hypernets專案提供支撐,
二、功能特性總覽
HyperGBM有3種運行模式,分別為:
- 單機模式:在一臺服務器上運行,使用Pandas和Numpy資料結構
- 單機分布式:在一臺服務器上運行,使用Dask資料結構,在運行HyperGBM之前需要創建運行在單機上的Dask集群
- 多機分布式:在多臺服務器上運行,使用Dask資料結構,在運行HyperGBM之前需要創建能管理多臺服務器資源的Dask集群
不同運行模式的功能特性支持稍有差異,HyperGBM的功能特性清單及各種的運行模式的支持情況如下表:


二、如何安裝HyperGBM
可通過pip和docker兩種方式進行安裝,具體可參照如何安裝HyperGBM
三、HyperGBM入門樣例
HyperGBM基于Python開發,推薦利用 make_experiment 創建實驗并進行訓練得到模型,
通過 make_experiment 訓練模型的基本步驟:
- 準備資料集(pandas 或 dask DataFrame)
- 通過工具 make_experiment 創建實驗
- 執行實驗 .run() 方法進行訓練得到模型
- 利用模型進行資料預測或Python工具 pickle 存盤模型
1. 準備資料集
可以根據實際業務情況通過pandas或dask加載資料,得到用于模型訓練的DataFrame,
以sklearn內置資料集 breast_cancer 為例,可通過如下處理得到資料集:
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
X,y = datasets.load_breast_cancer(as_frame=True,return_X_y=True)
X_train,X_test,y_train,y_test = train_test_split(X,y,train_size=0.7,random_state=335)
train_data = pd.concat([X_train,y_train],axis=1)
其中 train_data 用于模型訓練(包括目標列),X_test 和 y_test 用于模型評價,
2. 創建實驗并進行訓練
假設希望最終模型有比較好的precision,為前面準備的訓練資料集創建實驗并開始訓練模型如下:
from hypergbm import make_experiment
experiment = make_experiment(train_data, target='target', reward_metric='precision')
estimator = experiment.run()
其中 estimator 就是訓練所得到的模型,
3. 保存模型
推薦利用 pickle 存盤HyperGBM模型,如下:
import pickle
with open('model.pkl','wb') as f:
pickle.dump(estimator, f)
4. 評價模型
可利用sklearn提供的工具進行模型評價,如下:
from sklearn.metrics import classification_report
y_pred=estimator.predict(X_test)
print(classification_report(y_test, y_pred, digits=5))
out[]:
precision recall f1-score support
0 0.96429 0.93103 0.94737 58
1 0.96522 0.98230 0.97368 113
accuracy 0.96491 171
macro avg 0.96475 0.95667 0.96053 171
weighted avg 0.96490 0.96491 0.96476 171
四、HyperGBM基礎應用
HyperGBM的基礎特性主要包含以下方面,具體請參看HyperGBM基礎應用
- 以預設配置創建并運行實驗
- 設定最大搜索次數(max_trials)
- 交叉驗證
- 指定驗證資料集(eval_data)
- 指定模型的評價指標
- 設定搜索次數和早停(Early Stopping)策略
- 指定搜索演算法(Searcher)
- 模型融合
- 調整日志級別
五、HyperGBM高級應用
HyperGBM的make_experiment 所創建的是 Hypernets 的 CompeteExeriment 實體,CompeteExeriment 具備很多建模的高級特性,具體請參考HyperGBM高級應用

主要支持的高級特性如下:
- 資料清洗
- 特征衍生
- 共線性檢測
- 漂移檢測
- 特征篩選
- 降采樣預搜索
- 二階段特征篩選
- 偽標簽
六、HyperGBM處理樣本不均衡問題
樣本不均衡也是業務建模程序中的一個重要挑戰,樣本不均衡往往會導致建模效果不理想,HyperGBM 在建模時支持兩種型別的不平衡資料處理方式,
1. 利用ClassWeight建模
在利用底層建模演算法(如lightgbm等)建模時,首先計算樣本分布比例,然后利用底層演算法對模型進行優化,
為了利用ClassWeight建模,在呼叫make_experiment時,設定引數class_balancing=‘ClassWeight’即可,示例如下:
from hypergbm import make_experiment
train_data = ...
experiment = make_experiment(train_data,
class_balancing='ClassWeight',
...)
2. 欠采樣或過采樣
在建模之前,通過欠采樣或過采樣技術調整樣本資料,然后再利用調整后的資料進行建模,以得到表現較好的模型,目前支持的采樣策略包括:RandomOverSampler ,SMOTE, ADASYN, RandomUnderSampler, NearMiss, TomekLinks, EditedNearestNeighbours,
為了利用欠采樣或過采樣技建模,在呼叫make_experiment時,設定引數class_balancing=‘<采用策略>’即可,示例如下:
from hypergbm import make_experiment
train_data = ...
experiment = make_experiment(train_data,
class_balancing='SMOTE',
...)
關于欠采樣或過采樣技術的更多資訊,請參考 imbalanced-learn
七、HyperGBM自定義搜索空間
除了框架默認的搜索空間外,也支持用戶自定義搜索空間,用戶可以簡單的設定某些引數為先驗值,小范圍自定義某些引數的搜索空間,大范圍自定義搜索空間等,具體實作細節請參考HyperGBM自定義搜索空間
八、HyperGBM自定義建模演算法
除了框架本身支持的lightgbm, xgboost, catboost,HistGradientBoosting演算法外,得益于hypernets的高拓展性,我們可以很簡單的自定義其他的搜索演算法到HyperGBM框架中,具體實作細節請參考HyperGBM自定義建模演算法
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299916.html
標籤:AI
上一篇:基于TensorFlow Lite Micro在物聯網設備上玩轉TinyML之離線語音喚醒
下一篇:[MRCTF2020]你傳你呢
