前言
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算法的学习笔记,感谢来恩哥的讲解!
支持向量机(support vector machines,SVM)是一种二分类模型,它将实例的特征向量映射为空间中的一些点,SVM 的目的就是想要画出一条线,以 “最好地” 区分这两类点,以至如果以后有了新的点,这条线也能做出很好的分类。SVM 适合中小型数据样本、非线性、高维的分类问题。
SVM 最早是由 Vladimir N. Vapnik 和 Alexey Ya. Chervonenkis 在1963年提出,目前的版本(soft margin)是由 Corinna Cortes 和 Vapnik 在1993年提出,并在1995年发表。深度学习(2012)出现之前,SVM 被认为机器学习中近十几年来最成功,表现最好的算法。
即将实例的特征向量(以二维为例)映射为空间中的一些点,如下图的实心点和空心点,它们属于不同的两类。SVM 的目的就是想要画出一条线,以“最好地”区分这两类点,以至如果以后有了新的点,这条线也能做出很好的分类。
上图是KNN算法,解决分类问题,主要原理是离哪些点较近,就归哪一类。
上图是SVM算法 ,也是解决分类问题的,但与KNN算法不同,SVM算法是找决策边界,把数据进行划分。
辅助理解:
SVM, 就像是在河北和北京之间有一条边界线,如果一个人居住在北京一侧就预测为北京人,在河北一侧,就预测为河北人。但是住在河北的北京人和住在北京的河北人就会被误判。
KNN,就是物以类聚,人以群分。如果你的朋友里大部分是北京人,就预测你也是北京人。如果你的朋友里大部分是河北人,那就预测你是河北人。不管你住哪里。
寻找支持向量,找出最优决策边界。
支持向量意思就是数据集种的某些点,位置比较特殊,比如x+y-2=0这条直线,直线上面区域x+y-2>0的全是A类,下面的x+y-2<0的全是B类,我们找这条直线的时候,一般就看聚集在一起的两类数据,他们各自的最边缘位置的点,也就是最靠近划分直线的那几个点,而其他点对这条直线的最终位置的确定起不了作用,所以我姑且叫这些点叫“支持点”(意思就是有用的点),但是在数学上,没这种说法,数学里的点,又可以叫向量,比如二维点(x,y)就是二维向量,三维度的就是三维向量( x,y,z)。所以 “支持点”改叫“支持向量”。
支持向量要小的,要考虑离自己最近的雷才最安全。
决策边界要大的,要最宽的道路才能行动的更快,更不容易踩雷。
顺序:先找支持向量,再找决策边界。
距离与数据的定义:
在平面上构造直线,点到平面的距离公式,借助了向量和法向量进行相关求解
点已知,但是面需要假设,比较抽象。(用向量和法向量知识)
目的:找到一条线,使得离该线最近的点能够最远。
放缩变换和优化目标
目标函数可以体现出SVM的基本定义。
拉格朗日乘子法(在约束条件下求极值的问题)
约束条件中可能不仅仅包含一个变量(引入新的参数,但参数和其中的变量有关系)
引入新的参数a1(原本的参数是w、b)
求偏导,目的是求极值
简化最终目标函数
w、b通过相关关系,全部转化为a相关的参数,方便进行求解
考虑一些异常的噪音,让分类更合理。(引入松弛因子)
目标函数的变化,及C的引入(能够体现容错能力)
升维,将二维升为三维。
升维前:
升维后:
优点:可视化程度更高;缺点:计算量增大
高斯核函数
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.]
总结
笔记记录就到此结束啦!感谢来恩哥!