目录
芜湖~~~支持向量机(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:法向量,决定超平面方向;
-
b :偏置项,决定超平面距离原点的位置;
-
x :输入样本。
3.2 分类间隔与目标函数
对于样本 ,其分类间隔定义为:
SVM 的目标是最大化所有样本的最小分类间隔,即:
为简化计算,通常转化为以下凸优化问题(硬间隔 SVM):
3.3 软间隔与松弛变量
当数据线性不可分时,引入松弛变量 和惩罚系数 C,得到软间隔 SVM:
其中:
-
C :控制对误分类的惩罚程度;
-
:表示样本违反间隔的程度。
4. 核函数方法(Kernel Trick)
许多实际问题是非线性可分的。SVM 借助核函数技术将数据映射到高维特征空间,在高维空间中实现线性可分。
4.1 核函数定义
核函数 实际上是一个隐式内积:
其中 是非线性映射函数,无需显式计算。
4.2 常用核函数
核函数 | 表达式 | 说明 |
---|---|---|
线性核(Linear) | 适用于线性问题 | |
多项式核(Polynomial) | 控制多项式的复杂度 | |
RBF核(高斯核) | 广泛使用,处理非线性问题 | |
Sigmoid核 | 类似神经网络激活函数 |
5. SVM 的几种类型
类型 | 描述 |
---|---|
C-SVC | 最常用的分类 SVM,带惩罚系数 C |
NU-SVC | 用参数 |
EPS-SVR | 支持向量回归(SVR)类型,用于回归问题 |
NU-SVR | 用 |
6. SVM 的训练与预测流程
6.1 模型训练
-
输入:训练样本(特征向量 + 标签)
-
设置 SVM 参数(核函数、C、γ等)
-
求解优化问题(使用 SMO、梯度下降等方法)
-
得到模型(支持向量、权重、偏置)
6.2 模型预测
预测函数定义为:
其中, 是拉格朗日乘子,仅对支持向量不为零。
7. 优点与局限
7.1 优点
-
理论基础坚实(VC维理论)
-
对高维、小样本数据表现良好
-
可处理非线性问题(通过核方法)
-
具有稀疏解(依赖于少数支持向量)
7.2 局限
-
对大规模数据训练速度慢,内存消耗大
-
核函数和参数选择依赖经验
-
不易处理多分类问题(需借助一对一/一对多策略)
8. SVM 与多分类问题
SVM 原生为二分类模型,但可通过以下策略扩展为多分类:
-
一对一(One-vs-One, OvO):为每两个类别训练一个分类器,投票决定最终分类;
-
一对多(One-vs-Rest, OvR):为每一个类别与其余类别训练一个分类器,选择概率最大者;
-
结构 SVM:直接扩展的多类模型(不常见于 OpenCV 实现中)。
9.代码示例
基于 Python 的 scikit-learn
和 matplotlib
实现。这个代码会:
-
创建两类可分数据;
-
用 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支持向量机是一种机器学习算法,它通过找到一个最优的超平面来分类数据点,使得不同类别的数据点尽可能分开。