机器学习模型的训练,通常是通过学习某一组输入特征与输出目标之间的映射来进行的。一般来说,对于映射的学习是通过优化某些成本函数,来使预测的误差最小化。在训练出最佳模型之后,将其正式发布上线,再根据未来生成的数据生成准确的预测。这些新数据示例可能是用户交互、应用处理或其他软件系统的请求生成的——这取决于模型需要解决的问题。在理想情况下,我们会希望自己的模型在生产环境中进行预测时,能够像使用训练过程中使用的数据一样,准确地预测未来情况。
当我们将模型部署到生产中时,往往会假设未来将使用到的数据会类似于过去模型评估期间所使用的数据。具体来说,我们可能会假设,特征和目标的分布将保持相当的恒定。但是这种假设通常不成立。趋势会随着时间的推移而变化,人们的兴趣会随着季节的变化而变化,股票市场会起伏不定。因此,我们的模型必须适应这些变化。
世界是持续变化的,因此模型部署应视为一个连续的过程,而不是完成第一次部署之后就扭头去开展下一个项目。如果机器学习团队的工程师发现数据分布与原始训练集的数据分布有明显出入,则需要重新训练模型。
测量实时数据上已部署模型的准确性是一个众所周知的难题。之所以出现这种困难,部分原因是我们需要访问生成的模型的预测和基本事实信号。出于以下这些原因,这可能无法实现:
·预测的数据在生成后没有存储——别让这种事发生在你身上。
·预测已存储,但是您无法访问基本事实标签。
·预测和标签均可用,但不能结合在一起。
即使预测和标签可以合并在一起,也可能需要一段时间才能使用标签。例如一个可以预测下一季度收入的财务预测模型。在这种情况下,只有在该季度过去之后才能观察到实际收入,所以直到那个时候你才能够量化模型的效果。在此类预测问题中, 回填预测(即训练模型,并根据过去的历史数据生成预测)可以帮助您了解模型性能下降的速度。
模型再训练到底是什么意思?
模型再训练似乎是一个超负荷的操作,它是否只涉及到寻找现有模型架构的新参数?对于更改超参数搜索空间怎么样?如何搜索不同的模型类型(RandomForest,SVM等)?我们可以包括新特征还是可以排除以前使用的特征?这些都是很好的问题,因此尽可能明确这些问题是非常重要的。要回答这些问题,重要的是直接考虑我们要解决的问题——也就是说,减少模型漂移对我们部署的模型的影响。
在将模型部署到生产数据之前,科学家需要经过严格的模型验证过程,其中包括:
·汇编数据集–收集来自不同来源(例如不同数据库)的数据集。
·特征工程–从原始数据中提取列,提高预测性能。
·模型选择–比较不同的学习算法。
·错误估计–在搜索空间上进行优化,找到最佳模型并估计其泛化误差。
此过程会产生一些最佳的模型,然后将其部署到生产中。由于模型漂移具体是指所选模型的预测性能由于特征/目标数据分布的变化而下降,因此模型再训练不应该带来不同的模型生成过程。确切地说,重新训练只是指在新的训练数据集上重新运行生成先前选择的模型的过程。功能、模型算法和超参数搜索空间都应保持相同。可以这样想,再训练不涉及任何代码更改,只涉及改变训练数据集。
首先,您需要确定一个发散的阈值,它将触发模型再训练。如果阈值太低,则您可能会过于频繁地进行再训练,从而带来高计算成本。如果阈值过高,则可能会因为不经常进行再训练,而导致生产中的模型偏劣质。这比看起来要复杂得多,因为你必须去确定,要收集多少新的训练数据,才能代表世界的新状态。在世界已经发生改变时,用一个训练集太小的模型来代替现有的模型也是没有意义的。
那么问题是:如何重新训练模型?
如何重新训练模型?
方法一:
- 生成新数据集
- 用新数据集随机生成训练与验证集
- 用历史数据随机生成训练与验证集
- 用新数据集训练验证,达到指定指标(如90%正确率)
- 用历史验证集验证是否达到指定指标,如果没有达到,用历史数据集训练达到指定指标
- 用新数据验证集验证是否达到指定指标,如果没有达到,重复4,5,如何达到,结束训练
不足:指标设定过高不合适,导致只训练新数据,最后模型对旧数据没有泛化能力
方法二:
'''
1. train new nscore
2. train old oscore
oscore,nscore
if oscore>nscore:
train new
else:
train old
'''
不足:数据样本分布不均匀,导致训练结果不理想,比如历史数据过多,新数据过少,大部分时间都在训练历史数据,等历史数据训练完了,新数据验证结果不理想
解决方法:
一:对大量历史数据进行随机采样生成子数据集
二:
训练TTPLA开源数据与新数据时,TTPLA开源数据训练score>0.7后,需要降低学习率为1e-6,
学习率从1e-5降低到1e-6后训练AB数据集结果如下:
new: 0.8300 old: 0.74341
new: 0.84884 old: 0.7572
两个数据集都有改善
若学习率不变,任然为1e-5训练新数据后,新数据退化为0.79,再次训练新数据Score达到98,TTPLA数据退化为0.4
new: 0.81211 old: 0.7608391
new: 0.76502 old: 0.752094
new: 0.9898790 old: 0.4591638
new: 0.7891513 old: 0.697236657
new: 0.987 old: 0.44792
new: 0.8237 old: 0.761
学习率过大,A数据集训练完,B数据集变差