通过词典scikit学习估计

GMa*_*rsh 22 python dictionary scikit-learn

我试图将模型参数作为词典传递给Scikit-learn估算器并且没有运气.它似乎将我的dict嵌入其中一个参数中.例如:

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

lr = LinearRegression(params)
Run Code Online (Sandbox Code Playgroud)

给我:

LinearRegression(copy_X=True,
         fit_intercept={'copy_X': True, 'fit_intercept': False,'normalize': True},
     normalize=False)
Run Code Online (Sandbox Code Playgroud)

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

'copy_X=True, fit_intercept=True, normalize=False'
Run Code Online (Sandbox Code Playgroud)

这同样不成功.有人在这有什么建议吗?我唯一的限制是数据将作为一个dict(实际上是一个json对象加载json.uploads)来到我身边.

谢谢.

ldi*_*rer 47

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

lr = LinearRegression(**params)
Run Code Online (Sandbox Code Playgroud)

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

lr.set_params(params)
Run Code Online (Sandbox Code Playgroud)

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

  • 这应该是公认的答案——这是将一堆 kwargs 传递给函数的标准方法。 (2认同)

GMa*_*rsh 5

我知道了。像这样使用 setattr 。

for k,v in params.items():
   setattr(lr,k,v)
Run Code Online (Sandbox Code Playgroud)