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

Sir*_*rah 8 python regression scikit-learn cross-validation

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

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

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

实际问题

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

谢谢.

eic*_*erg 10

如果你使用sklearn.cross_validation.cross_val_score一个sklearn.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)
Run Code Online (Sandbox Code Playgroud)

答:,LassoCV不会为你做所有的工作,你必须与它一起使用cross_val_score才能获得你想要的东西.这同时是实现这些对象的合理方式,因为我们也可能只对拟合优化的超参数感兴趣,LassoCV而不必直接在另一组保持数据上进行评估.

  • 只是为了确认:内部拆分的唯一目的是在LassoCV中选择"最佳"超参数C?如果[this](http://scikit-learn.org/stable/modules/grid_search.html#model-specific-cross-validation)列表中没有该模型,那么建议进行超参数调整的方法(比如SVR)是使用GridSearchCV还是RandomizedSearchCV?因此,外部CV不会改进模型,而只是检查如何对前所未见的数据执行操作?如果使用简单的多元线性回归(没有超参数),那么模型无法针对一般性能进行调整? (2认同)
  • 肯定所有这些问题.对于最后一个问题:调整模型的一种方法是包含列/特征与否.如果你使用`sklearn.pipeline.Pipeline`,你可以在一个管道中为你的OLS添加一个特征选择器,例如`sklearn.prepreprocessing.SelectKBest`,并在`GridSearchCV`中使用这个管道,后者检查不同的数字. k`. (2认同)