0

我想知道 sklearn.LassoCV 如何执行交叉验证。特别是我想知道样本是如何在折叠中细分的。它是随机的还是确定的过程?

例如,假设我有 100 个样本,我使用 10 折交叉验证并考虑 F 将每个样本发送到其折页的函数。

F(1:10)=1, F(11:20)=2,... 还是随机过程(例如 F(1)=8, F(2)=7...)

如果问题不清楚,请告诉我。

谢谢 :)

好的,这是解决方案:

from sklearn.linear_model import LassoCV
from sklearn.cross_validation import KFold

kf=KFold(len(y),n_folds=10,shuffle=True)
cv=LassoCV(cv=kf).fit(x,y)
4

1 回答 1

3

我假设您将关键字 arg 传递cv=10LassoCV构造函数?

如果是这种情况,那么这将创建一个KFold有 10 个折叠的对象:看看在(的父级)check_cv中调用的位置。LinearModelCVLassoCV

KFold接受一个random_state关键字参数(默认为 None - 所以numpy.random会尝试播种/dev/urandom或类似的东西) - 但如果 shuffle 是False(默认情况下),那么random_state实际上什么都不做。折叠是从数据集中的相邻成员中选择的。

如果您想随机折叠,您应该创建一个KFold带有 的对象shuffle=True,并将该对象用作cv关键字参数,而不是10.

资料来源:

  1. https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/coordinate_descent.py
  2. https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/cross_validation.py
于 2013-11-27T12:35:06.740 回答