支持向量机(SVM)算法详解
简介
支持向量机(Support Vector Machine, SVM)是一种用于分类和回归任务的监督学习算法。SVM的基本思想是找到一个最佳的超平面,以最大化类别之间的边界(间隔)。这种方法在处理高维数据和小样本数据时表现优异。
支持向量机模型
SVM模型通过一个超平面将数据集分成不同的类别。对于线性可分数据,SVM选择的超平面使得两类之间的间隔最大化。对于非线性可分数据,SVM通过核技巧(Kernel Trick)将数据映射到更高维空间,使其线性可分。
线性支持向量机
线性支持向量机的基本公式如下:
[ w \cdot x + b = 0 ]
其中:
- ( w ) 是权重向量。
- ( x ) 是输入特征向量。
- ( b ) 是偏置项。
目标是最大化超平面到最近样本点的距离(间隔)。对于每个训练样本 ( (x_i, y_i) ),有以下约束条件:
[ y_i (w \cdot x_i + b) \geq 1 ]
非线性支持向量机
对于非线性数据,SVM使用核函数将数据映射到高维空间。在高维空间中,数据可能变得线性可分。常用的核函数包括:
- 线性核(Linear Kernel):( K(x, x’) = x \cdot x’ )
- 多项式核(Polynomial Kernel):( K(x, x’) = (x \cdot x’ + 1)^d )
- 径向基核(RBF Kernel):( K(x, x’) = \exp(-\gamma |x - x’|^2) )
- sigmoid核(Sigmoid Kernel):( K(x, x’) = \tanh(\alpha x \cdot x’ + c) )
SVM优化
SVM的优化目标是找到最佳的 ( w ) 和 ( b ) ,使得以下目标函数最小化:
[ \min \frac{1}{2} |w|^2 ]
同时满足约束条件:
[ y_i (w \cdot x_i + b) \geq 1 ]
松弛变量和软间隔
对于无法完全线性可分的数据,SVM引入松弛变量 ( \xi_i ) 以允许某些样本违反间隔约束。优化目标变为:
[ \min \frac{1}{2} |w|^2 + C \sum_{i=1}^{n} \xi_i ]
其中 ( C ) 是惩罚参数,用于控制间隔违反的程度。
实现示例
以下是使用Python和scikit-learn库实现支持向量机分类的示例:
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from<