knn算法介绍与参数调优.docx
《knn算法介绍与参数调优.docx》由会员分享,可在线阅读,更多相关《knn算法介绍与参数调优.docx(12页珍藏版)》请在第一文库网上搜索。
1、KNN算法介绍与参数调优K近邻法(k-nearestneighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用。比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出了.这里就运用了KNN的思想。KNN方法既可以做分类,也可以做回归,这点和决策树算法相同.KNN做回归和分类的主要区别在于最后做预测时候的决策方式不同。KNN做分类预测时,一般是选择多数表决法,即训练集里和预测的样本特征最近的K个样本,预测为里面有最多类别数的类别。而KNN做回归时,一般是选择平均法,即最近的K个样本的样本输出的平均值作为回归预测值.由于两者区别不大,虽然本
2、文主要是讲解KNN的分类方法,但思想对KNN的回归方法也适用。由于SCikit-Iearn里只使用了蛮力实现(brute-f。心),KD树实现(KDTree)和球树(BaImee)实现,本文只讨论这几种算法的实现原理。1. KNN算法三要素KNN算法我们主要要考虑三个重要的要素,对于固定的训练集,只要这三点确定了,算法的预测方式也就决定了。这三个最终的要素是k值的选取,距离度量的方式和分类决策规则。对于分类决策规则,一般都是使用前面提到的多数表决法。所以我们重点是关注与k值的选惭口距离的度量方式。对于k值的选择,没有一个固定的经验,一般根据样本的分布,选择一个较小的值,可以通过交叉验证选择T合
3、适的k值。选取小的k值,就相当于用较小的领域中的训练实例进行预测,训练误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是泛化误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;选霞大的k值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少泛化误差,但缺点是训练误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。一个极端是k等于样本数m,则完全没有分类,此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的类,模型过于简单。对于距离的度量,我们
4、有很多的距离度量方式,但是最常用的是欧式距离,即对于两个n维向量X和y,两者的欧式距离定义为:D(,y)=E(Xi-M.大多数情况下,欧式距离可以满足我们的需求,我们不需要再去操心距离的度量。当然我们也可以用他的距离度量方式。比如曼哈顿距离,定义为:更加通用点,比如闵可夫斯基距离(MinkOWSkiDistance)r定义为:可以看出,欧式距离是闵可夫斯基距离在p=2时的特例,而曼哈顿距离是P=I时的特例。2. KNN算法蛮力实现从本节起,我们开始讨论KNN算法的实现方式。首先我们看看最想当然的方式。既然我们要找到k个最近的邻居来做预测,那么我们只需要计算预测样本和所有训练集中的样本的距离,然
5、后计算出最小的k个距离即可,接着多数表决,很容易做出预测。这个方法的确简单直接,在样本量少,样本特征少的时候有效.但是在实际运用中很多时候用不上,为什么呢?因为我们经常碰到样本的特征数有上千以上,样本量有几十万以上,如果我们这要去预测少量的测试集样本,算法的时间效率很成问题。因此,这个方法我们一般称之为蛮力实现.比较适合于少量样本的简单模型的时候用。既然蛮力实现在特征多,样本多的时候很有局限性,那么我们有没有其他的好办法呢?有!这里我们讲解两种办法,一个是KD树实现,一个是球树实现。3. KNN算法之KD树实现原理KD树算法没有一开始就尝试对测试样本分类,而是先对训练集建模,建立的模型就是KD
6、树,建好了模型再对测试集做预测。所谓的KD树就是K个特征维度的树,注意这里的K和KNN中的K的意思不同。KNN中的K代表最近的K个样本,KD树中的K代表样本特征的维数。为了防止混淆,后面我们称特征维数为nKD树算法包括三步,第一步是建树,第二部是搜索最近邻,最后一步是预测。1.1KD树的建立我们首先来看建树的方法。KD树建树采用的是从m个样本的n维特征中,分别计算n个特征的取值的方差,用方差最大的第k维特征n1t来作为根节点.对于这个特征,我们选择特征队的取值的中位数nw对应的样本作为划分点,对于所有第k维特征的取值小于Iikv的样本,我们划入左子树,对于第k维特征的取值大于等于n1tv的样本
7、,我们划入右子树,对于左子树和右子树,我们采用和刚才同样的办法来找方差最大的特征来做更节点,递归的生成KD树。具体流程如下图:比如我们有二维样本6个f(2,3),(5,4),(9,6),(4,7),(8,1),(7,2),构建kd树的具体步骤为:1)找到划分的特征。6个数据点在X,y维度上的数据方差分别为6.97,5.37,所以在X轴上方差更大,用第1维特征建树。2 )确定划分点(7,2),根据X维上的值将数据排序,6个数据的中值(所谓中值,即中间大小的值)为7,所以划分点的数据是(7,21这样,该节点的分割超平面就是通过(7,2班垂直于:划分点维度的直线x=7;3 )确定左子空间和右子空间。
8、分割超平面x=7将整个空间分为两部分:x=7的部分为左子空间,包含3个节点=(2,3),(5,4),(4,7);另一部分为右子空间,包含2个节点=(9,6),(8,1)。4 )用同样的办法划分左子树的节点(2,3),(5,4),(4,7)和右子树的节点(9,6),(8,1).最终得到KD树。最后得到的KD树如下:1.21.3 KD树搜索最近邻当我们生成KD树以后,就可以去预测测试集里面的样本目标点了。对于一个目标点,我们首先在KD树里面找到包含目标点的叶子节点.以目标点为圆心,以目标点到叶子节点样本实例的距离为半径,得到一个超球体,最近邻的点一定在这个超球体内部。然后返回叶子节点的父节点,检有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- knn 算法 介绍 参数