1. 算法简介
k近邻法(k-nearest neighbor)是一种基本分类与回归方法。
算法思想:
给定一个训练集,其中的实例类别已定,分类时,对新的实例,根据其k个最邻近的训练实例的类别,通过多数表决等方式进行预测。(给定一个训练集,对于新输入的实例,在训练数据集中找到与该实例最近邻的k个实例,这k个实例的多数属于某个类,就把该实例分为这个类。)
因此,k近邻法不具有显示学习过程。knn实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。
3. k近邻模型
knn使用的模型对应于基于训练数据集对特征空间的一个划分,其模型组成三要素:
3.1 距离度量
如曼哈顿距离、欧氏距离等;
3.2 k值的选择
选择不同的k值会对knn的结果产生很大的影响。k值的减小意味着整体模型变得复杂(对噪声点特别敏感),容易发生过拟合,k值的增大意味着整体模型变得简单。
k值的选择反映了对近似误差与估计误差之间的权衡;在应用中,k一般取一个比较小的数值,通常采用交叉验证来选取最优的k值。
3.3 分类决策规则
多数投票表决,对应于经验风险最小化。
4. kd树
KNN的实现需要考虑如何快速搜索k个最近邻点,kd树便是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。kd树是二叉树,表示对k维空间的一个划分。
4.1 kd树的构造
构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域。kd树的每个结点对应于一个k维超矩形区域。
4.2 kd树的搜索
利用kd树可以省去对大部分数据点的搜索,从而减少搜索的计算量。如果实例点是随机分布的,kd树搜索的平均计算复杂度为O(logN)。
kd树更适合用于训练实例数远大于空间维数时的k近邻搜索。当空间维数接近训练实例数时,它的效率会迅速下降,几乎接近线性扫描。