K近邻算法(KNN)

使用场景

KNN算法,是一种根据周边的K个相近的数据判断本身数据特点的一种算法, 近朱者赤近墨者黑。其可以运用于回归也可以运用于分类,两者的区别只是在最后进行预测时有区别。例如分类问题,一般使用K中占最多数的类作于预测数据的类别;回归问题一般使用平均的方式,K个数据的平均值作为最后预测数据的值。

原理

KNN算法主要涉及三个方面的内容,K值的选择、距离度量和预测的策略。
K只选择,可以使用交叉验证的方式,选择数据集合中较为适合的K值,K值越小,模型越复杂,极端的情况K=1,即最近的那个数据和需要预测数据一样的类别,这样容易出现过拟合的情况;K值越大,模型月简单,极端的情况是K就是整个数据集合的数量,这样就是在整个数据集中处理,相当于没有训练,出现欠拟合的情况;距离的度量有欧氏距离,曼哈顿距离等,这些都是闵可夫斯基距离的特例
D ( x , y ) = ( ∣ x 1 − y 1 ∣ ) p + ( ∣ x 2 − y 2 ∣ ) p + . . . + ( ∣ x n − y n ∣ ) p p = ∑ i = 1 n ( ∣ x i − y i ∣ ) p p D(x,y) =\sqrt[p]{(|x_1-y_1|)^p + (|x_2-y_2|)^p + ... + (|x_n-y_n|)^p} =\sqrt[p]{\sum\limits_{i=1}^{n}(|x_i-y_i|)^p} D(x,y)=p(x1y1)p+(x2y2)p+...+(xnyn)p =pi=1n(xiyi)p
曼哈顿距离p取值为1,欧氏距离p取值为2
预测根据分类问题和回归问题的不同有不同的预测策略。

实现方案

蛮力实现

KNN寻找与需要预测数据的K个距离最近的数据,直接使用暴力的方式,即每次遍历所有的数据并计算出相应的距离,然后排序寻找K个距离最近的数据,这样的方法当数据量小时还行,当数据量大且每个样本的属性很多的时候,计算量就变得非常巨大,这样就需要更好的实现方式,下面介绍使用树的思想对KNN进行实现

KD树实现

KD实现树,分为建树->选最近的临界点->预测三个过程
建树
建树是一个递归的过程,选择方差最大的树形作为树分裂的节点,使用该节点中中位数作为分割的点,将数据分成两个部分,然后继续递归进行
选择最近的临界点
首先对需要预测的数据进行在树中查找,并将查找的路径记录下来,计算路径中的距离,记录其中最近的距离,然后回溯将没处理节点中的数据进行查找,若该节点的距离小于记录的数据,那么更新最近的点,再回溯,若已经找到了最近的点,且以当前的最近距离为半径的圆与分开的树没有交集,那么久停止查找。
预测
预测的过程就是寻找K词最近临界点的过程,选择临近点后将该节点进行标注,下次不再进行选择。

球树实现

球树的实现过程与KD树类似,建树->选最近的临界点->预测,之间只有建树不同
建树的过程是,首先构建一个球面,这个球可以将所有的数据包含进去,且该球是最小的,选择球上的一点,在选择与该点最远的点,将其他的点根据两个点之间的距离分成两拨数据,对两拨数据执行上层建立球面的过程,然后递归进行。
选择最近临界点与KD树实现类似,根据建成的树逐级寻找。

使用方法

直接时候用sklearn提供的库,可实现分类和回归的功能

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值