机器学习sklearn----支持向量机SVC中的样本不均衡问题

本文探讨了在样本不均衡的分类问题中,如何利用sklearn的支持向量机SVC进行处理。当面对97%对3%的样本比例时,常规模型会倾向于多数类,导致评估指标失真。为解决此问题,文章介绍了上采样、下采样的缺点,并重点讲解了SVC的`class_weight`参数,通过设置权重确保少数类得到重视。实例展示表明,启用样本均衡后的模型能更准确地识别少数类。
摘要由CSDN通过智能技术生成

前言

在分类问题中永远存在一个问题:样本不均衡
比如我们的一个二分类数据集,其中1占比3%,0占比97%。这就是一个典型的样本不均衡数据集。但是我们的需求往往都是捕捉到这少数的样本,也就是将少数类尽量多的判断正确。
但是我们的模型默认时样本均衡的,这样就会带来一些问题
首先,模型分类时会更加的倾向于多数类,让多数类更加容易被判对,会牺牲掉少数类来保证多数类的判别效果。 但是这样的模型显然不是我们需要的
其次,模型的评估指标会失去意义,因为即使我们什么都不做,只是将所有的样本都判别为0,那样的准确率也是达到了97%,显然这样是没有意义的

本文中使用的第三方库

import numpy as np
from sklearn.datasets import make_blobs
from sklearn.svm import SVC
import matplotlib.pyplot as plt
import warnings

warnings.filterwarnings("ignore")
%matplotlib inline

样本不均衡的解决办法

  • 上采样或下采样:缺点增加大量的样本数量,这对SVC这种耗时的模型非常的不友好
  • 采用模型自身的样本均衡参数:SVC实例化时的参数class_weight,或者模型训练fit时的参数sample_weight。
    需要注意的时:class_weight是一个字典的形式 {标签 : 权重}。一般来说少数类占有较高的权重。sample_weight需要和标签有一样的shape。每一个标签对应一个权重。

实例

创建数据集,包含550个样本,0类500个,1类100个

# 创建一个样本不均衡的数据集
X, y = make_blobs(n_samples=[500, 50],
                 n_features=2,
                 cluster_std=3,
                 random_state=3)

plt.scatter(X
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值