如何处理标签数量差异很大的二进制分类

时间:2018-07-23 15:41:50

标签: machine-learning classification

我觉得可能有人问过这个问题,但我不知道如何搜索。基本上,我正在使用随机森林构建一个二元分类器,与否定结果相比,积极结果要多得多(2k vs〜20)。准确度当然是非常好的,因为测试集通常有0-1个负面的例子,超过一千个正面的例子。如果机器学习在这种情况下仍然可行,那么处理少数负面案例的最佳方法是什么?还是数据无用?

1 个答案:

答案 0 :(得分:1)

如前所述,您的数据集的类分布不平衡(2k vs〜20)。这种分布不允许您建立预测模型,因为该模型会将罕见事件(阴性结果)视为随机噪声,并且无法很好地预测新数据集。

在建立任何预测模型之前,您可能必须对稀有事件进行升采样以使其在分布中达到平衡。您仍然可以尝试一个随机森林模型,该模型也适用于不平衡的数据集,但是我认为20 vs〜2k分布在随机森林中也不能很好地工作。您可以获得有关处理不平衡数据分布的更详细的信息,可以单击以下链接:https://elitedatascience.com/imbalanced-classes

用于对数据进行上采样的示例代码如下:

from sklearn.utils import resample
# Separate majority and minority classes
df_minority = df[df.pos_neg==0] #I classified negative class as '0'
df_majority = df[df.pos_neg==1]

# Upsample minority class
df_minority_upsampled = resample(df_minority, 
                                 replace=True,       # sample with replacement
                                 n_samples=11828,    # to match majority class
                                 random_state=123)   # reproducible results

# Combine majority class with upsampled minority class
df_upsampled = pd.concat([df_majority, df_minority_upsampled])

# Display new class counts
df_upsampled.value_counts()
# 1    2000
# 0    2000