0 综述
k近邻法: 基本的分类与回归方法
- 输入:实例的特征向量
- 输出:实例的类别
不具有显式的学习过程
使用训练数据集对特征向量空间进行划分
三个基本要素
- k值选择
- 距离度量
- 分类决策规则
1 算法
给定一个训练集,对于新的输入,在训练集中找到与该输入最邻近的k个实例,这k个实例的多数属于哪个类,就将输入实例划分到这个类。
特殊情况: k = 1时,称为最近邻算法,将训练集中与输入最邻近点的类作为输入的类
2 模型
2.1 模型
当训练集、距离度量、k、分类决策规则确定之后,对于一个新的输入,所属的类别唯一确定
在特征空间中,对每个点,距离此点比其他点更近的所有点组成一个区域,叫做单元
所有点的单元构成了对特征空间的划分
2.2 距离度量
设特征空间
X
是n维实数向量空间
Rn
xi,xj
是特征空间
X
中的元素,
xi=(x(1)i,x(2)i,...,x(n)i)T
xi,xj
之间的
Lp
距离定义为(p >= 1)
欧式距离 p = 2
L2(xi,xj)=(∑i=0n|xli−xlj|2)12曼哈顿距离 p = 1
L1(xi,xj)=(∑i=0n|xli−xlj|1)p趋于无穷时
Lp(xi,xj)=maxl|xli−xlj|p
2.3 k值选择
- k减小 – 模型复杂 – 容易过拟合
- k增大 – 模型简单
- k = N 模型过于简单-忽略大量有用信息
- k一般选择较小的数值–通常采用交叉验证选择最优k值
2.4 分类决策规则
经验风险最小化
分类函数
损失函数为0-1损失函数, 误分类概率
对于给定的输入 x∈X , 最近邻的k个训练实例点集合 Nk(x) ,涵盖的区域类别 cj
误分类可能的情形
误分类率
最小化误分类率,即最大化
所以是经验风险最小化
3 kd树
实现KNN,主要考虑–快速搜索问题–训练集大时必要
简单方法–线性扫描 缺点:训练集很大时,计算耗时,方法不可行
3.1 构造
构造方法:
1. 构造根节点,对应k维特征空间包含所有特征点的矩形区域
2. 在超矩形区域(节点)选择一个坐标轴和此坐标轴上的切分点,确定一个超平面,超平面通过选定的切分点并垂直于选定的坐标轴,将当前超矩形区域切分成左右两个子区域(子节点)
3. 对子区域递归步骤2,直到子区域中没有点时算法终止
对于kd树
输入 k 维空间数据集
T={x1,x2,...,xi}
xi=(x(1)i,x(2)i,...,x(n)i)T
1. 根节点–
x(1)
为坐标轴,T所有节点的
x(1)
的中位数作为切分点
2. 递归时–
l=j(modk)+1
,
x(l)
为坐标轴,T所有节点的
x(l)
的中位数作为切分点
3.2 搜索
输入:kd树,目标点x
输出:x的最近邻
1. 根节点出发,递归向下访问(DFS)kd树,直到kd树的叶节点
2. 将叶节点作为当前最近点
3. 递归回退同时,在每个节点
若该节点比当前最近点距x更近,更新当前最近点
检查另一子节点的矩形区域是否与目标点为球心,当前最小距离为半径的球体相交
若相交,搜索另一子节点中更近的节点,更新当前最近点,并移动至该节点,递归搜索
若不相交,回退
4. 回退到根节点,搜索结束,返回当前最近点
3.3 总结
- kd树搜索平均复杂度 O(logN)
- 适用–训练样本数远大于空间维数
- 训练样本数接近空间维数时,效率接近线性扫描