我必须处理Class Imbalance Problem
并对输入测试数据集进行binary-classification
,其中大部分class-label为1(另一个class-label为0),在训练数据中-set。
例如,以下是培训数据的一部分:
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"
,但准确度没有显着提高。
答案 0 :(得分:0)
但准确度没有显着提高。
准确性不是最佳选择(例如,请参阅Accuracy paradox)。通过始终预测class-label 0
,只需10:1的比例,您就可以轻松获得90%的准确度。
一些好的起点是:
尝试不同的效果指标。例如。 F1-score和Matthews correlation coefficient
"再取样"数据集:从代表性过低的类(过度采样)中添加示例/从过度代表的类中删除实例(欠采样;你应该有很多数据)
一个不同的观点: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?。
答案 1 :(得分:0)
您是否尝试绘制ROC曲线和AUC曲线来检查您的参数和不同的阈值?如果没有,那应该给你一个很好的起点。