【问题标题】:Automatically selecting the best of several estimators in scikit-learn在 scikit-learn 中自动选择几个估计器中最好的
【发布时间】:2017-07-23 15:26:11
【问题描述】:

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

我相信在一个符合估算器接口的类中一定有这样的东西,这样它就可以组合成一个pipeline——对吗?

【问题讨论】:

  • 我想你的意思是一个集成方法scikit-learn.org/stable/modules/ensemble.html ?但我对你的问题感到困惑。 Cross_validation 是通过聚合示例得出的,因此如果您最终要选择一个最佳分类器,则根据 cross_validation 错误选择最佳分类器将是您在预处理和测试中要做的事情。如果这不是你所追求的,你能澄清这个问题吗?
  • 通常我会使用交叉验证来测试不同估计器的性能。然后我会手动选择表现最好的进行最终预测。现在我想使用 sklearn 管道实现我的整个工作流程,所以我相信这最后一步也需要由一个实现估计器接口的类来执行。我不相信“集成方法”是正确的答案——预测不应该结合起来。
  • IMO,scikit 不包含任何你想要的东西。但你可以从这里得到提示:scikit-learn.org/stable/auto_examples/classification/…

标签: python machine-learning scikit-learn data-science


【解决方案1】:

scikit-learn 本身目前没有您要查找的内容。但是,也有像 TPOTautoml-learn 这样的库,它们具有类似 sklearn 的接口,用于自动选择最佳估计器,甚至构建整个管道。

【讨论】:

  • 感谢您的澄清。令人惊讶的是 sklearn 没有它 - 我相信这是一个简单的步骤,在 ML 工作流程中经常执行。
【解决方案2】:

您可以使用 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]))

来自官方文档的示例: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

【讨论】:

    猜你喜欢
    • 2015-03-14
    • 2013-06-04
    • 2020-10-06
    • 2015-02-15
    • 2020-09-25
    • 2020-10-31
    • 2019-08-18
    • 2014-06-27
    • 1970-01-01
    相关资源
    最近更新 更多