分类算法----k近邻算法

K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:若是一个样本在特征空间中的k个最类似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。算法

用官方的话来讲,所谓K近邻算法,便是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居), 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。根据这个说法,我们来看下引自维基百科上的一幅图:机器学习

如 上图所示,有两类不一样的样本数据,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是待分类的数据。也就是说,如今, 咱们不知道中间那个绿色的数据是从属于哪一类(蓝色小正方形or红色小三角形),下面,咱们就要解决这个问题:给这个绿色的圆分类。   咱们常说,物以类聚,人以群分,判别一我的是一个什么样品质特征的人,经常能够从他/她身边的朋友入手,所谓观其友,而识其人。咱们不是要判别上图中那个绿色的圆是属于哪一类数据么,好说,从它的邻居下手。但一次性看多少个邻居呢?从上图中,你还能看到:
  • 若是K=3,绿色圆点的最近的3个邻居是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,断定绿色的这个待分类点属于红色的三角形一类。
  • 若是K=5,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,仍是少数从属于多数,基于统计的方法,断定绿色的这个待分类点属于蓝色的正方形一类。
于此咱们看到,当没法断定当前待分类点是从属于已知分类中的哪一类时,咱们能够依据统计学的理论看它所处的位置特征,衡量它周围邻居的权重,而把它归为(或分配)到权重更大的那一类。这就是K近邻算法的核心思想。
KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
KNN 算法自己简单有效,它是一种 lazy-learning 算法,分类器不须要使用训练集进行训练,训练时间复杂度为0。KNN 分类的计算复杂度和训练集中的文档数目成正比,也就是说,若是训练集中文档总数为 n,那么 KNN 的分类时间复杂度为O(n)。
KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少许的相邻样本有关。因为KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来肯定所属类别的,所以对于类域的交叉或重叠较多的待分样本集来讲,KNN方法较其余方法更为适合。
K 近邻算法使用的模型实际上对应于对特征空间的划分。K 值的选择,距离度量和分类决策规则是该算法的三个基本要素:
  1. K 值的选择会对算法的结果产生重大影响。K值较小意味着只有与输入实例较近的训练实例才会对预测结果起做用,但容易发生过拟合;若是 K 值较大,优势是能够减小学习的估计偏差,但缺点是学习的近似偏差增大,这时与输入实例较远的训练实例也会对预测起做用,使预测发生错误。在实际应用中,K 值通常选择一个较小的数值,一般采用交叉验证的方法来选择最优的 K 值。随着训练实例数目趋向于无穷和 K=1 时,偏差率不会超过贝叶斯偏差率的2倍,若是K也趋向于无穷,则偏差率趋向于贝叶斯偏差率。
  2. 该算法中的分类决策规则每每是多数表决,即由输入实例的 K 个最临近的训练实例中的多数类决定输入实例的类别
  3. 距离度量通常采用 Lp 距离,当p=2时,即为欧氏距离,在度量以前,应该将每一个属性的值规范化,这样有助于防止具备较大初始值域的属性比具备较小初始值域的属性的权重过大。
KNN算法不只能够用于分类,还能够用于回归。经过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就能够获得该样本的属性。更有用的方法是将不一样距离的邻居对该样本产生的影响给予不一样的权值(weight),如权值与距离成反比。 该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其余类样本容量很小时,有可能致使当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。 该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。不管怎样,数量并不能影响运行结果。能够采用权值的方法(和该样本距离小的邻居权值大)来改进。
该方法的另外一个不足之处是计算量较大,由于对每个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前经常使用的解决方法是事先对已知样本点进行剪辑,事先去除对分类做用不大的样本。该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
实现 K 近邻算法时,主要考虑的问题是如何对训练数据进行快速 K 近邻搜索,这在特征空间维数大及训练数据容量大时很是必要。
相关文章
相关标签/搜索