当前位置: 首页 > news >正文

支持向量机(SVM)分类

  支持向量机(Support Vector Machine,SVM)是一种经典的监督学习算法,主要用于分类任务,也可扩展到回归问题(称为支持向量回归,SVR)。其核心思想是通过寻找一个最优超平面,最大化不同类别数据之间的间隔(Margin),从而实现高效分类。

一、核心思想

  SVM的目标是找到一个决策边界(超平面),将不同类别的数据分开,并确保该边界到最近数据点(支持向量)的距离最大。这种“最大化间隔”的策略使得模型具有更好的泛化能力。

超平面(Hyperplane):

  在n维空间中,一个超平面是n-1维的子空间。对于二维数据,超平面是一条直线;三维数据中是一个平面。

支持向量(Support Vectors):

  距离最优超平面最近的样本点称为支持向量,它们是决定超平面位置的关键样本。其他样本的位置对超平面无影响,这也是“SVM”名称的由来。

间隔(Margin):

  超平面到两类最近支持向量的距离之和。SVM的目标是最大化间隔。
  设超平面方程为 w ⋅ x + b = 0 w\cdot x+b=0 wx+b=0(其中 w w w是权重向量, b b b是偏置),则单个样本点 x i x_i xi到超平面的距离为:
距离 = ∣ w ⋅ x i + b ∣ ∣ ∣ w ∣ ∣ 距离=\frac{\left| w\cdot x_i+b \right|}{\left| \left| w \right| \right|} 距离=wwxi+b

  最优超平面需满足:对于正类样本,有 w ⋅ x i + b ≥ 1 w\cdot x_i+b\geq1 wxi+b1;对于负类样本,有 w ⋅ x i + b ≤ − 1 w\cdot x_i+b\leq-1 wxi+b1 。此时,间隔为 2 ∣ ∣ w ∣ ∣ \frac{2}{\left| \left| w \right| \right|} w2,最大化间隔等价于最小化 ∣ ∣ w ∣ ∣ 2 \left| \left| w \right| \right|^{2} w2

二、线性可分情况(硬间隔SVM)

  假设数据线性可分,SVM的优化问题可表示为

     min ⁡ w , b 1 2 ∣ ∣ w ∣ ∣ 2 \min_{w,b}{\frac{1}{2}\left| \left| w \right| \right|^{2}} minw,b21w2   s.t. y i ( w ⋅ x i + b ) ≥ 1 ( ∀ i ) y_i(w\cdot x_i+b)\geq1 \quad (\forall i) yi(wxi+b)1(i)

  目标:最小化 ∣ ∣ w ∣ ∣ \left| \left| w \right| \right| w(等价于最大化间隔 2 ∣ ∣ w ∣ ∣ \frac{2}{\left| \left| w \right| \right|} w2)。
  约束:确保所有样本被正确分类且位于间隔边界之外。

三、非线性可分情况(软间隔SVM)

  当样本无法被线性超平面分隔时,SVM 通过以下方法处理:

1. 引入松弛变量(Slack Variables)

  允许部分样本跨越超平面,但需在优化目标中加入惩罚项(即正则化参数 C C C),平衡间隔最大化和分类错误最小化

     min ⁡ w , b 1 2 ∣ ∣ x ∣ ∣ 2 + C ∑ i ξ i \min_{w,b}{\frac{1}{2}\left| \left| x \right| \right|^{2}}+C\sum_{i}{\xi_i} minw,b21x2+Ciξi   s.t. y i ( w ⋅ x i + b ) ≥ 1 − ξ i , ξ i ≥ 0 y_i(w\cdot x_i+b)\geq 1-\xi_i,\quad \xi_i\geq0 yi(wxi+b)1ξi,ξi0

   C C C的作用:控制分类错误的惩罚力度。 C C C越大,模型越严格(可能过拟合); C C C越小,允许更多错误(可能欠拟合)。

2. 核技巧(Kernel Trick)

  对于非线性可分数据,SVM通过核函数将原始空间映射到高维特征空间,使数据在新空间中线性可分。常见核函数有
  线性核: K ( x i , x j ) = x i ⋅ x j K(x_i,x_j)=x_i\cdot x_j K(xi,xj)=xixj
  多项式核: K ( x i , x j ) = ( x i ⋅ x j + c ) d K(x_i,x_j)=(x_i\cdot x_j+c)^{d} K(xi,xj)=(xixj+c)d
  高斯径向基核(RBF): K ( x i , x j ) = e x p ( − γ ∣ ∣ x i − x j ∣ ∣ 2 ) K(x_i,x_j)=exp(-\gamma \left| \left| x_i-x_j \right| \right|^{2}) K(xi,xj)=exp(γxixj2)
  Sigmoid核: K ( x i , x j ) = t a n h ( α x i ⋅ x j + c ) K(x_i,x_j)=tanh(\alpha x_i\cdot x_j+c) K(xi,xj)=tanh(αxixj+c)

四、优化与求解

  SVM通常转化为对偶问题,利用拉格朗日乘子法求解:

     m a x α ∑ i α i − 1 2 ∑ i , j α i α j y i y j K ( x i , x j ) max_{\alpha}{\sum_{i}{\alpha_i}}-\frac{1}{2}\sum_{i,j}{\alpha_i\alpha_jy_iy_jK(x_i,x_j)} maxαiαi21i,jαiαjyiyjK(xi,xj)  s.t. 0 ≤ α i ≤ C , ∑ i α i y i = 0 0\leq\alpha_i\leq C,\sum_{i}{\alpha_iy_i=0} 0αiC,iαiyi=0

  通过拉格朗日对偶性转化为对偶问题,优势在于:

    a) 将高维空间中的内积运算转化为核函数计算(避免直接处理高维数据);
    b) 解的形式仅依赖于支持向量,计算效率更高。

五、Python实现示例

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data  # 特征
y = iris.target  # 标签# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42
)# 创建SVM分类器
clf = SVC(kernel='linear')  # 使用线性核函数# 训练模型
clf.fit(X_train, y_train)# 预测
y_pred = clf.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2f}")# 预测新样本
new_samples = [[5.1, 3.5, 1.4, 0.2], [6.3, 3.3, 4.7, 1.6]]
predictions = clf.predict(new_samples)
print(f"新样本预测结果: {[iris.target_names[p] for p in predictions]}")

在这里插入图片描述



End.

http://www.lryc.cn/news/579532.html

相关文章:

  • ReactNative【实战系列教程】我的小红书 3 -- 自定义底栏Tab导航(含图片选择 expo-image-picker 的使用)
  • GPT-2论文阅读:Language Models are Unsupervised Multitask Learners
  • Mac电脑 触摸板增强工具 BetterTouchTool
  • 探秘展销编辑器:相较于传统展销的卓越优势与甄选指南​
  • Redis实现哨兵模式
  • MCP协议打破数据孤岛
  • 在Ubuntu24上安装ollama
  • VsCode 配置 C/C++ 开发环境
  • 【第三章:神经网络原理详解与Pytorch入门】01.神经网络算法理论详解与实践-(3)神经网络中的前向传播、反向传播的原理与实现
  • JavaScript的初步学习
  • 2021/7 N2 jlpt 词汇
  • npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree
  • Apache POI 详解 - Java 操作 Excel/Word/PPT
  • docker-compose一键部署全栈项目。springboot后端,react前端
  • 如何将信息从 iPhone 同步到Mac(完整步骤和示意图)
  • mac 电脑安装Homebrew来安装npm与node成功后,安装nvm的流程
  • MySQL 8.0 OCP 1Z0-908 题目解析(19)
  • 标准测试测试数据STDF学习笔记
  • MediaCrawler:强大的自媒体平台爬虫工具
  • Spring Boot 多 ActiveMQ 通道配置与多连接消息发送实战(含完整示例与踩坑记录)
  • Ubuntu 24.04 LTS 服务器配置:安装 JDK、Nginx、Redis。
  • 一体机电脑为何热度持续上升?消费者更看重哪些功能?
  • 关于系统无法找到 arm-linux-gcc 命令,这表明你的环境中尚未安装 ARM 交叉编译工具链。以下是详细的解决方案:(DIY机器人工房)
  • 牛客:HJ16 购物单【01背包】【华为机考】
  • 封装 获取paramsByKey 方法
  • 毕业设计(启智模块化机器人的组装与K5的使用
  • 使用Visual Studio 2022创建CUDA编程项目
  • 车载交换机动态MAC学习和静态MAC绑定如何获取MAC地址表
  • jenkins角色权限
  • 这才叫窗口查询!TDEngine官方文档没讲透的实战玩法