统计学习方法——k-近邻算法

k-近邻算法是什么?

所谓k-近邻(KNN)是基本且简单的分类与回归方法,说的就是每个样本的分类都可以用它最接近的K个邻居来代表。

KNN算法的基本做法是:

1、对给定的训练实例点和输入实例点,首先确定输入实例点的k个最近邻训练实例点,然后利用这k个训练实例点的类的多数来预测输入实例点的类。

2、k近邻模型对应于基于训练数据集对特征空间的一个划分。k近邻法中,当训练集、距离度量、k值及分类决策规则确定后,其结果唯一确定

3、k近邻法三要素:
(1) 距离度量、k值得选择和分类决策规则。常用的距离度量是欧氏距离及更一般的Lp距离。k值小时,k近邻模型更复杂;k值大时,k近邻模型更简单。
(2)k值得选择反映了对近似误差与估计误差之间得权衡,通常由交叉验证选择最优的k。
(3)常用的分类决策规则是多数表决,对应于经验风险最小化。

4、k近邻法的实现需要考虑如何快速搜索k个最近邻点。kd树是一种便于对k维空格键中的数据进行快速检索的数据结构。kd树是二叉树,表示对k维空间的一个划分,其每个节点对应于k维空间划分中的一个超矩形区域。利用kd树可以省去对大部分数据点的搜索,从而减少搜索的计算量。

kd树

k近邻法最简单的实现是线性扫描,及计算输入实例与每一个训练实例的距离。但是,当训练集很大的时候,计算将非常耗时。为了提高k近邻搜索的效率,可采用kd树的方法。

详细讲述:

1、Kd树是一种对K维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。

2、Kd树是二叉树,表示对k维空间的一个划分。构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域。Kd树的每一个结点对应于一个k维超矩形区域。

3、构造kd树的方法如下:
(1)构造根结点,使得根结点对应于k维空间中包含所有实例点的超矩形区域;
(2)通过下面的递归方法,不断地对k维空间进行切分,生成子结点。
(3)在超矩形区域(结点)上选择一个坐标轴和在此坐标轴上的一个切分点,确定一个超平面,这个超平面通过选定的且分店并垂直于选定的坐标轴,将当前超矩形区域且分为左右两个子区域(子结点);这时,实例被分到两个字区域。
(4) 这个过程直到子区域内没有实例时终止(终止时的结点为叶节点)。在此过程中,将实例保存在相应的结点上。

网上有关于kd树的一个详细解释,里面的图片和文字解析,有助于理解
https://www.jianshu.com/p/ffe52db3e12b

通常,依次选择坐标轴对空间划分,选择训练实例点在选定坐标轴上的中位数为切分点,这样得到的kd树是平衡的。

总结:

KNN是比较容易理解的一个算法,所以在此很少去讲述。网上有很多优秀的博主对此进行详细的讲述。

例如下面的大牛:
谢厂节:https://blog.csdn.net/xundh/article/details/73611249
Jack-Cui : https://blog.csdn.net/c406495762/article/details/75172850

发布了28 篇原创文章 · 获赞 2 · 访问量 1021

猜你喜欢

转载自blog.csdn.net/sinat_36118365/article/details/101357452