Deepchecks项目中的评估指标使用指南
2025-07-09 04:11:57作者:范靓好Udolf
概述
在机器学习模型开发过程中,评估模型性能是至关重要的环节。Deepchecks作为一个全面的机器学习验证工具包,提供了丰富的评估指标功能。本文将详细介绍如何在Deepchecks中使用不同类型的评估指标,包括内置指标和自定义指标。
表格数据评估指标
使用字符串指定内置指标
Deepchecks为表格数据提供了多种内置评估指标,可以直接通过字符串名称调用:
from deepchecks.tabular.checks import TrainTestPerformance
from deepchecks.tabular.datasets.classification import adult
# 加载数据和模型
train_ds, test_ds = adult.load_data(data_format='Dataset', as_train_test=True)
model = adult.load_fitted_model()
# 指定要使用的评估指标
scorer = ['precision_per_class', 'recall_per_class', 'fnr']
check = TrainTestPerformance(scorers=scorer)
result = check.run(train_ds, test_ds, model)
这段代码展示了如何使用字符串列表指定多个内置评估指标。precision_per_class
计算每个类别的精确率,recall_per_class
计算每个类别的召回率,fnr
计算假负率。
自定义评估指标
当内置指标不能满足需求时,可以使用scikit-learn的make_scorer
函数创建自定义评估指标:
from deepchecks.tabular.suites import model_evaluation
from sklearn.metrics import cohen_kappa_score, fbeta_score, make_scorer
# 创建自定义评估指标
f1_scorer = make_scorer(fbeta_score, labels=[0, 1], average=None, beta=0.2)
ck_scorer = make_scorer(cohen_kappa_score)
custom_scorers = {'f1': f1_scorer, 'cohen': ck_scorer}
# 使用自定义指标进行评估
suite = model_evaluation(scorers=custom_scorers)
result = suite.run(train_ds, test_ds, model)
这里创建了两个自定义指标:一个调整beta参数的F1分数和一个Cohen's Kappa分数。自定义指标可以灵活地适应各种评估需求。
视觉数据评估指标
使用默认指标
对于视觉任务,Deepchecks同样提供了便捷的评估方式:
from deepchecks.vision.checks import ClassPerformance
from deepchecks.vision.datasets.classification import mnist_torch as mnist
# 加载视觉数据集
train_ds = mnist.load_dataset(train=True, object_type='VisionData')
test_ds = mnist.load_dataset(train=False, object_type='VisionData')
# 使用默认评估指标
check = ClassPerformance()
result = check.run(train_ds, test_ds)
默认情况下,ClassPerformance
会使用常见的分类指标如准确率、精确率、召回率等。
实现自定义视觉指标
对于更特殊的需求,可以继承CustomMetric
类实现完全自定义的评估指标:
import numpy as np
import typing as t
from deepchecks.vision.checks import SingleDatasetPerformance
from deepchecks.vision.metrics_utils import CustomMetric
class CustomAccuracy(CustomMetric):
def __init__(self):
super().__init__()
self._correct = 0
self._total = 0
def reset(self):
self._correct = 0
self._total = 0
super().reset()
def update(self, output: t.Tuple[t.List[np.ndarray], t.List[int]]):
y_pred, y = output
y_pred = np.array(y_pred).argmax(axis=1)
y = np.array(y)
self._correct += (y_pred == y).sum()
self._total += y_pred.shape[0]
super().update(output)
def compute(self):
return self._correct / self._total
# 使用自定义准确率指标
check = SingleDatasetPerformance(scorers={'accuracy': CustomAccuracy()})
result = check.run(train_ds)
这个例子实现了自定义的准确率计算,展示了如何通过继承CustomMetric
类来完全控制指标的计算过程。
使用Deepchecks内置视觉专用指标
Deepchecks还提供了一些视觉任务专用的高级指标,如分割任务中的Dice系数:
from deepchecks.vision.metrics import MeanDice
from deepchecks.vision.datasets.segmentation.segmentation_coco import load_dataset
# 加载分割数据集
coco_dataset = load_dataset()
# 使用MeanDice指标
metric = {'mean_dice': MeanDice(threshold=0.9)}
check = SingleDatasetPerformance(scorers=metric)
result = check.run(coco_dataset)
MeanDice
是图像分割任务中常用的评估指标,这里设置了0.9的阈值来评估模型性能。
总结
Deepchecks提供了灵活的评估指标系统,支持:
- 通过字符串快速调用内置指标
- 使用scikit-learn接口创建自定义指标
- 通过继承实现完全自定义的视觉指标
- 使用视觉任务专用高级指标
这些功能覆盖了从简单到复杂的各种评估需求,使开发者能够全面、准确地评估模型性能。在实际应用中,建议先尝试使用内置指标,当有特殊需求时再考虑自定义实现,以提高开发效率。