
程一舰
数据技术处
K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。KNN是通过测量不同特征值之间的距离进行分类。其基本思想可以用这样一句俗语来解释——“近朱者赤,近墨者黑”。
一、原理介绍K近邻的思路是如果一个样本在特征空间中的k个最邻近的样本中的大多数属于某一个类别,则该样本也划分为这个类别。通过下面的这张图就好理解了:如果要确定绿点属于哪个颜色(红色或者蓝色),要做的就是选出距离目标点距离最近的k个点,看这k个点的大多数颜色是什么颜色。当k取3的时候,我们可以看出距离最近的三个,分别是红色、红色、蓝色,因此得到目标点为红色。
二、算法步骤
K紧邻分类主要分为以下几个步骤:
1)计算测试数据与各个训练数据之间的距离;2)按照距离的递增关系进行排序;3)选取距离最小的K个点;4)确定前K个点所在类别的出现频率;5)返回前K个点中出现频率最高的类别作为测试数据的预测分类三、实例说明下面用一个经过改造了的Peter Harrington的《机器学习实战》中电影分类的例子(当然实际情况不可能这么简单)来说明该算法的用法。第一步:准备下电影分类数据集(电影名称与分类来自于优酷网;镜头数量则纯属虚构):






KNN算法是最简单有效的分类算法,简单且容易实现。当训练数据集很大时,需要大量的存储空间,而且需要计算待测样本和训练数据集中所有样本的距离,所以非常耗时。KNN对于随机分布的数据集分类效果较差,对于类内间距小,类间间距大的数据集分类效果好,而且对于边界不规则的数据效果好于线性分类器。KNN对于样本不均衡的数据效果不好,需要进行改进。改进的方法时对k个近邻数据赋予权重,比如距离测试样本越近,权重越大。KNN很耗时,时间复杂度为O(n),一般适用于样本数较少的数据集,当数据量大时,可以将数据以树的形式呈现,能提高速度,常用的有kd-tree和ball-tree。大数据平台将一如既往的为各种数据挖掘类应用提供算力支持,为我行金融科技发展打造坚持的大数据平台支撑。
