目录
一、KNN近邻算法思想
二、KNN模型三大要素
三、KNN算法实现步骤
四、KNN算法的KD树实现
五、总结
一、k近邻法(k-nearest neighbor,k-NN)是一种基本的分类与回归方法。以分类问题为例,k近邻的输入为实例的特征向量,对应于特征向量的点;输出为实例的类别,可以取多类。k近邻法假设给定一个训练数据集,其中的实例类别已定。分类时,对新的实例,根据其k个最近邻的训练实例的类别,通过多数表决等方式进行预测。因此,k近邻法不具有显示的学习过程。k近邻法实际是利用训练数据集对特征向量空间进行划分,并作为其分类的“模型” 。

二、模型三要素
1、距离度量
a.欧氏距离:也叫欧几里得距离,是最常用的距离公式。在二维空间中,两点间的欧氏距离:

同理可得,两点在n维空间中的距离:

b.曼哈顿距离:在几何空间中用的较多。以下图为例,绿色代表两点间的欧氏距离,红色和黄色线为两点的曼哈顿距离。所以曼哈顿距离等于两个点在坐标系上绝对轴距总和。公式表示为:


c.闵可夫斯基距离:不是一个距离,而是一组距离的定义。对于n维空间的两个点x(x1,x2....xn)和y(y1,y2...yn),x和y两点之间的闵可夫斯基距离为:

其中p代表空间的维数,当p=1时,就是曼哈顿距离;当p=2时,就是欧氏距离;当p-->时,就是切比雪夫距离。
d.切比雪夫距离:就是两点坐标数值差的绝对值的最大值,用数学公式表示为:max(|x1-y1|,|x2-y2|)。
e.余弦距离:实际上是两个向量的夹角,是在方向上计算两者之间的差异,对绝对数值不敏感。在兴趣相关性比较上,角度关系比距离关系更重要, 因此余弦距离可以用于衡量用户对内容兴趣的区分度。比如:搜索引擎搜索关键词,它还会推荐其他相关搜索,这些推荐的关键词就是采用余弦距离计算得出的。
2、k值选择
如果K值比较小,就相当于未分类物体与它邻域非常接近才行。这样产生一个问题就是,如果邻域点是个噪声点,那么未分类物体的分类也会产生误差,这样KNN分类就会产生过拟合。
如果K值比较大,相当于距离过远的点也会对未知物体的分类产生影响,虽然这种方式鲁棒性强,但不足也很明显,会产生欠拟合情况,也就是没有把未分类物体真正分类出来。
所以K值是个实践的结果,并非事先确定的。在工程上一般采用交叉验证法来取K值。
3、分类决策规则
k近邻中分类决策规则往往是多数表决,即由输入实例的k个近邻的训练实例中的多数类决定输入实例的类。
多数表决规则解释如下:如果分类的损失函数为0-1损失函数,分类函数为:

那么误分类概率是

例如:对给定的实例x,其最近邻的k个训练实例点构成集合Nk(x)。如果涵盖Nk(x)的区域的类别是Cj,那么误分类率是

要使误分类率最小即经验风险最小,就要使

最大,所以多数表决规则等价于经验风险最小化。
三、K-NN算法实现步骤
a、将一个物体表示成向量/矩阵/张量形式(特征工程)。
b、给每个物体打标签。
c、计算两个物体之间的距离(相似度)。
d、 选择合适的K值(k对算法的影响),寻找算法的决策边界。
四、KNN算法的KD树实现
KNN算法在数据量较大的情况下,时间复杂度为O(n),计算量过大。KD树实际就是一种平衡二叉树的数据结构,可将时间复杂度降为O(logn)。
五、总结
1、k近邻是基本且简单的分类与回归方法。k近邻的基本做法是:对给定的训练实例点和输入实例点,首先确定输入实例点的k个最近邻训练实例点,然后利用这k个训练实例点的类的多数来预测输入实例点的类。
2、k近邻模型对应于基于训练数据集对特征向量空间的一个划分。k近邻模型中当训练集、距离度量、k值及分类规则确定后,其结果唯一确定。
3、k近邻三要素:距离度量、k值选择和分类决策规则。距离度量一般用欧氏距离公式,k值是个实践的经验值,k值越小模型越复杂,反之模型越简单。k值的选择反应了对近似误差与估计误差之间的权衡,通常由交叉验证法选择最优的K。常用的分类决策规则是多数表决,对应于风险最小化。
4、k近邻算法当数据集过大时,时间复杂度高,一般使用KD树(二叉树)来降低时间复杂度。
网友评论