一问看懂——支持向量机SVM(Support Vector Machine)

 

目录

芜湖~~~支持向量机(SVM)

1. 引言

2. 基本思想

3. 数学模型

3.1 超平面定义

3.2 分类间隔与目标函数

3.3 软间隔与松弛变量

4. 核函数方法(Kernel Trick)

4.1 核函数定义

4.2 常用核函数

5. SVM 的几种类型

6. SVM 的训练与预测流程

6.1 模型训练

6.2 模型预测

7. 优点与局限

7.1 优点

7.2 局限

8. SVM 与多分类问题

9.代码示例

9. 应用场景

10. 小结



芜湖~~~支持向量机(SVM)


1. 引言

        支持向量机(Support Vector Machine,简称 SVM)是一种基于统计学习理论的监督学习模型,最早由 Vladimir Vapnik 等人提出,广泛应用于分类(Classification)回归(Regression)任务中。由于其优越的泛化能力和坚实的理论基础SVM 成为现代机器学习领域的重要算法之一,特别适合于高维小样本以及非线性问题。


2. 基本思想

SVM 的核心思想是:

在特征空间中寻找一个最优分离超平面(Optimal Hyperplane),使得该超平面能够最大限度地将不同类别的样本分隔开,并具有   最大化间隔(Margin Maximization) 的特性。

        如下图所示,对于线性可分问题,SVM 会选取离两个类别最近样本点(即支持向量)距离最大的分割平面作为最终分类器。


3. 数学模型

3.1 超平面定义

在 n 维空间中,一个超平面的定义如下:

w^T x + b = 0

其中:

  • w:法向量,决定超平面方向;

  • b :偏置项,决定超平面距离原点的位置;

  • x :输入样本。


3.2 分类间隔与目标函数

对于样本 (x_i, y_i),其分类间隔定义为:

\gamma_i = \frac{y_i(w^T x_i + b)}{\|w\|}

SVM 的目标是最大化所有样本的最小分类间隔,即:

\max_{w,b} \min_i \gamma_i

为简化计算,通常转化为以下凸优化问题(硬间隔 SVM):

\min_{w,b} \frac{1}{2} \|w\|^2 \quad \text{s.t.} \quad y_i(w^T x_i + b) \geq 1


3.3 软间隔与松弛变量

当数据线性不可分时,引入松弛变量 \xi_i 和惩罚系数 C,得到软间隔 SVM:

\min_{w,b,\xi} \frac{1}{2} \|w\|^2 + C \sum_i \xi_i \quad \text{s.t.} \quad y_i(w^T x_i + b) \geq 1 - \xi_i,\quad \xi_i \geq 0

其中:

  • C :控制对误分类的惩罚程度;

  • \xi_i:表示样本违反间隔的程度。


4. 核函数方法(Kernel Trick)

        许多实际问题是非线性可分的。SVM 借助核函数技术将数据映射高维特征空间,在高维空间中实现线性可分。

4.1 核函数定义

核函数 K(x_i, x_j) 实际上是一个隐式内积:

K(x_i, x_j) = \phi(x_i)^T \phi(x_j)

其中 \phi(\cdot)是非线性映射函数,无需显式计算。

4.2 常用核函数

核函数表达式说明
线性核(Linear)K(x_i, x_j) = x_i^T x_j适用于线性问题
多项式核(Polynomial)K(x_i, x_j) = (\gamma x_i^T x_j + r)^d控制多项式的复杂度
RBF核(高斯核)K(x_i, x_j) = \exp(-\gamma \|x_i - x_j\|^2)广泛使用,处理非线性问题
Sigmoid核K(x_i, x_j) = \tanh(\gamma x_i^T x_j + r)类似神经网络激活函数

5. SVM 的几种类型

类型描述
C-SVC最常用的分类 SVM,带惩罚系数 C
NU-SVC用参数 \nu 替代 C 控制支持向量数量
EPS-SVR支持向量回归(SVR)类型,用于回归问题
NU-SVR\nu 形式的回归模型

6. SVM 的训练与预测流程

6.1 模型训练

  • 输入:训练样本(特征向量 + 标签

  • 设置 SVM 参数(核函数、C、γ等)

  • 求解优化问题(使用 SMO、梯度下降等方法)

  • 得到模型(支持向量、权重、偏置)

6.2 模型预测

预测函数定义为:

f(x) = \text{sign} \left( \sum_i \alpha_i y_i K(x_i, x) + b \right)

其中,\alpha_i 是拉格朗日乘子,仅对支持向量不为零。


7. 优点与局限

7.1 优点

  • 理论基础坚实(VC维理论)

  • 高维小样本数据表现良好

  • 可处理非线性问题(通过核方法

  • 具有稀疏解(依赖于少数支持向量)

7.2 局限

  • 对大规模数据训练速度,内存消耗大

  • 核函数和参数选择依赖经验

  • 不易处理多分类问题(需借助一对一/一对多策略)


8. SVM 与多分类问题

SVM 原生为二分类模型,但可通过以下策略扩展为多分类:

  • 一对一(One-vs-One, OvO):为每两个类别训练一个分类器,投票决定最终分类;

  • 一对多(One-vs-Rest, OvR):为每一个类别与其余类别训练一个分类器,选择概率最大者;

  • 结构 SVM:直接扩展的多类模型(不常见于 OpenCV 实现中)。


9.代码示例

基于 Python 的 scikit-learnmatplotlib 实现。这个代码会:

  • 创建两类可分数据;

  • 用 SVM 训练分类器;

  • 可视化:

    • 支持向量(用圈标出)

    • 决策边界(黑线)

    • 间隔边界(虚线)

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

# 生成两个类别的样本数据
X, y = make_blobs(n_samples=40, centers=2, random_state=6)

# 拟合一个线性支持向量分类器
clf = svm.SVC(kernel='linear', C=1.0)
clf.fit(X, y)

# 获取模型的参数
w = clf.coef_[0]
a = -w[0] / w[1]
xx = np.linspace(min(X[:, 0]) - 1, max(X[:, 0]) + 1)
yy = a * xx - (clf.intercept_[0]) / w[1]

# 计算边界线(间隔)
margin = 1 / np.linalg.norm(w)
yy_down = yy - np.sqrt(1 + a ** 2) * margin
yy_up = yy + np.sqrt(1 + a ** 2) * margin

# 绘图
plt.figure(figsize=(8, 6))

# 分类点
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.coolwarm, s=30)

# 决策边界
plt.plot(xx, yy, 'k-')

# 间隔边界
plt.plot(xx, yy_down, 'k--')
plt.plot(xx, yy_up, 'k--')

# 支持向量
plt.scatter(clf.support_vectors_[:, 0],
            clf.support_vectors_[:, 1],
            s=150, facecolors='none', edgecolors='k', linewidths=1.5, label='Support Vectors')

plt.legend()
plt.title("SVM Decision Boundary with Margin and Support Vectors")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.grid(True)
plt.show()


9. 应用场景

SVM 被广泛应用于以下任务:

  • 图像分类、人脸识别、字符识别(如 OCR)

  • 基因数据分析与医学诊断

  • 文字情感分类与垃圾邮件检测

  • 股票趋势预测与回归任务


10. 小结

        支持向量机是一种功能强大的分类与回归工具,其“最大间隔 + 核技巧”的方法为机器学习提供了坚实的模型选择方式。在合适的参数和核函数配置下,SVM 能够提供强鲁棒性与良好的泛化能力。对于中小规模问题,SVM 是值得优先尝试的模型之一。

用一句最简单的话讲明白SVM支持向量机

        SVM支持向量机是一种机器学习算法,它通过找到一个最优的超平面来分类数据点,使得不同类别的数据点尽可能分开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WenJGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值