尝试使用sklearn自动进行多模型预测并计算权重

待解决的问题

在拥有多个模型的情况下,是否可以通过给多个模型分配权重(weight),使得加权后的多模型预测结果要好于单模型?

思路

  • 是否存在通用的多模型weight计算方式?
  • 如果没有,是否存在其他选取模型的方式?
  • 如果权重只能人为设置,增加权重提高拟合度的方法是否可行?
  • 如果权重能自动计算,能否在实际数据训练中增加拟合度?

解决方向

  1. 查找相关论文资料,确认了使用多模型同时计算加权的方式不常见。更多的是对单模型做优化以提高拟合度。简单做法是取所有模型拟合度相加等比放大/缩小到1,放大/缩小系数k作为权重。
  2. sklearn中存在一个分类器VotingClassifier,往这个分类器中添加多个模型,可以根据训练集计算得分(score,拟合度)最高的模型,并以此模型做预测。
  3. 人为设置方式不可取,调整者需要很丰富的经验和大量测试时间。故采用决策树的方式,自动调整权重,得到与训练集拟合度最高的结果为合适方案。同时,此方案需要大量的样本数据才能拟合准确,否则会出现过拟合or仅在特定训练集表现优秀的情况。

试验

假设存在三个模型A B C,训练集train_set。

简单权重计算

训练集拟合得分Sa, Sb, Sc。权重计算为

  1. 当存在 Si<=0 时,该模型的权重Wi = 0,不计算结果。
  2. Ssum = Sa,Sb,Sc相加。
  3. 权重 Wi = Si / Ssum。

此方式得到的权重,在实际计算中未能有效的提升预测结果的拟合度,表现与使用单模型相差不大,整体上表现略逊于拟合度>0.5的模型。

sklearn分类器

将模型放入sklearn分类器进行模拟时发现,分类器选取要求每个模型拟合的训练集在数据清洗组合后都是同维的,才能进行比较。而目前使用的模型:支持向量机(SVR),隐性时间序列(HiddenPeriod),需要的训练集是完全不同维度的(SVR:28, HP: 1)。且将来添加其他模型需要训练的维度也大概率是不同于两者。故此方案不可行。

决策树

目前由于数据数量和边界条件不明,暂时无法做拟合度测试。待重启

结论

以目前的研究和试验看来,权重的方式对拟合度的提升不明显,效率提升不如对单模型进行优化。故权重计算的开发可暂时延后。

另一种思路?

不采用权重同时训练所有的模型,而是先取某个模型进行训练,再针对残差使用另一个模型进行训练。这种思路会使得单模型有针对性的处理特定数据训练集,是否能提高拟合度有待检验。

猜你喜欢

转载自blog.csdn.net/zwtzjd/article/details/80380405