三、基于支持向量机的分类预测 您所在的位置:网站首页 支持向量机回归预测模型能够多步预测么 三、基于支持向量机的分类预测

三、基于支持向量机的分类预测

2024-07-12 12:10| 来源: 网络整理| 查看: 265

基于向量机的分类预测 一、什么是支持向量二、支持向量机1.什么是支持向量机2.支持向量机的推导3.SVM的损失函数4.SVM的核函数5.SVM的硬间隔和软间隔 三、代码实现四、参考文献

一、什么是支持向量

在支持向量机中,距离超平面最近的且满足一定条件的几个训练样本点被称为支持向量。 对于一条直线: 在这里插入图片描述 (w1, w2)实际上就是直线的法线方向。如果我们代入(x1, x2)到等式左边,则当该式大于0时,X在法线正方向上,小于0时则在法线负方向上,等于0则在法线上。将这一性质应用于更高维度的话,如果X为n维向量,则这条直线变为超平面。 在这里插入图片描述 支持向量怎么选择?以线性可分SVM为例,我们将W认为是若干样本线性组合得到的,第1个样本为x1,第i 个为xi。对于每个X,给予其系数a。此时存在:

在这里插入图片描述 选取部分\alpha,使它们的值不为0,其余\alpha值都设为0。则对W真正起作用的就是a值不为0的这些X向量。这些向量,支持了法线向量,因此就是支持向量。

二、支持向量机 1.什么是支持向量机

支持向量机(Support Vector Machine)是一种十分常见的分类器,可分为以下几类:Linearly Separabel SVM、Linear SVM、Non-Linear SVM。

Linearly Separable SVM的原理是要达到hard margin maximization。Hard margin指的是支持向量到分割面的距离,因为支持向量距离分割面最近,该距离也是过渡带宽度(的一半)。Linear separable是指,当我们想用一个分割平面,将两个数据分割开时,存在至少一个分割面,使两个数据可以完全分离,则我们认为这个SVM是线性可分SVM。

Linear SVM是指,分割面虽然不能完全分割所有数据,但是该线性分割方式可以使绝大多数数据正确的被分类。那么这样的SVM也可以被称为线性SVM。Linear SVM要达到的是soft margin maximization。这里的soft对应线性可分SVM的hard。而soft margin指的是,当SVM不是线性可分的情况时,此时支持向量并不一定是距离分割面最近的向量。因此SVM此时并不能一味地margin maximization,而是使过渡带足够宽。此时的margin maximization并不是真正意义上的,严格的margin maximization。所以用soft进行区分。

对于前两种SVM,对其加入一个kernel function就可以构造出非线性SVM。

2.支持向量机的推导

在这里插入图片描述 若直线l有参数W和b,通过计算每个样本到直线l距离,衡量哪条直线是最为合适的分割线。距离d可以表示为: 在这里插入图片描述 若每个数据集中样本的形式为T={(x1, y1)(x2, y2)…(xn, yn)},而每个样本的y值,就是这个样本的label。正例为1,负例为-1。这里的正负值其实反映的就是样本位于分割线的方向。位于法线正方向即为正。将y值一起乘入等式右边: 在这里插入图片描述 这里的y值是样本的实际正负值,如果估计值与实际值符号相同,即分类正确,此时的结果为正值。如果分类错误,则结果为负值。 在所有样本中,距离该直线最近的样本应被选为支持向量。支持向量与直线间的距离即为过渡带。因为SVM期望过渡带尽可能大,因此最终参数W与b的选择可以表示为: 在这里插入图片描述

因此,给定线性可分训练数据集,通过间隔最大化得到的分割超平面为: 在这里插入图片描述 相应的分类决策函数为: 在这里插入图片描述

3.SVM的损失函数

对于线性SVM而言,因为不要求所有样本都被分对,因此其约束条件和线性可分SVM并不相同。给出一个大于等于0的松弛因子\xi,使函数间隔加上松弛因子后大于等于1,此时有目标函数及约束条件: 在这里插入图片描述 上式中,C是一个控制松弛因子权重的参数。当C足够大时,\xi只能趋近于0,变回线性可分SVM。因此上式也可以被看作是线性可分SVM的扩展。松弛项可以被理解为线性回归中的正则项,C的值越小,过渡带越宽,C的值越大,过渡带越窄。这也使得线性SVM具备更强的泛化性。 同样的,对于线性SVM的目标函数及其约束条件使用Lagrange Multiplier后,求偏导可得: 在这里插入图片描述 这里直接给出\alpha最后的求解形式: 在这里插入图片描述 SVM的损失,通常被定义为没有被正确分在过渡带外面的向量,到过渡带边界的距离。位于过渡带内的样本,损失为1-d。d是该样本到分割面的距离。注意,如果是在“本方”过渡带,则d为正值。如果已经越过分割面了,则d值变为负值。这个损失也被称为Hinge损失。因此Loss function可以被写成: 在这里插入图片描述

换句话说,松弛因子本身可以被看作是损失的衡量。因为松弛因子本身也是包容分割面的分割错误。实际上,损失本身,就是由于线性SVM允许过渡带内存在向量,甚至向部分错误分类的向量妥协的结果。因此,原目标函数: 在这里插入图片描述 某种意义上,可以认为是Hinge损失加上一个在这里插入图片描述

4.SVM的核函数

SVM核函数的选择对于其性能的表现有至关重要的作用,尤其是针对线性不可分的数据。核函数的作用是,通过将空间内线性不可分的数据映射到一个高维的特征空间,使得数据在特征空间内是可分的(动画)。我们定义这种映射为 ϕ(x),那么我们就可以把求解约束最优化问题变为 minα−−>12∑Ni=1∑Ni=1αiαjyiyj(ϕi∗ϕj)−∑Ni=1αi s.t.−−>∑Ni=1αiyi=0 αi≥0,−−>i=1,2,…,N 但是由于从输入空间到特征空间的这种映射会使得维度发生爆炸式的增长,因此上述约束问题中内积(\phi_i*\phi_j)的运算会非常的大以至于无法承受,因此通常我们会构造一个核函数κ(xi,xj)=ϕ(xi)∗ϕ(xj)。从而避免了在特征空间内的运算,只需要在输入空间内就可以进行特征空间的内积运算。

通过上面的描述可知,构造核函数κ首先应确定输入空间到特征空间的映射,想要获取输入空间到映射空间的映射,我们需要明确输入空间内数据的分布情况,但大多数情况下,我们并不知道自己所处理的数据的具体分布,故一般很难构造出完全符合输入空间的核函数,因此我们常用如下几种常用的核函数来代替自己构造核函数:

线性核函数 LINEAR

κ(x,xi)=x∗xi 线性核,主要用于线性可分的情况。我们可以看到特征空间到输入空间的维度是一样的,其参数少|速度快。对于线性可分数据,其分类效果很理想,因此我们通常首先尝试用线性核函数来做分类,看看效果如何,如果不行再换别的。

高斯径向基核函数 RBF

κ(x,xi)=exp(−||x−xi||2δ2) 高斯径向基函数是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数。

多项式核函数 POLY

κ(x,xi)=((x∗xi)+1)d 多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。

神经元的非线性作用核函数 Sigmoid

κ(x,xi)=tanh(η+θ) 采用sigmoid核函数,支持向量机实现的就是一种多层神经网络。

因此,在选用核函数的时候,如果我们对我们的数据有一定的先验知识,就利用先验来选择符合数据分布的核函数;如果不知道的话,通常使用交叉验证1的方法,来试用不同的核函数,误差最小的即为效果最好的核函数,或者也可以将多个核函数结合起来,形成混合核函数。在吴恩达的课上,也曾经给出过一系列的选择核函数的方法:

如果特征的数量大到和样本数量差不多,则选用LR或者线性核的SVM; 如果特征的数量小,样本的数量正常,则选用SVM+高斯核函数; 如果特征的数量小,而样本的数量很大,则需要手工添加一些特征从而变成第一种情况。

5.SVM的硬间隔和软间隔 硬间隔:完全分类准确,其损失函数不存在;其损失值为0;只要找出两个异类正中间的那个平面;软间隔:允许一定量的样本分类错误;优化函数包括两个部分,一部分是点到平面的间隔距离,一部分是误分类的损失个数;C是惩罚系数,误分类个数在优化函数中的权重值;权重值越大,误分类的损失惩罚的越厉害。误分类的损失函数可分为hinge损失,指数损失,对率损失。而经常使用的或者说默认的是使用了损失函数为hinge损失的软间隔函数。 三、代码实现 库函数导入 ## 基础函数库 import numpy as np ## 导入画图库 import matplotlib.pyplot as plt import seaborn as sns ## 导入逻辑回归模型函数 from sklearn import svm 构建数据集并进行模型训练 ##Demo演示LogisticRegression分类 ## 构造数据集 x_fearures = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2]]) y_label = np.array([0, 0, 0, 1, 1, 1]) ## 调用SVC模型 (支持向量机分类) svc = svm.SVC(kernel='linear') ## 用SVM模型拟合构造的数据集 svc = svc.fit(x_fearures, y_label) 模型参数查看 ## 查看其对应模型的w print('the weight of Logistic Regression:',svc.coef_) ## 查看其对应模型的w0 print('the intercept(w0) of Logistic Regression:',svc.intercept_)

the weight of Logistic Regression: [[0.33364706 0.33270588]]

the intercept(w0) of Logistic Regression: [-0.00031373] 4. 模型预测

## 模型预测 y_train_pred = svc.predict(x_fearures) print('The predction result:',y_train_pred)

The predction result: [0 0 0 1 1 1] 5. 模型可视化

# 最佳函数 x_range = np.linspace(-3, 3) w = svc.coef_[0] a = -w[0] / w[1] y_3 = a*x_range - (svc.intercept_[0]) / w[1] # 可视化决策边界 plt.figure() plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis') plt.plot(x_range, y_3, '-c') plt.show()

在这里插入图片描述

四、参考文献

1.https://baike.baidu.com/item/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F/23221492?fr=aladdin 2.https://blog.csdn.net/github_38325884/article/details/74418365 3.https://blog.csdn.net/yefcion/article/details/81099390 4.https://blog.csdn.net/ningyanggege/article/details/81015309



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有