如何调整投票分类器(Sklearn)中的权重

问题描述 投票:0回答:2

我正在尝试执行以下操作:

vc = VotingClassifier(estimators=[('gbc',GradientBoostingClassifier()),
                       ('rf',RandomForestClassifier()),('svc',SVC(probability=True))],
                       voting='soft',n_jobs=-1)

params = {'weights':[[1,2,3],[2,1,3],[3,2,1]]}
grid_Search = GridSearchCV(param_grid = params, estimator=vc)
grid_Search.fit(X_new,y)
print(grid_Search.best_Score_)

在此,我想调整参数

weights
。如果我使用
GridSearchCV
,会花费很多时间。因为它需要为每次迭代拟合模型。我想这不是必需的。更好的方法是使用
prefit
中的
SelectModelFrom
函数中使用的
sklearn.model_selection
之类的东西。

还有其他选择还是我误解了什么?

python scikit-learn prediction ensemble-learning
2个回答
2
投票

以下代码(在我的存储库中)可以做到这一点。

它包含一个类

VotingClassifierCV
。它首先对所有分类器进行交叉验证的预测。然后循环所有权重,选择最佳组合,并使用预先计算的预测。


0
投票

一种计算友好的方法是首先在训练数据上分别对每个分类器进行参数调整。然后根据验证数据对每个分类器进行与目标指标(比如

accuracy_score
)成比例的加权。

# parameter tune
models = {
   'rf': GridSearchCV(rf_params, RandomForestClassifier()).fit(X_trian, y_train),
   'svc': GridSearchCV(svc_params, SVC()).fit(X_train, y_train),
}

# relative weights
model_scores = {
   name: sklearn.metrics.accuracy_score(
      y_validate,
      model.predict(X_validate),
      normalized=True
   )
   for name, model in models.items()
}
total_score = sum(model_scores.values())

# combine the parts
combined_model = VotingClassifier(
  list(models.items()),
  weights=[
    model_scores[name] / total_score
    for name in models.keys()
  ]
).fit(X_learn, y_learn)

最后,您可以将组合模型与您的学习(训练+验证)数据进行拟合,并使用您的测试数据进行评估。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.