最邻近算法-KNN
案例:
kNN算法的指导思想是“近朱者赤,近墨者黑”,由你的邻居来推断出你的类别。
俗话讲“物以类聚,人以群分”。 试想有甲乙两个人,甲住进了汤臣一品的豪宅,乙住进了郊区老破小,那我们最直观的判断就是:甲大概率是个有钱人,乙嘛,平平无奇。即时我们没见过甲乙的银行卡余额,但通过甲住进了富人小区仍然可以做出判断。引出KNN算法思路“你住的离谁近,就大概率跟他是同一类人”。
定义——From Wikipedia:
In pattern recognition, the k-nearest neighbors algorithm (k-NN) is a non-parametric method proposed by Thomas Cover used for classification and regression.[1] In both cases, the input consists of the k closest training examples in the feature space. The output depends on whether k-NN is used for classification or regression:
- In k-NN classification, the output is a class membership. An object
is classified by a plurality vote of its neighbors, with the object
being assigned to the class most common among its k nearest neighbors
(k is a positive integer, typically small). If k = 1, then the object
is simply assigned to the class of that single nearest neighbor. - In k-NN regression, the output is the property value for the object.
This value is the average of the values of k nearest neighbors.
原理:
用一句话来解释 KNN 算法原理,那就是找到 K 个与新数据最近的样本,取样本中最多的一个类别作为新数据的类别。
引自维基百科上的一幅图:
如上图所示,有两类不同的样本数据,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是待分类的数据。
- 如果K=3,绿色圆点的最邻近的3个点是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。
- 如果K=5,绿色圆点的最邻近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。
所以细节的东西主要有两个,K值的选取和点距离的计算。
优缺点:
优点:
1、简单易实现: KNN 算法最后实际上并没有抽象出任何模型,而是把全部的数据集直接当作模型本身,当一条新数据来了之后跟数据集里面的每一条数据进行对比。所以可以看到 KNN 算法的一些优点,首当其冲的就是这个算法简单,简单到都不需要进行什么训练了,只要把样本数据整理好了,就结束了,来一条新数据就可以进行预测了。
2、对于边界不规则的数据效果较好: 可以想到,我们最终的预测是把未知数据作为中心点,然后画一个圈,使得圈里有 K 个数据,所以对于边界不规则的数据,要比线性的分类器效果更好。因为线性分类器可以理解成画一条线来分类,不规则的数据则很难找到一条线将其分成左右两边。
缺点:
1、只适合小数据集: 正是因为这个算法太简单,每次预测新数据都需要使用全部的数据集,所以如果数据集太大,就会消耗非常长的时间,占用非常大的存储空间。
2、数据不平衡效果不好: