7. 指标#

7.1. 分类指标#

目前,scikit-learn 仅提供 sklearn.metrics.balanced_accuracy_score(在 0.20 版本中)作为处理 不平衡数据集的指标。模块 imblearn.metrics 提供了几个 其他在文献中用于评估分类器质量的指标。

7.1.1. 敏感性和特异性指标#

敏感性和特异性是医学影像中众所周知的指标。敏感性(也称为真阳性率或召回率)是被正确分类的阳性样本的比例,而特异性(也称为真阴性率)是被正确分类的阴性样本的比例。因此,根据应用领域的不同,使用敏感性/特异性或精确度/召回率这对指标。

目前,只有精确率和召回率指标在scikit-learn中实现。sensitivity_specificity_supportsensitivity_scorespecificity_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.  ]])

我们看到,当比较“红色”和“绿色”类别时,距离最小。每当与“蓝色”比较时,距离要大得多。

数学公式

两个样本的特征值之间的距离定义为:

\[\delta(x, y) = \sum_{c=1}^{C} |p(c|x_{f}) - p(c|y_{f})|^{k} \ ,\]

其中 \(x\)\(y\) 是两个样本,\(f\) 是一个给定的特征,\(C\) 是类别数量,\(p(c|x_{f})\) 是在特征值 \(f\)\(x\) 时输出类别为 \(c\) 的条件概率,\(k\) 是一个通常定义为1或2的指数。

特征向量 \(X\)\(Y\) 的距离随后定义为:

\[\Delta(X, Y) = \sum_{f=1}^{F} \delta(X_{f}, Y_{f})^{r} \ ,\]

其中 \(F\) 是特征的数量,\(r\) 是一个通常定义为1或2的指数。