Python 分组交叉验证LassoCV scikit学习

Python 分组交叉验证LassoCV scikit学习,python,machine-learning,scikit-learn,regression,internal,Python,Machine Learning,Scikit Learn,Regression,Internal,我在使用LassoCV()回归器和分组交叉验证对象时遇到了一些奇怪的错误 更具体地说,有了数据帧df和目标列y,我想执行LeaveOneGroupOut()交叉验证。如果我运行以下命令: df = np.random.rand(100,50) y = np.random.rand(100) logo = LeaveOneGroupOut() groups = np.random.randint(0,10,100) lassoCV = linear_model.LassoCV(eps=0.0001

我在使用LassoCV()回归器和分组交叉验证对象时遇到了一些奇怪的错误

更具体地说,有了数据帧
df
和目标列
y
,我想执行LeaveOneGroupOut()交叉验证。如果我运行以下命令:

df = np.random.rand(100,50)
y = np.random.rand(100)
logo = LeaveOneGroupOut()
groups = np.random.randint(0,10,100)
lassoCV = linear_model.LassoCV(eps=0.0001, n_alphas=400, max_iter=200000, cv=logo, normalize=False, random_state=9) `
运行:

lassoCV.fit(df,y)
导致错误:
ValueError:groups参数不应为None。

如果我跑步:

lassoCV.fit(df,y,groups)
我得到一个错误:
TypeError:fit()接受3个位置参数,但给出了4个


在我看来,第二种选择是可行的。我实施了什么错误吗?或者这是scikit learn中的一个bug

groups错误是指
LeaveOneGroupOut
的拆分方法中的参数。根据引用的文档,
cv
参数应该是一个可产生列车/测试拆分的iterable。因此,您只需要使用该方法创建生成器对象


第二个问题,如果我使用函数
cross\u val\u predict()
我为什么要按如下方式使用它:
alpha=LassoCV.alpha lasso=lasso(alpha,max\u iter=20000,normalize=False)cross\u val\u predict(lasso,df,y,cv=LeaveOneGroupOut(),groups=groups)
因为下面给出了一个错误:
cross\u val\u predict(lasso,df,y,cv=gen\u logo)
因为gen\u logo是一个生成器对象,所以一旦用完,再次调用它生成下一个元素时,它不会返回任何其他内容。您必须重新创建生成器对象,然后将其作为
cv
参数传递。因此,运行
gen\u logo=logo.split(df,groups=groups)
,然后调用
cross\u val\u predict(lasso,df,y,cv=gen\u logo)
。这是一个关于发电机的好消息。
gen_logo = logo.split(df, groups=groups)  # create your generator
lassoCV = linear_model.LassoCV(eps=0.0001, n_alphas=400, max_iter=200000, cv=gen_logo, normalize=False, random_state=9)  # pass it to the cv argument
lassoCV.fit(df, y)  # now fit