(我确信我们已经有了这个问题的一些答案,但我现在找不到它们。)
这是否意味着我现在被困在所有未来预测的集成 k 模型中?
不,通常这不是你所做的。
集成模型从根本上不同于不聚合许多子模型的预测的模型。
对于“正常”(未聚合)交叉验证,您通常会应用在交叉验证期间使用的相同训练算法,以将代理模型拟合到整个数据集(就像在拆分交叉验证之前一样)。
在 sklearn 上下文中,这意味着您移交给的fit
功能:estimator
cross_validate
以以下示例为例cross_val_predict
:
>>> from sklearn import datasets, linear_model
>>> from sklearn.model_selection import cross_val_predict
>>> diabetes = datasets.load_diabetes()
>>> X = diabetes.data[:150]
>>> y = diabetes.target[:150]
>>> lasso = linear_model.Lasso()
>>> y_pred = cross_val_predict(lasso, X, y, cv=3)
现在,
>>> final_model = lasso.fit (X, y)
>>> new_predictions = final_model.predict (diabetes.data [440:442])
为什么不合奏
通过聚合几个子模型的预测,集成模型不同于“单一”非聚合模型。如果子模型存在不稳定性,聚合模型将产生比每个子模型更稳定的预测。如果子模型稳定,则预测没有差异(只是浪费计算资源)。
正常的交叉验证将未聚合的预测与基本事实进行比较,因此它不会通过聚合来评估可能的稳定性。
因此,
- 对于非聚合模型,非聚合(即通常的)交叉验证可用作预测性能/泛化误差估计的近似值。
- 对于集成模型,我们还需要集成类型的性能/泛化误差估计,例如袋外或其交叉验证类似物。
反之亦然。
对集成模型使用未聚合的交叉验证估计将导致悲观偏差,该偏差可能在可忽略不计和很大之间,具体取决于 CV 代理模型的稳定性以及聚合了多少代理模型。
此外,这种偏差是不必要的,因为使用相应的拟合函数和交叉验证方案只会受到较小的悲观偏差,因为代理模型的训练用例较少(和/或要聚合的子模型较少)。