LassoCV如何在scikit中学习分区数据?

时间:2014-06-15 20:48:24

标签: python scikit-learn regression cross-validation

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

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

因此,Lasso在训练集上进行训练,然后根据验证集的交叉验证结果调整超参数alpha。最后,在测试集上使用接受的模型,以给出一个真实的视图哦它将如何在现实中执行。在这里分离问题是防止过度拟合的预防措施。

实际问题

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

感谢。

1 个答案:

答案 0 :(得分:9)

如果您将sklearn.cross_validation.cross_val_scoresklearn.linear_model.LassoCV对象一起使用,那么您正在执行嵌套交叉验证cross_val_score会根据您指定折叠的方式将数据划分为训练集和测试集(可以使用sklearn.cross_validation.KFold等对象完成此操作。火车集将被传递到LassoCVimport 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一起使用才能获得所需内容。这是实现这些对象的合理方式,因为我们也可能只对拟合超参数优化{{1}}感兴趣,而不必直接在另一组保持数据上进行评估。