01 KNN算法 - 概述

Python014

01 KNN算法 - 概述,第1张

KNN算法 全称是K近邻算法 (K-nearst neighbors,KNN)

KNN是一种基本的机器学习算法,所谓K近邻,就是k个最近的邻居。即每个样本都可以用和它 最接近的k个邻近位置的样本 来代替。

KNN是个相对比较简单的算法,比起之前提过的回归算法和分类算法更容易。如果一个人从来没有接触过机器学习的算法,拿到数据后最容易想到的分类方式就是K近邻。打个比方:你们想了解我是个怎样的人,然后你们发现我的身边关系最密切的朋友是一群逗逼,所以你们可以默认我也是一个逗逼。

KNN算法即可以应用于 分类算法 中,也可以应用于 回归算法 中。

KNN在做回归和分类的主要区别,在于最后做预测时候的决策不同。在分类预测时,一般采用 多数表决法 。在做回归预测时,一般使用 平均值法

多数表决法: 分类时,哪些样本离我的目标样本比较近,即目标样本离哪个分类的样本更接近。

平均值法: 预测一个样本的平均身高,观察目标样本周围的其他样本的平均身高,我们认为平均身高是目标样本的身高。

再举个例子:

分别根据甜度和脆度两个特征来判断食物的种类。

根据样本我们普遍发现:

比较甜,比较脆的食物都是水果。

不甜,不太脆的食物是蛋白质。

不甜,比较脆的食物是蔬菜。

于是根据目标的样本甜度和脆度两个特征,我们可以对其进行分类了。

k值的选择:

先选一个较小的值,然后通过交叉验证选择一个合适的最终值。

k越小,即使用较小的领域中的样本进行预测,训练误差会减小,但模型会很复杂,以至于过拟合。

k越大,即使用交大的领域中的样本进行预测,训练误差会增大,模型会变得简单,容易导致欠拟合。

距离的度量:

使用欧几里得距离:欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离。

决策规划:

分类:多数表决法、加权多数表决法。

回归:平均值法、加权平均值法。

加权多数表决法:

平均值法和加权平均值法:

同样看上面的图,上方的三个样本值为3,下面两个样本值为2,预测?的值。

如果不考虑加权,直接计算平均值:

(3 * 3 + 2 * 2) / 5 = 2.6

加权平均值:权重分别为1/7和2/7。计算加权平均值:

(3 * 3* 1/7 + 2 * 2 * 2/7) / 5 = 2.43

1、蛮力实现(brute):

计算预测样本到所有训练集样本的距离,然后选择最小的k个距离,即可得到k个最邻近点。

缺点:当特征数多、样本数多时,算法的效率比较低。

2、KD树 (kd_tree):

首先对训练数据进行建模,构建KD树,然后根据建好的模型来获取邻近样本数据。

后续内容会介绍KD树搜索最小值的方式,让大家直观感受到KD树比蛮力实现要少检索多少数据。

  姓名:崔升    学号:14020120005

【嵌牛导读】:

 本文讨论的kNN算法是监督学习中分类方法的一种。所谓监督学习与非监督学习,是指训练数据是   否有标注类别,若有则为监督学习,若否则为非监督学习。监督学习是根据输入数据(训练数据)   学习一个模型,能对后来的输入做预测。在监督学习中,输入变量与输出变量可以是连续的,也可   以是离散的。若输入变量与输出变量均为连续变量,则称为 回归 ;输出变量为有限个离散变量,则   称为 分类 ;输入变量与输出变量均为变量序列,则称为 标注 [2]。

【嵌牛鼻子】:经典大数据算法之kNN算法的简单介绍

【嵌牛提问】:kNN是一种怎么的算法,其数学原理又是如何?

【嵌牛正文】:

1. 引言

顶级数据挖掘会议ICDM于2006年12月评选出了数据挖掘领域的 十大经典算法 :C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naïve Bayes与 CART。 以前看过关于这些数据挖掘算法,但对背后数学原理未做过多探究,因而借此整理以更深入地理解这些算法。

2. kNN算法

kNN算法的核心思想非常简单:在训练集中选取离输入的数据点最近的k个邻居,根据这个k个邻居中出现次数最多的类别(最大表决规则),作为该数据点的类别。

算法描述

训练集T={(x1,y1),(x2,y2),⋯,(xN,yN)}T={(x1,y1),(x2,y2),⋯,(xN,yN)},其类别yi∈{c1,c2,⋯,cK}yi∈{c1,c2,⋯,cK},训练集中样本点数为NN,类别数为KK。输入待预测数据xx,则预测类别

y=argmaxcj∑xi∈Nk(x)I(yi=cj),i=1,2,⋯,Nj=1,2,⋯,K(1)(1)y=arg⁡maxcj⁡∑xi∈Nk(x)I(yi=cj),i=1,2,⋯,Nj=1,2,⋯,K

其中,涵盖xx的k邻域记作Nk(x)Nk(x),当yi=cjyi=cj时指示函数I=1I=1,否则I=0I=0。

分类决策规则

kNN学习模型:输入XX,通过学习得到决策函数:输出类别Y=f(X)Y=f(X)。假设分类损失函数为0-1损失函数,即分类正确时损失函数值为0,分类错误时则为1。假如给xx预测类别为cjcj,即f(X)=cjf(X)=cj;同时由式子 (1) (1)可知k邻域的样本点对学习模型的贡献度是均等的,则kNN学习模型误分类率为

1k∑xi∈Nk(x)I(yi≠f(xi))=1k∑xi∈Nk(x)I(yi≠cj)=1−1k∑xi∈Nk(x)I(yi=cj)(2)(2)1k∑xi∈Nk(x)I(yi≠f(xi))=1k∑xi∈Nk(x)I(yi≠cj)=1−1k∑xi∈Nk(x)I(yi=cj)

若要最小化误分类率,则应

maxcj∑xi∈Nk(x)I(yi=cj)maxcj⁡∑xi∈Nk(x)I(yi=cj)

所以,最大表决规则等价于经验风险最小化。

存在问题

k值得选取对kNN学习模型有着很大的影响。若k值过小,预测结果会对噪音样本点显得异常敏感。特别地,当k等于1时,kNN退化成最近邻算法,没有了显式的学习过程。若k值过大,会有较大的邻域训练样本进行预测,可以减小噪音样本点的减少;但是距离较远的训练样本点对预测结果会有贡献,以至于造成预测结果错误。下图给出k值的选取对于预测结果的影响:

前面提到过,k邻域的样本点对预测结果的贡献度是相等的;但距离更近的样本点应有更大的相似度,其贡献度应比距离更远的样本点大。可以加上权值wi=1/∥xi−x∥wi=1/‖xi−x‖进行修正,则最大表决原则变成:

maxcj∑xi∈Nk(x)wi∗I(yi=cj)maxcj⁡∑xi∈Nk(x)wi∗I(yi=cj)

3. 参考资料

[1] Michael Steinbach and Pang-Ning Tan, The Top Ten Algorithms in Data Mining.

[2] 李航,《统计学习方法》.