K邻近算法的伪代码

机器学习实战 李锐等译

对未知类别属性的数据集的每一个点依次进行如下操作:
1.计算已知类别数据集中的点与当前点之间的距离;
2.按照距离递增次序排序
3.选取与当前点距离最小的k个点;
4.确定前k个点所在类别的出现频率;
5.返回前k个点出现频率最高的类别作为当前点的预测分类

python源码:

import numpy as np
import mathdef classify0(inX,dataSet,labels,k):"""inX:初始值,用于分类的输入向量;dataSet :训练数据集,labels:标签向量k:表示用于选择最近邻居的数目"""dataSetSize=dataSet.shape[0]diffMat=np.tile(inX,(dataSetSize,1))-dataSet #np.tile先将初始向量扩展成和dataSet形状相同的矩阵sqDiffMat=diffMat**2sqDistances=sqDiffMat.sum(axis=1)distances=sqDistances**0.5sortedDistIndicies=distances.argsort()#从小到大排序classCount={}for i in range(k):votelLabel=labels[sortedDistIndicies[i]] #确定前k个距离最小的元素classCount[votelLabel]=classCount.get(votelLabel,0)+1#最小元素的类,键值对应的为频率sortedClassCount=sorted(classCount.items(),key=lambda x:x[1],reverse=True)#从大到小排序return sortedClassCount[0][0]

注:

#np.argsort()理解
rawArray=np.array([1.48,1.41,0,0.1])
#rawArray_Index: 0 1 2 3
#sortedRawArray=array([0,0.1,1.41,1.48])
sortedRawArray_index: 2 3 1 0

统计学习方法 李航著
K近邻模型的三个基本要素:距离度量、k值的选择、和分类规则决定。

  • 距离度量。

  • k值选择。
    K值较小:相当于用较小的邻域中的训练实例进行预测,学习的近似误差会减小,但缺点是学习的估计误差会增大,预测结果会对近邻的实例点非常敏感。如果近邻点恰巧是噪声,预测就会出错。即k的减小会让模型变得复杂,容易发生过拟合。
    K值较大:相当于用较大邻域中的实例进行预测,其优点是较少学习的估计误差。但是缺点是学习的近似误差会增大。
    K值的选择,一般选取比较小的值,通常采用交叉验证法来选择最优的k值。

  • 分类规则。
    多数表决规则:由输入实例中的k个邻近的训练实例中的多数类决定输入实例的类。如:分类函数是0-1损失函数,要使误分率最小即经验风险最小。多数表决规则等价于经验风险最小。

k近邻法最简单的实现方法是线性扫描,当训练集很大时,计算比较耗时,这种方法不可行。

k邻近的实现——kd树


Kd树是一种对k维空间中的实例点记性存储以便其进行快速检索的树形数据结构。
Kd树是二叉树,表示对k维空间的一个划分,构造kd树相当于不断地用垂直于坐标轴的平面将k维空间划分,构成一系列的k维超矩形区域。Kd树的每一个结点对应于k维超矩形区域。

算法:

算法:构造平衡的kd树
输入:k维空间数据集 ,其中 ;
输出:Kd树
(1).开始:构造根结点,根结点对应于包含T的k维空间的超矩形区域。
选择x(l) 为坐标轴,以T中的所有实例的 x(l)坐标的中位数为切分点,将根结点对应的超矩形区域切分为两个子区域。切分由通过切分点并与坐标轴 垂直的超平面实现。
由根结点生成深度为1的左、右子结点:左子结点对应坐标x(l) 小于切分点的子区域,右子结点对应于x(l) 大于切分点的子区域。(2)重复:对深度为j的结点,选择x(l) 为切分的坐标轴, l=j(mod k)+1以该结点的区域中所有实例的 坐标的中位数为切分点,将该结点对应的超矩形区域分为两个子区域,切分由通过切分点并与坐标轴 垂直的超平面实现。
由根结点生成深度为(j+1)的左、右子结点:左子结点对应坐标 小于切分点的子区域,右子结点对应于 大于切分点的子区域。
(3).直到两个子区域再没有实例点存在时停止,从而形成kd树的区域划分。

关于kd树的相关问题梳理:

  • 子空间划分维度的选择:
    根据l=j(mod k)+1或者最大方差法(使用较多);
    第一种方法的解释

  • kd树中常用案例(统计学习方法 p42 例3.2)中位数为7。
    中位数为7的解释
    案例的每一步具体解释

  • KD树的详解及KD树最近邻算法

  • KD树的快速理解

kmeans与k近邻算法的区别和联系。

kmeans是无监督的聚类算法;k近邻是有监督的分类和回归算法。

参考文献:
kNN与K-means的比较
机器学习中 K近邻法(knn)与k-means的区别

k近邻法的实现(kd树)-相关问题梳理相关推荐

  1. k近邻算法——kd树

    一.kd树概念   kd树(K-Dimensional Tree)是一种对K维空间中的实例点进行存储以便对其进行快速检索的树形数据结构.   kd树是二叉树,表示对K维空间的一个划分(partitio ...

  2. 机器学习 K近邻之KD树基本概念、绘制KD树

    K近邻算法回顾 K近邻法模型的三要素: 距离度量:  K值的选取:K值的选取一般可以采用交叉验证法,且一般小于训练集样本量的平方根 分类决策规则:多数表决等价于误分类数最小 关于K近邻的问题: 1.简 ...

  3. 机器学习 K近邻之KD树 搜索KD树

    思想:K近邻搜索 1.寻找"当前最近点" 寻找最近邻的子节点作为目标的"当前最近点" 2.回溯 以目标点和"当前最近点"的距离沿树根部进行回 ...

  4. 机器学习基础(四十三)—— kd 树( k 近邻法的实现)

    实现 k 近邻法时,主要考虑的问题是如何对训练数据进行快速 k 近邻搜索,这点在如下的两种情况时,显得尤为必要: (1)特征空间的维度大 (2)训练数据的容量很大时 k 近邻法的最简单的实现是现行扫描 ...

  5. java实现k 近邻算法_K近邻算法哪家强?KDTree、Annoy、HNSW原理和使用方法介绍

    1.什么是K近邻算法 K近邻算法(KNN)是一种常用的分类和回归方法,它的基本思想是从训练集中寻找和输入样本最相似的k个样本,如果这k个样本中的大多数属于某一个类别,则输入的样本也属于这个类别. 关于 ...

  6. 从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

    原文出自:http://blog.csdn.net/v_JULY_v/article/details/8203674 前言 前两日,在微博上说:"到今天为止,我至少亏欠了3篇文章待写:1.K ...

  7. 【转】从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

    最近在看<统计学习方法>,发现这么一篇好文章,与大家分享 转自:http://blog.csdn.net/v_july_v/article/details/8203674?reload 前 ...

  8. ***K近邻Survey-Distance总结

    (一):漫谈knn:原文链接:http://www.kankanews.com/ICkengine/archives/103938.shtml   看引擎...有点对不起作者,不过没有办法,联系不到啊 ...

  9. 机器学习算法系列之K近邻算法

    本系列机器学习的文章打算从机器学习算法的一些理论知识.python实现该算法和调一些该算法的相应包来实现. 目录 K近邻算法 一.K近邻算法原理 k近邻算法 通俗解释 近邻距离的度量 k值的选择 KN ...

最新文章

  1. 笔记 - ES6 - 学前浅析
  2. Oracle 基础篇 --- 表空间的操作
  3. 嵌入式jetty的HTTP实现
  4. unittest单元测试框架总结
  5. linux制作ext2磁盘镜像,linux--创建镜像挂载
  6. cactus java,使用cactus实现对servlet进行单元测试
  7. android 判断ip地址合法
  8. URP中的2D Light光照在移动端不生效的问题
  9. Stateless 3.0——.NET Core上的状态机库
  10. asp.net(c#) 将dbf转换为xls或wps,并将数据的列名改成中文;并判断本机是否安装office2003,2007和wps2007,2010...
  11. mysql dql_Mysql中的DQL查询语句
  12. 如何安全使用计算机,如何安全的使用计算机
  13. gitlab protected branch
  14. 设计模式之工厂方法的重载
  15. EXCEL VBA 入门与实用例子
  16. asp毕业设计—— 基于asp+access的网上论坛设计与实现(毕业论文+程序源码)——网上论坛
  17. 结构体数组定义时初始化
  18. Linux 启动管理(详细版)
  19. 已知销售额怎么计算成本_计算成本根据销售额怎么样推算出成本,举例, – 手机爱问...
  20. 【Python】Python网络爬虫-电视剧《平凡的荣耀》数据爬取与分析

热门文章

  1. 苹果:确认开始在印度生产iPhone 13
  2. 腾讯视频已上线超前点播选集解锁
  3. 中信证券:维持贝壳“买入”的投资评级
  4. 连CEO都不香了?这些互联网大佬接连辞任
  5. 阿里健康上线新冠核酸检测服务:本周覆盖北京武汉等38城
  6. 即将开播!联想可能成为罗永浩直播带货的首批合作者
  7. OPPO Reno3系列旗舰官宣:骁龙765G+正反双曲面设计
  8. 漂亮的不太像手机!三星Galaxy S11最新渲染图曝光
  9. 中国移动老功臣退休致辞:工作结束了 人生没结束
  10. 一加代言人小罗伯特唐尼竟用华为P30 Pro发微博,当然是笑着原谅他