分组交叉验证 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
我 运行 将 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