在处理不平衡数据,看到有人是这么做的,但这么做靠谱吗
4个回答
数据不平衡(class-imbalance)的主要问题是在Empirical loss function中每个数据点在loss中的权重相同。因为不同类的数据点个数不平衡,会导致不同类的在Empirical loss中比例不平衡。比如训练数据中正1%,负99%,那么loss的和大概也是正1%,负99%。为了让这两个和相等,有两种办法:
1.欠采样负数据或过采样正数据,让它们个数相等。
2.数据不变,改变它们在loss中的权重,让一个正数据的loss等于99个负数据的loss,相当于对正数据过采样99倍。
这样训练出的模型参数才会对正负数据一视同仁。注意这两种方法都只是作用在loss上,并没有改变模型。如果用梯度下降来训练模型参数,其实改变的是来至于正/负数据梯度的总和。
比如说线性回归模型$y=Ax+\epsilon$, loss$L=\sum_i(Ax_i-y_i)^2$,当加入权重后
$$L=\alpha_0\sum_{i\in C_0}(Ax_i-y_i)^2+\alpha_1\sum_{i\in C_1}(Ax_i-y_i)^2$$
,这里$i\in C_0$表示数据点$(x_i,y_i)$在class 0中。$\alpha_0,\alpha_1$是两个类各自的权重。
线性模型$Ax$并没改变,所以在测试时,还是用原始的$x_{test}$。
两种解决办法:
1、对样本上采样or下采样
2、对少数类型样本loss加大权重,类似svm处理不均衡问题加大惩罚因子。
如果是比例特别大,可以划归到异常点检测问题,孤立森林之类的
SofaSofa数据科学社区DS面试题库 DS面经如果是决策树类的模型没有问题。
SofaSofa数据科学社区DS面试题库 DS面经
决策树也有问题,只是好点。random forest也有class weights。deep learning也会在loss function中加class weights。
-
Zealing
2019-07-27 22:28