使用GridSearchCV的评分函数获取预测

我在scikit-learn中创建动态管道,并将评分函数设置为GridSearchCV的参数字符串:

gs = GridSearchCV(pipeline, grid, scoring='accuracy')

然而,当我尝试获取用于评估预测的评分函数时,我得到了以下结果:

  File "app/experimenter/sklearn/sklearn-dask-tests.py", line 127, in run_pipeline    print(evaluator(expected, predicted))TypeError: __call__() takes at least 4 arguments (3 given)

这是代码:

gs.fit(train_data, train_target)predicted = gs.predict(test_data)evaluator = gs.scorer_print(evaluator(expected, predicted))

从我所看到的来看,问题在于评估器实际上是make_scorer(accuracy_score)。我猜如果我将估计器作为第一个参数添加进去,print(evaluator(expected, predicted))可能会工作,但如何从管道中正确获取它呢?

因为当我使用gs.best_estimator_时,我得到的是:

Pipeline(steps=[('mapper', DataFrameMapper(default=False, df_out=False,        features=[('Sex', LabelBinarizer(neg_label=0, pos_label=1, sparse_output=False))],        sparse=False)), ('DecisionTree', DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=3,            max_features=1, max_...      min_weight_fraction_leaf=0.0, presort=False, random_state=None,            splitter='best'))])

回答:

是的,这是GridSearchCV的预期行为。从gs.best_estimator_返回的管道对象已经在整个train_data上使用网格搜索中找到的最佳参数进行了拟合。

你需要将该管道对象发送到evaluator中。但你当前对evaluator的使用是错误的。

make_scorer创建的scorer_的工作原理是,它接收测试数据,对其进行预测,然后通过与实际数据进行比较来计算得分。

因此,它的签名是:

scorer(estimator, X_test, y_test)

但你试图这样使用它:

evaluator(expected, predicted)

这不会工作,因为:

  1. 它不符合scorer的签名
  2. 它需要X数据,而不是预测的y数据。

所以,如果你已经有了数据的实际值和预测值,你可以简单地使用:

accuracy_score(expected, predicted)

如果你想使用scorer_(你的evaluator),那么你不应该提供predicted,而是提供test_data(从中获得predicted

evaluator(gs.best_estimator_, test_data, expected)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注