如何处理这种类别不平衡的倾斜数据集?

我需要处理类别不平衡问题,并对输入的测试数据集进行二分类,在训练数据集中,大多数类别标签为1(另一个类别标签为0)。

例如,以下是训练数据的一部分:

93.65034,94.50283,94.6677,94.20174,94.93986,95.21071,194.13783,94.61797,94.50526,95.66091,95.99478,95.12608,194.0238,93.95445,94.77115,94.65469,95.08566,94.97906,194.36343,94.32839,95.33167,95.24738,94.57213,95.05634,194.5774,93.92291,94.96261,95.40926,95.97659,95.17691,093.76617,94.27253,94.38002,94.28448,94.19957,94.98924,0

其中最后一列是类别标签01。实际数据集非常倾斜,类别比例为10:1,即大约有700个样本的类别标签为0,而其余6800个样本的类别标签为1。

上述只是数据集中所有样本的一部分,但实际数据集中大约有90%的样本类别标签1,其余的类别标签0,尽管所有样本或多或少都很相似。

处理这种数据集应该使用哪种分类器比较好?

我已经尝试过使用逻辑回归以及将class-weight参数设置为"balanced"svm,但在准确率上没有显著改善。


回答:

但在准确率上没有显著改善。

准确率并不是评估的正确方法(例如,请参阅准确率悖论)。在类别比例为10:1的情况下,只需始终预测类别标签0,就可以轻易获得90%的准确率。

一些好的起点包括:

  • 尝试不同的性能指标。例如,F1分数马修斯相关系数

  • “重新采样”数据集:增加来自代表性不足类别的样本(过采样)/ 删除来自代表性过剩类别的实例(欠采样;你应该有大量数据)

  • 从不同的角度出发:异常检测对于不平衡数据集是一个不错的尝试

  • 尝试不同的算法也是一个可能性,但不是万能的解决方案。你可能应该从决策树开始(在不平衡数据集上通常表现良好)


编辑(现在知道你在使用scikit-learn

class_weight(scikit-learn)参数的权重用于训练分类器(所以balanced是可以的),但准确率并不是评估其性能的好方法。

sklearn.metrics模块实现了几种损失、分数和效用函数,用于衡量分类性能。还可以参考如何使用scikit-learn计算多类别情况下的精确率、召回率、准确率和F1分数?

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注