如何从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

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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