我正试图将模型参数作为字典传递给Scikit-learn估计器,并且我没有运气。它似乎只是将我的字典嵌套到其中一个参数中。例如:
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'
这同样不成功。有人有什么建议吗?我唯一的限制是数据将作为一个字典(实际上是一个json对象加载json.uploads)。
谢谢。
用正确的参数初始化估算器的最佳解决方案是解包字典:
lr = LinearRegression(**params)
如果出于某种原因你需要在之后设置一些参数,你可以使用:
lr.set_params(**params)
与使用setattr
相比,这有一个优点,因为它允许Scikit学习对参数执行一些验证检查。
我明白了。像这样使用setattr
for k,v in params.items():
setattr(lr,k,v)
fit_intercept
是LinearRegression
对象的第一个参数
所以这解释了为什么你的字典被传递给该参数,其他参数(也是可选的)copy_X
和normalize
没有接收参数,所以它们使用默认值。
你也可以这样做:
params = {
'copy_X': True,
'fit_intercept': False,
'normalize': True
}
lr = LinearRegression(copy_X = params['copy_X'],
fit_intercept = params['fit_intercept'],
normalize = params['normalize'])