KNN是一种分类和回归算法,在分类问题的KNN中,以训练集样本来划分特征向量空间,根据目标样本在特征空间相邻最近的k个点的类别,以多数表决的方式来判断目标样本的类别。
KNN模型的三要素:距离度量、K值选择、分类决策规则。
距离度量
常用的距离度量是欧式距离和更一般的lp距离
K值选择
k值过大,模型更简单,估计误差小,近似误差大。k值过小,模型更复杂,有过拟合风险,估计误差大,近似误差小。通常采用交叉验证选择最优的k值。
分类决策规则
常用的是多数表决,对应经验风险最小化。
构造kd树
k近邻模型的实现主要考虑的是如何快速搜索最近的k个点,主要使用kd树(二叉树)实现。
构造kd树的主要思想:分别以训练样本的每一维作为切分坐标轴,训练样本对应维度下数值的中位数所对应的样本点为切分点,中位数为偶数个使用较大的为切分点。小于切分点的节点为左子节点,大于切分点的节点为右子节点。
搜索kd树
在kd树中搜索近邻点的主要思想:在kd树中,以包含目标点S的叶节点D作为当前最近邻,而真正的最近邻一定在以目标点S为中心,目标点S与叶节点D的距离为半径的邻域(超球体)内。返回叶节点D的父节点,如果父节点离目标点距离更近,则更新为新的当前最近邻。否则检查该父节点另一子节点对应的区域是否与目标点S的邻域相交。如果相交,则移动到该另一子节点进行最近邻搜索。如果均不满足,继续向上返回父节点。直到到达根节点结束。