rho*_*ron 5 python statistics machine-learning scikit-learn
我可以在管道上使用 GridSearchCV 并将评分指定为'MSE'
或'R2'
。然后我可以访问gridsearchcv._best_score
以恢复我指定的那个。如何获得 GridSearchCV 找到的解决方案的其他分数?
如果我使用另一个评分参数再次运行 GridSearchCV,它可能找不到相同的解决方案,因此它报告的分数可能与我们拥有第一个值的模型不对应。
也许我可以提取参数并将它们提供给新管道,然后cross_val_score
使用新管道运行?有没有更好的办法?谢谢。
不幸的是,现在对于GridSearchCV
或任何内置 sklearn 方法/对象来说这并不简单。
尽管有人谈论拥有多个记分器输出,但此功能可能不会很快出现。
所以你必须自己做,有几种方法:
1)您可以查看代码cross_val_score
并自己执行交叉验证循环,在每次折叠完成后调用感兴趣的评分器。
2) [不推荐] 您还可以从您感兴趣的记分器中构建自己的记分器,并让它们将分数输出为数组。然后,您会发现自己遇到了此处解释的问题: sklearn - Crossvalidation with multiple Scores
3)由于您可以编写自己的记分器,因此您可以制作一个记分器,输出您的一个分数(您想要GridSearchCV
做出决定的分数),并将您感兴趣的所有其他分数存储在一个单独的位置,这可能是静态/全局变量,甚至是文件。
第三点似乎是最不乏味且最有希望的:
import numpy as np
from sklearn.metrics import r2_score, mean_squared_error
secret_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_score
from sklearn.linear_model import Ridge
r2_scores = cross_val_score(Ridge(), X, y, scoring=r2_secret_mse, cv=5)
Run Code Online (Sandbox Code Playgroud)
您将在 中找到 R2 分数r2_scores
以及相应的 MSE secret_mses
。
请注意,如果并行,这可能会变得混乱。在这种情况下,您需要将分数写入内存映射中的特定位置。
归档时间: |
|
查看次数: |
5808 次 |
最近记录: |