SMV 算法【python,机器学习,算法】

支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised

learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier),

其决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。

SVM 使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险

(structural risk), 是一个具有稀疏性和稳健性的分类器。SVM 可以通过核方法(kernel method)进行非线性分类,

是常见的核学习(kernel learning)方法之一。

支持向量机(Support Vector Machine, SVM)是一种强大的机器学习算法,主要用于分类问题,也可以用于回归和异常检测。以下是SVM训练的一般步骤:

  1. 数据准备:
    • 收集数据集,并划分为训练集和测试集(或验证集)。
    • 对于分类问题,确保数据集包含每个类别的标签。
    • 对于回归问题,确保目标变量是连续的。
    • 如果需要,对数据进行预处理,如缩放、标准化或归一化,因为SVM对特征的尺度敏感。
  2. 选择核函数(对于非线性SVM):
    SVM的一个关键特性是它可以处理非线性问题,通过选择一个核函数(如线性核、多项式核、径向基函数(RBF)核或
    Sigmoid 核)来实现。 根据问题的性质和数据集的特性选择合适的核函数。
  3. 选择参数:
    对于 SVM,有两个主要的参数需要选择:C(正则化参数)和 γ(核函数的系数,对于 RBF 核)。
    C 控制对误分类的惩罚程度,C 越大,模型越复杂,但可能过拟合;C 越小,模型越简单,但可能欠拟合。
    γ 控制RBF 核的"宽度",γ越大,核函数越窄,模型越复杂;γ越小,核函数越宽,模型越简单。
    可以使用交叉验证和网格搜索等方法来找到最佳的 C 和 γ 值。
  4. 训练 SVM 模型:
    使用训练集和选定的核函数及参数来训练 SVM 模型。
    训练过程中,SVM 会找到一个决策边界(超平面),该边界将不同类别的数据点分隔开,并最大化两个类别之间的间隔。
  5. 评估模型:
    使用测试集来评估模型的性能。
    对于分类问题,可以使用准确率、召回率、F1 分数等指标来评估模型的性能。
    对于回归问题,可以使用均方误差(MSE)、均方根误差(RMSE)等指标来评估模型的性能。
  6. 优化模型(可选):
    如果模型的性能不佳,可以尝试调整参数、选择不同的核函数或进行特征选择等优化措施。
    也可以尝试使用集成方法(如 Bagging、Boosting)来改进 SVM 的性能。
  7. 使用模型进行预测:
    一旦模型训练完成并经过评估和优化,就可以使用它来对新数据进行预测了。
    对于分类问题,模型会输出数据点所属的类别;对于回归问题,模型会输出一个连续值作为预测结果。

需要注意的是,虽然 SVM 在许多问题上表现良好,但它并不总是最佳选择。

在选择使用 SVM 之前,最好先了解问题的性质和数据集的特性,并考虑其他可能的机器学习算法。

为了方便计算分析,下面以二维数据进行讨论。

三个超平面

  1. 决策超平面
    W 1 x 1 + W 2 x 2 + b = 0 W_1x_1+W_2x_2+b=0 W1x1+W2x2+b=0,位于正负超平面的中间位置。
  2. 正类超平面
    W 1 x 1 + W 2 x 2 + b = 1 W_1x_1+W_2x_2+b=1 W1x1+W2x2+b=1,所有的正类数据会分布到该平面内或者分割的平面以上。
  3. 负类超平面
    W 1 x 1 + W 2 x 2 + b = − 1 W_1x_1+W_2x_2+b=-1 W1x1+W2x2+b=−1,所有的负类数据会分布到该平面内或者分割的平面以下。

正负超平面之间的距离应最大化,这样才能更好的进行分类,正负超平面上会分布一些向量数据点,因此通过该方式进行分类的方法称作支持向量机。

其中 W 1 W_1 W1、 W 2 W_2 W2表示权重, x 1 x_1 x1、 x 2 x_2 x2表示特征值。

正负超平面之间的距离

通过向量法则以及三个超平面的式子可以推导出正负超平面距离公式 L = 2 ∣ W ⃗ ∣ L=\frac{2}{|\vec{W}|} L=∣W ∣2,其中 W ⃗ = w 1 2 + w 2 2 \vec{W}=\sqrt{w_1^2+w_2^2} W =w12+w22

那么问题将转换为求取 W ⃗ \vec{W} W 最小值的问题。

求取 ∣ W ⃗ ∣ |\vec{W}| ∣W ∣的最小值

分类值 y i = { 1 , − 1 } y_i=\{1,-1\} yi={1,−1},那么 y i . ( w ⃗ . x i ⃗ + b ) ⩾ 1 y_i . (\vec{w}.\vec{x_i}+b)\geqslant 1 yi.(w .xi +b)⩾1, i ∈ 1 , 2 , 3 , . . . , n i \in 1,2,3,...,n i∈1,2,3,...,n表示所有的样本。

将问题转换为:求取 f ( w ) = ∣ w ⃗ ∣ 2 2 f(w)=\frac{|\vec{w}|^2}{2} f(w)=2∣w ∣2最小值问题,限制条件为 y i . ( w ⃗ . x i ⃗ + b ) − 1 ⩾ 0 y_i . (\vec{w}.\vec{x_i}+b)-1\geqslant 0 yi.(w .xi +b)−1⩾0

为了使用拉格朗日乘子,将限制条件转换为等式 g i ( w , b ) = y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 = p i 2 g_i(w,b)=y_i * (\vec{w} . \vec{x_i}+b)-1=p_i^2 gi(w,b)=yi∗(w .xi +b)−1=pi2。

因此,拉格朗日方程式子为: L ( w , b , λ i , p i ) = ∣ w ⃗ 2 ∣ 2 − ∑ i = 1 s λ i ∗ ( y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 − p i 2 ) L(w,b,\lambda_i,p_i)=\frac{|\vec{w}^2|}{2}-\sum\limits_{i=1}^{s} \lambda_i * (y_i * (\vec{w} . \vec{x_i}+b)-1-p_i^2) L(w,b,λi,pi)=2∣w 2∣−i=1∑sλi∗(yi∗(w .xi +b)−1−pi2)

对各个分量求偏导,并令其为0,可以得到 4 个式子:

  1. L ′ ( w ) = w ⃗ − ∑ i = 1 s λ i y i x i ⃗ = 0 L^\prime(w)=\vec{w}-\sum\limits_{i=1}^{s}\lambda_i y_i \vec{x_i}=0 L′(w)=w −i=1∑sλiyixi =0。
  2. L ′ ( b ) = − ∑ i = 1 s λ i y i = 0 L^\prime(b)=-\sum\limits_{i=1}{s}\lambda_i y_i=0 L′(b)=−i=1∑sλiyi=0。
  3. L ′ ( λ i ) = y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 − p i 2 = 0 L^\prime(\lambda_i)=y_i * (\vec{w} . \vec{x_i}+b)-1-p_i^2=0 L′(λi)=yi∗(w .xi +b)−1−pi2=0。
  4. L ′ ( p i ) = 2 λ i p i = 0 L^\prime(p_i)=2\lambda_i p_i=0 L′(pi)=2λipi=0。

由 3 和 4 式子可以得到 λ i ∗ ( y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 ) = 0 \lambda_i * (y_i * (\vec{w} . \vec{x_i}+b)-1) = 0 λi∗(yi∗(w .xi +b)−1)=0,

因为 λ i ⩾ 0 \lambda_i \geqslant 0 λi⩾0,所以 y i ∗ ( w ⃗ . x i ⃗ + b ) − 1 ⩾ 0 y_i * (\vec{w} . \vec{x_i}+b)-1 \geqslant 0 yi∗(w .xi +b)−1⩾0。

上面 4 个式子加上 ′ l a m b d a i ⩾ 0 'lambda_i \geqslant 0 ′lambdai⩾0就是 KKT 条件。

将原问题转换为对偶问题求解

  1. 原问题
    m i n i m i z e f ( w ) = ∣ w i ⃗ ∣ 2 2 minimize\ \ f(w)=\frac{|\vec{w_i}|^2}{2} minimize f(w)=2∣wi ∣2
    限制条件 g i ( w , b ) = y i ∗ ( w ⃗ ⋅ x i ⃗ + b ) − 1 ⩾ 0 g_i(w,b)=y_i * (\vec{w} \cdot \vec{x_i}+b)-1 \geqslant 0 gi(w,b)=yi∗(w ⋅xi +b)−1⩾0
  2. 对偶问题
    m a x i m i z e q ( λ ) = m a x i m i z e ( m i n i m i z e ( ∣ w i ⃗ ∣ 2 2 − y i ∗ ( w ⃗ ⋅ x i ⃗ + b ) − 1 ) ) maximize\ \ q(\lambda)=maximize(minimize(\frac{|\vec{w_i}|^2}{2} - y_i * (\vec{w} \cdot \vec{x_i}+b)-1)) maximize q(λ)=maximize(minimize(2∣wi ∣2−yi∗(w ⋅xi +b)−1)),其中 λ i ⩾ 0 \lambda_i \geqslant 0 λi⩾0
  3. 根据 KKT 条件,精简对偶问题
    m a x i m i z e q ( λ i ) = m a x i m i z e ( ∑ i = 1 s λ i − 1 2 ∑ i = 1 s ∑ j = 1 s λ i λ j y i y j x i ⃗ ⋅ x j ⃗ ) maximize\ \ q(\lambda_i) = maximize(\sum\limits_{i=1}^{s}\lambda_i-\frac{1}{2}\sum\limits_{i=1}^{s}\sum\limits_{j=1}^{s}\lambda_i\lambda_j y_i y_j \vec{x_i} \cdot \vec{x_j}) maximize q(λi)=maximize(i=1∑sλi−21i=1∑sj=1∑sλiλjyiyjxi ⋅xj )
  4. 由对偶问题,求解得到 λ i \lambda_i λi,然后根据 w ⃗ = ∑ i = 1 s λ i y i x i ⃗ \vec{w}=\sum\limits_{i=1}{s}\lambda_i y_i \vec{x_i} w =i=1∑sλiyixi 求解得到 w ⃗ \vec{w} w ,再根据 y i ∗ ( w ⃗ ⋅ x i ⃗ + b ) − 1 = 0 y_i *(\vec{w}\cdot\vec{x_i}+b)-1=0 yi∗(w ⋅xi +b)−1=0求得 b b b。

核技巧

  1. 方法一:通过维度转换函数将向量进行升维度,然后计算 x i ⃗ ⋅ x j ⃗ \vec{x_i} \cdot \vec{x_j} xi ⋅xj 的结果。这种方法有限制性,当维度很高时,无法计算结果。
  2. 方法二: 定义多项式核函数 K ( x i ⃗ , x j ⃗ ) = ( c + x i ⃗ , x j ⃗ ) d K(\vec{x_i},\vec{x_j})=(c+\vec{x_i},\vec{x_j})^d K(xi ,xj )=(c+xi ,xj )d,参数 c c c控制了式子中既有低次项也有高次项。
  3. 在 SVM 问题中,使用高斯核函数 K ( x i ⃗ , x j ⃗ ) = e − γ ∣ x i ⃗ − y j ⃗ ∣ 2 K(\vec{x_i},\vec{x_j})=e^{-\gamma|\vec{x_i}-\vec{y_j}|^2} K(xi ,xj )=e−γ∣xi −yj ∣2,即 Radial Basis Kernel 函数。 γ \gamma γ相当于相似容忍度。

损失函数

使用铰链损失函数 m a x ( 0 , 1 − p ) max(0,1-p) max(0,1−p)。其中 p = y i ∗ ( w ⃗ ⋅ x i ⃗ + b ) p=y_i *(\vec{w}\cdot \vec{x_i}+b) p=yi∗(w ⋅xi +b)。

相关推荐
带多刺的玫瑰3 分钟前
Leecode刷题C语言之切蛋糕的最小总开销①
java·数据结构·算法
API快乐传递者3 分钟前
Python爬虫获取淘宝详情接口详细解析
开发语言·爬虫·python
公众号Codewar原创作者5 分钟前
R数据分析:工具变量回归的做法和解释,实例解析
开发语言·人工智能·python
FL162386312910 分钟前
python版本的Selenium的下载及chrome环境搭建和简单使用
chrome·python·selenium
巫师不要去魔法部乱说13 分钟前
PyCharm专项训练5 最短路径算法
python·算法·pycharm
Chloe.Zz20 分钟前
Python基础知识回顾
python
IT古董20 分钟前
【漫话机器学习系列】020.正则化强度的倒数C(Inverse of regularization strength)
人工智能·机器学习
进击的小小学生23 分钟前
机器学习连载
人工智能·机器学习
骑个小蜗牛24 分钟前
Python 标准库:random——随机数
python
Trouvaille ~34 分钟前
【机器学习】从流动到恒常,无穷中归一:积分的数学诗意
人工智能·python·机器学习·ai·数据分析·matplotlib·微积分