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

Posted

技术标签:

【中文标题】如何处理这种不平衡的倾斜数据集?【英文标题】:How to deal with this unbalanced-class skewed data-set? 【发布时间】:2017-01-23 12:58:42 【问题描述】:

我必须处理Class Imbalance Problem 并对输入测试数据集执行binary-classification,其中大部分类标签在训练数据集中为 1(另一个类标签为 0)。

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

93.65034,94.50283,94.6677,94.20174,94.93986,95.21071,1
94.13783,94.61797,94.50526,95.66091,95.99478,95.12608,1
94.0238,93.95445,94.77115,94.65469,95.08566,94.97906,1
94.36343,94.32839,95.33167,95.24738,94.57213,95.05634,1
94.5774,93.92291,94.96261,95.40926,95.97659,95.17691,0
93.76617,94.27253,94.38002,94.28448,94.19957,94.98924,0

最后一列是class-label - 01。实际数据集与 10:1 的类比率非常偏斜,即大约 700 个样本的 class label 为 0,而其余 6800 个样本的 class label 为 1。

上述只是给定数据集中所有样本中的一小部分,但实际数据集中包含90% 的样本,class-label1,其余为@987654334 @ 成为0,尽管所有样本或多或少都非常相似。

哪个分类器最适合处理这种数据集?

我已经尝试过logistic-regressionsvm,将class-weight 参数设置为"balanced",但准确率没有明显提高。

【问题讨论】:

由于这不是一个编程问题,您将在Cross Validated得到更好的答复 【参考方案1】:

但准确度没有明显提高。

准确性不是要走的路(例如,请参阅Accuracy paradox)。通过 10:1 的类比率,您只需始终预测 class-label 0,即可轻松获得 90% 的准确率。

一些好的起点是:

尝试不同的性能指标。例如。 F1-score 和 Matthews correlation coefficient

“重新采样”数据集:从代表性不足的类中添加示例(over-sampling)/从过度代表性的类中删除实例(under-sampling em>;你应该有很多数据)

不同的观点:anomaly detection 是不平衡数据集的一个很好的尝试

不同的算法是另一种可能性,但不是银芽。可能你应该从decision trees 开始(通常在不平衡的数据集上表现良好)


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

class_weight (scikit-learn) 参数的权重用于训练分类器(所以balanced 没问题),但准确率对于了解它的性能来说是一个糟糕的选择。

sklearn.metrics 模块为measure classification performance 实现了几个损失、得分和效用函数。也可以看看How to compute precision, recall, accuracy and f1-score for the multiclass case with scikit learn?。

【讨论】:

实际上给我的测试数据集没有类标签,我必须预测它们,并从在线法官那里检查准确性,因此我认为sklearn.metrics无法帮助我。那我该怎么办?有没有办法只预测给定测试样本的 class-label 是否为 0 ? @manlio【参考方案2】:

您是否尝试过绘制 ROC 曲线和 AUC 曲线来检查您的参数和不同的阈值?如果不是,那应该给你一个很好的起点。

【讨论】:

你能指导一下如何做到这一点吗?我正在用 Python 编码。 @Jarvis sklearn 应该有它。这是其中一个链接:scikit-learn.org/stable/auto_examples/model_selection/…

以上是关于如何处理这种不平衡的倾斜数据集?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理数据不平衡问题

如何处理不均衡数据

如何处理数据不均衡问题(分类问题)

机器学习中如何处理不平衡数据?

如何处理大型但不是大数据的数据集?

处理Auto-Sklearn中多类分类的不平衡数据集的最佳方法