机器学习进阶:支持向量机SVM

一、什么是支持向量机(SVM)

支持向量机(Support Vector Machine)本质是:

寻找一个“间隔最大”的最优分类超平面

它不仅追求“分开”,更追求:

分得最稳、泛化最好

这是它和逻辑回归最大的区别。


1)二维直观理解

二维空间中,超平面就是一条直线:

[
w^T x + b = 0
]

其中:

  • (w):方向
  • (b):偏置
  • 距离超平面最近的点:支持向量

这些点决定最终边界。(AiDocZh)


二、最大间隔原理(核心)

SVM 的核心目标是:

让两类样本距离分类边界尽可能远

分类边界两侧还有两条间隔边界:

[
w^T x + b = 1
][
w^T x + b = -1
]

两条边界距离:

[
\frac{2}{|w|}
]

所以:

最大化间隔 = 最小化 (|w|^2)

核心优化目标

\min_{w,b} \frac{1}{2}|w|^2 \quad s.t.; y_i(w^Tx_i+b)\ge 1

这就是经典 Hard Margin SVM


三、为什么最大间隔泛化更强

因为间隔越大,模型对扰动越不敏感。

例如你的 OCR、合同分类场景里:

  • 文本特征有噪声
  • OCR 有误字
  • 向量空间有偏移

大间隔能显著提高鲁棒性。

这也是 SVM 在:

  • 文本分类
  • 小样本分类
  • 高维稀疏特征

里非常强的原因。(scikit-learn)


四、软间隔 SVM(生产最常用)

现实数据通常线性不可分。

所以引入松弛变量:

[
\xi_i
]

允许少量点越界。


优化目标

\min_{w,b,\xi} \frac{1}{2}|w|^2 + C\sum_i \xi_i \quad s.t.; y_i(w^Tx_i+b)\ge 1-\xi_i

其中:

  • (C):误分类惩罚系数
  • 大 (C):更严格
  • 小 (C):更平滑

五、核技巧(SVM 真正强大的地方)

这是 SVM 最核心进阶点。


核心思想

当低维不可分时:

映射到高维空间再线性可分
[
\phi(x)
]

但直接升维成本很高。

于是引入:

Kernel Trick

只计算内积:

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

(AiDocZh)


六、常见核函数


1)线性核

[
K(x,z)=x^Tz
]

适合:

  • 文本分类
  • TF-IDF
  • 高维稀疏特征

2)多项式核

[
K(x,z)=(x^Tz+c)^d
]

适合非线性交互。


3)RBF 高斯核(最常用)

K(x,z)=\exp(-\gamma|x-z|^2)

特点:

  • 默认首选
  • 泛化稳定
  • 非线性能力强

scikit-learn 默认就非常推荐。(scikit-learn)


七、Python 实战:线性 SVM


1)基础分类

import numpy as np
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

X, y = load_iris(return_X_y=True)

X = X[:, :2]
scaler = StandardScaler()
X = scaler.fit_transform(X)

x_train, x_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

model = SVC(kernel="linear", C=1.0)
model.fit(x_train, y_train)

print("accuracy:", model.score(x_test, y_test))

(scikit-learn)


八、RBF SVM(推荐生产)

from sklearn.svm import SVC

rbf_model = SVC(
    kernel="rbf",
    C=2.0,
    gamma="scale"
)

rbf_model.fit(x_train, y_train)
print(rbf_model.score(x_test, y_test))

参数经验(非常重要)


C 参数

C = 0.1 / 1 / 10 / 100
  • 小:防过拟合
  • 大:拟合更强

gamma 参数

gamma = "scale"

经验:

  • 大 gamma:边界复杂
  • 小 gamma:边界平滑

九、可视化决策边界(深入理解)

import matplotlib.pyplot as plt

def plot_boundary(model, X, y):
    x_min, x_max = X[:,0].min()-1, X[:,0].max()+1
    y_min, y_max = X[:,1].min()-1, X[:,1].max()+1

    xx, yy = np.meshgrid(
        np.linspace(x_min, x_max, 300),
        np.linspace(y_min, y_max, 300)
    )

    Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)

    plt.contourf(xx, yy, Z, alpha=0.3)
    plt.scatter(X[:,0], X[:,1], c=y)
    plt.show()

这个对理解:

  • 核函数效果
  • C 对边界影响
  • gamma 复杂度

特别重要。


十、适合你的实战场景(重点)

结合你当前方向,SVM 很适合:


1)OCR 文本分类

例如:

  • 合同类型分类
  • 版权文件分类
  • 工单分类
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer

text_svm = Pipeline([
    ("tfidf", TfidfVectorizer(max_features=10000)),
    ("svm", SVC(kernel="linear"))
])

高维文本特征里,线性 SVM 非常强。(scikit-learn)


2)图像小样本分类

例如:

  • 缺陷检测
  • OCR 字符分类
  • 边缘纹理识别

3)异常检测边界学习

One-Class SVM 也非常适合:

  • 风险合同检测
  • 非法文本检测
  • OCR 异常页

十一、SVM vs XGBoost 怎么选

这是生产里最常见问题。

场景推荐
小样本高维SVM
文本 TF-IDFLinear SVM
非线性中小数据RBF SVM
百万级结构化表XGBoost
超大规模在线服务LR / GBDT

十二、生产级调参方案(推荐)

from sklearn.model_selection import GridSearchCV

params = {
    "C": [0.1, 1, 10],
    "gamma": ["scale", 0.1, 0.01],
    "kernel": ["rbf"]
}

grid = GridSearchCV(SVC(), params, cv=5)
grid.fit(x_train, y_train)

print(grid.best_params_)

十三、面试高频总结

核心记忆:


SVM 本质

最大间隔分类器

核心目标

最小化 (|w|^2)

最强能力

核技巧处理非线性

评论已关闭

推荐阅读

AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日
python之plot()和subplot()画图
2024年11月26日
理解 DALL·E 2、Stable Diffusion 和 Midjourney 工作原理
2024年12月01日