机器学习 第六章 支持向量机

第六章 支持向量机学习笔记

1. 间隔与支持向量

1.1 什么是间隔和支持向量?

在分类学习中,目标是找到划分超平面将不同类别样本分开。最优超平面应位于两类样本的"正中间",这种超平面对局部扰动容忍性最好,具有最强泛化能力。

1.2 如何找到最大间隔划分超平面?

  • 超平面方程: w T x + b = 0 w^T x + b = 0 wTx+b=0 w w w为法向量, b b b为位移项)
  • 样本约束条件:
    • y i = + 1 y_i=+1 yi=+1时, w T x i + b ≥ 1 w^T x_i + b \geq 1 wTxi+b1
    • y i = − 1 y_i=-1 yi=1时, w T x i + b ≤ − 1 w^T x_i + b \leq -1 wTxi+b1
  • 优化目标:最大化 2 ∥ w ∥ \frac{2}{\|w\|} w2等价于最小化 1 2 ∥ w ∥ 2 \frac{1}{2}\|w\|^2 21w2

1.3 支持向量机的基本型

min ⁡ w , b 1 2 ∥ w ∥ 2 s.t. y i ( w T x i + b ) ≥ 1 ,   i = 1 , 2 , … , m \min_{w,b} \frac{1}{2} \|w\|^2 \quad \text{s.t.} \quad y_i(w^T x_i + b) \geq 1,\ i=1,2,\ldots,m w,bmin21w2s.t.yi(wTxi+b)1, i=1,2,,m

2. 对偶问题

2.1 什么是对偶问题?

通过拉格朗日乘子法转换的优化问题:
max ⁡ α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j \max_{\alpha} \sum_{i=1}^m \alpha_i - \frac{1}{2} \sum_{i=1}^m \sum_{j=1}^m \alpha_i \alpha_j y_i y_j x_i^T x_j αmaxi=1mαi21i=1mj=1mαiαjyiyjxiTxj
约束条件:
∑ i = 1 m α i y i = 0 , α i ≥ 0 ,   i = 1 , 2 , … , m \sum_{i=1}^m \alpha_i y_i = 0,\quad \alpha_i \geq 0,\ i=1,2,\ldots,m i=1mαiyi=0,αi0, i=1,2,,m

2.2 如何求解对偶问题?

使用SMO(序列最小优化)算法求解二次规划问题

2.3 代码实现

import numpy as np
from sklearn.svm import SVC

X = np.array([[1,2], [2,3], [3,3], [2,1], [3,2], [4,3]])
y = np.array([1,1,1,-1,-1,-1])

clf = SVC(kernel='linear', C=1.0)
clf.fit(X, y)

print("支持向量:", clf.support_vectors_)
print("权重:", clf.coef_[0])
print("偏置:", clf.intercept_[0])

3. 核函数

3.1 什么是核函数?

将样本映射到高维空间的函数,常用核函数:

  • 线性核: K ( x i , x j ) = x i T x j K(x_i,x_j) = x_i^T x_j K(xi,xj)=xiTxj
  • 多项式核: K ( x i , x j ) = ( x i T x j + c ) d K(x_i,x_j) = (x_i^T x_j + c)^d K(xi,xj)=(xiTxj+c)d
  • 高斯核: K ( x i , x j ) = exp ⁡ ( − γ ∥ x i − x j ∥ 2 ) K(x_i,x_j) = \exp(-\gamma \|x_i - x_j\|^2) K(xi,xj)=exp(γxixj2)

3.2 核函数选择策略

数据类型推荐核函数
线性可分线性核
小样本非线性高斯核
大样本非线性多项式核

3.3 代码实现

clf = SVC(kernel='rbf', C=1.0, gamma=0.1)
clf.fit(X, y)
print("支持向量:", clf.support_vectors_)

4. 软间隔与正则化

4.1 软间隔概念

允许部分样本不满足约束,提升模型容错性:
min ⁡ w , b 1 2 ∥ w ∥ 2 + C ∑ i = 1 m ξ i \min_{w,b} \frac{1}{2}\|w\|^2 + C\sum_{i=1}^m \xi_i w,bmin21w2+Ci=1mξi

4.2 正则化类型

  • L1正则化:稀疏解
  • L2正则化:非稀疏解

4.3 代码实现

clf = SVC(kernel='linear', C=0.5)  # C值越小容错性越强
clf.fit(X, y)

5. 支持向量回归(SVR)

5.1 SVR原理

允许预测值与真实值存在 ϵ \epsilon ϵ偏差:
min ⁡ 1 2 ∥ w ∥ 2 + C ∑ i = 1 m ( ξ i + ξ i ^ ) \min \frac{1}{2}\|w\|^2 + C\sum_{i=1}^m (\xi_i + \hat{\xi_i}) min21w2+Ci=1m(ξi+ξi^)

5.2 代码实现

from sklearn.svm import SVR

X = np.array([[1],[2],[3],[4],[5]])
y = np.array([1,2,3,4,5])

clf = SVR(kernel='linear', epsilon=0.1)
clf.fit(X, y)
print("预测值:", clf.predict(X))

6. 注意点

  1. SVM核心思想是通过最大化间隔提升泛化能力
  2. 对偶问题转换和核技巧是处理非线性问题的关键
  3. 正则化参数C平衡模型复杂度与训练误差
  4. SVR通过 ϵ \epsilon ϵ-不敏感函数实现鲁棒回归
  5. 实际应用中需注意特征缩放和参数调优
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值