将 dict 传递给 scikit learn estimator
Posted
技术标签:
【中文标题】将 dict 传递给 scikit learn estimator【英文标题】:Pass a dict to 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)。
谢谢。
【问题讨论】:
【参考方案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_intercept
是LinearRegression
对象的第一个参数
http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html
这就解释了为什么将您的字典传递给该参数,其他参数(也是可选的)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'])
【讨论】:
以上是关于将 dict 传递给 scikit learn estimator的主要内容,如果未能解决你的问题,请参考以下文章
将单词添加到 scikit-learn CountVectorizer 停止列表