2

我必须处理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。实际数据集与类别的比例非常不一致,即大约700个样本的class label的值为0,而其余6800的值为1的class label

以上提到的只是一些在给定数据集的所有样品的,但实际的数据集包含class-label1,并与class-label0其余样品约90%,尽管事实或多或少所有的样本都非常相似。

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

我已经试过logistic-regression以及svmclass-weight参数设置为"balanced",但没有得到明显的准确性提高。

+0

由于这不是一个编程问题,您将在[交叉验证](http://stats.stackexchange.com/)上获得更好的响应 – Tchotchke

回答

0

但在准确性方面没有明显改善。

准确性不是要走的路(例如见Accuracy paradox)。如果比例为10:1,则只需预测class-label 0即可轻松获得90%的准确度。

一些好的出发点是:

  • 尝试不同的性能指标。例如。 F1-scoreMatthews correlation coefficient

  • “重新采样”的数据集:从超限额类从代表性不足的添加类的实例(过采样)/删除实例(下采样;你应该有很多数据

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

  • 不同的算法是另一种可能性,但并非万能拍摄。也许你应该decision trees开始(通常在不平衡数据集表现良好)


EDIT(现在知道你正在使用scikit-learn

的权重从class_weight(scikit学习)参数被用于训练分类器(因此balanced是可以的),但准确性是一个很好的选择,可以知道它的表现如何。

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

+0

实际上,给我的测试数据集没有类 - 标签,我必须预测它们,并检查网上法官的准确性,因此我认为'sklearn.metrics'不能帮助我。那我该怎么办?有没有一种方法可以预测给定测试样本的'class-label'是否为0? @manlio – Jarvis

0

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

+0

你可以指导如何做到这一点?我使用Python进行编码。 – Jarvis

+0

@Jarvis sklearn应该有。以下是其中一个链接:http://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html –