统计学习方法读书笔记(三)

k近邻法(K-NN)是一种基本的分类和回归方法。
k近邻法三要素:k值选择,距离度量,分类决策规则。
其实k近邻法相比于其他算法还是挺简单的。
本文主要从k近邻法的实现方法来阐述——kd树,kd树的构造,搜索kd树。
k近邻法算法:
输入:训练数据集
这里写图片描述
x是实例的特征向量,y是对实例的分类。
输出:实例x所属的类y.
(1):根据给定的距离度量,在训练集T中找出与x最近邻的k个点,涵盖着k个点的x领域记作:这里写图片描述.
(2):在这里写图片描述中根据分类决策规则决定x的类别y:
这里写图片描述
其中I 为指示函数,满足条件就为1。不满足就为0。
k近邻模型:
就是对于实例点这里写图片描述来说,距离该点比其他点更加近的所有点构成的集合。叫做单元(cell)。如下图所示:
这里写图片描述
距离度量:
距离度量的定义:这里写图片描述
有以下几种距离度量:
(1):当p=2时,称为欧式距离:
这里写图片描述
(2)当p=1时称为曼哈顿距离:
这里写图片描述
(3):当p=这里写图片描述时,他是各个坐标系距离的最大值:这里写图片描述
分类决策规则:
如果损失函数是0-1损失函数,分类函数为:这里写图片描述
那么误分类率是:这里写图片描述
则误分类率是(用0-1函数表示出来,这个公式就是按照上面公式来的):这里写图片描述
要使误分类率最小(经验风险最小)。则就要使得这里写图片描述最大。
构造kd树算法:
输入:k维空间数据集T={x1,x2,x3……xN},
其中这里写图片描述
输出kd树:
(1)开始:构造根节点,根节点对应于包含T的k维空间的超巨型区域。选择这里写图片描述为坐标轴,以T中所有的实例的这里写图片描述坐标的中位数为分切点,将根节点对应的超巨型区域切分成两个子区域,切分由通过切分点并与坐标轴这里写图片描述垂直的超平面实现。
由根节点生成深度为1的左,右子节点:左子节点对应坐标这里写图片描述小于切分点的子区域,右子节点对应于坐标这里写图片描述大于切分点的子区域。
将落在切分超平面的实例点保存在根节点。
(2)重复:对深度为j的节点,选择这里写图片描述为切分的坐标轴,以该节点的区域中所有的实例点这里写图片描述坐标的中位数为切分点,将该节点对应的超巨型区域切分为两个子区域,切分通过切分点并与坐标轴这里写图片描述垂直的超平面实现。
(3):直到两个区域没有实例点为止,从而形成kd树的划分。
是不是看到上面三个步骤很糊,什么玩意。别着急,我都一个一个字打出来了,手都打疼了,至少比你看的还累。
构造实例如下:
给出实例点:T={(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)}
(1)根据x轴方向的值2,5,9,4,8,7排序选出中值为7,所以选取(7,2)。这样,该节点的分割超平面就是通过(7,2)并垂直于x轴的直线x = 7;
(2)确定左子空间和右子空间。分割超平面x = 7将整个空间分为两部分,如下图所示。x <= 7的部分为左子空间,包含3个节点{(2,3),(5,4),(4,7)};另一部分为右子空间,包含2个节点{(9,6),(8,1)}。
(3)依次按照中位数划分,这样直到区域没有实例点为止。
构造后的图形如下:这里写图片描述
最后就是搜索kd树:估计写完都得吐血了,看的糊糊的。
好吧,推荐一篇博文:http://blog.csdn.net/losteng/article/details/50893739
讲的比较清晰。在这里就不赘述了。
下一篇:朴素贝叶斯法。马上就要期末考试了,可能有时候时间会来不及,不过会尽力按照时间更新。
如有错误,欢迎批评指正!

猜你喜欢

转载自blog.csdn.net/weixin_38347387/article/details/78734801