是否可以执行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})
答案 0 :(得分:9)
试图结束这个悬而未决的问题......
您需要获取SKL的最新版本并使用以下内容:
gs.fit(Xtrain, ytrain, fit_params={'sample_weight': sw_train})
但是,它更符合将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)
答案 1 :(得分:3)
在版本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})
答案 2 :(得分:2)
以前的答案现已过时。字典companyNameCheckPromise.then((data) => {
return new Promise((resolve, reject) => {
...
resolve(data); // do not return it
});
});
应该传递给fit_params
方法。
来自GridSearchCV的文档:
fit_params :dict,optional
传递给fit方法的参数。
自版本0.19后不推荐使用:fit_params作为构造函数参数在版本0.19中已弃用,将在版本0.21中删除。将拟合参数传递给fit方法。
答案 3 :(得分:0)
以下在Sklearn 0.23.1中起作用,
grid_cv = GridSearchCV(clf, param_grid=param_grid,
scoring='recall', n_jobs=-1, cv=10)
grid_cv.fit(x_train_orig, y=y_train_orig,
sample_weight=my_sample_weights)
答案 4 :(得分:0)
适合 fit_params={'sample_weight': weights}
作品。
但是,验证仍然没有 (github issue)。本质上,交叉验证会报告未加权的损失,因此超参数调整可能会被引导到错误的方向。
这里有一个解决方法的准确性。还应使用其他指标。
from sklearn.metrics import accuracy_score
from sklearn.utils import compute_sample_weight
from sklearn.metrics import make_scorer
def weighted_accuracy_eval(y_pred, y_true, **kwargs):
balanced_class_weights_eval = compute_sample_weight(
class_weight='balanced',
y=y_true
)
out = accuracy_score(y_pred=y_pred, y_true=y_true, sample_weight=balanced_class_weights_eval, **kwargs)
return out
weighted_accuracy_eval_skl = make_scorer(weighted_accuracy_eval)
gridsearch = GridSearchCV(
estimator=model,
scoring=weighted_accuracy_eval,
param_grid=paramGrid,
)
cv_result = gridsearch.fit(
X_train,
y_train,
fit_params=fit_params
)