支持向量机(Support Vector Machine, SVM)是 Cortes 和 Vapnik 于 1995 年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。
1、SVM思想及步骤
1.1 线性函数
线性函数在一维空间就是一个点,在二维空间里就是一条直线,三维空间里就是一个平面,在多维空间中线性函数有一个统一的名称——超平面(Hyper Plane)。
一般的,如果一个线性函数能够将样本完全正确的分开,就称这些数据是线性可分的,否则称为非线性可分的。
1.2 分类间隔
需要有一个指标来衡量解决方案(即我们通过训练建立的分类模型)的好坏,而分类间隔是一个比较好的指标。
函数间隔
在进行分类的时候,每一个样本由一个向量(就是那些数据特征所组成的向量)和一个标记(标示出这个样本属于哪个类别)组成:
其中 就是数据向量(维数很高),
就是分类标记,在二元的线性分类中,这个表示分类的标记只有两个值,1 和 -1(用来表示属于还是不属于这个类)。
一个样本点到某个超平面的间隔可定义为:
注意到如果样本属于该类别,,
,
样本不属于该类别,,
,
表明 总是大于 0,而且它的值就等于
(也就是
)。
某一个样本的函数间隔就是:
定义全局样本上的函数间隔: 其中
即在训练样本上分类正例和负例确信度最小的函数间隔。
几何间隔
为了限制 和
,需要加入归一化条件,即用
和
分别代替原来的
和
,那么间隔就写成:
这个公式就是解析几何中点 到直线
的距离公式。
同样定义全局的几何间隔:
当用归一化的 和
代替原值之后的间隔叫做几何间隔,几何间隔所表示的正是点到超平面的欧氏距离。
几何距离
几何距离图中,H 是分类面,H1 和 H2 是平行于 H,且过离 H 最近的两类样本的直线,H1 与 H,H2 与 H 之间的距离就是几何距离。
点到直线的距离计算
假设向量:
它的 p-范数为:
其中, 叫做向量
的范数,范数是对向量长度的一种度量。向量长度指的是它的 2-范数,即p 等于 2。
用图像可表示为:
几何距离求解
2、最优间隔分类器求解
由上述可知,函数间隔为:
几何间隔为:
可以看出几何距离与 成反比,因此最大化几何间隔等同于最小化
。
分类器:对任意的实数,当
目标函数:
显然 ,即其最小值为 1,为了最大化间隔只需要最大化
则分类问题最终转变为一个带约束的最小值问题:
3、支持向量机回归(SVR)
对于回归问题,给定训练数据:
期望得到回归模型:
使得 与
尽可能相近,
和
是模型参数。
对样本 ,传统回归模型通常是直接基于模型输出
与真实输出
之间的差别来计算损失,而在 SVR 中,假设能够容许
与
之间最多有
的误差,仅当
与
之前的差绝对值大于
时才计算损失。
于是,SVR 问题转变为:
为正则化常数,
为:
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))
『本文参考』
[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
免责声明:部分文章整合自网络,因内容庞杂无法联系到全部作者,如有侵权,请联系删除,我们会在第一时间予以答复,万分感谢。
最后,祝大家科研顺利!