零基礎入門資料探勘 Task5 模型融合

2021-10-04 18:13:04 字數 3826 閱讀 2306

先產生一組個體學習器,然後利用某種策略將它們結合起來,加強模型效果。周志華和李航老師的書中都證明隨著個體學習器數目的增大,整合的錯誤率將呈指數級下降,最終趨向於零。因此,模型融合被廣泛應用。

簡單來說就是通過對一組的基分類器以某種方式進行組合,以提公升模型整體效能的方法。

多模型投票 votingclassifier()

生成用0填充的陣列 np.zeros()

sklearn **概率矩陣 predict_porba()

模型融合 blending 多折模型融合 stacking

其他整合學習方法 bagging boosting

巢狀迴圈 itertools.product()

也可以生成特徵作為新特徵

import itertools #迭代器

import matplotlib.gridspec as gridspec #非對稱子圖

from sklearn.neighbors import kneighborsclassifier #k近鄰分類器

from sklearn.*****_bayes import gaussiannb #樸素貝葉斯

from mlxtend.classifier import stackingclassifier

from mlxtend.plotting import plot_learning_curves #學習曲線

from mlxtend.plotting import plot_decision_regions #決策邊界

xgboost的五折交叉回歸驗證試驗

## xgb

xgr = xgb.xgbregressor(n_estimators=

120, learning_rate=

0.1, subsample=

0.8,\

colsample_bytree=

0.9, max_depth=7)

# ,objective ='reg:squarederror'

scores_train =

scores =

## 5折交叉驗證方式

sk=stratifiedkfold(n_splits=

5,shuffle=

true

,random_state=0)

for train_ind,val_ind in sk.split(x_data,y_data)

: train_x=x_data.iloc[train_ind]

.values

train_y=y_data.iloc[train_ind]

val_x=x_data.iloc[val_ind]

.values

val_y=y_data.iloc[val_ind]

xgr.fit(train_x,train_y)

pred_train_xgb=xgr.predict(train_x)

pred_xgb=xgr.predict(val_x)

score_train = mean_absolute_error(train_y,pred_train_xgb)

score = mean_absolute_error(val_y,pred_xgb)

print

('train mae:'

,np.mean(score_train)

)print

('val mae'

,np.mean(scores)

)

stacking融合

## 第一層

train_lgb_pred = model_lgb.predict(x_train)

train_xgb_pred = model_xgb.predict(x_train)

train_gbdt_pred = model_gbdt.predict(x_train)

strak_x_train = pd.dataframe(

)strak_x_train[

'method_1'

]= train_lgb_pred

strak_x_train[

'method_2'

]= train_xgb_pred

strak_x_train[

'method_3'

]= train_gbdt_pred

strak_x_val = pd.dataframe(

)strak_x_val[

'method_1'

]= val_lgb

strak_x_val[

'method_2'

]= val_xgb

strak_x_val[

'method_3'

]= val_gbdt

strak_x_test = pd.dataframe(

)strak_x_test[

'method_1'

]= suba_lgb

strak_x_test[

'method_2'

]= suba_xgb

strak_x_test[

'method_3'

]= suba_gbdt

## level2-method

model_lr_stacking = build_model_lr(strak_x_train,y_train)

## 訓練集

train_pre_stacking = model_lr_stacking.predict(strak_x_train)

print

('mae of stacking-lr:'

,mean_absolute_error(y_train,train_pre_stacking)

)## 驗證集

val_pre_stacking = model_lr_stacking.predict(strak_x_val)

print

('mae of stacking-lr:'

,mean_absolute_error(y_val,val_pre_stacking)

)## **集

print

('predict stacking-lr...'

)suba_stacking = model_lr_stacking.predict(strak_x_test)

suba_stacking[suba_stacking<10]

=10## 去除過小的**值

sub = pd.dataframe(

)sub[

'saleid'

]= testa_data.saleid

sub[

'price'

]= suba_stacking

sub.to_csv(

'./sub_stacking.csv'

,index=

false

)

結果層面的融合,這種是最常見的融合方法,其可行的融合方法也有很多,比如根據結果的得分進行加權融合,還可以做log,exp處理等。在做結果融合的時候,有乙個很重要的條件是模型結果的得分要比較近似,然後結果的差異要比較大,這樣的結果融合往往有比較好的效果提公升。

特徵層面的融合,這個層面其實感覺不叫融合,準確說可以叫分割,很多時候如果我們用同種模型訓練,可以把特徵進行切分給不同的模型,然後在後面進行模型或者結果融合有時也能產生比較好的效果。

模型層面的融合,模型層面的融合可能就涉及模型的堆疊和設計,比如加staking層,部分模型的結果作為特徵輸入等,這些就需要多實驗和思考了,基於模型層面的融合最好不同模型型別要有一定的差異,用同種模型不同的引數的收益一般是比較小的。

零基礎入門CV賽事 Task5 模型整合

本章講解的知識點包括 整合學習方法 深度學習中的整合學習和結果後處理思路。stacking先從初始資料集訓練出初級學習器 個體學習器 然後 生成 乙個新資料集用於訓練次級學習器 用於結合的學習器,也稱元學習器meta learner 新的資料集中,初級學習器的輸出被當作樣例輸入特徵。注 訓練階段,次...

零基礎入門CV賽事 Task5 模型整合

學習整合學習方法以及交叉驗證情況下的模型整合 學會使用深度學習模型的整合學習 目的是提高 精度 方法有 stacking bagging boosting等,例如在機器學習中,對10個cnn模型可以使用如下方式進行整合 對 的結果的概率值進行平均,然後解碼為具體字元 對 的字元進行投票,得到最終字元...

零基礎入門CV賽事 Task5 模型整合

k means通常被稱為勞埃德演算法,這在資料聚類中是最經典的,也是相對容易理解的模型。演算法執行的過程分為4個階段。1.首先,隨機設k個特徵空間內的點作為初始的聚類中心。2.然後,對於根據每個資料的特徵向量,從k個聚類中心中尋找距離最近的乙個,並且把該資料標記為這個聚類中心。3.接著,在所有的資料...