分组交叉验证 LassoCV scikit-learn

Grouped Cross-validation LassoCV scikit-learn

我 运行 将 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: The 'groups' parameter should not be None.

如果我运行:

lassoCV.fit(df,y,groups)

我收到错误:TypeError: fit() takes 3 positional arguments but 4 were given

在我看来,第二种选择是可行的方法。我执行错了吗?或者这是 scikit-learn 中的错误?

groups 错误是指您 LeaveOneGroupOut 的 split 方法中的参数。根据引用的文档 here, the cv argument should be an iterable that yields train/test splits. Therefore, you just need to create the generator object using the split 方法。

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