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

目录

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

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

一、硬间隔与支持向量

1、线性可分支持向量机

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

        

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

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

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

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

        

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

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

        

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

        

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、间隔最大化

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

              

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

二、对偶问题

拉格朗日乘子法:

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

设给定二元函数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、线性不可分

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

                                        

那么有什么方法可以解决线性不可分的问题呢?假设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})就是核函数。核函数可将样本从原始空间映射到一个更高维的特征空间中,使得样本在新的空间中线性可分。

                

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

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

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

四、软间隔与正则化

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

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

                                                        软间隔

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

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

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

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

五、支持向量回归

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

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

                                 

六、核方法

1、核方法

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

2、非线性支持向量机

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

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

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

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

栗子

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

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

                

第三章-线性模型

http://t.csdn.cn/4S6Y6icon-default.png?t=N7T8http://t.csdn.cn/4S6Y6第四章-决策树

http://t.csdn.cn/O4SBricon-default.png?t=N7T8http://t.csdn.cn/O4SBr第五章-神经网络

http://t.csdn.cn/DdirSicon-default.png?t=N7T8http://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
  • 19
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 38
    评论
1. ARIMA 2. SARIMA 3. VAR 4. Auto-ARIMA 5. Auto-SARIMA 6. LSTM 7. GRU 8. RNN 9. CNN 10. MLP 11. DNN 12. MLP-LSTM 13. MLP-GRU 14. MLP-RNN 15. MLP-CNN 16. LSTM-ARIMA 17. LSTM-MLP 18. LSTM-CNN 19. GRU-ARIMA 20. GRU-MLP 21. GRU-CNN 22. RNN-ARIMA 23. RNN-MLP 24. RNN-CNN 25. CNN-ARIMA 26. CNN-MLP 27. CNN-LSTM 28. CNN-GRU 29. ARIMA-SVM 30. SARIMA-SVM 31. VAR-SVM 32. Auto-ARIMA-SVM 33. Auto-SARIMA-SVM 34. LSTM-SVM 35. GRU-SVM 36. RNN-SVM 37. CNN-SVM 38. MLP-SVM 39. LSTM-ARIMA-SVM 40. LSTM-MLP-SVM 41. LSTM-CNN-SVM 42. GRU-ARIMA-SVM 43. GRU-MLP-SVM 44. GRU-CNN-SVM 45. RNN-ARIMA-SVM 46. RNN-MLP-SVM 47. RNN-CNN-SVM 48. CNN-ARIMA-SVM 49. CNN-MLP-SVM 50. CNN-LSTM-SVM 51. CNN-GRU-SVM 52. ARIMA-RF 53. SARIMA-RF 54. VAR-RF 55. Auto-ARIMA-RF 56. Auto-SARIMA-RF 57. LSTM-RF 58. GRU-RF 59. RNN-RF 60. CNN-RF 61. MLP-RF 62. LSTM-ARIMA-RF 63. LSTM-MLP-RF 64. LSTM-CNN-RF 65. GRU-ARIMA-RF 66. GRU-MLP-RF 67. GRU-CNN-RF 68. RNN-ARIMA-RF 69. RNN-MLP-RF 70. RNN-CNN-RF 71. CNN-ARIMA-RF 72. CNN-MLP-RF 73. CNN-LSTM-RF 74. CNN-GRU-RF 75. ARIMA-XGBoost 76. SARIMA-XGBoost 77. VAR-XGBoost 78. Auto-ARIMA-XGBoost 79. Auto-SARIMA-XGBoost 80. LSTM-XGBoost 81. GRU-XGBoost 82. RNN-XGBoost 83. CNN-XGBoost 84. MLP-XGBoost 85. LSTM-ARIMA-XGBoost 86. LSTM-MLP-XGBoost 87. LSTM-CNN-XGBoost 88. GRU-ARIMA-XGBoost 89. GRU-MLP-XGBoost 90. GRU-CNN-XGBoost 91. RNN-ARIMA-XGBoost 92. RNN-MLP-XGBoost 93. RNN-CNN-XGBoost 94. CNN-ARIMA-XGBoost 95. CNN-MLP-XGBoost 96. CNN-LSTM-XGBoost 97. CNN-GRU-XGBoost 98. ARIMA-ANN 99. SARIMA-ANN 100. VAR-ANN 上面这些缩写模型的全称及相关用途功能详细解释
07-15
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王者与CV

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值