sklearn - 对类子集进行精确评分的交叉验证

Posted

技术标签:

【中文标题】sklearn - 对类子集进行精确评分的交叉验证【英文标题】:sklearn - cross validation with precision scoring for a subset of classes 【发布时间】:2014-01-13 09:17:53 【问题描述】:

我有一个用于分类的数据集,带有 3 个类别标签 [0,1,2]

我想运行交叉验证并尝试多个估算器,但我对仅以 1 类和 2 类的精度评分感兴趣。我不关心 0 类的精度,我不希望它的评分摆脱 CV 优化。我也不关心任何课程的召回。换句话说,我想确保无论何时预测 1 或 2,它的置信度都非常高。

所以问题是,我如何运行 cross_val_score 并告诉它的评分函数忽略 0 类的精度?

更新:根据接受的答案,这是一个示例答案代码:

def custom_precision_score(y_true,y_pred):
  precision_tuple, recall_tuple, fscore_tuple, support_tuple = metrics.precision_recall_fscore_support(y_true, y_pred)
  precision_tuple = precision_tuple[1:]
  support_tuple = support_tuple[1:]
  weighted_precision = np.average(precision_tuple, weights=support_tuple)
  return weighted_precision

custom_scorer = metrics.make_scorer(custom_precision_score)

scores = cross_validation.cross_val_score(clf, featuresArray, targetArray, cv=10, scoring=custom_scorer)

【问题讨论】:

cross_val_score 采用 scorer 可调用对象,定义你的得分见this 【参考方案1】:

cross_val_score 包含一个scorer callable object,它可以是set with your own test strategy,使用make_scorer。并且您可以在自定义评分函数score_func(y, y_pred, **kwargs)中设置您要测试的组,该函数由make_scorer调用。

【讨论】:

太好了,我用示例答案代码更新了问题。我认为会有更短的方法,例如precision_score 本身实现的东西,但这也有效:)

以上是关于sklearn - 对类子集进行精确评分的交叉验证的主要内容,如果未能解决你的问题,请参考以下文章

sklearn 交叉验证中的自定义评分功能

sklearn交叉验证-老鱼学sklearn

交叉验证思想

具有交叉验证的 Sklearn 线性回归返回 NA 准确度分数

使用 Sklearn 进行交叉验证

sklearn 中的交叉验证