在 scikit-learn 中自动选择几个估计器中最好的一个
Automatically selecting the best of several estimators in scikit-learn
scikit-learn 是否有一个估算器可以运行多个其他估算器并自动选择性能最好的一个(例如,根据它们的交叉验证分数)?
我相信 class 中必须有这样的东西符合估算器接口,以便它可以组合成 pipeline - 正确吗?
scikit-learn 本身目前没有您要查找的内容。然而,像 TPOT and automl-learn 这样的库具有类似 sklearn 的界面,可以自动选择最佳估计器甚至构建整个管道。
您可以使用 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]))
您甚至可以定义自己的评分函数,以定义 "best" 对您意味着什么:
http://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter
scikit-learn 是否有一个估算器可以运行多个其他估算器并自动选择性能最好的一个(例如,根据它们的交叉验证分数)?
我相信 class 中必须有这样的东西符合估算器接口,以便它可以组合成 pipeline - 正确吗?
scikit-learn 本身目前没有您要查找的内容。然而,像 TPOT and automl-learn 这样的库具有类似 sklearn 的界面,可以自动选择最佳估计器甚至构建整个管道。
您可以使用 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]))
您甚至可以定义自己的评分函数,以定义 "best" 对您意味着什么: http://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter