如何从GridSearchCV的每次参数迭代中获取F1分数?
解决GridSearchCV中获取F1分数的问题
你看到的那些split*_test_score和mean_test_score列其实就是你要的F1-micro分数——因为你已经在GridSearchCV里指定了scoring='f1_micro',GridSearchCV会直接把这个指标作为交叉验证的测试集评分,只是列名没有显式带上“F1”字样而已。
具体含义说明
split0_test_score到split4_test_score:对应5折交叉验证中,每一轮测试集的F1-micro分数mean_test_score:5轮F1-micro分数的平均值std_test_score:5轮分数的标准差
让列名更直观的方法
如果你希望导出的CSV里有明确的“F1分数”相关列名,可以在生成DataFrame后手动重命名:
df = pd.DataFrame(clf.cv_results_) # 重命名分数列 rename_mapping = { 'split0_test_score': 'split0_f1_micro', 'split1_test_score': 'split1_f1_micro', 'split2_test_score': 'split2_f1_micro', 'split3_test_score': 'split3_f1_micro', 'split4_test_score': 'split4_f1_micro', 'mean_test_score': 'mean_f1_micro', 'std_test_score': 'std_f1_micro' } df.rename(columns=rename_mapping, inplace=True) df.to_csv('result.csv', index=False)
更灵活的多指标配置(可选)
如果之后需要同时查看多个评分指标,可以把scoring参数设为字典,这样生成的列名会直接带指标名称,不用手动重命名:
clf = GridSearchCV( estimator=DecisionTreeClassifier(), param_grid=params, scoring={'f1_micro': 'f1_micro', 'accuracy': 'accuracy'} # 可添加多个指标 ) clf.fit(X, y) df = pd.DataFrame(clf.cv_results_) # 此时会出现mean_test_f1_micro、split0_test_f1_micro等明确列名 df.to_csv('result.csv', index=False)
快速验证列名
如果不确定哪些列对应F1分数,可以先打印所有结果列的键:
print(clf.cv_results_.keys())
你会看到所有和评分相关的列,其中包含你设置的f1_micro对应的分数列。
内容的提问来源于stack exchange,提问作者user58519
相关产品推荐
相关产品推荐

