首发于 TalkingData—大数据
如何优雅地实现KNN搜索

如何优雅地实现KNN搜索

我们知道K近邻法(K-Nearest Neighbor, KNN)是一种基本的机器学习算法,早在1968年就被提出。KNN算法简单、直观,是最著名的“惰性学习”算法,不具有显示的学习过程。

正因为其算法的思想简单,我们更加关注KNN算法实现的优化。最简单粗暴的就是线性扫描,但随着样本量的放大,其计算量也会成倍放大,因此本文介绍并实现一种优雅的优化搜索方法——KD树。

K近邻推导与KD树过程

我们可以用文字简单描述下KNN算法:给定一个训练数据集T,对于新的目标实例x,我们在训练集T中找到与实例x最邻近的k个实例,这k个实例大多属于哪一类,目标实例x就被分为这个类。


用数学公式我们表达如下:

给定训练数据集T:

根据给定的新的目标实例Xtarget,和距离度量方法,我们可以在T中找到k个与Xtarget最邻近的实例点,我们将这k个近邻点的集合记作Nk:

那目标实例的类别Ytarget为:

此处的I为指数函数,当yi=cj时为1,否则为0。

理解了K近邻的概念后,我们再来看下K近邻的三个基本要素——距离度量、k值选择和分类决策规则。

特征空间中两个实例点的距离是两个实例点相似度的反映,K近邻常用的是欧式距离,也可以是更一般的Lp距离(Lp distance)。

当p=1时,被称为曼哈顿距离(Manhattan distance),即:

当p=2时,被称为欧式距离(Euclidean distance),即:

k值的选择会对K近邻算法的结果产生重大影响。

如果选择较小的k值,则模型相当于用了较小的邻域来预测结果,那对噪音点会更加敏感,且模型的复杂度会上升,容易发生过拟合。最典型的就是k=1时,模型就是k最近邻,一旦某个最近邻数据点是噪音,则分类结果就肯定会出现错误。

如果选择较大的k值,又会用较大的区域来预测结果,则距离较远的实例点也会影响到最终的分类结果,显然也是不合理的。最典型的就是k=N时,不管输入什么,分类结果总是训练数据集中分类实例点最多的一类。

在应用中,k一般取一个比较小的值,通常采用交叉验证法来选取最优的k值。

K近邻中的分类决策规则往往是多数表决,即由输入实例的k个邻近的训练实例中的多数类决定输入实例的类。多数表决规则可以等价于经验风险最小化。

若分类函数为f(x),那么误分类的概率是:

对于给定的实例x和k个近邻点的集合Nk,其误分类的概率是:

可见要使经验风险最小化,就要使指数函数I最大化,所以多数表决规则等价于经验风险最小化。

KD树的实现

构造KD树

通常,依次选择坐标轴对空间切分,选择训练实例点在选定坐标轴上的中位数(median)为切分点,这样得到的KD树是平衡的,但是平衡的KD树搜索时的效率未必是最优的。

切分超平面左侧区域对应的是小于选定坐标轴的实例点,右侧区域对应的是大于选定坐标轴的实例点,将落在切分超平面上的实例点保存在根结点。

当左右两个子区域没有实例存在时停止划分,从而形成KD树的区域划分。

举个例子:给定二维数据集T={(2,3), (5,4), (9,6), (4,7), (8,1), (7,2)},进行区域划分。

搜索KD树

利用KD树可以省去对大部分数据点的搜索,从而减少搜索的计算量,以最近邻为例:给定一个目标点,搜索其最近邻,首先找到包含目标点的叶结点;然后从该叶结点出发,依次回退到父结点;不断查找与目标点最邻近的节点,当确定不可能存在更近的结点时终止。

以目标点(3, 3.5)为例,在上面构造树的基础上进行搜索。

以上是K近邻与KD树的推导部分。

Python实现K近邻与KD树

提前说明下,这里写的KD树实现K近邻算法,其最终结果并不是输出Y值,而是输出与目标样例近邻的前K个训练数据中的样例,这样可以清楚地看到KD树的运行轨迹。得到了K近邻,要输出最终的结果也是易如反掌,自己加一段投票策略即可。


代码写完,我们用鸢尾花数据集来测试下,KD树找到的k个最近邻的样本是否准确。

K=1时,

K=2时,

K=3时,

K=5时,

K=10时,


作者:TalkingData金融咨询团队 张伟
转载请联系获取授权

深圳SEO优化公司上饶网站推广推荐六安网站设计价格昌吉至尊标王公司阜阳关键词排名包年推广公司东莞网站改版价格黔南模板推广哪家好醴陵外贸网站制作价格淮南企业网站设计报价鞍山企业网站设计价格滨州模板制作公司龙华网站排名优化报价中卫设计公司网站推荐巢湖营销型网站建设公司垦利网站推广方案公司连云港seo排名价格银川网站推广方案长沙网站优化软件报价茂名网站推广方案价格三亚seo排名哪家好潮州营销型网站建设多少钱吉祥网站推广工具公司吉林网站建设设计公司淄博企业网站制作报价郑州企业网站制作报价兴安盟网站定制公司岳阳关键词排名包年推广报价东营网站定制推荐延安至尊标王推荐本溪阿里店铺运营多少钱坑梓seo网站推广歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化