在scikit-learn中自动选择最佳的几个估算器

cls*_*udt 1 python machine-learning scikit-learn data-science

scikit-learn是否有一个运行多个其他估算器的估算器并自动选择性能最佳的估算器(例如根据其交叉验证分数)?

我相信在符合估算器接口的类中必须有这样的东西,以便它可以在管道中组合- 正确吗?

Rog*_*ves 7

您可以使用GridSearchCV,不仅可以选择最佳估算器,还可以调整其超参数,例如,我正在使用它来查找最佳文本分类器:

pipeline = Pipeline([
    ('vect', CountVectorizer(ngram_range=(2,2))),
    ('tfidf', TfidfTransformer(use_idf=True)),
    ('clf', SVC())
])

parameters = {'clf': [
    SVC(),
    MultinomialNB(),
    BernoulliNB(),
    MLPClassifier(max_iter=1000),
    KNeighborsClassifier(),
    SGDClassifier(max_iter=1000),
    RandomForestClassifier()
]}

gs_clf = GridSearchCV(pipeline, parameters, n_jobs=-1)
gs_clf = gs_clf.fit(X, y)

print("Best score", gs_clf.best_score_)

for param_name in sorted(parameters.keys()):
    print("%s: %r" % (param_name, gs_clf.best_params_[param_name]))
Run Code Online (Sandbox Code Playgroud)

来自官方文档的示例:http://scikit-learn.org/stable/auto_examples/plot_compare_reduction.html#sphx-glr-auto-examples-plot-compare-reduction-py

您甚至可以定义自己的评分函数,以定义"最佳"对您的意义:http: //scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter