[cs231n]KNN与SVM区别

部分资料来源于网络,仅做个人学习之用

KNN

SVM

没有训练过程,只是将训练数据与训练数据进行距离度量来实现分类。基本原理就是找到训练数据集里面离需要预测的样本点距离最近的k个值(距离可以使用比如欧式距离,k的值需要自己调参),然后把这k个点的label做个投票,选出一个label做为预测

是先在训练集上训练一个模型,然后用这个模型直接对测试集进行分类。这两个步骤是独立的。

需要超平面wx+b来分割数据集(此处以线性可分为例),因此会有一个模型训练过程来找到w和b的值。训练完成之后就可以拿去预测了,根据函数y=wx+b的值来确定样本点x的label,不需要再考虑训练集

knn没有训练过程,但是预测过程需要挨个计算每个训练样本和测试样本的距离,当训练集和测试集很大时,预测效率低。 svm有一个训练过程,训练完直接得到超平面函数,根据超平面函数直接判定预测点的label,预测效率很高

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

就像是在河北和北京之间有一条边界线,如果一个人居住在北京一侧就预测为北京人,在河北一侧,就预测为河北人。但是住在河北的北京人和住在北京的河北人就会被误判。
KNN对每个样本都要考虑。 SVM是要去找一个函数把达到样本可分
KNN不能处理样本维度太高的东西 SVM处理高纬度数据比较优秀

假设每条数据有两个特征值x和y,一个label,即点的颜色,先将所有数据放在平面直角坐标系中,如下图1.1的红点和蓝点,红点和蓝点所构成的所有点即为训练集,而绿点则是测试点,k最邻近问题的最邻近就是直观的邻近的意思,即离得近,而k指的是找几个离得最近的,如果k=3,那么所选的点即为实线所包含的三个点,若k=5,则为虚线所包含的五个点,而对于预测点分类的预测则是根据所选k个点中最多个数的类别所确定,同样以下图为例,如果k=3,那么预测点的结果将为红色(2个红色,1个蓝色),如果k=5,那么预测点的结果将为蓝色(3个蓝色,2个红色),由此可见,参数k的选取直接影响了预测结果的准确度。

                     [cs231n]KNN与SVM区别_第1张图片

SVM 指的是这个模型是一个机器,此外它的作用是分类,所以可以理解为一个分类用的机器,support vevtoe之后再介绍。同样为了简单介绍采用二维介绍,样本同样是带有颜色label的有x和y两个属性的训练点集合,svm要要找一条线,使得把两个类别的点区分开来,那么对于接下来的测试点,看测试点位于哪一侧,就将其归类于该类,那么问题来了,符合这个要求的线有很多条,比如图中的黑线和灰线就是其中的两条,那么什么才是最优解呢,现在就要介绍support vector了,就是两个类别中的点离这条分割线最近的距离,如何才是最优解呢,就是让两个类别的离分割线最近的点,再回到最近的问题,什么才是最优解呢,那就是支持向量离分割线越远越好,因为距离越远,允许容纳的点越多,使得分类的越平均,更加理想。

                                    [cs231n]KNN与SVM区别_第2张图片

 

你可能感兴趣的:([cs231n]KNN与SVM区别)