我正在尝试执行以下操作:
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
之类的东西。
还有其他选择还是我误解了什么?
一种计算友好的方法是首先在训练数据上分别对每个分类器进行参数调整。然后根据验证数据对每个分类器进行与目标指标(比如
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)
最后,您可以将组合模型与您的学习(训练+验证)数据进行拟合,并使用您的测试数据进行评估。