今天是关于模型融合的打卡。
首先学习了一下模型融合有哪些方法。
比较简单常规的回归方法比如算术平均融合、几何平均融合;
stacking 构建多层模型,再利用预测结果来拟合预测;
还有就是boosting 多树的提升方法,之前打卡的时候已经学习过了,这次就不再赘述。
所谓stacking,类似于通过堆叠多个基学习器,在这几个学习器的预测结果上再加模型,得到次级学习器,再训练,最终完成预测。
我们先试一试简单的加权融合。
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 = [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
然后计算MSE
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.1750000000000001
Pred2 MAE: 0.07499999999999993
Pred3 MAE: 0.10000000000000009
做一个加权,根据加权来重新计算MSE:
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.05750000000000027
其实有所提升。
我们还可以考虑比如mean平均、median平均等等,这里就不展开了。
接下来,我们可以尝试一下stacking融合,生成一些简单的数据,会发现模型结果比起之前有进一步的提升。
Stacking_pre MAE: 0.04213483146067476
在这时候,我遇到了一个问题。当我输入如下代码时:
from sklearn.datasets import make_blobs
from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier
显示的结果是:
DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release.
表明numpy.core.umath_tests是一个内部NumPy模块,不应该被导入。它将在将来的NumPy版本中被移除。
此时不要慌,我们可以输入:
import warnings
warnings.filterwarnings("ignore", category=DeprecationWarning)
就可以解决这个问题啦。
那我们今日就讲到这里啦。