先產生一組個體學習器,然後利用某種策略將它們結合起來,加強模型效果。周志華和李航老師的書中都證明隨著個體學習器數目的增大,整合的錯誤率將呈指數級下降,最終趨向於零。因此,模型融合被廣泛應用。
簡單來說就是通過對一組的基分類器以某種方式進行組合,以提公升模型整體效能的方法。
多模型投票 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.接著,在所有的資料...