基于GridSearchCV优化召回率的RBF SVC模型:如何获取精确率?
解决GridSearchCV最优模型精确率获取问题
嗨,我来帮你搞定这个精确率的获取问题!其实有两种简单的方法可以拿到最优模型的精确率,下面给你一步步拆解:
方法一:从已有的GridSearchCV结果中提取(如果提前配置了多评分指标)
如果你在初始化GridSearchCV的时候,除了指定召回率作为优化目标,还同时设置了追踪精确率,那直接从cv_results_里取就行:
# 假设你的GridSearchCV对象叫grid_search # 获取最优参数对应的索引 best_idx = grid_search.best_index_ # 提取该索引对应的交叉验证精确率均值 best_precision = grid_search.cv_results_['mean_test_precision'][best_idx]
不过要注意,只有当初始化GridSearchCV时用了多评分参数才会有这个字段,比如:
from sklearn.model_selection import GridSearchCV from sklearn.svm import SVC # 定义参数网格 param_grid = {'gamma': [0.001, 0.01, 0.1, 1]} # 初始化GridSearchCV,同时追踪召回率和精确率 grid_search = GridSearchCV(estimator=m, param_grid=param_grid, scoring={'recall': 'recall', 'precision': 'precision'}, refit='recall', # 按召回率选择最优模型 cv=5) grid_search.fit(X_train, y_train)
方法二:用最优模型重新计算精确率(如果没配置多评分指标)
如果已经跑完了GridSearchCV,没设置多评分指标也没关系,直接用它给出的最优模型来计算:
from sklearn.metrics import precision_score # 获取最优模型 best_model = grid_search.best_estimator_ # 用最优模型对测试集(或验证集)做预测 y_pred = best_model.predict(X_test) # 计算精确率 best_precision = precision_score(y_test, y_pred)
最后计算差值
现在你已经有了召回率(1)和精确率,直接算差值就行:
difference = 1 - best_precision
简单来说,GridSearchCV默认只会保存你指定的优化指标结果,所以如果只盯召回率跑的,就得手动用最优模型算精确率。要是想下次直接拿到所有需要的指标,记得初始化时设置多评分参数哦!
内容的提问来源于stack exchange,提问作者kaless
相关产品推荐
相关产品推荐

