人工智能之核心基础 机器学习 第五章 支持向量机(SVM)

0 阅读4分钟

人工智能之核心基础 机器学习

第五章 支持向量机(SVM)


5.1 SVM核心思想

🎯 核心目标:找一条“最宽”的分界线!

想象你有一堆红球和蓝球散落在桌上,你要用一张纸把它们完全分开。 SVM 的目标不是随便找一条分界线,而是找最粗的那张纸——这样即使球稍微移动,也不会混在一起。

关键概念

  • 分隔超平面(Separating Hyperplane):在高维空间中的“分界线”(2D是线,3D是面)
  • 间隔(Margin):分界线到最近样本的距离
  • 支持向量(Support Vectors):离分界线最近的那些样本点(决定分界线位置!)

图:SVM寻找最大间隔的分隔线,红色/蓝色点为支持向量

🔍 为什么“间隔最大化”重要?

  • 鲁棒性强:对噪声和新数据更稳定
  • 泛化能力好:避免过拟合(不像决策树可能绕来绕去)

💡 通俗理解: 普通分类器:“只要分开就行” SVM:“不仅要分开,还要留足安全距离!”


5.2 线性可分 vs 线性不可分

✅ 情况1:线性可分(理想情况)

  • 所有样本能被一条直线(或超平面)完美分开
  • SVM 直接求解硬间隔最大化

但现实数据往往有噪声、有重叠 → 线性不可分!


⚠️ 情况2:线性不可分 → 软间隔 + 核技巧

1️⃣ 软间隔(Soft Margin)

允许某些样本“站错队”,通过引入松弛变量 ξi\xi_i

minθ,b,ξ12θ2+Ci=1mξi\min_{\theta, b, \xi} \frac{1}{2} \|\theta\|^2 + C \sum_{i=1}^m \xi_i
  • CC正则化参数
    • CC 很大 → 不容忍错误(接近硬间隔)
    • CC 很小 → 允许更多错误(防止过拟合)

📌 调参重点C 控制“间隔宽度”与“分类错误”的权衡


2️⃣ 核函数(Kernel Trick)——处理非线性问题

当数据无法用直线分开时,SVM 可以通过核函数将数据映射到高维空间,使其变得线性可分!

核技巧精髓:不用显式计算高维坐标,直接计算高维空间的内积!

常用核函数:

核函数公式特点适用场景
线性核K(x,x)=xTxK(x, x') = x^T x'等价于原始空间线性SVM文本分类、高维稀疏数据
多项式核K(x,x)=(γxTx+r)dK(x, x') = (\gamma x^T x' + r)^d可拟合曲线边界中等复杂非线性
RBF核(高斯核)K(x,x)=exp(γxx2)K(x, x') = \exp(-\gamma \|x - x'\|^2)最常用!能拟合任意形状图像、一般非线性问题

💡 RBF核参数

  • γ\gamma(gamma):控制单个样本的影响范围
    • γ\gamma 大 → 模型复杂(可能过拟合)
    • γ\gamma 小 → 模型平滑(可能欠拟合)

图:RBF核能拟合复杂边界,线性核只能分直线


5.3 SVM的优缺点与适用场景

✅ 优点

优势说明
高维有效即使特征数 > 样本数也能工作(如文本)
内存高效只存储支持向量(通常远少于总样本)
泛化强间隔最大化带来良好理论保证
核灵活通过核函数处理非线性问题

❌ 缺点

劣势说明
大数据慢训练复杂度约 O(n2n3)O(n^2 \sim n^3),不适合百万级数据
难调参Cgamma 需要仔细调整
不直接输出概率需额外校准(如 Platt scaling)
对特征缩放敏感必须标准化!(否则RBF核失效)

🎯 适用场景

  • 中小规模数据集(< 10万样本)
  • 高维稀疏数据(如文本分类)
  • 需要清晰决策边界的任务
  • 特征维度较高但样本不多的情况

🚫 不适合:超大规模数据(用随机森林/XGBoost)、需要概率输出的场景(可用逻辑回归)


5.4 实战案例 + 代码实现

案例1:图像简单分类(手写数字 0 vs 1)

from sklearn import datasets
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report

# 加载手写数字数据(只取0和1)
digits = datasets.load_digits()
X, y = digits.data, digits.target
X, y = X[y < 2], y[y < 2]  # 只保留0和1

# 划分数据 + 标准化(❗SVM必须标准化!)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 网格搜索找最佳参数(C, gamma)
param_grid = {'C': [0.1, 1, 10], 'gamma': ['scale', 'auto', 0.001, 0.01]}
svm = SVC(kernel='rbf')
grid_search = GridSearchCV(svm, param_grid, cv=3, scoring='accuracy')
grid_search.fit(X_train_scaled, y_train)

print("最佳参数:", grid_search.best_params_)
print("测试集准确率:", grid_search.score(X_test_scaled, y_test))

案例2:文本分类(新闻类别)

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline

# 加载两类新闻(科技 vs 宗教)
categories = ['comp.graphics', 'soc.religion.christian']
newsgroups_train = fetch_20newsgroups(subset='train', categories=categories)
newsgroups_test = fetch_20newsgroups(subset='test', categories=categories)

# 构建管道:TF-IDF + SVM
text_clf = Pipeline([
    ('tfidf', TfidfVectorizer()),
    ('svm', SVC(kernel='linear', C=1.0))  # 文本常用线性核!
])

text_clf.fit(newsgroups_train.data, newsgroups_train.target)
predicted = text_clf.predict(newsgroups_test.data)

print("准确率:", (predicted == newsgroups_test.target).mean())
print("\n分类报告:")
print(classification_report(newsgroups_test.target, predicted, 
                          target_names=newsgroups_test.target_names))

💡 文本分类技巧

  • 线性核(速度快,效果好)
  • TF-IDF 自动处理高维稀疏特征
  • 不需要标准化(TF-IDF 已归一化)

🎯 本章总结

  • SVM = 找最宽马路分隔两类
  • 线性可分?→ 硬间隔;不可分?→ 软间隔 + 核函数
  • RBF核最万能,线性核适合文本
  • 必须标准化!必须调参!不适合大数据!

💡 初学者建议

  1. 先用 SVC(kernel='linear') 试试线性可分性
  2. 再用 SVC(kernel='rbf') + GridSearchCV 调参
  3. 文本任务优先选线性核,又快又好!

资料关注

公众号:咚咚王 gitee:gitee.com/wy185850518…

《Python编程:从入门到实践》 《利用Python进行数据分析》 《算法导论中文第三版》 《概率论与数理统计(第四版) (盛骤) 》 《程序员的数学》 《线性代数应该这样学第3版》 《微积分和数学分析引论》 《(西瓜书)周志华-机器学习》 《TensorFlow机器学习实战指南》 《Sklearn与TensorFlow机器学习实用指南》 《模式识别(第四版)》 《深度学习 deep learning》伊恩·古德费洛著 花书 《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》 《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》 《自然语言处理综论 第2版》 《Natural-Language-Processing-with-PyTorch》 《计算机视觉-算法与应用(中文版)》 《Learning OpenCV 4》 《AIGC:智能创作时代》杜雨+&+张孜铭 《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》 《从零构建大语言模型(中文版)》 《实战AI大模型》 《AI 3.0》