機器學習 scikit-learn4 模型實踐 - xgboost 和 lightgbm
阿新 • • 發佈:2018-11-24
xgboost 和 lightgbm - 目錄
1 簡介
1.1 程式碼下載
程式碼路徑,歡迎 star~~
https://github.com/spareribs/kaggleSpareribs/blob/master/Overdue/ml/code/sklearn_config.py
https://github.com/spareribs/kaggleSpareribs/blob/master/Overdue/ml/code/sklearn_train.py
1.2 程式碼使用方法
- 【必須】config.py 設定檔案存放的路徑
- 【必須】先執行 features 中的 base.py 先把資料處理好 [PS:需要根據實際情況修改]
- 【可選】再通過 code 中的 sklearn_config.py 設定模型的引數[PS: 按需修改]
- 【必須】最後通過 code 中的 sklearn_train.py 訓練模型輸出結果
3 核心程式碼說明
3.1 模型配置
""" 開啟交叉驗證 """
status_vali = False
""" 模型引數 """
clfs = {
'xgb': xgb.XGBClassifier(),
'lgb': lgb.LGBMClassifier(),
}
3.2 模型訓練
可以修改模型的選擇 [ xgb, lgb ]
""" 1 讀取資料 """
data_fp = open(features_path, 'rb')
x_train, y_train = pickle.load(data_fp)
data_fp.close()
""" 2 訓練分類器, clf_name選擇需要的分類器 """
clf_name = "xgb"
clf = clfs[clf_name]
clf.fit(x_train, y_train)
""" 3 在驗證集上評估模型 """
if status_vali:
print("測試模型 & 模型引數如下:\n{0}".format(clf))
print("=" * 20)
pre_train = clf.predict(x_train)
print("訓練集正確率: {0:.4f}".format(clf.score(x_train, y_train)))
print("訓練集f1分數: {0:.4f}".format(f1_score(y_train, pre_train)))
print("訓練集auc分數: {0:.4f}".format(roc_auc_score(y_train, pre_train)))
print("-" * 20)
pre_vali = clf.predict(x_vali)
print("測試集正確率: {0:.4f}".format(clf.score(x_vali, y_vali)))
print("測試集f1分數: {0:.4f}".format(f1_score(y_vali, pre_vali)))
print("測試集auc分數: {0:.4f}".format(roc_auc_score(y_vali, pre_vali)))
print("=" * 20)
3.3 輸出結果
3.3.1 xgb
測試模型 & 模型引數如下:
XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,
colsample_bytree=1, gamma=0, learning_rate=0.1, max_delta_step=0,
max_depth=3, min_child_weight=1, missing=None, n_estimators=100,
n_jobs=1, nthread=None, objective='binary:logistic', random_state=0,
reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,
silent=True, subsample=1)
====================
訓練集正確率: 0.8515
訓練集f1分數: 0.6141
訓練集auc分數: 0.7259
--------------------
測試集正確率: 0.7898
測試集f1分數: 0.4545
測試集auc分數: 0.6429
====================
3.3.2 lgb
測試模型 & 模型引數如下:
LGBMClassifier(boosting_type='gbdt', class_weight=None, colsample_bytree=1.0,
importance_type='split', learning_rate=0.1, max_bin=255,
max_depth=-1, min_child_samples=20, min_child_weight=0.001,
min_split_gain=0.0, n_estimators=250, n_jobs=-1, num_leaves=31,
objective=None, random_state=None, reg_alpha=0.0, reg_lambda=0.5,
silent=True, subsample=1.0, subsample_for_bin=200000,
subsample_freq=1)
====================
訓練集正確率: 1.0000
訓練集f1分數: 1.0000
訓練集auc分數: 1.0000
--------------------
測試集正確率: 0.7821
測試集f1分數: 0.4738
測試集auc分數: 0.6509
====================