如何处理这种不平衡的倾斜数据集?
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
- 0
或1
。实际数据集与 10:1
的类比率非常偏斜,即大约 700 个样本的 class label
为 0,而其余 6800 个样本的 class label
为 1。
上述只是给定数据集中所有样本中的一小部分,但实际数据集中包含90%
的样本,class-label
为1
,其余为@987654334 @ 成为0
,尽管所有样本或多或少都非常相似。
哪个分类器最适合处理这种数据集?
我已经尝试过logistic-regression
和svm
,将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/…以上是关于如何处理这种不平衡的倾斜数据集?的主要内容,如果未能解决你的问题,请参考以下文章