有多少人工,就有多少智能

KNN-k近邻 算法原理

K近邻(K-nearst neighbors, KNN)是一种基本的机器学习算法,所谓,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。比如:判断一个人的人品,只需要观察与他来往最密切的几个人的人品好坏就可以得出,即“近朱者赤,近墨者黑”;KNN算法既可以应用于分类应用中,也可以应用在回归应用中。 KNN在做回归和分类的主要区别在于最后做预测的时候的决策方式不同。KNN在分类预测时,一般采用多数表决法;而在做回归预测时,一般采用平均值法。

1. 从训练集合中获取K个离待预测样本距离最近的样本数据;

2. 根据获取得到的K个样本数据来预测当前待预测样本的目标属性值

 

如下图中,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形? 如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类; 如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。

 

 

在KNN算法中,非常重要的主要是三个因素:

K值的选择:对于K值的选择,一般根据样本分布选择一个较小的值,然后通过交叉验证来选择一个比较合适的最终值;当选择比较小的K值的时候,表示使用较小领域中的样本进行预测,训练误差会减小,但是会导致模型变得复杂,容易过拟合;当选择较大的K值的时候,表示使用较大领域中的样本进行预测,训练误差会增大,同时会使模型变得简单,容易导致欠拟合;

距离的度量:一般使用欧氏距离(欧几里得距离);

决策规则:在分类模型中,主要使用多数表决法或者加权多数表决法;在回归模型中,主要使用平均值法或者加权平均值法。

 

在KNN分类应用中,一般采用多数表决法或者加权多数表决法。

多数表决法:每个邻近样本的权重是一样的,也就是说最终预测的结果为出现类别最多的那个类,比如右图中蓝色圆圈的最终类别为红色;

 

 

加权平均值法:每个邻近样本的权重是不一样的,一般情况下采用权重和距离成反比的方式来计算,也就是说在计算均值的时候进行加权操作;比如右图中,假设上面三个点到待预测样本点的距离均为2,下面两个点到待预测样本点距离为1,那么蓝色圆圈的最终预测值为:2.43。(权重分别为: 1/7和2/7)

KNN算法实现方式

KNN算法的重点在于找出K个最邻近的点,主要方式有以下几种: 蛮力实现(brute):计算预测样本到所有训练集样本的距离,然后选择最小的k个距离即可得到K个最邻近点。缺点在于当特征数比较多、样本数比较多的时候,算法的执行效率比较低; KD树(kd_tree):KD树算法中,首先是对训练数据进行建模,构建KD树,然后再根据建好的模型来获取邻近样本数据。 除此之外,还有一些从KD_Tree修改后的求解最邻近点的算法,比如:Ball Tree、BBF Tree、MVP Tree等。

KD Tree是KNN算法中用于计算最近邻的快速、便捷构建方式。 当样本数据量少的时候,我们可以使用brute这种暴力的方式进行求解最近邻,即计算到所有样本的距离。但是当样本量比较大的时候,直接计算所有样本的距离,工作量有点大,所以在这种情况下,我们可以使用kd tree来快速的计算。

 

 

 

二维样本: {(2,3), (5,4), (9,6), (4,7), (8,1), (7,2)}

 

 

找到所属的叶子节点后,以目标点为圆心,以目标点到最近样本点(一般为当前叶子节点中的其它训练数据或者刚刚经过的父节点)为半径画圆,从最近样本点往根节点进行遍历,如果这个圆和分割节点的分割线有交线,那么就考虑分割点的另外一个子树。如果在遍历过程中,找到距离比刚开始的样本距离近的样本,那就进行更新操作。 一直迭代遍历到根节点上,结束循环找到最终的最小距离的样本。

 

 

 

posted @ 2021-01-10 20:46  lvdongjie-avatarx  阅读(256)  评论(0编辑  收藏  举报