机器学习03——K近邻

K近邻算法学习笔记

一、算法简介

K近邻算法(K - Nearest Neighbors,简称KNN)是一种简单而有效的分类和回归算法。它的核心思想是“近朱者赤,近墨者黑”,即一个数据点的类别或值可以通过其周围最近的K个邻居来判断。KNN算法不需要复杂的模型训练过程,而是直接基于数据点之间的距离来做出决策。

二、算法原理

  1. 距离度量
    • 欧氏距离:最常用的距离度量方式,计算两个点在各维度差值的平方和的平方根。例如,对于两个点 (x) 和 (y),其欧氏距离为 (\sqrt{\sum_{i=1}^{n}(x_i - y_i)^2}),其中 (n) 是特征的维度。
    • 曼哈顿距离:计算两个点在各维度差值的绝对值之和,适用于网格状数据。公式为 (\sum_{i=1}^{n}|x_i - y_i|)。
    • 明可夫斯基距离:是欧氏距离和曼哈顿距离的推广形式,公式为 (\left(\sum_{i=1}^{n}|x_i - y_i|p\right){1/p}),当 (p=2) 时为欧氏距离,当 (p=1) 时为曼哈顿距离。
  2. K值的选择
    • K值的选择对算法性能至关重要。如果K值过小,模型容易受到噪声数据的影响,导致过拟合;如果K值过大,模型可能会将远离目标点的数据也纳入考虑范围,导致欠拟合。
    • 通常需要通过交叉验证等方法来选择合适的K值。例如,可以尝试不同的K值,计算每个K值下的模型性能指标(如准确率、召回率等),选择性能最优的K值。
  3. 投票机制
    • 分类任务:对于分类问题,算法会统计目标点周围最近的K个邻居中每个类别的数量,然后选择数量最多的类别作为目标点的预测类别。例如,如果K=5,目标点周围有3个邻居属于类别A,2个邻居属于类别B,那么目标点将被预测为类别A。
    • 回归任务:对于回归问题,算法会计算目标点周围最近的K个邻居的值的平均值或加权平均值作为目标点的预测值。例如,如果K=3,目标点周围3个邻居的值分别为1、2、3,那么目标点的预测值可以是 ((1+2+3)/3=2)。

三、算法流程

  1. 数据预处理
    • 归一化:由于KNN算法依赖距离计算,因此特征值的范围对结果影响很大。需要对数据进行归一化处理,将所有特征值缩放到相同的范围(如0 - 1或 - 1到1)。常用的归一化方法有最小 - 最大归一化 ((x - \text{min})/(\text{max} - \text{min})) 和Z - score标准化 ((x - \mu)/\sigma),其中 (\mu) 是均值,(\sigma) 是标准差。
    • 去除噪声数据:噪声数据可能会干扰KNN算法的预测结果,因此需要通过数据清洗等方法去除噪声数据。
  2. 计算距离
    • 对于每个测试样本,计算其与训练集中所有样本之间的距离。根据选择的距离度量方式(如欧氏距离、曼哈顿距离等),计算每个样本之间的距离值。
  3. 选择最近的K个邻居
    • 根据计算出的距离,对训练集中的样本进行排序,选择距离最近的K个样本作为目标点的邻居。
  4. 投票或平均
    • 对于分类问题,统计这K个邻居中每个类别的数量,选择数量最多的类别作为预测结果;对于回归问题,计算这K个邻居的值的平均值或加权平均值作为预测结果。

四、优缺点

  1. 优点
    • 简单易实现:KNN算法原理简单,实现起来也非常容易,不需要复杂的数学推导和优化过程。
    • 无需训练模型:KNN算法不需要像其他算法(如神经网络、决策树等)那样进行复杂的模型训练,直接基于数据点之间的距离进行预测,适合小规模数据集。
    • 对数据的适应性强:KNN算法对数据的分布没有假设,可以很好地适应各种类型的数据,包括线性和非线性数据。
  2. 缺点
    • 计算效率低:KNN算法需要计算测试样本与训练集中所有样本之间的距离,对于大规模数据集,计算量非常大,效率较低。
    • 存储要求高:KNN算法需要存储整个训练数据集,占用大量的存储空间。
    • 对特征的权重不敏感:KNN算法对所有特征一视同仁,没有考虑不同特征对目标变量的重要性,可能会受到无关特征的干扰。

五、应用场景

  1. 图像识别:KNN算法可以用于图像分类任务,例如手写数字识别。通过计算图像像素之间的距离,可以将新的图像与已知的数字图像进行对比,从而识别出数字的类别。
  2. 文本分类:在文本分类中,KNN算法可以用于判断文本的类别。例如,将文本转换为向量形式(如TF - IDF向量),然后计算文本之间的距离,根据最近的K个邻居的类别来判断文本的类别。
  3. 推荐系统:KNN算法可以用于基于用户的推荐系统。通过计算用户之间的相似度(如购买行为、评分等),找到与目标用户最相似的K个用户,然后将这些用户喜欢的物品推荐给目标用户。

六、代码实现(Python示例)

以下是使用Python实现KNN算法的简单示例:

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 示例数据
X = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)# 创建KNN模型
knn = KNeighborsClassifier(n_neighbors=3)# 训练模型
knn.fit(X_train, y_train)# 进行预测
y_pred = knn.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率:{accuracy}")

七、总结

KNN算法是一种简单而有效的机器学习算法,适用于分类和回归任务。它基于数据点之间的距离进行预测,具有简单易实现、对数据适应性强等优点,但也存在计算效率低、存储要求高等缺点。在实际应用中,需要根据数据的特点和任务需求选择合适的K值和距离度量方式,并对数据进行预处理,以提高算法的性能。

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

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

相关文章

序列化 反序列化实例

在Python中, pickle 模块常用于实现对象的序列化和反序列化,以下是一个简单的实例: import pickle # 定义一个类 class Person: def __init__(self, name, age): self.name name self.age age # 创建一个Person对象 person Person("…

代码随想录算法训练营第十九天

LeetCode题目: 77. 组合216. 组合总和 III17. 电话号码的字母组合2537. 统计好子数组的数目(每日一题)516. 最长回文子序列1039. 多边形三角剖分的最低得分543. 二叉树的直径124. 二叉树中的最大路径和2246. 相邻字符不同的最长路径 其他: 今日总结 往期打卡 77. 组合 跳转: 7…

存算分离看场景

计算机行业是唯一一个比时装行业概念更多的行业。概念频出,最慢的话半年一定出一个,短的话半个月就能看到新的名词和技术甚至是概念。 存算分离的概念 我第一次听到存算分离时候还是从Hadoop上听到的。然后就去问什么是存算分离。听了讲解以后&#xf…

MCP协议,.Net 使用示例

服务器端示例 基础服务器 以下是一个基础的 MCP 服务器示例,它使用标准输入输出(stdio)作为传输方式,并实现了一个简单的回显工具: using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.H…

智能语音处理+1.5使用PocketSphinxshinx实现语音转文本(100%教会)

欢迎来到智能语音处理系列的最后一篇文章,到这里,基本上语音处理是没问题了. 第一篇:智能语音处理1.1下载需要的库(100%实现)-CSDN博客 第二篇:智能语音识别1.2用SAPI实现文本转语音(100%教会)-CSDN博客 第三篇:智能语音处理1.3用SpeechLib实现文本转语音(100%教会)…

Kubernetes 节点摘除指南

目录 一、安全摘除节点的标准流程 1. 确认节点名称及状态 2. 标记节点为不可调度 3. 排空(Drain)节点 4. 删除节点 二、验证节点是否成功摘除 1. 检查节点列表 2. 检查节点详细信息 3. 验证 Pod 状态 三、彻底清理节点(可选&#xf…

信息安全管理与评估2021年国赛正式卷答案截图以及十套国赛卷

2021年全国职业院校技能大赛高职组 “信息安全管理与评估”赛项 任务书1 赛项时间 共计X小时。 赛项信息 赛项内容 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 平台搭建与安全设备配置防护 任务1 网络平台搭建 任务2 网络安全设备配置与防护 第二…

3D语义地图中的全局路径规划!iPPD:基于3D语义地图的指令引导路径规划视觉语言导航

作者: Zehao Wang, Mingxiao Li, Minye Wu, Marie-Francine Moens, Tinne Tuytelaars 单位:鲁汶大学电气工程系,鲁汶大学计算机科学系 论文标题: Instruction-guided path planning with 3D semantic maps for vision-language …

《AI大模型应知应会100篇》第20篇:大模型伦理准则与监管趋势

第20篇:大模型伦理准则与监管趋势 摘要 随着人工智能(AI)技术的飞速发展,尤其是大模型(如GPT、PaLM等)在自然语言处理、图像生成等领域的广泛应用,AI伦理问题和监管挑战日益凸显。本文将梳理当…

【Ai】dify:Linux环境安装 dify 详细步骤

一、什么是dify Dify 是一个 开源的大语言模型(LLM)应用开发平台,旨在帮助开发者快速构建基于 AI 的应用程序,例如智能对话助手、知识库问答、内容生成工具等。它提供了可视化的流程编排、模型集成、数据管理等功能,降低了开发门槛,支持快速迭代和部署。 核心功能与特点…

CentOS 操作系统下搭建 tsung性能测试环境

写在前面 为何这么安装,实际就是这么做的,这是经过好几次实践得出的经验总结。 这为了让大家更清楚的知道怎么安装 tsung性能测试环境,按步照搬的安装即可。 步骤 1、 下载软件安装包 CentOS-6.0-x86_64-bin-DVD1.iso jdk-6u4-linux-x64-rpm.bin erlang: otp_src_1…

Vulkanised

Vulkanised 1. About VulkanisedReferences The Premier Vulkan Developer Conference premier /ˈpremiə(r)/ n. 总理;(尤用于报章等) 首相;(加拿大的) 省总理;地区总理 adj. 第一的;首要的;最著名的;最…

C++之 动态数组

一、新建一个动态数组 数组名和下标操作符[]的组合可以被替换成一个指向该数组的基地址的指针和对应的指针运算: int a[20]; int *x a; 指针变量 x 指向数组 a 的地址, a[0] 和 *x 都代表数组的第一个元素。 于是,根据指针运算原则&…

ubuntu1804服务器开启ftp,局域网共享特定文件给匿名用户

要在 Ubuntu 18.04 上设置一个 FTP 服务器,满足以下要求: 允许匿名登录(无需账号密码)。指定分享特定目录下的文件。只允许只读下载。 可以使用 vsftpd(Very Secure FTP Daemon)来实现。以下是详细步骤&a…

mcp和API区别

MCP(Model Context Protocol,模型上下文协议)与传统API(Application Programming Interface,应用程序编程接口)在技术架构、集成方式和应用场景等方面存在显著差异,以下是主要区别的总结&#x…

高版本Android (AIDL HAL) 使用HIDL方法

目录 修改步骤和编译方法 注意事项 Android 11 引入了使用 AIDL 实现 HAL 的功能。 后续Android新版本,HAL默认切到了使用AIDL. 因此当导入旧HIDL实现方式时,需要做一些修改。 1.将HAL HIDL模块拷贝到相应目录,进行编译 source build/envsetup.sh lunch xxx mmm 模块路径 1.…

基于redis 实现我的收藏功能优化详细设计方案

基于redis 实现我的收藏功能优化详细设计方案 一、架构设计 +---------------------+ +---------------------+ | 客户端请求 | | 数据存储层 | | (收藏列表查询) | | (Redis Cluster) | +-------------------…

学习笔记 - Swfit 6.1 - 语法概览

获取版本号 swift -versionHello world print("Hello, world!")末尾不需要分号 值 常量(let),变量(var) var myVariable 42 myVariable 50 let myConstant 42可以显式声明变量类型,若没有则隐式推断,类似下面的Double let implicitInteger 70 let implicit…

确保连接器后壳高性能互连的完整性

本文探讨了现代后壳技术如何促进高性能互连的电气和机械完整性,以及在规范阶段需要考虑的一些关键因素。 当今的航空航天、国防和医疗应用要求连接器能够提供高速和紧凑的互连,能够承受振动和冲击,并保持对电磁和射频干扰 (EMI/R…

第IV部分有效应用程序的设计模式

第IV部分有效应用程序的设计模式 第IV部分有效应用程序的设计模式第23章:应用程序用户界面的架构设计23.1设计考量23.2示例1:用于非分布式有界上下文的一个基于HTMLAF的、服务器端的UI23.3示例2:用于分布式有界上下文的一个基于数据API的客户端UI23.4要点第24章:CQRS:一种…