7. 指标#
7.1. 分类指标#
目前,scikit-learn 仅提供
sklearn.metrics.balanced_accuracy_score
(在 0.20 版本中)作为处理
不平衡数据集的指标。模块 imblearn.metrics
提供了几个
其他在文献中用于评估分类器质量的指标。
7.1.1. 敏感性和特异性指标#
敏感性和特异性是医学影像中众所周知的指标。敏感性(也称为真阳性率或召回率)是被正确分类的阳性样本的比例,而特异性(也称为真阴性率)是被正确分类的阴性样本的比例。因此,根据应用领域的不同,使用敏感性/特异性或精确度/召回率这对指标。
目前,只有精确率和召回率指标在scikit-learn中实现。sensitivity_specificity_support
、sensitivity_score
和specificity_score
增加了使用这些指标的可能性。
7.1.2. 针对不平衡数据集的额外指标#
geometric_mean_score
[BSanchezGR03, KM+97] 是类别敏感度的乘积的平方根。该度量试图最大化每个类别的准确性,同时保持这些准确性的平衡。
make_index_balanced_accuracy
[GarciaSanchezM12] 可以
包装任何指标,并使用参数 alpha
给予特定类别更多的重视。
7.1.3. 宏平均绝对误差 (MA-MAE)#
序数分类用于当类别之间存在等级时,例如功能级别或电影评级。
macro_averaged_mean_absolute_error
[EBS09] 用于
不平衡的序数分类。计算每个类的平均绝对误差,并在类之间进行平均,给予每个类相等的权重。
7.1.4. 重要指标总结#
classification_report_imbalanced
将为每个类别计算一组指标,并在表格中总结。参数 output_dict
允许获取字符串或Python字典。例如,这个字典可以重新用于创建Pandas数据框。
最下面一行(即“avg/total”)包含每列的支持度(即“sup”列)的加权平均值。
请注意,类别召回率的加权平均值也被称为分类准确率。
7.2. 成对度量#
imblearn.metrics.pairwise
子模块实现了在 scikit-learn 中可用的成对距离,这些距离在 imbalanced-learn 中的某些方法中使用。
7.2.1. 值差异度量#
类 ValueDifferenceMetric
实现了在
[SW86] 中提出的值差异度量。该度量用于计算由仅分类值组成的两个样本的接近度。
给定一个单一特征,与目标向量具有相似相关性的类别将被认为更接近。让我们通过一个例子来说明这种行为,如[WM97]中所述。X
将由一个单一特征表示,该特征将是某种颜色,而目标将是样本是否为苹果:
>>> import numpy as np
>>> X = np.array(["green"] * 10 + ["red"] * 10 + ["blue"] * 10).reshape(-1, 1)
>>> y = ["apple"] * 8 + ["not apple"] * 5 + ["apple"] * 7 + ["not apple"] * 9 + ["apple"]
在这个数据集中,类别“红色”和“绿色”与目标y
更相关,因此它们之间的距离应该比与类别“蓝色”之间的距离更小。我们应该注意这种行为。需要注意的是,我们需要对X
进行编码以使用数值:
>>> from sklearn.preprocessing import OrdinalEncoder
>>> encoder = OrdinalEncoder(dtype=np.int32)
>>> X_encoded = encoder.fit_transform(X)
现在,我们可以计算代表不同类别的三个不同样本之间的距离:
>>> from imblearn.metrics.pairwise import ValueDifferenceMetric
>>> vdm = ValueDifferenceMetric().fit(X_encoded, y)
>>> X_test = np.array(["green", "red", "blue"]).reshape(-1, 1)
>>> X_test_encoded = encoder.transform(X_test)
>>> vdm.pairwise(X_test_encoded)
array([[0. , 0.04, 1.96],
[0.04, 0. , 1.44],
[1.96, 1.44, 0. ]])
我们看到,当比较“红色”和“绿色”类别时,距离最小。每当与“蓝色”比较时,距离要大得多。
数学公式
两个样本的特征值之间的距离定义为:
其中 \(x\) 和 \(y\) 是两个样本,\(f\) 是一个给定的特征,\(C\) 是类别数量,\(p(c|x_{f})\) 是在特征值 \(f\) 为 \(x\) 时输出类别为 \(c\) 的条件概率,\(k\) 是一个通常定义为1或2的指数。
特征向量 \(X\) 和 \(Y\) 的距离随后定义为:
其中 \(F\) 是特征的数量,\(r\) 是一个通常定义为1或2的指数。