K近邻法
K近邻法(k-NN)是一种分类与回归的算法。
优点:简单,直观
思路:给定一个训练集,对新输入的实例,在训练数据集中找到与该实例最邻近的K个实例。采用“少数服从多数”的方法,寻找实例所在的类。
- K近邻算法:(没有显式的学习过程)
input:训练集 T={(xi,yi) |i=1..n}, 实例x。
output:实例x的分类y
步骤:
(1)由距离度量找到T中与x最近的k个点,(k的个数可以由交叉验证确定)
(2)多数表决法,k个点中那个类别的点多,x就被分为哪一类
注意:不同距离度量(具体距离算法在聚类中有详细介绍)所确定的最近邻点会有所不同
- kd树(k近邻实现的线性扫描)
构造根节点,使根节点对应于k维空间中所包含的实例点的超矩形区域。通过递归的方法,不断对k维空间进行切分成子节点。
构造平衡的kd树:
依次选择坐标进行切分,选择训练的实例点,在选定的坐标轴上的中位数为切分点,向坐标轴做垂线。
- 搜索kd树
优点:省去对大部分数据的搜索,从而减少搜索的计算量
kd树的最近邻搜索算法:
input:已构造的kd树,实例目标点x
output:实例点x的最近邻
步骤:
(1)在kd树中找包含目标点x的叶节点,从根节点出发,地递归的向下访问kd树,若x当前维的坐标小于切分点的坐标,则移动到左侧子节点,反之,移动到右侧子节点。直到子节点为叶节点为止
(2)递归的向上回退