如何从sklearn的GridSearchCV中同时获取MSE和R2?

我可以对一个管道使用GridSearchCV,并指定评分标准为'MSE''R2'。然后我可以通过gridsearchcv.best_score_获取我指定的那个分数。但是,如何同时获取GridSearchCV找到的解决方案的另一个分数呢?

如果我用另一个评分参数再次运行GridSearchCV,它可能不会找到相同的解决方案,因此它报告的分数可能不对应于我们已经有了第一个值的那个模型。

也许我可以提取参数并提供给一个新的管道,然后使用cross_val_score和新的管道运行?有没有更好的方法?谢谢。


回答:

遗憾的是,目前使用GridSearchCV或任何内置的sklearn方法/对象来实现这一点并不简单。

虽然有关于多评分器输出的讨论,但这一功能可能不会很快实现。

所以你必须自己动手,有几种方法可以做到:

1) 你可以查看cross_val_score的代码,并自己执行交叉验证循环,每次折叠完成后调用你感兴趣的评分器。

2) [不推荐] 你也可以基于你感兴趣的评分器构建自己的评分器,并让它们以数组形式输出分数。然后你会遇到这里解释的问题:sklearn – 使用多个分数进行交叉验证

3) 由于你可以编写自己的评分器,你可以创建一个评分器,输出你想要的分数之一(即你希望GridSearchCV据此做出决策的分数),并将你感兴趣的所有其他分数存储在另一个地方,这可能是一个静态/全局变量,甚至是一个文件。

第三种方法似乎最不繁琐且最有前景:

import numpy as npfrom sklearn.metrics import r2_score, mean_squared_errorsecret_mses = []def r2_secret_mse(estimator, X_test, y_test):    predictions = estimator.predict(X_test)    secret_mses.append(mean_squared_error(y_test, predictions))    return r2_score(y_test, predictions)X = np.random.randn(20, 10)y = np.random.randn(20)from sklearn.cross_validation import cross_val_scorefrom sklearn.linear_model import Ridger2_scores = cross_val_score(Ridge(), X, y, scoring=r2_secret_mse, cv=5)

你会在r2_scores中找到R2分数,在secret_mses中找到对应的MSE分数。

请注意,如果你进行并行处理,这可能会变得混乱。在这种情况下,你可能需要将分数写入memmap中的特定位置,例如。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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