支持向量机(SVM)原理详解

1. 引言

支持向量机(Support Vector Machine, SVM)是一种强大的监督学习算法,广泛应用于分类和回归任务。其核心思想是通过寻找最优超平面,最大化类别之间的间隔(Margin),从而实现分类。


2. 线性支持向量机

2.1 基本概念

对于线性可分的数据集,SVM的目标是找到一个超平面:
w⊤x+b=0 w^\top x + b = 0 wx+b=0
使得两类样本之间的间隔最大化。

2.2 间隔(Margin)

间隔定义为两个类别最近样本点到超平面的距离之和:
Margin=2∥w∥ \text{Margin} = \frac{2}{\|w\|} Margin=w2

2.3 优化问题

SVM的优化目标是最大化间隔,等价于最小化∥w∥\|w\|w
min⁡w,b12∥w∥2 \min_{w, b} \frac{1}{2} \|w\|^2 w,bmin21w2
约束条件:
yi(w⊤xi+b)≥1,∀i y_i (w^\top x_i + b) \geq 1, \quad \forall i yi(wxi+b)1,i

2.4 拉格朗日对偶

通过引入拉格朗日乘子αi\alpha_iαi,将原问题转化为对偶问题:
max⁡α∑i=1nαi−12∑i=1n∑j=1nαiαjyiyjxi⊤xj \max_{\alpha} \sum_{i=1}^n \alpha_i - \frac{1}{2} \sum_{i=1}^n \sum_{j=1}^n \alpha_i \alpha_j y_i y_j x_i^\top x_j αmaxi=1nαi21i=1nj=1nαiαjyiyjxixj
约束条件:
∑i=1nαiyi=0,αi≥0 \sum_{i=1}^n \alpha_i y_i = 0, \quad \alpha_i \geq 0 i=1nαiyi=0,αi0


3. 非线性支持向量机

3.1 核函数(Kernel Function)

对于非线性可分的数据集,SVM通过核函数将数据映射到高维空间,使其在高维空间中线性可分。

3.2 常见核函数

  1. 线性核
    K(xi,xj)=xi⊤xj K(x_i, x_j) = x_i^\top x_j K(xi,xj)=xixj
  2. 多项式核
    K(xi,xj)=(xi⊤xj+c)d K(x_i, x_j) = (x_i^\top x_j + c)^d K(xi,xj)=(xixj+c)d
  3. 径向基核(RBF)
    K(xi,xj)=exp⁡(−γ∥xi−xj∥2) K(x_i, x_j) = \exp(-\gamma \|x_i - x_j\|^2) K(xi,xj)=exp(γxixj2)

3.3 优化问题

引入核函数后,对偶问题变为:
max⁡α∑i=1nαi−12∑i=1n∑j=1nαiαjyiyjK(xi,xj) \max_{\alpha} \sum_{i=1}^n \alpha_i - \frac{1}{2} \sum_{i=1}^n \sum_{j=1}^n \alpha_i \alpha_j y_i y_j K(x_i, x_j) αmaxi=1nαi21i=1nj=1nαiαjyiyjK(xi,xj)


4. 软间隔支持向量机

4.1 基本概念

对于线性不可分的数据集,SVM引入松弛变量ξi\xi_iξi,允许部分样本点位于间隔内。

4.2 优化问题

min⁡w,b,ξ12∥w∥2+C∑i=1nξi \min_{w, b, \xi} \frac{1}{2} \|w\|^2 + C \sum_{i=1}^n \xi_i w,b,ξmin21w2+Ci=1nξi
约束条件:
yi(w⊤xi+b)≥1−ξi,ξi≥0 y_i (w^\top x_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0 yi(wxi+b)1ξi,ξi0

其中CCC为惩罚参数,控制误分类的惩罚力度。


5. 实现示例

5.1 线性SVM实现(Python)

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 构建线性SVM模型
clf = SVC(kernel='linear')
clf.fit(X_train, y_train)

# 预测
y_pred = clf.predict(X_test)

# 评估
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

5.2 非线性SVM实现(Python)

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 构建非线性SVM模型(使用RBF核)
clf = SVC(kernel='rbf', gamma='scale')
clf.fit(X_train, y_train)

# 预测
y_pred = clf.predict(X_test)

# 评估
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

6. 总结

线性SVM通过寻找最优超平面,最大化类别之间的间隔,适用于线性可分的数据集。

非线性SVM通过核函数将数据映射到高维空间,适用于线性不可分的数据集。

软间隔SVM通过引入松弛变量,允许部分样本点位于间隔内,增强了模型的鲁棒性。

SVM在分类和回归任务中表现出色,是机器学习中的重要算法之一。

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐