KNN与SVM的区别

Softmax say:

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

    knn,就是物以类聚,人以群分。如果你的朋友里大部分是北京人,就预测你也是北京人。如果你的朋友里大部分是河北人,那就预测你是河北人。不管你住哪里。
   可惜河北和北京直接并不能以一条边界进行划分,如果用kernel trick(核函数、核技巧), SVM 也可以画出非线性边界。

Joshua say:

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

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

2. 根据第一条,两者效率差别极大。

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

3. 两者调参过程不一样。 knn只有一个参数k,而svm的参数更多,在线性不可分的情况下(这种情况更普遍),有松弛变量的系数,有具体的核函数。

nsqgc say:

举个简单的例子,一个中心的点是红色,六个环绕他的点是绿色(正六边形吧),
knn最后给的边界(假设k=1)是一个正六边形;
svm给的边界是一个圆(kernel function取欧拉距离);

呃呃 say:

最大区别:
KNN预测时要用到全部训练样本点,非稀疏模型;
SVM只用到支持向量,稀疏模型;
最大相似:
KNN的距离度量函数类似SVM的核函数,势的叠加也是类似的;

阿贵 say:

在分类中:

knn(k-nearest neighbor ,K最近邻算法)

train阶段:记住所有点

test阶段:计算新加入的点a与原来数据中的每个点的欧式距离

预测:找到和点a最近的k个点,看k个点属于哪一个分类的点最多,就将点a划到那一个类

缺点:test阶段花费时间太多

svm(support vector machine,支持向量机)和knn差别很大的,反而是logistic regression比较像
分类算法,区别在于逻辑回归采用的是logistical loss,svm采用的是hinge loss.这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。svm通过支持向量,所以具有稀疏性。而logistic回归通过使用权重,降低异常点的权重。


来源:知乎

猜你喜欢

转载自blog.csdn.net/WarGames_dc/article/details/89235746
kNN