class_weight=‘balanced‘缓解类别不平衡问题

当 class_weight='balanced' 时,每个类别 i 的权重 w_i 计算如下:

nsamples​ :训练集总样本数

nclasses​ :类别总数(不包含背景,如果有)

ni​ :类别 i 的样本数

假设训练集共有 1000 个样本,分为 3 个类别:

复制代码
类别 A:500 个样本
类别 B:300 个样本
类别 C:200 个样本

那么:

复制代码
类别 A 的权重:1000/(3×500)=1000/1500≈0.6671000/(3×500)=1000/1500≈0.667
类别 B 的权重:1000/(3×300)=1000/900≈1.1111000/(3×300)=1000/900≈1.111
类别 C 的权重:1000/(3×200)=1000/600≈1.6671000/(3×200)=1000/600≈1.667

类别 C(样本最少)获得最大权重,类别 A(样本最多)权重最小。

在 SVM 中的作用

SVM 的目标是最小化:

其中 ξi是松弛变量。

class_weight 将样本的惩罚系数 C 乘以对应的类别权重。实际效果是:

复制代码
对少数类样本,其松弛变量 ξi​ 的惩罚被放大,迫使模型更努力地正确分类它们(或允许更少的误分类)。
对多数类样本,惩罚相对减小,模型对它们的误分类容忍度更高。

最终,模型会倾向于找到一个决策边界,使得少数类样本被更准确地分类,从而提升整体的类别平衡性能。

相关推荐
灰色小旋风2 小时前
力扣14 最长公共前缀(C++)
java·数据结构·算法
Neverfadeaway2 小时前
支持向量机SVM详讲
机器学习·支持向量机·kkt条件·对偶问题·svm算法·核函数的定义·最优超平面的求解
努力学习的小廉2 小时前
我爱学算法之——floodfill算法(下)
学习·算法
2401_851272992 小时前
编译器内建函数使用
开发语言·c++·算法
Rhystt2 小时前
代码随想录算法训练营第五十五天|图论理论基础、深搜理论基础、98. 所有可达路径、广搜理论基础
数据结构·c++·算法·深度优先·图论
Book思议-2 小时前
【数据结构实战】C 语言实现静态顺序队列:从原理到完整可运行代码
c语言·数据结构·算法·队列
hanlin032 小时前
刷题笔记:力扣第6题-Z字形变换
笔记·算法·leetcode
努力学习的小廉2 小时前
我爱学算法之——记忆化搜索
算法
m0_730115112 小时前
C++与Python混合编程实战
开发语言·c++·算法