1. K近邻算法

输入:训练数据集

T={(x1,y1),(x2,y2),⋯,(xN,yN)}

T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}
其中, xi∈χ⊆Rnx_i \in \chi \subseteq R^n为实例的特征向量, yi∈Y={c1,c2,⋯,cK}y_i\in Y=\{c_1,c_2,\cdots,c_K\}为实例的类别, i=1,2,⋯,N;i=1,2,\cdots,N;实例特征向量x;
输出:实例x所属的类y。
(1)根据给定的距离度量,在训练数据集T中找出与x最近邻的k个点,涵盖这k个点的x的邻域记做 Nk(x);N_k(x);
(2)在 Nk(x)N_k(x)中根据分类决策规则(如多数表决)决定x 的类别y:

y=argmaxcj∑xi∈Nk(x)I(yi=cj),i=1,2,⋯,N;j=1,2,⋯,K

y=arg \quad max_{c_j}\sum_{x_i\in N_k(x)}I(y_i=c_j),i=1,2,\cdots,N; j=1,2,\cdots,K
上式中,I为指示函数,当 yi=cjy_i=c_j时I为1,否则为0.

2 距离度量

设特徵空间χ\chi是n维实数向量空间RnR^n,xi,xj∈χ,xi=(x(1)i,x(2)i,⋯,x(n)i)T,x_i,x_j\in\chi,x_i=(x_i^{(1)},x_i^{(2)},\cdots,x_i^{(n)})^T, xj=(x(1)j,x(2)j,⋯,x(n)j)T,xi,xjx_j=(x_j^{(1)},x_j^{(2)},\cdots,x_j^{(n)})^T, x_i,x_j的距离定义为
闵可夫斯基距离(Minkowski distance):

Lp(xi,xj)=(∑l=1n|x(l)i−x(l)j|p)1p,p≥1

L_p(x_i,x_j)=(\sum_{l=1}^n|x_i^{(l)}-x_j^{(l)}|^p)^{\frac{1}{p}}, p\ge 1
欧氏距离(Euclidean distance):

L2(xi,xj)=(∑l=1n|x(l)i−x(l)j|2)12

L_2(x_i,x_j)=(\sum_{l=1}^n|x_i^{(l)}-x_j^{(l)}|^2)^{\frac{1}{2}}
曼哈顿距离(Manhattan distance):

L1(xi,xj)=∑l=1n|x(l)i−x(l)j|

L_1(x_i,x_j)=\sum_{l=1}^n|x_i^{(l)}-x_j^{(l)}|
切比雪夫距离(Chebyshev distance):

Linf(xi,xj)=maxl=1|x(l)i−x(l)j|

L_\inf(x_i,x_j)=max_{l=1}|x_i^{(l)}-x_j^{(l)}|

3. 分类决策规则

分类损失函数为0-1损失函数,分类函数为

f:Rn→{c1,c2,⋯,cK}

f: R^n\rightarrow\{c_1,c_2,\cdots,c_K\}
那么误分类的概率为

P(Y≠f(X))=1−P(Y=f(X))

P(Y\ne f(X))=1-P(Y=f(X))
对给定的实例 x∈χx\in\chi,其最近邻的k个训练实例点构成集合 Nk(x).N_k(x).如果涵盖 Nk(x)N_k(x)的区域的类别是 cjc_j,那么误分类率是

1k∑xi∈Nk(x)I(yi≠cj)=1−1k∑xi∈Nk(x)I(yi=cj)

\frac{1}{k}\sum_{x_i\in N_k(x)}I(y_i\ne c_j)=1-\frac{1}{k}\sum_{x_i\in N_k(x)}I(y_i=c_j)
要使经验风险最小,则使 ∑xi∈Nk(x)I(yi=cj)\sum_{xi\in N_k(x)}I(y_i=c_j)最大。

4. K近邻算法的实现:kd树

4.1 构造kd树

算法(构造平衡kd树):
输入:k维空间数据集T={x1,x2,⋯,xN}T=\{x_1,x_2,\cdots,x_N\},
其中xi=(x(1)i,x(2)i,⋯,x(k)i)T,i=1,2,⋯,N;x_i=(x_i^{(1)},x_i^{(2)},\cdots,x_i^{(k)})^T,i=1,2,\cdots,N;
输出: kd树。
(1)开始:构造根节点,根节点对应于包含T的k维空间的超矩形区域。选择x(1)x^{(1)}为坐标轴,以T中所有实例的x(1)x^{(1)}坐标的中位数为切分点,将根节点对应的超矩形区域切分成两个子区域。切分由通过切分点并与坐标轴x(1)x^{(1)}垂直的超平面实现。
\quad由根节点生成深度为1的左、右子节点:左子节点对应坐标x(1)x^{(1)}小于切分点的子区域,右子节点对应于坐标x(1)x^{(1)}大于切分点的子区域。
\quad将落在切分超平面上的实例点保存在根节点。
(2)重复:对深度为j的的节点,选择x(l)x^{(l)}为切分的坐标轴,l=j(modk)+1l=j(modk)+1,以该节点的去榆中所有实例的x(l)x^{(l)}坐标的中位数为切分点,将该节点对应的超矩形区域切分为两个子区域,切分由通过切分点并与坐标轴x(l)x^{(l)}垂直的超平面实现。
\quad由该节点生成深度为j+1的左、右子节点:左子节点对应坐标x(l)x^{(l)}小于切分点的子区域,右子节点对应于坐标x(l)x^{(l)}大于切分点的子区域。将落在切分超平面上的实例点保存在该节点。
(3)直到两个子区域没有实例存在时停止,从而形成kd树的区域划分。

4.2 搜索kd树

算法(用kd树的最近邻搜索):
输入:以构造的kd树;目标点x;
输出:x的最近邻。
(1)在kd树中找出包含目标点x的叶节点:从根节点出发,递归地乡下访问kd树。若目标点x当前维的坐标小于切分点的坐标,则移动到左子节点,否则移动到右子节点。直到子节点为叶节点为止。
(2)以此叶节点为“当前最近点”。
(3)递归地向上回退,在每个节点进行以下操作:
\quad(a)如果该节点保存的实例点比当前最近点距离目标点更近,则以该实例点为“当前最近点”。
\quad(b)当前最近点一定存在与该节点一个子节点对应的区域。检查该子节点的父节点的另一个子节点对应的区域是否有更近的点。具体地,检查另一子节点对应的区域是否与以目标点为球心,以目标点与“当前最近点”间的距离为半径的超球体相交。如果相交,可能在另一个子节点对应的区域内存在距离目标点更近的点,移动到另一个子节点。接着,递归进行最近邻搜索;如果不相交,向上回退。
(4)当回退到根节点时,搜索结束,最后的“当前最近点”即为x的最近邻点。

5. KNN算法的优缺点

优点:
- 简单有效
- 对数据的分布没有要求
- 训练阶段很快
缺点:
- 不产生模型,在发现特征之间关系上的能力有限
- 分类阶段很慢
- 需要大量的内存
- 名义变量(特征)和缺失数据需要额外处理

6. R语言中的KNN算法实现

KNN分类语法
应用class包中的函数knn():
创建分类器并进行预测:
p <- knn(train,test,class,k)
- train: 一个包含数值型训练数据的数据框
- test: 一个包含数值型测试数据的数据框
- class(cl): 包含训练数据每一行分类的一个因子向量
- k: 标识最近邻数目的一个整数
该函数返回一个因子向量,该向量含有测试数据框中的每一行的预测分类。

K近邻法算法(KNN)及其R实现相关推荐

  1. 机器学习(二):k近邻法(kNN)

    引言 一.k近邻法的三要素 1.距离度量 2.k值的选择 3.分类决策规则 二.k近邻算法及代码实现(python) 1.算法 2.代码实现(python) 三.k近邻法的实现:kd树 1.构造kd树 ...

  2. 经典机器学习算法:k近邻法

    基于李航教授的<统计学习方法>,本博客为个人学习笔记. 只记录精华,不讲废话,让看过或没看过的你和我短时间重新领悟该方法. k近邻法(knn)与k-means的比较: 两者共同点: 1.k ...

  3. 【机器学习】《统计学习方法》学习笔记 第三章 k近邻法

    第三章 k k k 近邻法(KNN) 多分类模型,思路是将最近的 N N N 个邻居的分类值中的多数作为自己的分类值.没有显式的学习过程. 三个基本要素:距离度量. k k k 值选择和分类决策规则. ...

  4. 机器学习-监督学习之分类算法:K近邻法 (K-Nearest Neighbor,KNN)

    目录 KNN概述 举个例子: K值选取 距离计算 曼哈顿距离,切比雪夫距离关系(相互转化) k-近邻(KNN)算法步骤 相关代码实现 简单实例:判断电影类别 创建数据集 数据可视化 分类测试 运行结果 ...

  5. 3. k 近邻法 k-NN

    1. k k k-NN k k k-NN 是一种基本的监督学习方法,它和感知机有些不同.具体地,它没有一个明确策略,也就是没有损失函数,因此它没有一个显式的学习过程. 1.1 模型概述 k k k-N ...

  6. R语言机器学习(1)-R的近邻分析—K近邻法

    转载请注明出处:https://blog.csdn.net/xiezhiliang22 对应书籍:<R数据挖掘>薛薇 中国人民大学出版社 1 前言 下面这几个部分主要讲述如何使用R语言来实 ...

  7. 机器学习基础 KNN(K近邻)算法及sklearn的基本使用(附带一些基础概念)

    文章目录 一. K-近邻算法简介 1. 什么是K-近邻算法 1.1 K-近邻算法(KNN)概念 1.2 电影类型分析 1.3 KNN算法流程总结 2. 小结 二.K近邻算法api初步使用 1. Sci ...

  8. K近邻法(KNN)原理小结

    K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...

  9. K 近邻法(K-Nearest Neighbor, K-NN)

    文章目录 1. k近邻算法 2. k近邻模型 2.1 模型 2.2 距离度量 2.2.1 距离计算代码 Python 2.3 kkk 值的选择 2.4 分类决策规则 3. 实现方法, kd树 3.1 ...

最新文章

  1. Android ActionBarDrawerToggle、DrawerLayout、ActionBar 结合
  2. mysql忘记密码重置
  3. 我对变量产生了这些想法
  4. Android真机运行错误INSTALL_FAILED_MEDIA_UNAVAILABLE
  5. 计算机科学与应用论文的素材,计算机专业学位论文范文最新资料汇集
  6. java machine 报错_Eclipse启动时报错:No java virtual machine
  7. Javascript覆盖率(jstd)报表解析Maven插件
  8. java 并发 面试_Java 并发基础常见面试题总结
  9. 大数据分析应注意哪些问题
  10. 给你个选择Mac的理由,浅谈Macos系统的优点
  11. python天眼查爬虫_学习Python3 天眼查 爬虫
  12. 用于视力恢复的脑机接口综述(一)
  13. 恢复win7 exe文件打开方式?
  14. 【第三篇:利用ChatGPT编写贪食蛇小游戏】
  15. 对话庄表伟:开源第一课
  16. C:exit(0),_exit(0),exit(1),exit(-1)作用与区别
  17. Java多线程之线程池的参数和配置
  18. 推荐一个好玩网站,黑白照片上色、人脸识别都不是问题!
  19. 张欲莎-老公,不要停。。。
  20. ThickBox 3.1参数详细解释

热门文章

  1. 没想到,中国超融合市场第一竟然是它
  2. 3D游戏编程实践——PD 过河游戏智能帮助实现
  3. springboot整合mybatis实现省市区三级查询
  4. Proxmox周期掉线 网卡驱动异常修复
  5. 【财富空间】陈春花:企业持续成长的先决条件是领导者具有经营的意志力
  6. 微信活动方案策划,投放渠道有哪些?
  7. 高性能计算GPU解决方案系列教程三--高性能计算集群测试程序
  8. python 阈值分割 给黑白图像上伪彩色
  9. 755. 平方矩阵 III
  10. 7个最佳餐厅应用模板