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。实际数据集的类别比例非常倾斜10:1,即大约 700 个样本的 0 为 0 class label,而其余 6800 个样本的 1 为class label

上面提到的只是给定数据集中所有样本中的一小部分,但实际数据集中包含大约90%的样本为class-labelas 1,其余的为class-labelbe 0,尽管或多或少所有样本都非常很相似。

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

我已经尝试logistic-regression过以及参数集 as svm,但在准确性上没有显着提高。class-weight"balanced"

4

2 回答 2

0

但准确率没有明显提高。

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

一些好的起点是:

  • 尝试不同的性能指标。例如F1-scoreMatthews 相关系数

  • “重新采样”数据集:从代表不足的类中添加示例(过度采样)/从过度代表的类中删除实例(欠采样;您应该有很多数据)

  • 不同的观点:异常检测是不平衡数据集的一个很好的尝试

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


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

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

sklearn.metrics模块实现了几个损失、分数和效用函数来衡量分类性能。另请查看如何使用 scikit learn 计算多类案例的精度、召回率、准确率和 f1 分数?.

于 2016-09-15T13:46:34.490 回答
0

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

于 2016-09-16T09:55:33.567 回答