梅科尔工作室-深度学习第四讲 SVM算法

发布于:2023-01-10 ⋅ 阅读:(631) ⋅ 点赞:(0)

目录

前言

1.SVM和KNN的对比分析

1.1.什么是SVM算法

1.2.对比分析

2.SVM原理

2.1.支持向量

2.2.寻找支持向量

2.2.1.距离计算(点到平面的距离)

 2.2.2.目标函数

2.2.3.部分数学原理

 2.2.4.SVM求解实例

2.2.5.软间隔优化 

 2.2.6.核函数 (分类好的关键)

3.百度飞桨实际运行效果


前言

本文记录梅科尔工作室深度学习培训的第四讲SVM算法的学习笔记,感谢来恩哥的讲解!


1.SVM和KNN的对比分析

1.1.什么是SVM算法

支持向量机(support vector machines,SVM)是一种二分类模型,它将实例的特征向量映射为空间中的一些点,SVM 的目的就是想要画出一条线,以 “最好地” 区分这两类点,以至如果以后有了新的点,这条线也能做出很好的分类。SVM 适合中小型数据样本、非线性、高维的分类问题。

SVM 最早是由 Vladimir N. Vapnik 和 Alexey Ya. Chervonenkis 在1963年提出,目前的版本(soft margin)是由 Corinna Cortes 和 Vapnik 在1993年提出,并在1995年发表。深度学习(2012)出现之前,SVM 被认为机器学习中近十几年来最成功,表现最好的算法。


即将实例的特征向量(以二维为例)映射为空间中的一些点,如下图的实心点和空心点,它们属于不同的两类。SVM 的目的就是想要画出一条线,以“最好地”区分这两类点,以至如果以后有了新的点,这条线也能做出很好的分类。

1.2.对比分析

 上图是KNN算法,解决分类问题,主要原理是离哪些点较近,就归哪一类。

 

上图是SVM算法 ,也是解决分类问题的,但与KNN算法不同,SVM算法是找决策边界,把数据进行划分。

辅助理解:

SVM, 就像是在河北和北京之间有一条边界线,如果一个人居住在北京一侧就预测为北京人,在河北一侧,就预测为河北人。但是住在河北的北京人和住在北京的河北人就会被误判。

KNN,就是物以类聚,人以群分。如果你的朋友里大部分是北京人,就预测你也是北京人。如果你的朋友里大部分是河北人,那就预测你是河北人。不管你住哪里。
 

2.SVM原理

寻找支持向量,找出最优决策边界。

2.1.支持向量

支持向量意思就是数据集种的某些点,位置比较特殊,比如x+y-2=0这条直线,直线上面区域x+y-2>0的全是A类,下面的x+y-2<0的全是B类,我们找这条直线的时候,一般就看聚集在一起的两类数据,他们各自的最边缘位置的点,也就是最靠近划分直线的那几个点,而其他点对这条直线的最终位置的确定起不了作用,所以我姑且叫这些点叫“支持点”(意思就是有用的点),但是在数学上,没这种说法,数学里的点,又可以叫向量,比如二维点(x,y)就是二维向量,三维度的就是三维向量( x,y,z)。所以 “支持点”改叫“支持向量”。

支持向量要小的,要考虑离自己最近的雷才最安全。

决策边界要大的,要最宽的道路才能行动的更快,更不容易踩雷。

顺序:先找支持向量,再找决策边界。

2.2.寻找支持向量

距离与数据的定义:

在平面上构造直线,点到平面的距离公式,借助了向量和法向量进行相关求解

2.2.1.距离计算(点到平面的距离)

点已知,但是面需要假设,比较抽象。(用向量和法向量知识)

 2.2.2.目标函数

目的:找到一条线,使得离该线最近的点能够最远。

 放缩变换和优化目标

 目标函数可以体现出SVM的基本定义。

2.2.3.部分数学原理

拉格朗日乘子法(在约束条件下求极值的问题

约束条件中可能不仅仅包含一个变量(引入新的参数,但参数和其中的变量有关系)

引入新的参数a1(原本的参数是w、b)  

求偏导,目的是求极值 

简化最终目标函数

w、b通过相关关系,全部转化为a相关的参数,方便进行求解

 

极大值问题转化为极小值问题 

 2.2.4.SVM求解实例

2.2.5.软间隔优化 

 考虑一些异常的噪音,让分类更合理。(引入松弛因子)

目标函数的变化,及C的引入(能够体现容错能力) 

 

 2.2.6.核函数 (分类好的关键)

升维,将二维升为三维。

 升维前:

 升维后:

优点:可视化程度更高;缺点:计算量增大

高斯核函数

 

3.百度飞桨实际运行效果

Demo链接:SVM鸢尾花分类20210512 - 飞桨AI Studio (baidu.com)

 补充代码:

# SVM分类器构建
def classifier():
    clf = svm.SVC(C=0.5,                          # 误差惩罚系数,默认值为1(对噪声的兼容性)
                  kernel='rbf',                   # 线性核 kenrel=“rbf”:高斯核
                  decision_function_shape='ovr')  # 决策函数
    return clf
    
# 训练模型
def train(clf, x_train, y_train):  #将训练数据导入,将分类器参数导入,进行模型训练。
    clf.fit(x_train,               #训练集特征向量
            y_train.ravel())       #训练集目标值

运行结果展示: 

-------- eval ----------
training prediction:0.800
test data prediction:0.833
traing data Accuracy:0.800
testing data Accuracy:0.833
decision_function:
 [[-0.21534447  1.14929879  2.16781465]
 [-0.23980411  0.98966371  2.24063645]
 [-0.20230391  2.21399281  0.9335105 ]
 [-0.24559889  1.17488018  2.20967837]
 [-0.19921225  2.18439875  1.0660674 ]
 [ 2.22465618  0.84798362 -0.18377516]
 [-0.20634861  2.22567005  0.89325684]
 [ 2.21164499  0.91580228 -0.19451839]
 [-0.24863476  1.17038683  2.21798763]
 [-0.25846339  1.19248791  2.22530129]
 [-0.24789416  1.11334635  2.2348937 ]
 [ 2.22988372  0.87591805 -0.20655207]
 [-0.24808728  2.23143851  1.12994516]
 [-0.23682945  1.16332119  2.19964965]
 [-0.24767467  1.14895352  2.22523289]
 [-0.24454109  1.07858717  2.2365913 ]
 [ 2.17589997 -0.1510994   0.92543627]
 [ 2.24221182  0.84889211 -0.2155012 ]
 [ 2.21787479  1.04911504 -0.22439541]
 [ 1.02049458  2.17884732 -0.18339959]
 [ 2.2228104   0.90449069 -0.20583283]
 [ 2.17283993  0.90926327 -0.13758945]
 [-0.20999778  0.8728184   2.23291921]
 [-0.24558741  1.0767854   2.23808285]
 [-0.25020456  1.0787147   2.24326018]
 [-0.24559889  1.17488018  2.20967837]
 [-0.23670784  1.1813149   2.18564653]
 [-0.12971939  0.99377719  2.13205829]
 [-0.24287229  1.04109984  2.23928261]
 [-0.14138719  2.14624409  0.9856207 ]
 [ 2.24425466  0.87470966 -0.2271687 ]
 [-0.21497238  2.21512222  0.99881429]
 [-0.24571672  1.19084414  2.19811204]
 [ 2.21787479  1.04911504 -0.22439541]
 [ 2.2394817   0.92201555 -0.23065238]
 [-0.24057989  1.13530193  2.21880635]
 [ 2.25233918  0.8590587  -0.2348    ]
 [-0.21534447  1.14929879  2.16781465]
 [-0.22923192  1.07994691  2.21785291]
 [-0.24209565  1.0964142   2.23065902]
 [-0.18199065  2.18310793  0.99462775]
 [-0.2316303   1.02294875  2.22928307]
 [-0.20399333  1.15017266  2.14364742]
 [ 2.24427215  0.82599969 -0.20757998]
 [-0.24808728  2.23143851  1.12994516]
 [-0.24140255  1.15949504  2.21026061]
 [-0.24057989  1.13530193  2.21880635]
 [ 0.93514665  2.21006213 -0.19796995]
 [-0.20562326  1.04977013  2.19641615]
 [-0.18595334  2.21222405  0.89028905]
 [ 2.21378173  0.85287831 -0.16650973]
 [ 2.21725483  1.01806106 -0.21952523]
 [ 2.24726554  0.80466679 -0.19769189]
 [-0.2316303   1.02294875  2.22928307]
 [ 2.24235421  0.94652968 -0.2373489 ]
 [-0.22922046  2.1967421   1.14407726]
 [-0.24908833  1.18739018  2.20861639]
 [-0.18910984  2.14998065  1.11010476]
 [ 2.22043531  0.8840473  -0.19554151]
 [ 2.21415505  0.94425973 -0.20493718]
 [-0.2097269   2.19705041  1.06684558]
 [ 2.21725483  1.01806106 -0.21952523]
 [-0.2503139   1.08614722  2.2424229 ]
 [-0.23100858  1.16621684  2.18603529]
 [-0.24255284  1.00573513  2.24211795]
 [-0.24619759  1.12180832  2.23075632]
 [-0.25555646  2.22156935  1.18861274]
 [-0.17851311  0.99720361  2.17911908]
 [-0.224668    0.89571688  2.23871183]
 [-0.13433027  2.16406638  0.92421413]
 [ 2.22122955 -0.19854706  0.888832  ]
 [-0.2097269   2.19705041  1.06684558]
 [ 2.16349262  1.17436865 -0.22438396]
 [-0.19738544  2.21963579  0.89191701]
 [-0.24558741  1.0767854   2.23808285]
 [ 2.23161891  0.89379288 -0.21468979]
 [-0.25365393  1.15141786  2.23386287]
 [ 2.23742637  0.86818023 -0.21519045]
 [ 2.24425466  0.87470966 -0.2271687 ]
 [-0.19346751  0.99562075  2.19424446]
 [-0.15871505  2.18093838  0.9274147 ]
 [-0.23983686  1.0543517   2.23443237]
 [ 2.22457687  0.92881318 -0.21400436]
 [ 2.24041603  0.83850322 -0.20743273]
 [-0.15197665  1.09260369  2.10397334]
 [ 2.23912915  0.94448746 -0.23349106]
 [-0.2097269   2.19705041  1.06684558]
 [ 2.2263442   0.99089377 -0.22537095]
 [-0.24057989  1.13530193  2.21880635]
 [ 2.10426536  1.18564233 -0.210429  ]
 [ 2.2442974   0.90752433 -0.23412296]
 [-0.22331201  1.08565049  2.20913636]
 [ 2.24551308  0.92804939 -0.23864611]
 [-0.10092553  2.14257219  0.92051396]
 [ 2.23686922  0.99476147 -0.23642143]
 [-0.19738544  2.21963579  0.89191701]
 [-0.14507257  2.22580077  0.80977472]
 [ 2.22988372  0.87591805 -0.20655207]
 [ 2.20695821  1.06956775 -0.2184462 ]
 [ 1.06333941  2.19625303 -0.20831428]
 [ 2.25794468  0.82986056 -0.23468399]
 [-0.18910984  2.14998065  1.11010476]
 [-0.22361251  1.16819633  2.16827494]
 [ 2.23161891  0.89379288 -0.21468979]
 [-0.24209565  1.0964142   2.23065902]
 [-0.16443409  2.16685693  0.99069314]
 [-0.2545209   2.22839586  1.17096584]
 [-0.24272027  1.03028273  2.24019014]
 [-0.2097269   2.19705041  1.06684558]
 [ 2.17841331  0.93944128 -0.16058933]
 [ 2.19271482  1.08675243 -0.2108879 ]
 [-0.24062478  2.20544511  1.16574949]
 [-0.23041593  1.18329943  2.16808148]
 [-0.24901833  1.06769926  2.2432084 ]
 [-0.20640454  2.20659165  0.9987126 ]
 [-0.24168444  1.17851442  2.19914201]
 [-0.23041693  1.11636622  2.20999274]
 [-0.25174243  1.20919309  2.19446109]
 [-0.24209565  1.0964142   2.23065902]
 [ 2.21725483  1.01806106 -0.21952523]]
-------- show ----------
grid_test:
 [[4.3       2.       ]
 [4.3       2.0120603]
 [4.3       2.0241206]
 ...
 [7.9       4.3758794]
 [7.9       4.3879397]
 [7.9       4.4      ]]
the distance to decision plane:
 [[ 2.14259429  1.18181824 -0.22024657]
 [ 2.14491871  1.18096339 -0.22059907]
 [ 2.14720399  1.18008532 -0.22094825]
 ...
 [-0.16171563  0.86017064  2.20825136]
 [-0.16055583  0.86010978  2.20766208]
 [-0.15938485  0.86005854  2.20706555]]
grid_hat:
 [0. 0. 0. ... 2. 2. 2.]


总结 

笔记记录就到此结束啦!感谢来恩哥!


网站公告

今日签到

点亮在社区的每一天
去签到