机器学习1:k 近邻算法

news2024/11/15 12:19:13

k近邻算法(k-Nearest Neighbors, k-NN)是一种常用的分类和回归算法。它基于一个简单的假设:如果一个样本的k个最近邻居中大多数属于某一类别,那么该样本也很可能属于这个类别。

k近邻算法的步骤如下

  1. 输入:训练集(包含已知类别的样本)和待分类样本。
  2. 计算待分类样本与训练集中所有样本之间的距离(常用的距离度量方法包括欧氏距离、曼哈顿距离等)。
  3. 选择距离待分类样本最近的k个样本作为邻居。
  4. 根据这k个邻居的类别标签,确定待分类样本的类别:如果有多数样本属于A类,那么待分类样本也归为A类;如果多数样本属于B类,那么待分类样本则归为B类。
  5. 输出:待分类样本的类别。

k近邻算法的主要特点包括:

  • 简单易实现:算法主要基于距离计算和多数表决,概念和原理较直观。
  • 非参数化学习:算法不对数据的分布做任何假设,因此适用于各种类型的数据。
  • 适应性强:算法可以根据具体问题和数据特点选择合适的距离度量方法和邻居个数k。

在实际应用中,可以通过交叉验证等方法选择合适的k值和距离度量方法,以获得更好的分类效果。k近邻算法被广泛应用于模式识别、图像处理、推荐系统等领域。

欧氏距离(Euclidean Distance)是指在数学上计算两个点之间的距离的一种方法。对于二维平面上的两个点,它是通过计算这两个点的坐标差的平方和的平方根得到的。

假设有两个点A(x1, y1)和B(x2, y2),欧氏距离的计算公式如下:

d = sqrt((x2 - x1)^2 + (y2 - y1)^2)

其中,sqrt表示平方根,^ 表示乘方操作。

欧氏距离的特点是:

  • 能够度量空间中两点之间的直线距离。
  • 距离越小,表示两点越接近;距离越大,表示两点越远离。
  • 欧氏距离可以应用于任意维度的数据,不仅仅局限于二维平面。

在机器学习和模式识别等领域,欧氏距离常用于聚类、分类以及特征匹配等任务中,通过比较样本之间的距离来进行相似性度量或分类判定。

曼哈顿距离(Manhattan Distance),也称为城市街区距离或L1距离,是计算两个点之间的距离的一种度量方法。它得名于曼哈顿的城市规划布局,因为在曼哈顿城市街区中,要从一个十字路口到达另一个十字路口,只能沿着网格状的街道走,而不能直线穿越建筑物。

对于二维平面上的两个点A(x1, y1)和B(x2, y2),曼哈顿距离的计算公式如下:

d = |x2 - x1| + |y2 - y1|

其中 |x| 表示取 x 的绝对值。

曼哈顿距离的特点是:

  • 它衡量的是沿着网格状路径从一个点到另一个点所需的步数。
  • 曼哈顿距离忽略了直线距离,而关注了水平和垂直方向上的距离差异。
  • 曼哈顿距离适用于需要考虑路径限制的问题,比如机器人导航、城市交通等领域。

曼哈顿距离不仅可以应用于二维平面,还可以推广到更高维的情况。在机器学习和数据挖掘领域,曼哈顿距离常用于聚类、分类和特征选择等任务中,用于衡量样本之间的相似性或者特征之间的差异。

举例:假设有一个二维坐标系,点A的坐标是(1, 3),点B的坐标是(4, 6)。现在我们要计算点A和点B之间的曼哈顿距离。

曼哈顿距离的计算公式是:d = |x2 - x1| + |y2 - y1|

根据这个公式,我们可以计算出点A和点B之间的曼哈顿距离为:

d = |4 - 1| + |6 - 3| = 3 + 3 = 6

       这意味着,从点A移动到点B,沿着水平和垂直方向上的总移动步数是6。可以把曼哈顿距离看作是通过直角路径从一个点到达另一个点所需的最小步数。

       将这个理解为在一个城市的街道上行走,曼哈顿距离衡量的是你只能沿着街道走的情况下,从一个地点到另一个地点所需的最短距离。在这个例子中,我们需要向右移动3个单位,向上移动3个单位,即水平方向上的距离差为3,垂直方向上的距离差为3,总步数为6。

棋盘距离(Chebyshev Distance),也称为切比雪夫距离或L∞距离,是计算两个点之间的距离的一种度量方法。它得名于俄罗斯数学家切比雪夫,他首先引入了这个概念。

对于二维平面上的两个点A(x1, y1)和B(x2, y2),

棋盘距离的计算公式如下:d = max(|x2 - x1|, |y2 - y1|)

其中 |x| 表示取 x 的绝对值。

棋盘距离的特点是:

  • 它衡量的是沿着网格状路径从一个点到另一个点所需的最少步数。
  • 棋盘距离忽略了直线距离,而只考虑水平和垂直方向上的距离差异。
  • 棋盘距离适用于仅允许水平、垂直和对角行走的问题,比如在棋盘上移动、机器人导航等领域。

棋盘距离不仅可以应用于二维平面,还可以推广到更高维的情况。在图像处理、路径规划、聚类等领域,棋盘距离常用于衡量像素之间的差异、计算路径的最短距离,或者作为一种距离度量方法进行数据分析和模式识别。

假设我们有一个5x5的棋盘,棋盘上的每个格子表示一个点。现在我们要计算点A(2, 3)和点B(4, 1)之间的棋盘距离。

首先,我们可以通过观察两个点在棋盘上的位置,发现它们可以通过沿着网格状路径移动到达:

在这个路径中,我们可以看到我们需要向右移动两步,向下移动两步,即水平方向上的距离差为2,垂直方向上的距离差也为2。

根据棋盘距离的计算公式 d = max(|x2 - x1|, |y2 - y1|),我们可以取水平方向和垂直方向上距离差的最大值作为最终的棋盘距离。在这个例子中,最大值是2,所以点A和点B之间的棋盘距离就是2。

这个例子展示了棋盘距离的特点,它只考虑水平和垂直方向上的距离差异,并忽略了直线距离。在这个例子中,虽然两点之间的直线距离是√10≈3.16,但棋盘距离只计算了步数,即2步。

综合作业课后题

1. 假设有以下训练数据集,每个样本有两个特征(x1, x2)和对应的类别标签

(y):

现在给定一个测试样本 (6, 4),使用 k 近邻算法进行分类,其中 k=5。请

计算该测试样本的类别。

1) 请简述 k 近邻算法的算法步骤

2) 现在给定一个测试样本 (6, 4),使用 k 近邻算法进行分类,其中 k=5。

分别使用欧氏距离、曼哈顿距离和棋盘距离来计算测试样本与训练样本

之间的距离,并观察它们对最终分类结果的影响。

  1. k近邻算法的步骤如下:
  • 计算测试样本与训练数据集中所有样本之间的距离
  • 选择k个距离最近的样本,即为k个邻居
  • 根据这k个邻居的类别标签,确定测试样本的类别:如果有多数样本属于A类,那么测试样本也归为A类;如果多数样本属于B类,那么测试样本则归为B类。

 

2.计算方法及分类结果如下:

  • 使用欧氏距离来计算距离:

  • 样本1:sqrt((3-6)^2 + (5-4)^2) ≈ 3.16,A类

  • 样本2:sqrt((4-6)^2 + (2-4)^2) ≈ 2.83,A类

  • 样本3:sqrt((7-6)^2 + (3-4)^2) ≈ 1.41,B类

  • 样本4:sqrt((9-6)^2 + (6-4)^2) ≈ 3.61,B类

  • 样本5:sqrt((5-6)^2 + (8-4)^2) ≈ 4.12,A类

  • 样本6:sqrt((2-6)^2 + (6-4)^2) ≈ 4.47,B类

  • 从上面的分类结果可以看出,欧氏距离将测试样本分类成了A类。

  • 使用曼哈顿距离来计算距离:

  • 样本1:|3-6| + |5-4| = 4,A类

  • 样本2:|4-6| + |2-4| = 4,A类

  • 样本3:|7-6| + |3-4| = 2,B类

  • 样本4:|9-6| + |6-4| = 5,B类

  • 样本5:|5-6| + |8-4| = 5,A类

  • 样本6:|2-6| + |6-4| = 4,B类

  • 从上面的分类结果可以看出,曼哈顿距离将测试样本分类成了A类。

  • 使用棋盘距离来计算距离:

  • 样本1:max(|3-6|, |5-4|) = 3,A类

  • 样本2:max(|4-6|, |2-4|) = 2,A类

  • 样本3:max(|7-6|, |3-4|) = 1,B类

  • 样本4:max(|9-6|, |6-4|) = 3,B类

  • 样本5:max(|5-6|, |8-4|) = 4,A类

  • 样本6:max(|2-6|, |6-4|) = 4,B类

  • 从上面的分类结果可以看出,棋盘距离也将测试样本分类成了A类。

  • 综上所述,使用这三种距离计算方式,最终测试样本都被归类为A类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1075453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计模式 - 行为型模式考点篇:模板方法模式(概念 | 案例实现 | 优缺点 | 使用场景)

目录 一、行为型模式 1.1、模板方法模式 1.1.1、概念 1.1.2、案例实现 1.1.3、优缺点 1.1.4、使用场景 一、行为型模式 一句话概括行为型模式 行为型模式:类或对象间如何交互、如何划分职责,从而更好的完成任务. 1.1、模板方法模式 1.1.1、概念 …

COCI 2021-2022 #1 - Volontiranje 题解

题目大意 让你求最多有多少个不相交的最长上升子序列。 思路 我们可以将数 a i a_i ai​ 看成一个点 ( i , a [ i ] ) (i,a[i]) (i,a[i]),于是我们可以按照 x x x 递增 y y y 递减考虑分层。 分层的方法就是从 1 1 1 到当前点的 LIS 即为其所在层数。 此时…

Spring源码解析——IOC之bean 的初始化

正文 一个 bean 经历了 createBeanInstance() 被创建出来,然后又经过一番属性注入,依赖处理,历经千辛万苦,千锤百炼,终于有点儿 bean 实例的样子,能堪大任了,只需要经历最后一步就破茧成蝶了。…

Git 学习笔记 | Git 分支

Git 学习笔记 | Git 分支 Git 学习笔记 | Git 分支分支的概念为什么要使用分支?常用指令 Git 学习笔记 | Git 分支 分支的概念 几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,避免影响开发主线。…

小白网络安全学习手册(黑客技术)

一、网络安全应该怎么学? 1.计算机基础需要过关 这一步跟网安关系暂时不大,是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通,可以与学习其他课程同步进行。 2.渗透技…

[idekCTF 2022]Paywall - LFI+伪协议+filter_chain

[idekCTF 2022]Paywall 一、解题流程(一)、分析(二)、解题 二、思考总结 一、解题流程 (一)、分析 点击source可以看到源码,其中关键部分:if (isset($_GET[p])) {$article_content…

【C语言】进阶——动态内存管理

一、为什么存在动态内存管理 我们已经掌握的内存开辟方式有: int val 20; //在栈空间开辟四个字节char arr[10] {0}; //在栈空间开辟10个字节的连续空间 但上述开辟空间的方式有两个特点: 空间开辟大小是固定的数组在声明的时候&#xf…

Maven最新版本安装及配置

Maven是一个Java项目管理和构建工具,它可以定义项目结构、项目依赖,并使用统一的方式进行自动化构建,是Java项目不可缺少的工具。 本章我们详细介绍如何使用Maven。 一、Maven是什么? 如果每一个项目都自己搞一套配置&#xf…

【java学习】一维数组(9)

文章目录 1. 一维数组声明2. 一维数组初始化3. 数组元素的引用4. 数组元素的默认初始化 1. 一维数组声明 声明方式: type var[] 或 type[] var 例如: int a[]; int[] a1; double b[]; Mydate[] c; //对象数组2. 一维数组初始化 动态初始化&#xf…

python练习4

前言:相信看到这篇文章的小伙伴都或多或少有一些编程基础,懂得一些linux的基本命令了吧,本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python:一种编程语言&…

2023年十大顶尖远程控制软件

随着科技的不断进步和时代的发展,远程控制软件已经成为现代工作、教育等领域中必不可少的工具。这些软件可以实现远程桌面连接、远程支持和远程维护等功能,大大提高了工作效率,同时也让用户拥有更加灵活的操作方式。当然,不同的远…

C#:出题并判断

C#:出题并判断 //出题并判断 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace Test_…

【高阶数据结构】图详解第二篇:图的遍历(广度优先+深度优先)

文章目录 图的遍历1. 图的广度优先遍历(一石激起千层浪)思路分析代码实现测试美团2020校招笔试题:六度人脉 2. 图的深度优先遍历(一条道走到黑)思路分析代码实现测试 3. 对于非连通图情况的处理4.源码BFSDFS 图的遍历 …

uboot启动流程-run_main_loop 到 cmd_process处理说明一

一. uboot启动 uboot命令模式:uboot 启动以后会进入 3 秒倒计时,如果在 3 秒倒计时结束之前按下按下回车键,那么就会进入 uboot 的命令模式。 如果在 uboot 倒计时结束以后都没有按下回车键,就会自动启动 Linux 内 核 …

C++结构体(struct)、结构体和函数、结构体指针

前言 在本文中,您将学习C 编程中的结构。它是什么,如何定义它并在程序中使用它。结构是一个单一名称下不同数据类型的变量的集合。它与类相似,两者都保存着不同数据类型的数据集合。 问题 例如:您要存储有关某个人的一些…

《向量数据库指南》——向量数据库 大模型的“海马体”

在大模型的高调火热之下,向量数据库也获得了前所未有的关注。 近两个月内,向量数据库迎来融资潮,Qdrant、Chroma、Weaviate先后获得融资,Pinecone宣布1亿美元B轮融资,估值达到7.5亿美元。 东北证券预测,到2030年,全球向量数据库市场规模有望达到500亿美元,国内向量数…

【LeetCode热题100】--155.最小栈

155.最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元…

dubbo协议与triple协议的对比

分别使用dubbo协议和triple协议,按照官方文档搭建Demo。 两个流程对比下来发现,dubbo协议搭建起来比较简单直接,定义好接口,实现类,然后启动provider和consumer就完事了。而triple协议则需要先定义proto文件 然后增加…

(StackOverflow问答)使用Huggingface Transformers从磁盘加载预训练模型

这是在Stack Overflow上的一个问答,链接如下: Load a pre-trained model from disk with Huggingface Transformers - Stack Overflowhttps://stackoverflow.com/questions/64001128/load-a-pre-trained-model-from-disk-with-huggingface-transformers…

找不到vcomp140.dll,无法继续执行代码?别担心,解决方法在这里!

找不到vcomp140.dll,无法继续执行代码?这个问题很难解决么?在网上看到很多人在咨询这个问题,看来是很多人都遇到了缺失了vcomp140.dll文件的问题啊,小编觉得很有必要来给大家详细的科普一下vcomp140.dll文件,给大家介绍…