【Machine Learning】模型融合之Stacking

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/LAW_130625/article/details/78573736

一、Stacking簡介
  Stacking(stacked generalization)是在大數據競賽中不可缺少的武器,其指訓練一個用於組合(combine)其他多個不同模型的模型,具體是說首先我們使用不同的算法或者其他方法能夠訓練出多個不同的模型,然後將這些模型的輸出作爲新的數據集,即將這些訓練的模型的輸出再作爲爲輸入訓練一個模型,最後得到一個最終的輸出,下圖爲Stacking的大致流程圖:

這裏寫圖片描述

  如果可以選用任意的組合算法,那麼理論上,Stacking可以表示上面提到的各種Ensemble方法。但是在實際應用中通常使用單層logistic迴歸作爲組合模型。

二、代碼示例
  在這裏使用了mlxtend庫,它可以很好地完成對sklearn模型地stacking。

# -*- coding: utf-8 -*-

import pickle
from xgboost import XGBClassifier
from sklearn.ensemble import ExtraTreesClassifier, RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from mlxtend.classifier import StackingCVClassifier

with open('../data/training_df.pkl', 'rb') as f:
    df = pickle.load(f)
with open(r'../data/selected_feat_names.pkl', 'rb') as f:
    selected_feat_names = pickle.load(f)
print("data loaded")

# train on full data set
y = df["attack_type"].values
X = df[selected_feat_names].values

xgb = XGBClassifier(learning_rate =0.5,n_estimators=300,max_depth=5,gamma=0,subsample=0.8,)
rfc = RandomForestClassifier(n_jobs=-1, n_estimators=35, criterion="entropy")
etc = ExtraTreesClassifier(n_jobs=-1, n_estimators=5, criterion="entropy")
lr = LogisticRegression(n_jobs=-1, C=8)  # meta classifier

sclf = StackingCVClassifier(classifiers=[xgb, rfc, etc], meta_classifier=lr, use_probas=True, n_folds=3, verbose=3)

sclf.fit(X, y)
print("training finished")

# save model for later predicting
with open(r'../data/stacking.pkl', 'wb') as f:
    pickle.dump(sclf, f)
print("model dumped")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章