目录
二分类SVC中的样本不均衡问题:重要参数class_weight
SVM实现概率预测:重要参数probability,接口predict_proba
软间隔
有一些数据,可能是线性可分,但在线性可分状况下训练准确率不能达到
100%
,即无法让训练误差为
0
,这样的数据被我们称为“
存在软间隔的数据
”
。此时此刻,我们需要让我们决策边界能够忍受一小部分训练误差,我们就不能单纯地寻求最大边际了。
因为对于软间隔地数据来说,边际越大被分错的样本也就会越多,因此我们需要找出一个
”
最大边际
“
与
”
被分错的样本数量“
之间的平衡。因此,我们引入松弛系数和松弛系数的系数
C
作为一个惩罚项,来惩罚我们对最大边际的追求。
所以软间隔让决定两条虚线超平面的支持向量可能是来自于同一个类别的样本点,而硬间
隔的时候两条虚线超平面必须是由来自两个不同类别的支持向量决定的
。
而
C
值会决定我们究竟是依赖红色点作为支持向量(只追求最大边界),还是我们要依赖软间隔中,混杂在红色点中的紫色点来作为支持向量(追求最大边界和判断正确的平衡)。如果C
值设定比较大,那
SVC
可能会选择边际较小的,能够更好地分类所有训练点的决策边界,不过模型的训练时间也会更长。如果C
的设定值较小,那
SVC
会尽量最大化边界,尽量将掉落在决策边界另
一方的样本点预测正确,决策功能会更简单,但代价是训练的准确度,因为此时会有更多红色的点被分类错误。换句话说,C
在
SVM
中的影响就像正则化参数对逻辑回归的影响。
此时此刻,所有可能影响我们的超平面的样本可能都会被定义为支持向量,所以支持向量就不再是所有压在虚线超平面上的点,而是所有可能影响我们的超平面的位置的那些混杂在彼此的类别中的点了。
二分类SVC中的样本不均衡问题:重要参数class_weight
首先,分类模型天生会倾向于多数的类,让多数类更容易被判断正确,少数类被牺牲掉。
因为对于模型而言,样本量越大的标签可以学习的信息越多,算法就会更加依赖于从多数类中学到的信息来进行判断。如果我们希望捕获少数类,模型就会失败。其次,模型评估指标会失去意义。
所以现在,我们首先要让算法意识到数据的标签是不均衡的,通过施加一些惩罚或者改变样本本身,来让模型向着捕获少数类的方向建模。然后,我们要改进我们的模型评估指标,使用更加针对于少数类的指标来优化模型。
要解决第一个问题,我们在逻辑回归中已经介绍了一些基本方法,比如上采样下采样。但这些采样方法会增加样本的总数,对于支持向量机这个样本总是对计算速度影响巨大的算法来说,我们完全不想轻易地增加样本数量。况且,支持向量机中地决策仅仅受决策边界的影响,而决策边界又仅仅受到参数C
和支持向量的影响,单纯地增加样本数量不仅会增加计算时间,可能还会增加无数对决策边界无影响的样本点。
因此在支持向量机中,我们要大力依赖我们调节样本均衡的参数:SVC
类中的
class_weight
和接口
fifit
中可以设定的
sample_weight。
在逻辑回归中,参数
class_weight
默认
None
,此模式表示假设数据集中的所有标签是均衡的,即自动认为标签的比例是1
:
1
。所以当样本不均衡的时候,我们可以使用形如
{"
标签的值
1"
:权重
1
,
"
标签的值
2"
:权重
2}
的字典来输入真实的样本标签比例,来让算法意识到样本是不平衡的。
或者使用”balanced“
模式,直接使用n_sam