西瓜书--第六章.支持向量机(SVM)

目录

目录

一、硬间隔与支持向量

1、线性可分支持向量机

2、函数间隔与几何间隔

样本点与超平面是保持着一定函数距离的,通过超平面方程和函数距离,以计算其距离,得到两条边界函数wx+b=1和wx+b=-1进而分类。

函数间隔:

几何间隔:

3、间隔最大化

二、对偶问题

拉格朗日乘子法:

三、核函数

1、线性不可分

2、核函数

四、软间隔与正则化

软间隔(含线性支持向量机):

五、支持向量回归

六、核方法

1、核方法

2、非线性支持向量机


目录

支持向量机是一类按监督学习方式对数据进行二元分类,且定义在特征空间上的间隔最大的广义线性分类器,这是它的基本模型。它的决策边界是对学习样本求解的最大边距超平面。支持向量机也是一种二类分类模型间隔最大使它有别于感知机;支持向量机的学习策略就是间隔最大化,可化为一个求解凸二次规划的问题,那么它的学习算法便是求解凸二次规划的最优化算法。

三类模型分别为:线性可分支持向量机、线性支持向量机和非线性支持向量机。

一、硬间隔与支持向量

1、线性可分支持向量机

当训练数据近似线性可分时,通过硬间隔最大化,学习一个线性的分类器,即线性可分支持向量机,也称为硬间隔支持向量机。线性可分支持向量机利用硬间隔最大化求解最优分离超平面,得到唯一解,而这是与感知机的不同,感知机是利用误分类最小的策略求得超平面,所得的解有无穷多个的。(详解感知机可参考李航的《统计学习方法》)线性可分支持向量机的唯一解可说明用硬间隔是因为能完全被分类准确,不能存在分类错误的情况。

        西瓜书--第六章.支持向量机(SVM)_第1张图片

线性可分简单来说就是用一条直线将分类样本分开,一般有两种情况:第一,在二维平面上,线性可分指的是可以用一条线将分类样本分开;第二,在三维空间中,线性可分则意味着可以用一个平面将分类样本分开。然而,并不是仅用一条线就可以完全地被正确分开的,需有多条直线(如图线1、线2和线3);而每一条直线都是有宽度的,用来分割分类样本,这样的直线称为超平面,亦称分离超平面

西瓜书--第六章.支持向量机(SVM)_第2张图片

分离超平面的方程为:w* ·x+b*=0

分类决策函数:f(x)=sign(w*·x+b*)

训练数据集线性可分,即是有很多直线能将两类数据正确地被分类;线性可分支持向量机对应着将两类数据正确划分并且间隔是最大的那条直线。

        西瓜书--第六章.支持向量机(SVM)_第3张图片

在线性可分情况下,训练数据集的样本点中与分离超平面距离最近的样本点的实例点称为支持向量。而支持向量是使约束条件等号成立的点,即y(w·x+b)-1=0。

如图中标红的实例点便是支持向量。

        西瓜书--第六章.支持向量机(SVM)_第4张图片

而我们的任务就是找到集合边缘上的若干数据,用这些点找出一个超平面(即选择超平面),这个平面叫做决策面,能使若干数据(即支持向量机)到该平面的距离最大。

        西瓜书--第六章.支持向量机(SVM)_第5张图片

2、函数间隔与几何间隔

样本点与超平面是保持着一定函数距离的,通过超平面方程和函数距离,以计算其距离,得到两条边界函数wx+b=1和wx+b=-1进而分类。

函数间隔:

点到分离超平面的远近:|w·x+b|---->表示分类预测的确信程度

w·x+b 的符号与类标记y的符号是否一致---->表示分类是否正确

所以:y(w·x+b)表示分类的正确性和确信度

几何间隔:

样本点的几何间隔:正例和负例

正例:

        H1:w·x+b=1

负例:

        H2:w·x+b=-1

当数据被正确分类时,几何间隔就是点到超平面的距离。为了求几何间隔最大,可转化为求解d*/||w||(d*为函数间隔)

方法一:转化为凸函数(令d*=1)

方法二:用拉格朗日乘子法和KKT条件求解最优值

3、间隔最大化

不仅将正负实例点分开,而且对最难分的实例点(即离超平面最近的点)也有足够大的确信度将它们分开,这样的超平面应该对未知的新实例点有很好的分类预测能力。

              西瓜书--第六章.支持向量机(SVM)_第6张图片

 所以,支持向量机模型就是让所有的样本点在各自分类类别的支持向量的两边。

二、对偶问题

拉格朗日乘子法:

在支持向量机求解最优分离超平面的问题中,会利用拉格朗日对偶性将原始问题转换为对偶问题,通过解对偶问题得到原始问题的解。

设给定二元函数z=f(x,y)和附加条件\phi (x,y)=0,为寻找z=f(x,y)在附加条件下的极值点。

拉格朗日乘子法公式如下:F(x,y,\lambda ) = f(x,y)+\lambda \varphi (x,y)

                                           二次项:f(x,y)

                                           约束条件:\varphi (x,y)=0

                                          参数:\lambda

将目标函数和约束条件代入式子,便可得到它的对偶问题将求解w,b的问题转化为求\alpha最大值的问题。所求的解\alpha拉格朗日乘子,求解后还需要对w,b求解的。

三、核函数

1、线性不可分

线性可分是存在一条直线可以划分样本点,但有时也会失效,也就是支持向量机不适用线性可分,即线性不可分。线性不可分指的是一个数据集无法找到一条直线可以将样本点划分出来的,但是有可能存在一条曲线却可以将样本点划分出来。

                                        西瓜书--第六章.支持向量机(SVM)_第7张图片

那么有什么方法可以解决线性不可分的问题呢?假设a =x^2,b=y^2,这样曲线方程x^2+y^2=4可以映射成a+b=4。这样就可以把线性不可分问题变成线性可分问题了。把样本点通过核函数映射到z=\phi (x)=({​{x_{1}^2,x_{2}^2}}) ,就可以将原本线性不可分的样本点变成线性可分。

2、核函数

函数k(x_{i},x_{j})就是核函数。核函数可将样本从原始空间映射到一个更高维的特征空间中,使得样本在新的空间中线性可分。

                西瓜书--第六章.支持向量机(SVM)_第8张图片

一般常见的三种核函数:线性核函数,认为样本点线性可分,不做任何映射;多项式核函数是一个p次多项式函数,需要进行调参;高斯核函数,将特征空间映射到更高维空间;sigmoid核函数,用在神经网络的映射中,实现的是多层神经网络。

选择核函数时,可根据特征和样本的数量而确定核函数。如果特征的数量几乎和样本的数量差不多,则选择线性或多项式核函数;如果特征较少,样本正常,则选择高斯核函数。

线性核函数需要指定惩罚因子,多项式核函数需要指定乘法因子和项式,高斯核函数需要指定乘法因子和gamma。(参数c称为惩罚因子;gamma是核函数系数,默认为特征数的倒数)

四、软间隔与正则化

软间隔(含线性支持向量机):

在此之前一直假定是线性可分的,但在现实中很难确定适合的核函数使得可分。为解决这个问题,就是允许一定量的样本点分类错误。前面讲到,硬间隔是完全分类准确,不能存在分类错误的情况,那么允许支持向量机在一些样本上出错的就是软间隔。既然能够容忍一些样本分类错误,那还是可以使用线性可分模型,这就称为近似线性可分

                        ​​​​​​​        ​​​​​​​        西瓜书--第六章.支持向量机(SVM)_第9张图片                软间隔

 其次,为了使样本分类变得不想硬间隔那么严格,引入一个“松弛变量\zeta _{i}\geq 0,使得函数间隔加上松弛变量大于等于1。

hinge损失函数:\zeta _{i}=max(0,1)-y_{i}(w^{T}x_{i}+b)

每一个样本都有一个对应的松弛变量,用以表征该样本不满足约束的程度。

(由于本人对正则化知识掌握有所不足而不能进行总结,暂缺!)

五、支持向量回归

支持向量分类的方法可以被扩展用来解决回归问题,因此这个方法被称为支持向量回归(简称SVR)支持向量回归生成的模型只依赖于训练集的子集,因为构建模型的损失函数忽略了任何接近于模型预测的训练数据。

与分类的类别一样,使用fit方法调用参数X,y,但只是此时y的取值是浮点数而不是整数。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        西瓜书--第六章.支持向量机(SVM)_第10张图片 

六、核方法

1、核方法

在线性支持向量机的问题中,无论是目标函数还是分离超平面都只涉及输入实例与实例之间的内积(内积在本文并未有介绍,但建议学习)。其实内积已经用核函数代替。如果在给定核函数情况下,是可以利用解决线性分类问题求解非线性分类问题的支持向量机,然而它不需要定义特征空间和映射函数。这是基于核函数而发展的学习方法,统称为核方法。常见的有通过核函数将线性学习器扩展为非线性学习器。

2、非线性支持向量机

非线性可分问题:能用R^{n}中的一个超曲面将正负例正确分开。

用线性分类方法求解非线性分类问题

1.先使用一个变换将原始空间的数据映射到新空间;

2.后在新空间用线性分类学习方法从训练数据中学习分类模型。

栗子

利用RBF核的非线性svc进行二值分类。要预测的目标是输入的异或。

颜色图说明了SVC学习的决策函数

        ​​​​​​​        西瓜书--第六章.支持向量机(SVM)_第11张图片

第三章-线性模型

http://t.csdn.cn/4S6Y6http://t.csdn.cn/4S6Y6第四章-决策树

http://t.csdn.cn/O4SBrhttp://t.csdn.cn/O4SBr第五章-神经网络

http://t.csdn.cn/DdirShttp://t.csdn.cn/DdirS

支持向量机

from sklearn import svm
import pandas as pd
from sklearn.model_selection import train_test_split

# 导入数据
data = pd.read_csv("iris.csv")

# 获取具体数据
x = data.iloc[:, 0:4]  # 按位置取某几列
y = data["Name"].values

# 分割数据
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1, train_size=0.6)

# 训练数据与模型评估
clf = svm.SVC(C=0.8, kernel='rbf', gamma=20, decision_function_shape='ovr')
clf.fit(x_train, y_train.ravel())
print("训练集精度:", clf.score(x_train, y_train))
print("测试集精度:", clf.score(x_test, y_test))

运行结果

训练集精度: 1.0
测试集精度: 0.85

支持向量回归:

import numpy as np
from sklearn import svm

N = 30
np.random.seed(0)
x = np.sort(np.random.uniform(0, 2 * np.pi, N), axis=0)
y = 2 * np.sin(x) + 0.2 * np.random.randn(N)
x = x.reshape(-1, 1)

print('SVR - Linear')
svr_linear = svm.SVR(kernel='linear', C=100)
svr_linear.fit(x, y)
print(svr_linear.score(x, y))   # 0.5339581033415435

你可能感兴趣的:(机器学习)