为什么一个模型的训练标签中应该有多个列?

数据挖掘 scikit-学习 损失函数 监督学习 拟合优度
2022-03-09 11:13:20

浏览关于最喜欢的销售预测的著名 kaggle 比赛的笔记本。

一个难题是,在训练和测试数据拆分后,似乎y_train有两列包含 unit_sales 和 transactions,这两个列都在预测,并最终与基本事实进行比较。

但是为什么有人会将这两列传递给一个model.fit()调用,而不是开发两个模型来预测这些列呢?或者这就是sklearn内部无论如何,即一次fit调用训练两个模型?如果不是,对我来说似乎只有一个模型会给出次优结果,因为模型可能会在每个数据点的两个不同标签之间混淆,并且不知道在其权重更新中要瞄准哪个值。

如果我对场景有任何误解,请纠正我。

1个回答

这就是 sklearn 在内部所做的,即用一个 fit 调用训练两个模型?

这取决于型号。笔记本开始的(惩罚)线性回归模型基本上是这样做的:在多元线性回归中,每个目标的系数是分开的,因此基本上你是在估计单个线性模型。在这些情况下,您的其余问题不适用。

然而,随机森林模型做了一些更有趣的事情。树选择分裂以同时减少所有目标的杂质。请参阅sklearn 的用户指南该模型不会在两个不同的标签之间“混淆”:它同时对它们进行估计。然而,这两个目标的规模可能很重要,具体取决于实施细节;如果一个目标的规模比另一个目标大,则它的 MSE 会更大,因此树将倾向于以牺牲另一个目标为代价来减少其误差的拆分。请参阅此示例笔记本,它显示了 sklearn 实现中的效果。