数据集不平衡的一般度量

机器算法验证 机器学习 偏度 不平衡类
2022-03-20 00:42:29

我正在处理数千个数据集。其中许多是“不平衡的”;要么是具有高度偏态分布的多类列表(例如,三个类别的样本比例为 3500:300:4),要么是具有偏态分布的连续数。我正在寻找一些可以说“数据集有多严重不平衡”的指标。有这样的衡量标准吗?

最终,我想根据它们的平衡指标对这些数据集进行评分,并为它们中的每一个提供不同的平衡/机器学习解决方案。如果存在,我更喜欢 python 解决方案。

3个回答

您可以使用香农熵来衡量平衡

实例的数据集上,如果你有个大小为的类,你可以按如下方式计算熵: nkci

H=i=1kcinlogcin.

这等于:

  • 0当只有一个类时为换句话说,当您的数据集非常不平衡时0
  • logk当你所有的类都平衡相同大小nk

因此,您可以对数据集 使用以下平衡度量 等于:

Balance=Hlogk=i=1kcinlogcin.logk

  • 0表示不平衡的数据集
  • 1平衡数据集

根据 Simone 的回答,我编写了这个简短的 python 代码来计算余额,这对我来说效果很好。

def balance(seq):
    from collections import Counter
    from numpy import log
    
    n = len(seq)
    classes = [(clas,float(count)) for clas,count in Counter(seq).items()]
    k = len(classes)
    
    H = -sum([ (count/n) * log((count/n)) for clas,count in classes]) #shannon entropy
    return H/log(k)

非常感谢你!

我遇到了同样的问题,并寻找了一些指标来衡量我的数据集中的不平衡程度,但我没有找到任何指标。然后,我创建了一个在 0(完全平衡,所有类别中的样本数量相同)和 1(非常不平衡,当所有类别中的样本数量(除一个除外)为 1,其余样本属于一个类)

公式为:

imbalance=MaxsamplesMinsamplesTotalsamplesnclass

示例:对于平衡情况,则Maxsamples=Minsamplesimbalance=0

对于具有500、300和 100 个样本nclass=3

Maxsamples=500,然后Minsamples=100Totalsamples=900

imbalance=(500100)/(9003)=0.446

在极端的三类情况下,我们在每个类中有 500、1 和 1 个样本,那么

Maxsamples=500,然后Minsamples=1Totalsamples=502

imbalance=(5001)/(5023)=1