KNN

作者: 0过把火0 | 来源:发表于2018-10-12 15:28 被阅读1次

一句话介绍KNN

KNN是一种可用于分类和回归的方法。一般情况下用其进行分类任务。

KNN三要素

1)模型,即对特征空间的划分;
2)距离度量,欧氏距离等;
3)分裂决策规则,即多数投票方法

特点

KNN不具有显式的学习过程,实际上是利用训练集对特征空间进行划分,然后对新样本进行相邻K个最近样本的统计,并以多数类作为该样本的预测。

K值如何确定

首先需要明确:如果我们选取较小的k值,那么就会意味着我们的整体模型会变得复杂,容易发生过拟合
下面来解释上面的模型变复杂以及过拟合:



上图中,假设待分类的样本为红色五边形:
1)如果K=1,那么黑色圆形距离红色最近,则判定红色属于黑色圆形类别!
这种极端情况的结果会发现很容易模型就学习到了噪声,即模型本身变得复杂,引入了噪声,同时,K值过小后,会导致过拟合,很容易将一些噪声(如上图离五边形很近的黑色圆点)学习到模型中,而忽略了数据真实的分布。
2)如果K增大到8,那么如下图:可以发现,此时红色目标被判定为蓝色矩形类别了,这个结果就很好接受。



如果我们选取较大的k值,就相当于用较大邻域中的训练数据进行预测,这时与输入实例较远的(不相似)训练实例也会对预测起作用,使预测发生错误,k值的增大意味着整体模型变得简单。、
那么为何K值的增大能够使得模型变得简单?

我们想,如果k=N(N为训练样本的个数),那么无论输入实例是什么,都将简单地预测它属于在训练实例中最多的类。这时,模型是不是非常简单,这相当于你压根就没有训练模型呀!直接拿训练数据统计了一下各个数据的类别,找最大的而已!这好像下图所示:我们统计了黑色圆形是8个,长方形个数是7个,那么哈哈,如果k=N,我就得出结论了,红色五边形是属于黑色圆形的(当然这样的结果也是错误的)

上面过于简单的模型同样导致预测结果出错,那么对于K来讲,不能太小也不能太大。在李航的书中说道,一般选取一个较小的数值,通常采取 交叉验证法来选取最优的k值

KD树

k近邻法最简单的实现是线性扫描(穷举搜索),即要计算输入实例与每一个训练实例的距离。计算并存储好以后,再查找K近邻。当训练集很大时,计算非常耗时。为了提高kNN搜索的效率,可以考虑使用特殊的结构存储训练数据,以减小计算距离的次数。

KD树构建算法

1)确定切分维度
计算各个特征维度上的方差,每次选择方差最大的进行分割
2)确定分割点
确定好分割哪一维度后,将该维度特征排序,选择中位数进行此次切分

举例:
6个二维数据点{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)}构建kd树的具体步骤为:
1、确定:split域=x。具体是:6个数据点在x,y维度上的数据方差分别为39,28.63,所以在x轴上方差更大,故split域值为x;
2、确定:Node-data = (7,2)。具体是:根据x维上的值将数据排序,6个数据的中值(所谓中值,即中间大小的值)为7,所以
Node-data域位数据点(7,2)。这样,该节点的分割超平面就是通过(7,2)并垂直于:split=x轴的直线x=7;
3、确定:左子空间和右子空间。具体是:分割超平面x=7将整个空间分为两部分:x<=7的部分为左子空间,包含3个节点 = {(2,3),(5,4),(4,7)};另一部分为右子空间,包含2个节点 = {(9,6),(8,1)};

KD树搜索算法

我们新来一个样本,需要在KD中完成搜索,以便确定其类别
1)二分查找,递归向从根结点出发,递归的向下访问kd树。若目标点当前维的坐标值小于切分点的坐标值,则移动到左子结点,否则移动到右子结点。直到子结点为叶结点为止;
2)以此节点为“最近邻点”,从该点向上回退,目的是看看其父节点的另一子节点内是否有更近的点
做法是:
向上回退,若该节点保存的实例中有更近的距离,那么更新最近邻点,此时,需要额外检查更新节点另一子空间是否有更近的点,以目标点到该点距离为半径画圆,若圆与该最近邻点的另一子空间相交,那么移动到另一子节点,递归搜索,然后再回退,直到会退到根节点位置。

KNN与Kmeans

不同点:
K-Means是无监督学习的聚类算法,没有样本输出;
而KNN是监督学习的分类算法,有对应的类别输出。
KNN基本不需要训练,对测试集里面的点,只需要找到在训练集中最近的k个点,用这最近的k个点的类别来决定测试点的类别。
而K-Means则有明显的训练过程,找到k个类别的最佳质心,从而决定样本的簇类别。

相似点:
当然,两者也有一些相似点,两个算法都包含一个过程,即找出和某一个点最近的点。两者都利用了最近邻(nearest neighbors)的思想。

转载注明:https://www.jianshu.com/p/60065cba3885

相关文章

  • Spark --基于DataFrame API实现KNN算法

    Spark -- 基于DataFrame API实现KNN算法 KNN简介 KNN(k-Nearest Neigh...

  • KNN近邻算法总结

    目录 一、KNN近邻算法思想 二、KNN模型三大要素 三、KNN算法实现步骤 四、KNN算法的KD树实现 五、总结...

  • 利用Python进行数字识别

    思路 通过Python实现KNN算法。而KNN算法就是K最近邻(k-Nearest Neighbor,KNN)分类...

  • KNN

    KNN学习笔记 KNN is a classification algorithm which is instan...

  • 第六节分类算法

    1knn算法 1.1knn的过程 1.2scilit-learn中的knn 1.3scikit-learn机器学习...

  • knn算法

    knn算法 knn算法简介 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法。所谓K...

  • 机器学习笔记汇总

    kNN算法:K最近邻(kNN,k-NearestNeighbor)分类算法

  • 01 KNN算法 - 概述

    KNN算法全称是K近邻算法 (K-nearst neighbors,KNN) KNN是一种基本的机器学习算法,所谓...

  • KNN算法-1-KNN简介

    KNN入门 1、KNN简介 kNN(k-NearestNeighbor),也就是k最近邻算法,这是一种有监督的学习...

  • KNN算法以及欧式距离

    1.KNN算法介绍 KNN 是什么? KNN(K-Nearest Neighbor)是最简单的机器学习算法之一,可...

网友评论

    本文标题:KNN

    本文链接:https://www.haomeiwen.com/subject/kcrgaftx.html