KNN是一种基本分类与回归算法,它没有显式的学习过程。它不像其他模型有损失函数、有优化算法、有训练过程。对于给定的实例数据和其对应的所属类别,当要对新的实例进行分类时,根据这个实例最近的K个实例所属的类别来决定其属于哪一个类。KNN算法示意图:

knn回归与分类的区别 knn用于回归_K近邻

图1.KNN算法

KNN算法过程如下:

knn回归与分类的区别 knn用于回归_机器学习_02

KNN做回归和分类的主要区别在于最后做预测时候的决策方式不同。KNN做分类预测时,一般是选择多数表决法,即训练集里和预测的样本特征最近的K个样本,预测为里面有最多类别数的类别。而KNN做回归时,一般是选择平均法,即最近的K个样本的样本输出的平均值作为回归预测值。由于两者区别不大,虽然本文主要是讲解KNN的分类方法,但思想对KNN的回归方法也适用。

KNN的优缺点:

1、优点:简单、易于理解,易于实现,无需估计参数,无需训练。适合对稀有事件进行分类(例如当流失率很低时,比如低于0.5%,构造流失预测模型等)。

特别适合于多分类问题(对象具有多个类别标签),例如根据基因特征来判断其功能分类,KNN比SVM的表现更好。

2、缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢。可解释性较差,无法给出决策树那样的规则。

 

模型:

在特征空间中,对每个训练实例点 Xiknn回归与分类的区别 knn用于回归_knn回归与分类的区别_03 ,距离该点比其他点更进的所有点组成一个区域,叫作单元。每个训练实例点拥有一个单元,所有训练实例点的单元构成了对特征空间的一个划分。最近邻法将实例 Xi knn回归与分类的区别 knn用于回归_K近邻_04的类 Yi knn回归与分类的区别 knn用于回归_K近邻_05作为其单元中所有点的类标记。这样,每个单元的实例点的类别是确定的,如图所示为二维和三维特征空间划分的例子。

knn回归与分类的区别 knn用于回归_K近邻_06

图2.二维特征空间

knn回归与分类的区别 knn用于回归_K近邻_07

图3.三维特征空间

KNN算法三要素:距离度量的方式、K值的选取和分类决策规则。

距离度量:

特征空间中两个实例点的距离是两个实例点相似度的反应。常使用的距离是欧氏距离、  Lp knn回归与分类的区别 knn用于回归_K近邻_08距离、Minkowski距离。

knn回归与分类的区别 knn用于回归_机器学习_09

knn回归与分类的区别 knn用于回归_算法原理_10

 

K值的选择:

若选择较小的k值,相当于用较小的领域中的训练实例进行预测学习的近似误差会减小,而学习的估计误差会增大。预测结果会对近邻的实例点非常敏感,如果邻近的这个实例点是噪声,则会预测出错误结果。k值越小,模型变得越复杂,也就更容易出现过拟合现象。

若选择较大的k值,则意味着模型变得简单,可以减少学习的估计误差,但是也会增大学习的近似误差。那些不相似的训练实例也会对预测起作用,导致预测结果错误。

若k=N,则会将训练实例中最多的类作为输入实例的类。由于模型过于简单,会忽略掉训练实例中大量的有用信息。

在实际应用中,我们常常采用交叉法来选取最优的k值。

 

分类决策规则:

K近邻算法中分类决策规则往往采用多数表决法。分类决策规则如下:

knn回归与分类的区别 knn用于回归_算法原理_11

接下来是通过Python代码实现KNN算法并将其函数化封装:

knn回归与分类的区别 knn用于回归_K近邻_12

以上就是KNN算法的原理及代码实现。