机器学习算法系列——k近邻分类法

本文详细介绍了K近邻算法的基本思想与数学理论,并通过一个具体的例子展示了如何使用k-d树来加速查找最近邻的过程。此外,还提供了算法的Python实现代码。

1、基本思想

给定一个训练数据集(这些数据集是已知类别的),对新输入的要对其进行分类的实例,从训练数据中找出与该实例最近的k个实例,这k个实例的多数属于某个类(类似于这k个实例对新数据投票),就把该输入实例分为这个类。

2、数学理论

2.1 算法描述

输入:训练数据集
T={(x1,y1),(x2,y2),...,(xN,yN))}
其中, xiXRn 为实例的特征向量, yiY={c1,c2,...,cK} 为实例的类别, i=1,2,...,N ;新输入的实例表示为 x
输出:实例x所属的类 y

分类步骤:

  • 根据给定的距离度量,在训练集T中找出与 x 最邻近的k个点,涵盖这k个点的x的领域记作 Nk(x)

    • Nk(x) 中根据分类决策规则(如多数表决)决定 x 的类别y:
      y=argmaxxiNk(x)I(yi=cj),i=1,2,...,N;j=1,2,...,K

      上式中, I 为指示函数,即当yi=cj I 为1,否则I为0。
    • 2.2 距离度量

      k近邻分类模型的空间一般是n维实数向量空间 Rn . 使用的距离通常是欧氏距离,但也可以是其它距离,如: Lp 距离或Minkowsk距离。

      2.3 算法举例

      例题:假设有6个二维数据点{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},数据点位于二维空间内,如下图所示。为了能有效的找到最近邻,k-d树采用分而治之的思想,即将整个空间划分为几个小部分,首先,粗黑线将空间一分为二,然后在两个子空间中,细黑直线又将整个空间划分为四部分,最后虚黑直线将这四部分进一步划分。

      这里写图片描述
      6个二维数据点{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)}构建kd树的具体步骤为:

      • 确定:split域=x。具体是:6个数据点在x,y维度上的数据方差分别为39,28.63,所以在x轴上方差更大,故split域值为x;
      • 确定:Node-data = (7,2)。具体是:根据x维上的值将数据排序,6个数据的中值(所谓中值,即中间大小的值)为7,所以Node-data域位数据点(7,2)。这样,该节点的分割超平面就是通过(7,2)并垂直于:split=x轴的直线x=7;
      • 确定:左子空间和右子空间。具体是:分割超平面x=7将整个空间分为两部分:x<=7的部分为左子空间,包含3个节点={(2,3),(5,4),(4,7)};另一部分为右子空间,包含2个节点={(9,6),(8,1)};
      • 如上算法所述,kd树的构建是一个递归过程,我们对左子空间和右子空间内的数据重复根节点的过程就可以得到一级子节点(5,4)和(9,6),同时将空间和数据集进一步细分,如此往复直到空间中只包含一个数据点。

      3、算法Python实现

      参考文献
      KNN(三)–KD树详解及KD树最近邻算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值