scikit-learn:在grid_search中使用sample_weight

use*_*485 9 scikit-learn

是否可以执行grid_search(以获得最佳SVM的C)并使用scikit-learn指定sample_weight?

这是我遇到的错误:

gs = GridSearchCV(svm.SVC(C = 1),[{'kernel':['linear'],'C':[.1,1,10],'probability':[True],'sample_weight': sw_train}])

gs.fit(Xtrain,ytrain)

>> ValueError:估算器SVC的参数sample_weight无效

谢谢

[编辑]

感谢FP:我需要获得最新版本的SKL并使用以下内容:

gs.fit(Xtrain,ytrain,fit_params = {'sample_weight':sw_train})

AN6*_*6U5 9

试图结束这个悬而未决的问题......

您需要获取SKL的最新版本并使用以下内容:

gs.fit(Xtrain, ytrain, fit_params={'sample_weight': sw_train})
Run Code Online (Sandbox Code Playgroud)

但是,它更符合传递fit_params给构造函数的文档:

gs = GridSearchCV(svm.SVC(C=1), [{'kernel': ['linear'], 'C': [.1, 1, 10], 'probability': [True], 'sample_weight': sw_train}], fit_params={'sample_weight': sw_train})

gs.fit(Xtrain, ytrain)
Run Code Online (Sandbox Code Playgroud)


Syc*_*ica 7

以前的答案现在已经过时了。字典fit_params应该传递给fit方法。

GridSearchCV的文档中:

fit_params : 字典,可选

传递给 fit 方法的参数。

0.19 版后已弃用:作为构造函数参数的 fit_params 在 0.19 版中已弃用,并将在 0.21 版中删除。改为将 fit 参数传递给 fit 方法。

  • 有谁确认这与“sample_weight”一起工作正常吗?`GridSearchCV` 使用 `Xtrain` 和 `ytrain` 的不同子集重复调用估计器的 `fit()` 方法。它每次都使用样本权重的相应子集吗?我猜不会;它只是每次调用 `fit(..., **fit_params)` 。这对于诸如“verbose”之类与特定样本无关的参数效果很好。 (3认同)
  • 谢谢。我做了更多搜索,发现 https://github.com/scikit-learn/scikit-learn/issues/2879,这表明“GridSearchCV”现在被编程为在每次调用中传递“sample_weight”的正确子集估计器的“fit()”方法。人们仍然不满意,因为在“GridSearchCV”中没有使用“sample_weight”进行评分的简单方法。 (2认同)

Art*_*wak 5

在0.16.1版本中,如果使用Pipeline,则需要将参数传递给GridSearchCV构造函数:

clf = pipeline.Pipeline([('svm', svm_model)])
model = grid_search.GridSearchCV(estimator = clf, param_grid=param_grid,
    fit_params={'svm__sample_weight': sw_train})
Run Code Online (Sandbox Code Playgroud)