支持向量机(Support Vector Machines)

支持向量机(Support Vector Machine, SVM)是 Cortes 和 Vapnik 于 1995 年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。

1、SVM思想及步骤

1.1 线性函数

线性函数在一维空间就是一个点,在二维空间里就是一条直线,三维空间里就是一个平面,在多维空间中线性函数有一个统一的名称——超平面(Hyper Plane)。

一般的,如果一个线性函数能够将样本完全正确的分开,就称这些数据是线性可分的,否则称为非线性可分的。

1.2 分类间隔

需要有一个指标来衡量解决方案(即我们通过训练建立的分类模型)的好坏,而分类间隔是一个比较好的指标。

函数间隔

在进行分类的时候,每一个样本由一个向量(就是那些数据特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成:

D_{i}=(x_{i},y_{i})

其中 x_{i} 就是数据向量(维数很高),y_{i} 就是分类标记,在二元的线性分类中,这个表示分类的标记只有两个值,1 和 -1(用来表示属于还是不属于这个类)。

一个样本点到某个超平面的间隔可定义为:

\delta _{i}=y_{i}(w^{T}x_{i}+b)

注意到如果样本属于该类别,w^{T}x+b>0y_{i}>0

样本不属于该类别,w^{T}x+b<0y_{i}<0

表明 y_{i}(w^{T}x+b) 总是大于 0,而且它的值就等于 \left | w^{T}x+b \right |(也就是 \left | g(x_{i}) \right |)。

某一个样本的函数间隔就是: \left | w^{T}x+b \right |

定义全局样本上的函数间隔:min\left | w^{T}x_{i}+b \right | 其中 i=1,2,...,m

即在训练样本上分类正例和负例确信度最小的函数间隔。

几何间隔

为了限制 w 和 b,需要加入归一化条件,即用 \frac{w}{\left \| w \right \|} 和 \frac{b}{\left \| w \right \|} 分别代替原来的 w 和 b,那么间隔就写成:

\gamma ^{(i)}=\frac{w^{T}x^{(i)}+b}{w}=(\frac{w}{\left \| w \right \|})^{T}x^{(i)}+\frac{b}{\left \| w \right \|}

这个公式就是解析几何中点 x_{i} 到直线 g(x)=0 的距离公式。

同样定义全局的几何间隔:

r=\frac{\left | w^{T}x+b \right |}{\left \| w \right \|}

当用归一化的 w 和 b 代替原值之后的间隔叫做几何间隔,几何间隔所表示的正是点到超平面的欧氏距离。

几何距离

几何距离图中,H 是分类面,H1 和 H2 是平行于 H,且过离 H 最近的两类样本的直线,H1 与 H,H2 与 H 之间的距离就是几何距离。

点到直线的距离计算

假设向量:w=(w_{1},w_{2},w_{3},...,w_{n})

它的 p-范数为:\left \| w \right \|_{p}=(w_{1}^{p}+w_{2}^{p}+w_{3}^{p}+...+w_{1}^{p})^{\frac{-1}{p}}

其中,\left \| w \right \| 叫做向量 w 的范数,范数是对向量长度的一种度量。向量长度指的是它的 2-范数,即p 等于 2。

用图像可表示为:

几何距离求解

2、最优间隔分类器求解

由上述可知,函数间隔为:r=y(w^{T}x+b)=\left | g(x) \right |

几何间隔为:\delta =\frac{g(x)}{\left \| x \right \|}

可以看出几何距离与 \left \| w \right \| 成反比,因此最大化几何间隔等同于最小化 \left \| w \right \|

分类器:对任意的实数,当

w^{T}x+b>1,y_{i}=1;w^{T}x+b<-1,y_{i}=-1y

目标函数:arg max_{w,b}\left \{ min_{i}(y_{i}(w^{T}x_{i}+b))\frac{1}{\left \| w \right \|} \right \}

显然 y_{i}(w^{T}x_{i}+b)\geqslant 1,i=1,2,...,m ,即其最小值为 1,为了最大化间隔只需要最大化 \frac{1}{\left \| w \right \|}

则分类问题最终转变为一个带约束的最小值问题:

min_{w,b}\frac{1}{2}\left \| w \right \|^{2},subject.to. y_{i}(w^{T}x_{i}+b)\geqslant 1,i=1,2,...,m

3、支持向量机回归(SVR)

对于回归问题,给定训练数据:D=\left \{ (x_{1},y_{1}), (x_{2},y_{2}),..., (x_{m},y_{m})\right \}

期望得到回归模型:f(x)=w^{T}x+b

使得 f(x) 与 y 尽可能相近,wb是模型参数。

对样本 (x,y),传统回归模型通常是直接基于模型输出 f(x) 与真实输出 y 之间的差别来计算损失,而在 SVR 中,假设能够容许 f(x) 与 y 之间最多有 \epsilon 的误差,仅当 f(x) 与 y 之前的差绝对值大于 \epsilon 时才计算损失。

于是,SVR 问题转变为:

min_{w,b}\frac{1}{2}\left \| w \right \|^{2}+C\sum_{i=1}^{m}l_{\epsilon }(f(x_{i})-y_{i})

C 为正则化常数,l_{\epsilon } 为:

l_{\epsilon }(z)=\left\{\begin{matrix} 0 ,&if\left | z \right |< \epsilon ,\\ \left | z \right |-\epsilon , & otherwise \end{matrix}\right.

4、python代码实现

import pandas as pd
import numpy as np
from sklearn.svm import SVR
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
 
# 读取数据
data = pd.read_csv(‘path’)
 
# 准备数据, 以回归为例
y = data[:, -1]
x = data[:, :-1]
 
# 训练集、测试集划分
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25,random_state= 42)
 
# 回归模型、参数
svm_model = SVR()
param_grid = dict(params)
 
# GridSearchCV 优化参数、训练模型
gsearch = GridSearchCV(svm_model, param_grid)
svm_models = gsearch.fit(x_train, y_train)
 
# 打印 coef
print('Partial Least Squares Regression coefficients:',svm_models.best_estimator_.coef_)
 
# 对测试集做预测
svm_prediction = svm_model.predict(x_test)
 
# 计算 R2,MSE
pls_r2 = r2_score(y_test,svm_prediction)
pls_mse = np.sqrt(mean_squared_error(y_test,svm_prediction))

『本文参考』

[1] A training algorithm for optimal margin classifiers | Proceedings of the fifth annual workshop on Computational learning theory (acm.org)

[2] SVM(支持向量机)原理及数学推导全过程详解(附MATLAB程序) - 知乎 (zhihu.com)

[3] 支持向量机SVM(一. 基本概念与算法原理) - 知乎 (zhihu.com)

[4] 支持向量机(SVM)——原理篇 (zhihu.com)

[5] 支持向量机(SVM)和支持向量机回归(SVR) - 知乎 (zhihu.com)

[6] 支持向量机(SVM)原理小结(3)支持向量回归SVR_支持向量机回归原理-CSDN博客

[7] sklearn.svm.SVR — scikit-learn 1.3.1 documentation

免责声明:部分文章整合自网络,因内容庞杂无法联系到全部作者,如有侵权,请联系删除,我们会在第一时间予以答复,万分感谢。

最后,祝大家科研顺利!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值