统计学习(第三章-K近邻)

K近邻算法(K-NN)是一种基本分类与回归方法,输入为输入实例的特征向量,对应特征空间的点;输出为实例的类别,可以取多类,思想:假设给定一个训练数据集,其中的实例类别已定,分类时,对新的实例,根据其K个最近邻的训练实例的类别,通过多数表决等方式进行预测。
不具有显示的学习过程,利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。
三要素:k值的选择、距离度量(如欧氏距离)、分类决策规则(如多数表决)。
(一) k近邻算法
(1)工作原理:
存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即样本集中每个数据对应所属分类。
输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。
一般来说,只选择样本数据集中前N个最相似的数据。K一般不大于20,最后,选择k个中出现次数最多的分类,作为新数据的分类
(2)过程:
输入:训练数据集
输出:实例x所属的类y。
1) 根据给定的距离度量,在训练集T中找出与x最近邻的k个点,涵盖这K个点的x的领域记作Nk(x);
2) 在Nk(x)中根据分类决策规则(如多数表决)决定x的类别y。
优点:精度高;对异常值不敏感;无数据输入假定。
缺点:计算复杂度高;空间复杂度高;
适用数据范围:数值型和标称型
(二) k近邻模型
(1) 距离度量:是两个实例点相似程度的反应,
在这里插入图片描述在这里插入图片描述
(2) K值的选择
K值小,即用较小的邻域中的训练实例进行预测,“学习的”近似误差会减小。估计误差会增大,模型更复杂,容易过拟合。
K值大,即用较大的领域中的训练实例进行预测,优点可以减少学习的估计误差,确定学习的近似误差会增大,此时与输入实例远的训练实例也会对预测起作用,使预测发生错误,K越大,模型越简单。
K=N,无论输入实例是什么,都将简单的预测它属于在训练实例中最多的类,模型过于简单,忽略有用信息,不可取。
总之,一般将k值取一个较小的数值,可采用交叉验证法来选取最优的k值。
(3) 分类决策规则
多是多数表决,即由输入实例的k个邻近的训练实例中的多数类决定输入实例的类。多数表决规则等价于经验风险最小化。
(三) k近邻法的实现:kd树
k近邻最简单的实现方法是线性扫描,当训练集很大的时候,计算耗时,不可行。引入kd树。
kd树是一种对K维空间中的实例点进行存储以便对其进行快速检索的树形数据结构.
Kd树是二叉树,表示对K维空间的一个划分(partition).构造Kd树相 当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域.Kd树的每个结点对应于一个k维超矩形区域.
(1) 构造kd树
输入:k维空间数据集,其中Xi=(Xi(1), Xi(2),…Xi(k))T。
输出:kd树
Step1:开始构造根节点,选取X(1)为坐标轴,以训练集中的所有数据坐标的中位数作为切分点,将超矩形区域切割成两个区域,将该切分点作为根结点。由根结点生出深度为1的左右子结点,左节点对应坐标小于切分点,右结点对应坐标大于切分点。
Step2:重复:对深度为j的结点,选择X(l)为切分坐标轴,l=j(mod k)+1,以该结点区域中所有实例X(l)坐标的中位数作为切分点,将该区域分为两个子区域。生成深度为j+1的左、右子结点。左节点对应坐标小于切分点,右结点对应坐标大于切分点。
Step3:直到两个子区域没有实例时停止。
(2) 搜索kd树
寻找“当前最近点”:寻找最近邻的子节点作为目标点的“当前最近点”
回溯:以目标点和“当前最近点”的距离沿树根部进行回溯和迭代。
过程:
输入:已构造的kd树,目标点x
输出:x的最近邻
Step1:寻找“当前最近点”,从根节点出发,递归访问kd树,找出包含x的叶节点;以此叶节点为“当前最近点”;
Step2:回溯,若该节点比“当前最近点”距离目标点更近,更新“当前最近点”;当前最近点一定存在于该节点一个子结点对应的区域,检查子结点的父结点的另一子结点对应的区域是否有更近的点。
Step3:当回退到根结点时,搜索结束,最后的“当前最近点”即为x的最近邻点。
(四) 实例
(1)构造Kd树
输入:训练集:T={(2,3),(5,4),(9,6),(4,7)(8,1)(7,2)}
输出:kd树
在这里插入图片描述
X(1): 2,4,5,7,8,9,
开始选择X(1)为坐标轴,中位数5,7。选7,即以(7,2)为切分点,切分整个区域。小于7的作为左结点,大于7的作为右结点,(7,2)作为根结点,左右深度对应为1。
再次划分,X(2)为坐标轴,X(2)=1,2,3,4,6,7.选择中位数,左边区域为4,对应左边区域切分点为(5,4),右边区域为6,对应右边区域切分点坐标为(9,6)。
还剩下三个点未划分:(2,3)(4,7)(8,1)
2+1=3>维度2,
再次划分,
划分左边区域:以X(1)为坐标轴,选择中位数,上边区域为4,下边区域为2,所以上边区域切分点为(4,7),下边切分点坐标为(2,3)。
划分右边区域:以X(1)为坐标轴,选择中位数,上边区域无实例点,下边区域为8.故下边区域区分点为(8,1)。
根据划分输出Kd树:
在这里插入图片描述
(2)搜索kd树
输入:kd树,目标点x=(2.1,3,1);
输出:最近邻点。
根据上图kd图, 2.1<7,左子树里面;3.1<4,(5,4)左子树里面。故最近邻点(2,3)。
回溯:从(2.1,3.1)叶子结点回溯到父辈祖辈,与(5,4)无交集,父辈->根结点,也无交集。
输入:kd树,目标点x=(2,4.5);
输出:最近邻点
Step1:先找出当前点(2,4.5)的最近邻节点,根结点(7,2)->(5,4)的上子区域的(4,7)节点划分的左子区域里面,所以最近邻节点为(4,7)。
Step2:回溯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值