假设我们有一组输入(称为x1, x2, …, xn),这些输入会产生输出y。我们的目标是从之前未见过的x1…xn的值中预测y。显然,这个问题可以在机器学习的领域内建模为回归问题。
然而,假设数据持续不断地到来。我能够从x1…xn预测y。此外,我还能够事后检查这个预测是否准确。如果预测准确,一切都很好。另一方面,如果预测与实际的y有很大偏差,我希望能够更新我的模型。我能想到的一种方法是将这些新数据插入我的训练集中,并重新训练回归算法。但这样会带来两个问题。首先,重新计算我的模型可能会花费我无法承受的成本。其次,我的训练集中可能已经有太多的数据,以至于新来的数据变得微不足道。然而,由于我问题的性质,新来的数据可能比旧数据更重要。
似乎一个好的解决方案是计算一种与新数据更相关的连续回归,而不是与旧数据相关。我已经搜索了这种方法,但没有找到任何相关的内容。或许我找错了方向。有人知道如何做吗?
回答:
如果你想让较新的数据更重要,你需要使用权重。通常这被称为
sample_weight
在scikit-learn的fit()函数中(如果你使用这个库)。
权重可以定义为1 /(自当前观察以来的时间)。
现在谈谈第二个问题。如果重新计算需要很长时间,你可以截取你的观察数据并使用最新的数据。在整个数据集和最新数据+部分旧数据上拟合你的模型,并检查你的权重变化了多少。我认为如果你真的在{x_i}和{y}之间有依赖关系,你不需要整个数据集。
否则,你可以再次使用权重。但现在你将对模型中的权重进行加权:
旧数据模型:w1*x1 + w2*x2 + …
新数据模型:~w1*x1 + ~w2*x2 + …
公共模型:(w1*a1_1 + ~w1*a1_2)*x1 + (w2*a2_1 + ~w2*a2_2)*x2 + …
这里a1_1, a2_1是‘旧模型’的权重,a2_1, a2_2是新模型的权重,w1, w2是旧模型的系数,~w1, ~w2是新模型的系数。
参数{a}可以像第一个项目符号中那样手动估计,但你也可以创建另一个线性模型来估计它们。但我的建议是:不要对{a}使用非线性回归——你会过度拟合。