如何处理这个不平衡-class 倾斜的数据集?
How to deal with this unbalanced-class skewed data-set?
我必须处理 Class Imbalance Problem
并对输入测试数据集执行 binary-classification
,其中大多数 class-标签为 1(另一个 class-标签在训练数据集中为 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
比率为 classes,即大约 700 个样本的 class label
为 0,而其余 6800 个样本的 [=18] 为 1 =].
上面提到的只是给定数据集中所有样本中的一小部分,但实际数据集中包含大约 90%
的样本,其中 class-label
为 1
,其余 class-label
为 0
,尽管事实上所有样本或多或少都非常相似。
哪个 classifier 最适合处理这种数据集?
我已经尝试过 logistic-regression
以及 svm
,class-weight
参数设置为 "balanced"
,但准确度没有显着提高。
but got no significant improvement in accuracy.
准确性不是解决之道(例如,参见 Accuracy paradox)。如果 10:1 比率为 classes,您只需始终预测 class-label 0
.
即可轻松获得 90% 的准确率
一些好的起点是:
尝试不同的性能指标。例如。 F1-score and Matthews correlation coefficient
"resample"数据集:从代表性不足的class(过采样)中添加实例/从中删除实例过度代表class(采样不足;你应该有很多数据)
不同的观点:anomaly detection是对不平衡数据集的一个很好的尝试
另一种可能性是使用不同的算法,但不是万能的。可能你应该从 decision trees 开始(通常在不平衡数据集上表现良好)
编辑(现在知道您正在使用 scikit-learn
)
来自 class_weight
(scikit-learn) 参数的权重用于训练 classifier(所以 balanced
是可以的)但是准确性是一个糟糕的选择,不知道如何好吧,它的表现。
sklearn.metrics
module implements several loss, score and utility functions to measure classification performance. Also take a look at .
您是否尝试过绘制 ROC 曲线和 AUC 曲线来检查您的参数和不同的阈值?如果不是,那应该会给你一个很好的起点。
我必须处理 Class Imbalance Problem
并对输入测试数据集执行 binary-classification
,其中大多数 class-标签为 1(另一个 class-标签在训练数据集中为 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
比率为 classes,即大约 700 个样本的 class label
为 0,而其余 6800 个样本的 [=18] 为 1 =].
上面提到的只是给定数据集中所有样本中的一小部分,但实际数据集中包含大约 90%
的样本,其中 class-label
为 1
,其余 class-label
为 0
,尽管事实上所有样本或多或少都非常相似。
哪个 classifier 最适合处理这种数据集?
我已经尝试过 logistic-regression
以及 svm
,class-weight
参数设置为 "balanced"
,但准确度没有显着提高。
but got no significant improvement in accuracy.
准确性不是解决之道(例如,参见 Accuracy paradox)。如果 10:1 比率为 classes,您只需始终预测 class-label 0
.
一些好的起点是:
尝试不同的性能指标。例如。 F1-score and Matthews correlation coefficient
"resample"数据集:从代表性不足的class(过采样)中添加实例/从中删除实例过度代表class(采样不足;你应该有很多数据)
不同的观点:anomaly detection是对不平衡数据集的一个很好的尝试
另一种可能性是使用不同的算法,但不是万能的。可能你应该从 decision trees 开始(通常在不平衡数据集上表现良好)
编辑(现在知道您正在使用 scikit-learn
)
来自 class_weight
(scikit-learn) 参数的权重用于训练 classifier(所以 balanced
是可以的)但是准确性是一个糟糕的选择,不知道如何好吧,它的表现。
sklearn.metrics
module implements several loss, score and utility functions to measure classification performance. Also take a look at
您是否尝试过绘制 ROC 曲线和 AUC 曲线来检查您的参数和不同的阈值?如果不是,那应该会给你一个很好的起点。