机器学习:SVM分类数据偏斜问题
引言
自己之前做认证分析的时候,存在一个问题就是需要把一个用户的数据作为合法用户,将其余用户的数据作为非法用户,那么这样的话分类结果就会存在数据偏斜问题,虽然自己采取的方法是从所有非法用户中随机抽取与合法用户样本数差不多的非法样本数输入进分类器,但自己也想了解一下如何解决这种数据偏斜问题,找到的方法记录如下
问题描述
参与分类的两个类别样本数量差异很大,比如说正类有10,000个,负类只有100个
由于负类样本较少,算出的分类面会偏向于负类方向
解决方法
我们可以对正类的样本用一个C+,也就是惩罚因子,对负类的样本用另一个C-
C+:C-=1:100
表示我们重视负类的犯错
有时候好需要考虑以下原因
但是还存在另外一个造成数据偏移的原因,而且是真实的原因,即负类的样本分布不够广,没有扩充到负类本应该有的区域。
比如在想给政治类和体育类的文章做分类,政治文章很多,也很广,而体育类只提供了几篇关于篮球的文章,这时分类会明显偏向于政治类
如果要给体育类文章增加样本,但增加的样本仍然全都是关于篮球的,那结果就是虽然体育类文章在数量上可以达到与政治类的一样多,但过于集中,结果仍然会偏向政治类
所以确定C+和C-比例更好的方法应该是衡量他们分布的情况
具体做法可以是给负类找一个高维空间中的超球体,它包含了所有负类的样本,再给正类找一个,比一比两个球的半径
半径大的分布广,惩罚因子小
除此之外,还有类别本身的特征区别,比如有些话题涉及的面很窄,如计算机类的文章就不如文学类的文章那么天马行空,这个时候即便超球的半径差异很大,也不应该赋予不同的惩罚因子
所以一般的做法是根据需要,选择简单合用的就行,例如libSVM就直接只用样本数量的比