分组交叉验证LassoCV scikit-learn

时间:2018-01-10 13:47:33

标签: 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, 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中的错误?

1 个答案:

答案 0 :(得分:1)

groups错误是指LeaveOneGroupOut拆分方法中的参数。根据引用的文档herecv参数应该是一个可以产生训练/测试分裂的迭代。因此,您只需使用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