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. 为什么获取crm服务器信息失败,为 Outlook 配置 Microsoft Dynamics CRM 客户端时出现 与 Microsoft Dynamics CRM 服务器通信时出现问题 错误...
  2. 计划策略的配置参数(2)
  3. 在终端执行 Python 代码的 6 种方法,原来还能这样!
  4. Python将JSON格式数据转换为SQL语句以便导入MySQL数据库
  5. Python稳基修炼的经典案例7(计算机二级、初学者必须掌握的例题)
  6. java -jar 指定端口_「Linux命令」-Java程序员需要掌握的10个命令
  7. 毕啸南专栏 | 对话李开复:AI科学家的转型之路
  8. python如何写代码_如何写出优雅的Python代码?
  9. python面试资格确认_Python面试必须要看的15个问题
  10. python的数值类型和运算符_python学习笔记之数据类型---数字类型及运算符
  11. 关于翻译书籍版权的讨论
  12. MSDN URL 重写
  13. 人工智能中常用的词汇
  14. informatic动态变量的创建和使用
  15. 如何批量修改文件夹名称排序?
  16. 6410 UBOOT 支持SD/SDHC卡启动 FAT32文件系统 yaffs2烧录 图片显示烧录状态
  17. axure中继器求和_axure中继器使用方法图文详解
  18. js 校验手机号码格式
  19. 解决高度塌陷的几种方法
  20. C#实现全盘扫描,找到符合要求的文件,并把路径写入到TXT中

热门文章

  1. JDK 8 64bit 下载和安装教程
  2. 安卓教程----第一行代码学习笔记
  3. s32k144 芯片中关于软件看门狗(wdog)模块的使用
  4. numpy百题斩(二)
  5. 乐视电视的病毒式增速效应与“可怕”现象
  6. 深度学习tensorflow之手势识别历史使用
  7. 使用pinia持久化插件时踩过的坑
  8. 一文项目阶段性评审报告及常见问题【附实例模板】
  9. 【Kubernetes 企业项目实战】07、最新一代微服务网格 Istio 入门到企业实战(下)
  10. 监控电池电量和充电状态