当前位置: 首页 > 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.dtcms.com/a/265664.html

相关文章:

  • JavaScript的现代进阶:从ES6到ES15
  • 机器学习-03(机器学习任务攻略)
  • npm 命令入门指南(前端小白版)
  • 使用numpy的快速傅里叶变换的一些问题
  • 记忆翻牌记忆力小游戏流量主微信小程序开源
  • 万能公式基分析重构补丁复分析和欧拉公式原理推导
  • 国外开源集成平台(业务编排)camel及Mule介绍
  • 为什么是直接在**原型(prototype)上**添加函数
  • 构建引擎: 打造小程序编译器
  • 边缘计算解决方案:电力作业行为图像识别
  • Mac电脑 触摸板增强工具 BetterTouchTool
  • Linux开发工具——gcc/g++
  • 虚拟机网络检查
  • 数据结构-栈的实现
  • 电动车信用免押小程序免押租赁小程序php方案
  • 数据库运维手册指导书
  • 移动端Html5播放器按钮变小的问题解决方法
  • Laravel8中使用phpword生成word文档
  • LeetCode--40.组合总和II
  • 【ArcGIS Pro】属性表咋不能编辑了?
  • wvp-GB28181-pro 项目 ZLMediaKit 部署 (Centos7)
  • XILINX Ultrascale+ Kintex系列FPGA的架构
  • R语言开发记录,二(创建R包)
  • vue-37(模拟依赖项进行隔离测试)
  • 《导引系统原理》-西北工业大学-周军-“2️⃣导引头的角度稳定系统”
  • 定时点击二次鼠标 定时点击鼠标
  • Node.js中exports与module.exports区别
  • DPDK开发环境配置
  • SpringCloud系列(49)--SpringCloud Stream消息驱动之实现生产者
  • 《Spring 中上下文传递的那些事儿》 Part 1:ThreadLocal、MDC、TTL 原理与实践