【问题标题】:Grouped Cross-validation LassoCV scikit-learn分组交叉验证 LassoCV scikit-learn
【发布时间】:2018-01-10 13:47:32
【问题描述】:

我在使用 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 中的错误?

【问题讨论】:

    标签: python machine-learning scikit-learn regression internal


    【解决方案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
    

    【讨论】:

    • 第二个问题,如果我使用函数cross_val_predict(),我必须按如下方式使用它:alpha = LassoCV.alpha lasso = Lasso(alpha,max_iter=20000,normalize=False) cross_val_predict(lasso, df, y,cv=LeaveOneGroupOut(),groups=groups) 如下给我一个错误:cross_val_predict(lasso, df, y, cv=gen_logo)
    • 因为 gen_logo 是一个生成器对象,所以一旦它被耗尽,当再次调用它来生成下一个元素时,它不会返回任何其他内容。您必须重新创建生成器对象,然后将其作为 cv 参数传递。因此,运行gen_logo = logo.split(df, groups=groups),然后调用cross_val_predict(lasso, df, y, cv=gen_logo)。这是一个很好的 article 生成器。
    猜你喜欢
    • 2016-04-25
    • 2015-11-06
    • 2017-09-02
    • 2015-12-11
    • 2018-04-02
    • 2016-02-11
    • 1970-01-01
    • 2015-09-04
    • 2014-07-30
    相关资源
    最近更新 更多