k近邻法原理

k近邻法(k-nearest neighbor)用于分类时,给定一个训练数据集,对于新输入的实例,计算得出与该实例距离最近的k个样本,由k个样本中的大多数决定出该实例属于哪一类。

假设数据集

其中为样本的特征向量,为类别,判断实例x所属的类别y。

我们知道相同类别的样本点总是有着相似的特征值,表现在多维空间中就是有着相近的距离,因此我们可以通过判断与该实例距离相近的样本点大多是哪一类别,就可以将该实例划分到哪一类别中。

在该过程中,涉及到两个关键问题,一个是距离,一个是选取几个样本点进行判断,也即k值得选取。

(1)关于距离:

我们在初高中时学习过平面直角坐标系或者空间直角坐标系时,学习过两点间距离公式,各坐标差值的平方和,在求其算数平方根就是两点间距离,事实上关于距离得度量有着更广泛的定义。

闵可夫斯基距离:

其中x,y表示空间中的两个点,表示某一轴上的值。

当p=1时,

就是曼哈顿距离,指各个坐标距离之和。

当p=2时,

就是我们熟悉的欧氏距离,在二维和三维空间中就是两点间距离公式。

当p→∞时,

就是切比雪夫距离,指各个坐标距离的最大值,这是因为

(2)关于k值的选择

k过大过小都会影响预测的准确率。

当k过小时,预测结果可能会受到噪声的影响,如图:红色和蓝色点分别代表两个不同颜色类别,绿色是待预测的点,如果选择k=1,则会将其划分为红色类别,而事实上属于蓝色类别,由此导致分类错误。

当k过大时,样本点数量较少的类别可能会被忽略掉,如图:红色和蓝色点分别代表两个不同颜色类别,绿色是待预测的点,如果选择k=20,由于红色类别只有8个点,无论绿点在哪里都会将其划分为蓝色类别,而事实上属于红色类别,会导致分类错误。

在选择k值时,可以适当选择几个k值进行预测,然后计算准确率并进行比较,然后选出最合适的k值。

手算示例

我们从鸢尾花数据集中的三个类别各选取十个样本点为示例,选取欧式距离作为度量,k=5,进行手算演示。

数据集:

Setal_length

Setal_width

Petal_length

Petal_width

class

y

0

5.1

3.5

1.4

0.2

0

1

4.9

3.0

1.4

0.2

0

2

4.7

3.2

1.3

0.2

0

3

4.6

3.1

1.5

0.2

0

4

5.0

3.6

1.4

0.2

0

5

5.4

3.9

1.7

0.4

0

6

4.6

3.4

1.4

0.3

0

7

5.0

3.4

1.5

0.2

0

8

4.4

2.9

1.4

0.2

0

9

4.9

3.1

1.5

0.1

0

10

5.9

3.2

4.8

1.8

1

11

6.1

2.8

4.0

1.3

1

12

6.3

2.5

4.9

1.5

1

12

6.1

2.8

4.7

1.2

1

14

6.4

2.9

4.3

1.3

1

15

6.6

3.0

4.4

1.4

1

16

6.8

2.8

4.8

1.4

1

17

6.7

3.0

5.0

1.7

1

18

6.0

2.9

4.5

1.5

1

19

5.7

2.6

3.5

1.0

1

20

6.9

3.2

5.7

2.3

2

21

5.6

2.8

4.9

2.0

2

22

7.7

2.8

6.7

2.0

2

23

6.3

2.7

4.9

1.8

2

24

6.7

3.3

5.7

2.1

2

25

7.2

3.2

6.0

1.8

2

26

6.2

2.8

4.8

1.8

2

27

6.1

3.0

4.9

1.8

2

28

6.4

2.8

5.6

2.1

2

29

7.2

3.0

5.8

1.6

2

待预测实例x:

Setal_length

Setal_width

Petal_length

Petal_width

class

5.5

4.2

1.4

0.2

距离公式:

其中,下标i表示第i个样本点,上标(j)表示第i个样本点的第j个特征

k值选择:k=5

依次将各样本带入公式计算距离:

同理可得:

计算与各点距离 排序后
D1 0.806  0 D6 0.480  0
D2 1.342  0 D5 0.781  0
D3 1.285  0 D1 0.806  0
D4 1.425  0 D8 0.949  0
D5 0.781  0 D7 1.208  0
D6 0.480  0 D10 1.261  0
D7 1.208  0 D3 1.285  0
D8 0.949  0 D2 1.342  0
D9 1.703  0 D4 1.425  0
D10 1.261  0 D9 1.703  0
D11 3.909  1 D20 2.766  1
D12 3.208  1 D12 3.208  1
D13 4.180  1 D15 3.481  1
D14 3.770  1 D16 3.618  1
D15 3.481  1 D19 3.639  1
D16 3.618  1 D14 3.770  1
D17 4.080  1 D11 3.909  1
D18 4.253  1 D27 4.071  2
D19 3.639  1 D28 4.076  2
D20 2.766  1 D17 4.080  1
D21 5.085  2 D22 4.179  2
D22 4.179  2 D13 4.180  1
D23 6.175  2 D24 4.207  2
D24 4.207  2 D18 4.253  1
D25 4.935  2 D29 4.901  2
D26 5.255  2 D25 4.935  2
D27 4.071  2 D30 5.065  2
D28 4.076  2 D21 5.085  2
D29 4.901  2 D26 5.255  2
D30 5.065  2 D23 6.175  2

由此可以判断,待测实例类别y=0

挖掘原理|k近邻法原理相关推荐

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

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

  2. 《统计学习方法》读书笔记——K近邻法(原理+代码实现)

    传送门 <统计学习方法>读书笔记--机器学习常用评价指标 <统计学习方法>读书笔记--感知机(原理+代码实现) <统计学习方法>读书笔记--K近邻法(原理+代码实现 ...

  3. 统计学习方法笔记(一)-k近邻算法原理及python实现

    k近邻法 k近邻算法 算法原理 距离度量 距离度量python实现 k近邻算法实现 案例地址 k近邻算法 kkk近邻法(kkk-NN)是一种基本分类和回归方法. 算法原理 输入:训练集 T={(x1, ...

  4. 【MATLAB】Parzen窗与K近邻算法原理与代码详解

    文章目录 1.非参数估计原理 2.Parzen窗 2.1.算法原理 2.2.Matlab实现与参数探究 3.K近邻 3.1.算法原理 3.2.Matlab实现与参数探究 1.非参数估计原理 \qqua ...

  5. scikit-learn K近邻法类库使用小结

    1. scikit-learn 中KNN相关的类库概述 在scikit-learn 中,与近邻法这一大类相关的类库都在sklearn.neighbors包之中.KNN分类树的类是KNeighborsC ...

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

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

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

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

  8. 统计学习笔记(3)——k近邻法与kd树

    在使用k近邻法进行分类时,对新的实例,根据其k个最近邻的训练实例的类别,通过多数表决的方式进行预测.由于k近邻模型的特征空间一般是n维实数向量,所以距离的计算通常采用的是欧式距离.关键的是k值的选取, ...

  9. 复现经典:《统计学习方法》第 3 章 k 近邻法

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

最新文章

  1. No.6 PHP的基本配置与优化
  2. 使用reuseport和recvmmsg优化UDP服务器
  3. 图解VMWARE内存机制
  4. 使用c#訪问Access数据库时,提示找不到可安装的 ISAM
  5. html根据文档定位,html文档中的location对象属性理解及常见的用法
  6. 病症:arm启动后应用程序界面显示…
  7. Java笔记-RabbitMQ中生产者端confirm模式(异步模式)
  8. html选择按钮select,Html选择使用select来改变一个按钮的链接使用Javascript
  9. 用css和jquery实现标签页效果(一)
  10. 集成学习——LightGBM原理理解
  11. Trello如何访问用户的剪贴板?
  12. openssl、gmssl的简单介绍
  13. html制作清明上河图
  14. AVI文件在opencore框架下的解析
  15. 最新资料!工银亚洲开户见证业务受理网点(广东地区,除了深圳)
  16. Windows NT引导过程源代码分析(一)
  17. 政策解读|2023法定节假日安排发布了,HR需要跟进的三件事
  18. 开源物联网终端设备操作系统
  19. CVPR 2021公布最佳论文候选!华人占据半壁江山,何恺明、陶大程、沈春华等人上榜...
  20. 李白藏头诗鸿蒙,20条藏头诗文案:我想要的很简单 爱只增不减 你待我一如初见...

热门文章

  1. Code::Blocks下载地址和安装教程(图解)
  2. 概率论中事件概率为0和1的理解
  3. The link you followed has expired(您点击的链接已过期)
  4. Qt动态多级导航菜单
  5. Launcher组件启动MainActivity组件的过程
  6. CentOS 7.6服务器使用Bitnami创建Wordpress-5.9.3-0网站
  7. 使用github客户端上传代码
  8. gparted分区教程
  9. 普思立:激光锡焊在航空航天领域应用
  10. Android快速获取视频帧