我必须处理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,其余的是class-label是0,尽管几乎所有的样本都非常相似。
哪种分类器最适合处理这种数据集?
我已经尝试过logistic-regression和svm,并将class-weight参数设置为"balanced",但在准确性方面没有明显的提高。
发布于 2016-09-15 13:46:34
但在准确性上没有明显的提高。
准确性不是要走的路(例如见精度悖论)。使用10:1的类比例,只要总是预测class-label 0,就可以很容易地获得90%的准确率。
一些好的起点是:
编辑(现在知道你在使用scikit-learn)
来自class_weight参数的权重被用来训练分类器(所以balanced是可以的),但是精确性是一个很差的选择来知道它有多好。
sklearn.metrics模块实现了对度量分类性能的几个损失、评分和实用函数。还请看一下如何计算精度,回忆,准确性和F1-评分的多类案件与科学知识学习?。
发布于 2016-09-16 09:55:33
你有没有试过绘制ROC曲线和AUC曲线来检查你的参数和不同的阈值?如果不是,那应该给你一个好的起点。
https://stackoverflow.com/questions/39512140
复制相似问题