2013-11-27 221 views
0

我想知道sklearn.LassoCV如何执行交叉验证。特别是我想知道这些样本是如何在褶皱中细分的。这是一个随机的还是确定性的过程?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) 

回答

2

我假设你正在传递的关键字ARG cv=10LassoCV构造?

如果是这样的话,那么这将创建一个对象KFold用10倍:看看其中check_cv被称为在LinearModelCVLassoCV的父)。

KFold需要random_state关键字参数(默认为无 - 所以numpy.random会尽量种子上/dev/urandom或类似的东西) - 但如果洗牌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
+0

感谢它的工作原理 – Donbeo