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

目录

前言

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.]


总结 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值