K近邻分类模型

输入:N个特征向量: T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T = \lbrace (x_1, y_1), (x_2, y_2), ..., (x_N, y_N) \rbrace T={(x1,y1),(x2,y2),...,(xN,yN)} x i ∈ R n x_i \in R^n xiRn, i.e. x i = ( x ( 1 ) , x ( 2 ) , . . . , x ( n ) ) x_i = (x^{(1)}, x^{(2)}, ..., x^{(n)}) xi=(x(1),x(2),...,x(n))
输出: 实例x所属的类别

大体步骤:
① 根据给定的距离度量,在训练集T中找出与x最邻近的k个点,涵盖这k个点的x的邻域记作 N k ( x ) N_k(x) Nk(x)
② 在 N k ( x ) N_k(x) Nk(x)中根据分类决策规则(如多数表决)决定x的类别y;
核心三要素:距离度量、k值选择、分类决策规则

距离度量: L p L_p Lp距离
k值选择:当k值较小时,模型较为复杂,近似误差较小,但是对噪声敏感,估计误差较大;当k值较大时,模型简单,估计误差减小,但是近似误差较大。

kd树构建: 时间复杂度log(N)
①构造根节点:以第一个维度 x ( 1 ) x^{(1)} x(1)为坐标轴,以T中所有实例的 x ( 1 ) x^{(1)} x(1)的中位数为切分点(即根节点),将根节点对应的超矩形区域分割为两个子区域(深度为1,左子区域内所有点的x^{(1)}维度的值都小于根节点该维度的值,右子区域的值则大于根节点该维度的值)。切分由通过切分点与坐标轴 x ( 1 ) x^{(1)} x(1)垂直的超平面实现。
②重复构造子区域:对于深度为j的节点,选择 x ( l ) x^{(l)} x(l)为切分的坐标轴, l = j % k + 1 l=j\%k+1 l=j%k+1,同理,以该节点区域中所有点的 x ( l ) x^{(l)} x(l)维度的中位数的点作为切分点,将该区域且分为两个子区域
③截止条件:直到切分的两个子区域中不包含实例点为止,即所有的点都属于切分点

kd树构造举例: T = { ( 2 , 3 ) T , ( 5 , 4 ) T , ( 9 , 6 ) T , ( 4 , 7 ) T , ( 8 , 1 ) T , ( 7 , 2 ) T } T=\{ (2,3)^T, (5,4)^T, (9,6)^T, (4,7)^T, (8, 1)^T, (7,2)^T \} T={(2,3)T,(5,4)T,(9,6)T,(4,7)T,(8,1)T,(7,2)T}
①选择根节点,切分维度为 x ( 1 ) x^{(1)} x(1),该维度中位数为6,但是6不包括在数据集中,因此选7为中位数,切割点为 ( 7 , 2 ) T (7,2)^T (7,2)T,左子区域内点为: { ( 2 , 3 ) T , ( 5 , 4 ) T , ( 4 , 7 ) T } \{ (2,3)^T, (5,4)^T, (4,7)^T \} {(2,3)T,(5,4)T,(4,7)T},右子区域内点为: { ( 9 , 6 ) T , ( 8 , 1 ) T } \{(9,6)^T, (8, 1)^T\} {(9,6)T,(8,1)T},深度为1
②继续切分,切割维度为 x ( 2 ) x^{(2)} x(2),其中深度1的左区域的中位数为4,因此深度1左区域切割点为 ( 5 , 4 ) T (5, 4)^T (5,4)T,深度1左区域的左区域点为 ( 2 , 3 ) T (2,3)^T (2,3)T。深度1右区域的切割点为6,由于除去切割垫只有左区域,因此深度1右区域的左区域点为 ( 8 , 1 ) T (8,1)^T (8,1)T
③整体的二叉树图为:
深度0,根节点,切割维度 x ( 1 ) x^{(1)} x(1)------(7, 2)
\qquad \qquad \qquad\qquad\qquad\qquad / \qquad \
深度1,切割维度 x ( 2 ) x^{(2)} x(2)-----------(5,4) \qquad (9,6)
\qquad\qquad\qquad\qquad\qquad\quad / \quad \ \qquad\quad \
深度2,切割维度 x ( 1 ) x^{(1)} x(1)-----(2,3) \quad (4,7) \qquad (8,1)

kd树最近邻搜索
①找到目标点x的叶节点:从根节点出发,递归向下访问kd树。若x当前分割维度坐标值小于切分点坐标,则向左下递归,否则向右下递归,直到叶子节点
②以此叶子节点作为“当前最近节点”
③递归向上回退,在每个节点处操作:
\quad a) 如果该阶段到目标节点的距离小于“当前最近节点”,则以该实例点作为“当前最近节点”
\quad b) 当前最近点一定存在于该节点一个子节点对应的区域,检查该子节点的父节点的另外一个子节点对应的区域是否有更近的点。~(即如果另外一个子区域与目标域和当前最近点所构成的圆相交时,则有可能会有更近的点存在,因此需要递归另外一个子区域;如果不想交,则直接向上递归)
④当搜索退回到根节点时,搜索结束,当前最近点即为最近邻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值