【基础】支持向量机(SVM)算法详解
发布时间: 2024-06-25 02:24:34 阅读量: 76 订阅数: 107
![【基础】支持向量机(SVM)算法详解](https://pic1.zhimg.com/80/v2-cd05cf12d625b1619ebc7222ffbb6e2c_1440w.webp)
# 2.1 线性可分支持向量机
### 2.1.1 决策函数和最大间隔
线性可分支持向量机(SVM)算法是一种二分类算法,它通过找到一个超平面将数据点分隔成两类。超平面的方程为:
```
w^T x + b = 0
```
其中:
* w 是超平面的权重向量
* x 是数据点
* b 是超平面的偏移量
超平面的目标是最大化其到两类数据点的最小距离,称为最大间隔。最大间隔的公式为:
```
γ = 2 / ||w||
```
其中:
* γ 是最大间隔
* ||w|| 是权重向量的范数
# 2. SVM算法理论基础
### 2.1 线性可分支持向量机
#### 2.1.1 决策函数和最大间隔
线性可分支持向量机(SVM)是一种二分类算法,它通过找到一个超平面将数据点划分为两类。超平面的方程为:
```
w^T x + b = 0
```
其中:
* w 是超平面的权重向量
* x 是数据点
* b 是超平面的偏置项
为了找到最佳超平面,SVM最大化超平面两侧数据点到超平面的距离。这个距离称为最大间隔。最大间隔的公式为:
```
γ = 2 / ||w||
```
其中:
* γ 是最大间隔
* ||w|| 是权重向量的范数
#### 2.1.2 对偶问题和拉格朗日乘子法
为了求解线性可分SVM的优化问题,引入拉格朗日乘子法。拉格朗日函数为:
```
L(w, b, α) = 1 / 2 ||w||^2 - ∑α_i (y_i (w^T x_i + b) - 1)
```
其中:
* α_i 是拉格朗日乘子
* y_i 是数据点的标签(+1 或 -1)
求解拉格朗日函数的极值,得到对偶问题:
```
max ∑α_i - 1 / 2 ∑∑α_i α_j y_i y_j x_i^T x_j
s.t. ∑α_i y_i = 0, α_i ≥ 0
```
对偶问题的解可以得到超平面的权重向量和偏置项:
```
w = ∑α_i y_i x_i
b = y_j - w^T x_j
```
其中,j 是满足 α_j > 0 的数据点。
### 2.2 非线性支持向量机
#### 2.2.1 核函数
对于非线性可分的数据,SVM使用核函数将数据映射到高维空间,使其在高维空间中线性可分。常用的核函数有:
* 线性核:K(x, y) = x^T y
* 多项式核:K(x, y) = (x^T y + c)^d
* 高斯核:K(x, y) = exp(-||x - y||^2 / (2σ^2))
#### 2.2.2 高维空间映射
核函数将数据映射到高维空间中,但实际计算时并不需要显式地进行映射。核函数直接计算映射后的数据点之间的内积,避免了高维空间的计算复杂度。
**代码块:**
```python
import numpy as np
from sklearn.svm import SVC
# 定义核函数
kernel = 'rbf'
# 创建 SVM 分类器
clf = SVC(kernel=kernel)
# 训练模型
clf.fit(X_train, y_train)
# 预测新数据
y_pred = clf.predict(X_test)
```
0
0