模型融合的目的是进一步加强数据模型的鲁棒性,由单一模型转换到多个模型的协调处理中,yong合的目的是进一步加强数据模型的鲁棒性,由单一模型转换到多个模型的协调处理中,用一句诙谐的话来讲——三个臭皮匠顶个诸葛亮。
这里介绍几个融合的方法——简单加权融合、stacking、blending
1.简单加权融合——分类与回归
1.1 分类
加权平均,就是简单地将多个模型预测的预测值通过赋予相同或者不同的权值,融合为与目标值一样的数据类型(单个分类或多分类),然后用这个融合后的值去与真实的标签作比较得到误差值。
举个例子——
import numpy as np
import pandas as pd
from sklearn import metrics
## 生成一些简单的样本数据,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]
## 定义结果的加权平均函数
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
# 各模型的预测结果计算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))
## 根据加权计算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))
结果显示,加权融合后的数据模型优于单一模型
Pred1 MAE: 0.1750000000000001
Pred2 MAE: 0.07499999999999993
Pred3 MAE: 0.10000000000000009
Weighted_pre MAE: 0.05750000000000027
1.2 回归
不同于分类的是 通过寻找多个模型中数据的线性回归模型(内在逻辑),得到预测值,然后将这几个模型的测试数据通过回归得到最终的预测值。
例子如下——
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())