模型融合是比賽後期乙個重要的環節,大體來說有如下的型別方式。
什麼是 stacking
簡單來說 stacking 就是當用初始訓練資料學習出若干個基學習器後,將這幾個學習器的**結果作為新的訓練集,來學習乙個新的學習器。
## 生成一些簡單的樣本資料,test_prei 代表第i個模型的**值
test_pre1 =
[1.2
,3.2
,2.1
,6.2
]test_pre2 =
[0.9
,3.1
,2.0
,5.9
]test_pre3 =
[1.1
,2.9
,2.2
,6.0
]# y_test_true 代表第模型的真實值
y_test_true =[1
,3,2
,6] import numpy as np
import pandas as pd
## 定義結果的加權平均函式
def weighted_method
(test_pre1,test_pre2,test_pre3,w=[1
/3,1
/3,1
/3])
: weighted_result = w[0]
*pd.
series
(test_pre1)
+w[1
]*pd.
series
(test_pre2)
+w[2
]*pd.
series
(test_pre3)
return weighted_result
from sklearn import metrics
# 各模型的**結果計算mae
print
('pred1 mae:'
,metrics.
mean_absolute_error
(y_test_true, test_pre1)
)print
('pred2 mae:'
,metrics.
mean_absolute_error
(y_test_true, test_pre2)
)print
('pred3 mae:'
,metrics.
mean_absolute_error
(y_test_true, test_pre3)
)
pred1 mae: 0.175
pred2 mae: 0.075
pred3 mae: 0.1
## 根據加權計算mae
w =[
0.3,
0.4,
0.3] # 定義比重權值
weighted_pre =
weighted_method
(test_pre1,test_pre2,test_pre3,w)
print
('weighted_pre mae:'
,metrics.
mean_absolute_error
(y_test_true, weighted_pre)
)
weighted_pre mae: 0.0575
可以看出加權結果相對於之前的結果是有提公升的,這種我們稱其為簡單的加權平均。
from sklearn import linear_model
def stacking_method
(train_reg1,train_reg2,train_reg3,y_train_true,test_pre1,test_pre2,test_pre3,model_l2= linear_model.
linearregression()
):model_l2.
fit(pd.
concat
([pd.
series
(train_reg1)
,pd.
series
(train_reg2)
,pd.
series
(train_reg3)
],axis=1)
.values,y_train_true)
stacking_result = model_l2.
predict
(pd.
concat
([pd.
series
(test_pre1)
,pd.
series
(test_pre2)
,pd.
series
(test_pre3)
],axis=1)
.values)
return stacking_result
## 生成一些簡單的樣本資料,test_prei 代表第i個模型的**值
train_reg1 =
[3.2
,8.2
,9.1
,5.2
]train_reg2 =
[2.9
,8.1
,9.0
,4.9
]train_reg3 =
[3.1
,7.9
,9.2
,5.0
]# y_test_true 代表第模型的真實值
y_train_true =[3
,8,9
,5] test_pre1 =
[1.2
,3.2
,2.1
,6.2
]test_pre2 =
[0.9
,3.1
,2.0
,5.9
]test_pre3 =
[1.1
,2.9
,2.2
,6.0
]# y_test_true 代表第模型的真實值
y_test_true =[1
,3,2
,6] model_l2= linear_model.
linearregression()
stacking_pre =
stacking_method
(train_reg1,train_reg2,train_reg3,y_train_true,
test_pre1,test_pre2,test_pre3,model_l2)
print
('stacking_pre mae:'
,metrics.
mean_absolute_error
(y_test_true, stacking_pre)
)
stacking_pre mae: 0.0421348314607
可以發現模型結果相對於之前有進一步的提公升,這是我們需要注意的一點是,對於第二層stacking的模型不宜選取的過於複雜,這樣會導致模型在訓練集上過擬合,從而使得在測試集上並不能達到很好的效果。
零基礎入門資料探勘 Task5 模型融合
先產生一組個體學習器,然後利用某種策略將它們結合起來,加強模型效果。周志華和李航老師的書中都證明隨著個體學習器數目的增大,整合的錯誤率將呈指數級下降,最終趨向於零。因此,模型融合被廣泛應用。簡單來說就是通過對一組的基分類器以某種方式進行組合,以提公升模型整體效能的方法。多模型投票 votingcla...
TASK 5 模型融合
task 5 模型融合 總結自 datawhale 零基礎入門資料探勘 task 5 模型融合 ml67 1 stacking 是用初始訓練資料學習出若干個基學習器後,將這幾個學習器的 結果作為新的訓練集,來學習乙個新的學習器。2 結合策略 如何將個體學習器結合在一起使用的方法。分類可以使用投票法。...
Task5 學習筆記
模型融合是對多種調參完成的模型以某種方式進行融合,進而提公升結果的準確性。其一般來說有以下幾種方法 簡單加權融合 對於回歸問題,簡單加權融合一般包括對模型進行算術平均或者幾何平均進行融合 對於分類問題可以通過投票方式進行融合,包括軟投票與硬投票,區別在於軟投票是在硬投票的基礎上賦予了不同的權重 對於...