LassoCV 在 scikit-learn 中如何划分数据



我在sklearn中使用Lasso方法执行线性回归。

根据他们的指导,以及我在其他地方看到的指导,与其简单地对所有训练数据进行交叉验证,不如将其拆分为更传统的训练集/验证集分区。

因此,套索在训练集上训练,然后根据验证集交叉验证的结果调整超参数 alpha。最后,在测试集上使用接受的模型来给出一个现实的视图,哦它在现实中的表现如何。将此处的顾虑分开是防止过度拟合的预防措施。

实际问题

Lasso CV 是否符合上述协议,或者它只是以某种方式在相同的数据和/或相同的 CV 轮次中训练模型参数和超参数?

谢谢。

如果将

sklearn.cross_validation.cross_val_scoresklearn.linear_model.LassoCV对象一起使用,则正在执行嵌套交叉验证cross_val_score将根据您指定折叠的方式将数据划分为训练集和测试集(可以使用 sklearn.cross_validation.KFold 等对象来完成(。训练集将被传递给LassoCV,它本身执行数据的另一个分裂,以便选择正确的惩罚。这似乎与您正在寻找的环境相对应。

import numpy as np
from sklearn.cross_validation import KFold, cross_val_score
from sklearn.linear_model import LassoCV
X = np.random.randn(20, 10)
y = np.random.randn(len(X))
cv_outer = KFold(len(X), n_folds=5)
lasso = LassoCV(cv=3)  # cv=3 makes a KFold inner splitting with 3 folds
scores = cross_val_score(lasso, X, y, cv=cv_outer)

答:不,LassoCV不会为你做所有的工作,你必须结合cross_val_score来获得你想要的。这同时也是实现此类对象的合理方法,因为我们也可能只拟合超参数优化LassoCV,而不必直接在另一组保存的数据上评估它。

相关内容

  • 没有找到相关文章

最新更新