【问题标题】:Pass a dict to scikit learn estimator将 dict 传递给 scikit learn estimator
【发布时间】:2016-01-11 16:39:30
【问题描述】:

我试图将模型参数作为 dict 传递给 Scikit-learn 估计器,但没有运气。它似乎只是将我的 dict 嵌套到参数之一中。例如:

params = {
 'copy_X': True, 
 'fit_intercept': False, 
 'normalize': True
}

lr = LinearRegression(params)

给我:

LinearRegression(copy_X=True,
         fit_intercept={'copy_X': True, 'fit_intercept': False,'normalize': True},
     normalize=False)

另外,我创建了一个函数来迭代字典,并可以创建一个字符串,如:

'copy_X=True, fit_intercept=True, normalize=False'

这同样不成功。有人在这里有什么建议吗?我唯一的限制是数据将以 dict 的形式传给我(实际上是一个 json 对象正在加载 json.uploads)。

谢谢。

【问题讨论】:

    标签: python dictionary scikit-learn


    【解决方案1】:

    使用正确参数初始化估算器的最佳解决方案是解压字典

    lr = LinearRegression(**params)
    

    如果由于某种原因之后需要设置一些参数,可以使用:

    lr.set_params(**params)
    

    这比使用setattr 有一个优势,因为它允许 Scikit 学习对参数执行一些验证检查。

    【讨论】:

    • 这应该是公认的答案——这是将一堆 kwargs 传递给函数的标准方式。
    【解决方案2】:

    我明白了。像这样使用 setattr。

    for k,v in params.items():
       setattr(lr,k,v)
    

    【讨论】:

      【解决方案3】:

      fit_interceptLinearRegression 对象的第一个参数

      http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html

      这就解释了为什么将您的字典传递给该参数,其他参数(也是可选的)copy_Xnormalize 没有接收任何参数,因此它们使用默认值。

      你也可以这样做:

      params = {
       'copy_X': True, 
       'fit_intercept': False, 
       'normalize': True
      }
      
      lr = LinearRegression(copy_X = params['copy_X'], \
                            fit_intercept = params['fit_intercept'], \
                            normalize = params['normalize'])
      

      【讨论】:

        猜你喜欢
        • 2020-12-29
        • 1970-01-01
        • 2020-02-21
        • 2017-03-16
        • 1970-01-01
        • 1970-01-01
        • 2020-01-30
        • 2018-04-23
        相关资源
        最近更新 更多