支持向量机(SVM)原理详解
线性SVM通过寻找最优超平面,最大化类别之间的间隔,适用于线性可分的数据集。非线性SVM通过核函数将数据映射到高维空间,适用于线性不可分的数据集。软间隔SVM通过引入松弛变量,允许部分样本点位于间隔内,增强了模型的鲁棒性。SVM在分类和回归任务中表现出色,是机器学习中的重要算法之一。
支持向量机(SVM)原理详解
1. 引言
支持向量机(Support Vector Machine, SVM)是一种强大的监督学习算法,广泛应用于分类和回归任务。其核心思想是通过寻找最优超平面,最大化类别之间的间隔(Margin),从而实现分类。
2. 线性支持向量机
2.1 基本概念
对于线性可分的数据集,SVM的目标是找到一个超平面:
w⊤x+b=0 w^\top x + b = 0 w⊤x+b=0
使得两类样本之间的间隔最大化。
2.2 间隔(Margin)
间隔定义为两个类别最近样本点到超平面的距离之和:
Margin=2∥w∥ \text{Margin} = \frac{2}{\|w\|} Margin=∥w∥2
2.3 优化问题
SVM的优化目标是最大化间隔,等价于最小化∥w∥\|w\|∥w∥:
minw,b12∥w∥2 \min_{w, b} \frac{1}{2} \|w\|^2 w,bmin21∥w∥2
约束条件:
yi(w⊤xi+b)≥1,∀i y_i (w^\top x_i + b) \geq 1, \quad \forall i yi(w⊤xi+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=1∑nαi−21i=1∑nj=1∑nαiαjyiyjxi⊤xj
约束条件:
∑i=1nαiyi=0,αi≥0 \sum_{i=1}^n \alpha_i y_i = 0, \quad \alpha_i \geq 0 i=1∑nαiyi=0,αi≥0
3. 非线性支持向量机
3.1 核函数(Kernel Function)
对于非线性可分的数据集,SVM通过核函数将数据映射到高维空间,使其在高维空间中线性可分。
3.2 常见核函数
- 线性核:
K(xi,xj)=xi⊤xj K(x_i, x_j) = x_i^\top x_j K(xi,xj)=xi⊤xj - 多项式核:
K(xi,xj)=(xi⊤xj+c)d K(x_i, x_j) = (x_i^\top x_j + c)^d K(xi,xj)=(xi⊤xj+c)d - 径向基核(RBF):
K(xi,xj)=exp(−γ∥xi−xj∥2) K(x_i, x_j) = \exp(-\gamma \|x_i - x_j\|^2) K(xi,xj)=exp(−γ∥xi−xj∥2)
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=1∑nαi−21i=1∑nj=1∑nαiαjyiyjK(xi,xj)
4. 软间隔支持向量机
4.1 基本概念
对于线性不可分的数据集,SVM引入松弛变量ξi\xi_iξi,允许部分样本点位于间隔内。
4.2 优化问题
minw,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,ξmin21∥w∥2+Ci=1∑nξ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(w⊤xi+b)≥1−ξi,ξi≥0
其中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在分类和回归任务中表现出色,是机器学习中的重要算法之一。
更多推荐

所有评论(0)