处理样本不均衡数据

处理样本不均衡数据一般可以有以下方法:

1、人为将样本变为均衡数据。

上采样:重复采样样本量少的部分,以数据量多的一方的样本数量为标准,把样本数量较少的类的样本数量生成和样本数量多的一方相同。

下采样:减少采样样本量多的部分,以数据量少的一方的样本数量为标准。

 

2、调节模型参数(class_weigh,sample_weight,这些参数不是对样本进行上采样下采样等处理,而是在损失函数上对不同的样本加上权重)

(A)逻辑回归中的参数class_weigh;

在逻辑回归中,参数class_weight默认None,此模式表示假设数据集中的所有标签是均衡的,即自动认为标签的比例是1:1。所以当样本不均衡的时候,我们可以使用形如{标签的值1:权重1,标签的值2:权重2}的字典来输入真实的样本标签比例(例如{“违约”:10,“未违约”:1}),来提高违约样本在损失函数中的权重

或者使用”balanced“模式,sklearn内部原理:直接使用n_samples/(n_classes * np.bincount(y)),即样本总数/(类别数量*y0出现频率)作为权重,可以比较好地修正我们的样本不均衡情况。

 

(B)在SVM中使用SVC类的参数class_weigh和接口fit中可以设定的sample_weight:

SVC类的参数class_weigh:

对于class_weight,输入形如{"标签的值1":权重1,"标签的值2":权重2}的字典,则不同类别的C将会自动被设为不同的值:

sklearn内部原理:标签的值为1的C:权重1 * C,标签的值为2的C:权重2*C 

或者,可以使用“balanced”模式,sklearn内部原理:这个模式使用y的值自动调整与输入数据中的类频率成反比的权重为 n_samples/(n_classes * np.bincount(y)

fit接口参数sample_weight:

参数形式:数组,结构为 (n_samples, ),则模型参数C则变为,每个样本的权重 * C值,这样迫使分类器强调权重更大的样本。通常,较大的权重加在少数类的样本上,以迫使模型向着少数类的方向建模

posted @ 2019-01-07 21:52  simpleDi  阅读(2971)  评论(1编辑  收藏  举报