不平衡数据集的分类器?

机器算法验证 机器学习 分类 scikit-学习 不平衡类 计算机视觉
2022-04-18 13:40:49

有没有可以原生支持不平衡数据集的分类器?或者您可以建议哪些最佳实践来处理此类数据集?

例如,我想解决称为“行人检测”的任务,经典方法使用线性 SVM,但它无法处理不平衡的数据集(大量背景示例,少量正面示例 - 人)。也许有比 SVM 更好的东西?(我已经知道欠采样/过采样和加权 SVM)。

如果在回答中链接到一些 scikit-learn 分类算法,那就太好了。

2个回答

大多数分类器通过方法中的参数sklearn支持不平衡数据集如果您需要使用不支持此选项的分类器来拟合不平衡数据,则可以使用带替换抽样来扩大较小的类以匹配较大的类。sample_weightclf.fit

这是演示该方法sklearnSVM 示例的改编版本sample_weight

import numpy as np
import pylab as pl
from sklearn import svm

np.random.seed(0)
X = np.r_[2*np.random.randn(20, 2) - [2, 2], 2*np.random.randn(200, 2) + [2, 2]]
Y = [0] * 20 + [1] * 200
wt = [1/20.]*20 + [1/200.]*200

# fit the model
clf = svm.SVC(kernel='linear')
clf.fit(X, Y, sample_weight=wt)

这个关于不平衡分类的问题RandomForestClassifier有一些额外的细节。

线性 SVM 可以通过在错误分类惩罚上使用类权重来很好地处理不平衡的数据集。此功能在任何体面的 SVM 实现中都可用。

类加权 SVM 的目标函数如下:

minξ,w12w2+CPiPxii+CNiNξi,

其中少数类使用更高的错误分类惩罚。一个常见的启发式如下: 分别为正样本和负样本的数量。

CP×|P|=CN×|N|,
|P|N|