K-Nearest Neighor
K-NN
输入:p维实例特征向量
- 将样本点视为p维特征空间的中点
输出:实例类别,可以取多类别
基本思想
- 在已有数据中找到与$X_0$相似的若干个观测 $(X_1, X_2, …, X_k)$,称为$X_0$的近邻
- 对近邻$(X_1, X_2, …, X_k)$的输出变量 $(y_1, y_2, …, y_k)$,计算诸如算术平均值 (加权平均值、中位数、众数),作为新观测$X_0$输出 变量取值$y_0$的预测值
特点
- k近邻不具有显式学习过程、简单、直观
- 不需要假设$y=f(X)$函数体形式,实际上是利用训练数据集 对特征空间进行划分
局部方法
k-NN是一种“局部”方法,仅适合特征空间维度较低的情况
给定k的情况下,在高维空间中,需要到更远的区域寻找近邻, 局部性逐渐丧失,近似误差变大
如:n个观测均匀分布在超立方体中,确定k后即确定$X_0$需要 寻找的近邻个数占总观测的比率r,即近邻覆盖的体积
考虑$X_0$在原点,则近邻分布的小立方体边期望长度为
可以看出:减少近邻比例(数量)没有帮助,还会使得近似 误差变大,只能通过增大样本量解决
特征选择有必要
特征选择
变量本身考察
- low variance filter:剔除标准差小于阈值数值型变量
- missing values ratio:剔除缺失值大于阈值的变量
- 剔除众数比率大于阈值的分类型变量
变量与输出变量相关性角度考察
- high correlation filter
对预测误差影响角度考察
- Wrapper方法:逐个选择使错误率、均方误差下降最快变量 ,可使用Forward Feature Elimination
k-NN模型
K-NN是使用模型:实际上对应于特征空间的划分
- 模型包括3个基本要素,据此划分特征空间,确定特征空间中
每个点所属类
- k值选择
- 距离度量:参见data_science/ref/functions
- 分类决策规则
k值选择
k值选择对k-NN方法有重大影响
较小k值:相当于使用较小邻域中训练实例进行预测
- 复杂模型,容易发生过拟合
- approximation error较小:只有于输入实例近、相似的 训练实例才会对预测结果有影响
- estimation error较大:预测结果对近邻实例点非常敏感
较大k值:相当于使用较大邻域中训练实例进行预测
- 简单模型
- 估计误差较小
- 近似误差较大:同输如实例远、相似程度差的训练实例也会 对预测结果有影响
k=1
只使用一个近邻做预测
找到距离$X_0$最近的近邻$X_i$,用其取值作为预测值
模型简单、效果较理想
- 尤其适合特征空间维度较低、类别边界不规则情况
- 只根据单个近邻预测,预测结果受近邻差异影响极大,预测 波动(方差)大,稳健性低
预测错误的概率不高于普通贝叶斯方法的两倍
- $P(y=1|X=X_0)$:普通贝叶斯方法做分类预测,预测结果 为1的概率
- 1-NN方法犯错的概率就是$X_0$、$X_i$二者实际值不同的 概率????
k=N
使用训练样本整体做预测
无论输入实例,预测结果完全相同
- 对分类预测,预测结果为“众数”
- 对回归预测,预测结果为“平均数”
模型过于简单、效果不好
- 忽略训练实例中大量信息
- “稳健性”极好:预测值基本不受近邻影响,无波动
决策规则
分类决策规则
Majority Voting Rule
多数表决规则:等价于经验风险最小化
分类损失函数为0-1损失函数,分类函数为 $f: \mathcal{R^n} \rightarrow {c_1, c_2, \cdots}$
误分类概率$P(Y \neq f(X)) = 1 - P(Y=f(X))$
给定实例$x \in \mathcal{X}$的误分率为
- $N_k(x)$:最近邻k个实例构成集合
- $c_j$:涵盖$N_k(x)$区域的类别
- $I$:指示函数
为使误分率(经验风险)最小,应选择众数
- 经验风险的构造中,前提是近邻被认为属于相同类别$c_j$,
- 当然这个假设是合理的,因为k-NN方法就是认为近邻类别相同, 并使用近邻信息预测
- $c_j$的选择、选择方法是模型选择的一部分,不同的$c_j$会 有不同的经验风险
数值决策规则
算法
实现k近邻法时,主要问题是对训练数据进行快速k近邻搜索, 尤在特征空间维数大、训练数据量大
考虑使用特殊的结构存储训练数据,减少计算距离次数,提高 k近邻搜索效率
linear scan
线性扫描:最简单的实现方法
- 需要计算输入实例与每个训练实例的距离,训练集较大时计算 非常耗时
kd树最近邻搜索
- 输入:已构造kd树
- 输出:x的最近邻
在kd树种找出包含目标点x的叶节点的
从根节点出发,比较对应坐标,递归进行访问,直到叶节点 为止
目标点在训练样本中不存在,必然能够访问到叶节点
以此叶节点为“当前最近点”
- 目标点在此叶节点中点所在的区域内,且区域内只有该 叶节点中点
回溯,并在每个节点上检查
如果当前节点保存实例点比当前最近点距离目标的更近, 更新该实例点为“当前最近点”
检查该节点另一子区域是否可能具有更近距离的点
- 即其是否同以目标点为圆心、当前最短距离为半径圆 相交
- 只需要比较目标点和相应坐标轴距离和最短距离即可
若二者相交,则将目标节点视为属于该子区域中点, 进行最近邻搜索,递归向下查找到相应叶节点,重新 开始回退
若二者不相交,则继续回退
退回到根节点时,搜索结束,最后“当前最近点”即为最近邻点
- 这里涉及到回溯过程中,另一侧子域是否访问过问题,可以通过 标记、比较相应轴坐标等方式判断
- k>1的情况类似,不过检测时使用最远近邻,新近邻需要和所有 原近邻依次比较
加权k-NN
变量重要性
计算变量的加权距离,重要变量赋予较高权重
变量重要性:Backward Feature Elimination得到各变量 重要性排序
- $e_i$:剔除变量i之后的均方误差(错误率)
加权距离:$dw(x,y)=\sqrt {\sum{i=1}^{p} w^{(i)}(x_i - y_i)^2}$
观测相似性
目标点的k个近邻对预测结果不应有“同等力度”的影响,与$X_0$越 相似的观测,预测时重要性(权重)越大
权重:用函数$K(d)$将距离d转换相似性,$K(d)$应该有特性
- 非负:$K(d) \geqslant 0, d \in R^n$
- 0处取极大:$max K(d) = K(0)$
- 单调减函数,距离越远,相似性越小
- 核函数符合上述特征
- 且研究表明除均匀核外,其他核函数预测误差差异均不明显
步骤
依据函数距离函数$d(Z_{(i)}, Z_0)$找到$X_0$的k+1个近邻
- 使用第k+1个近邻距离作为最大值,调整距离在0-1之间
依据函数$w_i=K(d)$确定k各近邻的权重
预测
- 回归预测
- 分类预测:多数表决原则
Approximate Nearest Neighbor
相似最近邻