通过词典scikit学习估计

时间:2015-10-13 19:24:45

标签: python dictionary scikit-learn

我正在尝试将模型参数作为词典传递给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)

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

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

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

感谢。

3 个答案:

答案 0 :(得分:39)

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

lr = LinearRegression(**params)

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

lr.set_params(params)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

fit_interceptLinearRegression对象

的第一个参数

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

这就解释了为什么你的字典被传递给那个参数,其他args(也是可选的)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'])