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