我正在使用sklearn中的套索方法执行线性回归。
根据他们的指导,以及我在其他地方看到的指导,建议不要简单地对所有训练数据进行交叉验证,而建议将其分成更传统的训练集/验证集分区。
因此,在训练集上训练了套索,然后根据来自验证集的交叉验证的结果来调整超参数alpha。最后,在测试集上使用可接受的模型以给出真实的视图,以了解其在现实中的性能。在这里将关注点分开是防止过度拟合的预防措施。
实际问题
Lasso CV是否符合上述协议,还是只是在相同的数据上和/或在相同的CV轮次中以某种方式训练了模型参数和超参数?
谢谢。
如果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)
答:不,LassoCV
不会为您完成所有工作,您必须将其与所需的功能结合使用cross_val_score
。同时,这也是实现此类对象的合理方式,因为我们也可能只对优化过的超参数进行拟合LassoCV
而不必对另一组保留的数据直接进行评估,对此很感兴趣。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句