机器学习 scikit-learn8 - 预测贷款用户是否会逾期 - Stacking模型融合【调包】
Stacking模型融合
- 1 簡介
- 2 模型融合的原理
- 2.1 StackingClassifier 概述
- 2.2 StackingCVClassifier 概述
- 3 代碼使用方法
- 4 核心代碼說明
- 5 問題
- 參考文章
1 簡介
在做邏輯回歸的最初就有嘗試做網絡搜索,找到最佳的特征組合
代碼鏈接: https://github.com/spareribs/kaggleSpareribs/blob/master/Overdue/ml/for beginner/stacking.py
2 模型融合的原理
StackingClassifier 官方文檔: http://rasbt.github.io/mlxtend/user_guide/classifier/StackingClassifier/
StackingCVClassifier 官方文檔: http://rasbt.github.io/mlxtend/user_guide/classifier/StackingCVClassifier/
2.1 StackingClassifier 概述
Stacking 是一種集成學習技術,通過元分類器將多個分類模型組合在一起。使用完整訓練集去訓練各個分類模型;然后,根據集成中各個分類模型的輸出元特征,對該分類器進行擬合。元分類器既可以根據預測的類標簽進行訓練,也可以根據集合的概率進行訓練,如下圖所示。
2.2 StackingCVClassifier 概述
Stacking 是一種集成學習技術,通過元分類器將多個分類模型組合在一起。StackingCVClassifier使用交叉驗證擴展了標準的 StackingClassifier (實現為StackingClassifier),為二級分類器準備輸入數據。
在標準的 Stacking 過程中,第一級分類器與為第二級分類器準備輸入的訓練集相匹配,可能導致過擬合。然而,StackingCVClassifier 使用了交叉驗證的概念:將數據集分割為k個折,在k個連續的循環中,k-1折用于匹配第一級分類器;在每一輪中,第一級分類器被應用到每一次迭代中沒有用于模型擬合的其余1個子集。然后將結果預測堆疊起來,作為輸入數據提供給二級分類器。經過 StackingCVClassifier 的訓練,第一級分類器適合于整個數據集,如下圖所示。
3 代碼使用方法
4 核心代碼說明
sklearn_config.py 指定的模型參數
clfs = {'lr': LogisticRegression(penalty='l1', C=0.1, tol=0.0001),'svm': LinearSVC(C=0.05, penalty='l2', dual=True),'svm_linear': SVC(kernel='linear', probability=True),'svm_ploy': SVC(kernel='poly', probability=True),'bagging': BaggingClassifier(base_estimator=base_clf, n_estimators=60, max_samples=1.0, max_features=1.0,random_state=1, n_jobs=1, verbose=1),'rf': RandomForestClassifier(n_estimators=40, criterion='gini', max_depth=9),'adaboost': AdaBoostClassifier(base_estimator=base_clf, n_estimators=50, algorithm='SAMME'),'gbdt': GradientBoostingClassifier(),'xgb': xgb.XGBClassifier(learning_rate=0.1, max_depth=3, n_estimators=50),'lgb': lgb.LGBMClassifier(boosting_type='gbdt', learning_rate=0.01, max_depth=5, n_estimators=250, num_leaves=90) }使用 StackingCVClassifier 模型融合
lr_clf = clfs["lr"] # meta_classifier svm_clf = clfs["svm_ploy"] rf_clf = clfs["rf"] xgb_clf = clfs["xgb"] lgb_clf = clfs["lgb"]# 簡單調包實現了~~~ classifiers 定義融合的模型 meta_classifier 定義主要的模型 sclf = StackingCVClassifier(classifiers=[lr_clf, svm_clf, rf_clf, xgb_clf, lgb_clf],meta_classifier=lr_clf, use_probas=True, verbose=3)sclf.fit(x_train, y_train)print("測試模型 & 模型參數如下:\n{0}".format(sclf)) print("=" * 20) pre_train = sclf.predict(x_train) print("訓練集正確率: {0:.4f}".format(sclf.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)))輸出結果
測試模型 & 模型參數如下: StackingCVClassifier(classifiers=[LogisticRegression(C=0.1, class_weight=None, dual=False, fit_intercept=True,intercept_scaling=1, max_iter=100, multi_class='warn',n_jobs=None, penalty='l1', random_state=None, solver='warn',tol=0.0001, verbose=0, warm_start=False), SVC(C=1.0, cache_size=....0, reg_lambda=0.0, silent=True,subsample=1.0, subsample_for_bin=200000, subsample_freq=0)],cv=2,meta_classifier=LogisticRegression(C=0.1, class_weight=None, dual=False, fit_intercept=True,intercept_scaling=1, max_iter=100, multi_class='warn',n_jobs=None, penalty='l1', random_state=None, solver='warn',tol=0.0001, verbose=0, warm_start=False),shuffle=True, store_train_meta_features=False, stratify=True,use_clones=True, use_features_in_secondary=False,use_probas=True, verbose=3) ==================== 訓練集正確率: 0.8220 訓練集f1分數: 0.5331 訓練集auc分數: 0.68335 問題
- 問題1:https://blog.csdn.net/qq1483661204/article/details/80157365 代碼實現的方式不是太了解
- 問題2:如果使用 train_test_split 拆分整個數據集,會報錯,所以訓練集的數據,沒有測試集
- 問題3:分數有點高,擔心又是模型評分方式的問題
參考文章
https://blog.csdn.net/qq1483661204/article/details/80157365
https://mp.weixin.qq.com/s/DG5VbDgOcqlRhbEbiP9_aw
https://blog.csdn.net/LAW_130625/article/details/78573736
總結
以上是生活随笔為你收集整理的机器学习 scikit-learn8 - 预测贷款用户是否会逾期 - Stacking模型融合【调包】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SETP7 Professional V
- 下一篇: 一个合格的初级程序员所应该具备的能力