k近邻算法——总结

一、序

  k近邻法(k-nearest neighbor, kNN)是一种基本的分类与回归方法。KNN做回归和分类的主要区别在于最后做预测时候的决策方式不同。KNN做分类预测时,一般是选择多数表决法,即训练集里和预测的样本特征最近的K个样本,预测为里面有最多类别数的类别。而KNN做回归时,一般是选择平均法,即最近的K个样本的样本输出的平均值作为回归预测值。
  简言之,k近邻法算法简单、直观:给定一个训练集,在训练数据集中找到与该实例最邻近的k个实例;这k个实例的多数属于某个类,就把该输入实例分为这个类,此为分类;求出这k个实例的平均值,就把该平均值记做该实例的预测值,此为回归。

二、KNN算法三要素

  对于固定的训练集,只要k值的选取距离度量的方式决策规则这三点确定了,算法的预测方式也就确定了。

1、k值的选择

  KNN中的K值选取对K近邻算法的结果会产生重大影响,在实际应用中,K值一般取一个比较小的数值,然后通过交叉验证选择一个合适的k值。

  选择较小的k值,就相当于用较小的领域中的训练实例进行预测,训练误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是泛化误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合
  选择较大的k值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少泛化误差,但缺点是训练误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单
  一个极端是k等于样本数m,则完全没有分类,此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的类,模型过于简单。

2、距离度量的方式

  对于距离的度量,我们有很多的距离度量方式,大多数情况下,欧式距离便可满足我们的需求;即对于两个n维向量x和y,两者的欧式距离定义为:
D(x,y)=(x1y1)2+(x2y2)2+...+(xnyn)2=i=1N(xii1)2D(x,y)=\sqrt{(x_1−y_1)^2+(x_2−y_2)^2+...+(x_n−y_n)^2}=\sqrt{\sum_{i=1}^N(x_i−i_1)^2}

3、决策规则

  对于分类问题:一般都是使用前面提到的多数表决法
  对于回归问题:一般都是使用前面提到的求平均值

三、knn算法实现

  此处说的算法亦可指KNeighborsClassifier中algorithm的参数选择,分别是:暴力搜索(brute)、kd树(kd_tree)、球树(ball_tree)。

  暴力搜索:需要计算预测样本和所有训练集中的样本的距离,然后计算出最小的k个距离即可,接着多数表决,很容易做出预测。这个方法的确简单直接,在样本量少,样本特征少的时候有效。但是在实际运用中很多时候用不上,为什么呢?因为我们经常碰到样本的特征数有上千以上,样本量有几十万以上,如果我们这要去预测少量的测试集样本,算法的时间效率很成问题。因此,这个方法我们一般称之为蛮力实现。比较适合于少量样本的简单模型的时候用。在机器学习实战_K近邻算法 —— 电影分类采用的就是暴力搜索方式。

  kd树:KD树算法没有一开始就尝试对测试样本分类,而是先对训练集建模,建立的模型就是KD树,建好了模型再对测试集做预测。所谓的KD树就是K个特征维度的树,注意这里的K和KNN中的K的意思不同。KNN中的K代表最近的K个样本,KD树中的K代表样本特征的维数

  球树:球树,顾名思义,就是每个分割块都是超球体,而不是KD树里面的超矩形体。

附:距离度量扩展

闵氏距离(Minkowski distance )定义了标准向量空间中两点之间的距离。
    在这里插入图片描述
定义如下:
    在这里插入图片描述
当p=1时,称为曼哈顿距离;当p=2时,称为欧式距离。下图是p取不同值时,闵氏距离的变化

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章