KNN分类算法 HNUST【数据分析技术】(2025)
1.理论知识
KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。
KNN算法的思想:
对于任意n维输入向量,分别对应于特征空间中的一个点,输出为该特征向量所对应的类别标签或预测值。
KNN算法是一种非常特别的机器学习算法,因为它没有一般意义上的学习过程。它的工作原理是利用训练数据对特征向量空间进行划分,并将划分结果作为最终算法模型。存在一个样本数据集合,也称作训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的数据后,将这个没有标签的数据的每个特征与样本集中的数据对应的特征进行比较,然后提取样本中特征最相近的数据(最近邻)的分类标签。

图2.1 KNN算法示意图
其中常用的距离量度方式包括:
- 闵可夫斯基距离
- 欧氏距离
- 曼哈顿距离
- 切比雪夫距离
- 余弦距离
2.算法流程图

3.关键代码
from numpy import *
import operator# k近邻分类算法
def classify0(inX, dataSet, labels, k):# 欧式距离计算dataSetSize = dataSet.shape[0]diffMat = tile(inX, (dataSetSize, 1)) - dataSetsqDiffMat = diffMat ** 2sqDistinces = sqDiffMat.sum(axis=1) # 行方向求和distances = sqDistinces ** 0.5# 将距离值进行排序,并返回索引值sortedDistIndicies = distances.argsort()# 选择距离最小的k个点,并统计k个点中各个类别的数目classCount = {}for i in range(k):voteIlabel = labels[sortedDistIndicies[i]]classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1# 排序,选择类别数目最多的所属类别sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)return sortedClassCount[0][0]# 归一化数值
def autoNorm(dataSet):minVals = dataSet.min(0)maxVals = dataSet.max(0)ranges = maxVals - minValsnormDataSet = zeros(shape(dataSet))m = dataSet.shape[0] # 获取数据行数normDataSet = dataSet - tile(minVals, (m, 1))normDataSet = normDataSet / tile(ranges, (m, 1))return normDataSet, ranges, minValsif __name__ == '__main__':dataSet = [[3, 104], [2, 100], [1, 81], [101, 10], [99, 5], [98, 2]]
labels = ['类别1', '类别1', '类别1', '类别2', '类别2', '类别2']
test = [100, 90] # 未知电影的接吻镜头次数、打斗镜头次数
normMat, ranges, minVals = autoNorm(array(dataSet)) # 归一化处理
k = 3
classifierResult = classify0(test, normMat, labels, k)
print("输入的k:\n ", k)
print('------------------------------------------------------')
print("数据为:\n ", dataSet)
print('------------------------------------------------------')
print("对应标签为:\n ", labels)
print('------------------------------------------------------')
print("输入数据为:\n ", test)
print('------------------------------------------------------')
print("预测的标签:\n", classifierResult)
4.实验结果
测试数据
表2.1 输入的数据集(输入k=3)
| 数据 | 3, 104 | 2, 100 | 1, 81 | 101, 10 | 99, 5 | 98, 2 |
| 类别 | 类别1 | 类别1 | 类别1 | 类别2 | 类别2 | 类别2 |
*其中3,104代表属性1为3, 属性2为104.
实验结果与分析

图2.2 实验结果
算法特点
优点:
- 简单易用。相比其他算法,KNN 算法比较简洁明。
- 模型训练时间快,上面说到 KNN 算法是惰性的。
- 预测效果好。
- 对异常值不敏感。
缺点:
- 对内存要求较高,因为该算法存储了所有训练数据。
- 预测阶段可能很慢。
- 对不相关的功能和数据规模敏感。
其他实验(我是芒果酱点一个关注吧(σ′▽‵)′▽‵)σ)
- k-Means聚类算法 HNUST【数据分析技术】(2024)-CSDN博客
- PageRank Web页面分级算法 HNUST【数据分析技术】(2024)-CSDN博客
- KNN分类算法 HNUST【数据分析技术】(2024)-CSDN博客
- Apriori关联规则算法 HNUST【数据分析技术】(2024)-CSDN博客
相关文章:
KNN分类算法 HNUST【数据分析技术】(2025)
1.理论知识 KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。 KNN算法的思想: 对于任意n维输入向量,分别对应于特征…...
AI Agent开源框架汇总(持续更新)
文章目录 AI Agent开源框架汇总什么是AI Agent为什么需要智能体(Agent)Web3 AI Agent使用场景框架分类低代码(No-Code/Low-Code)框架基础框架代码框架Multi-Agent 框架 / 架构热门开源框架PhidataRigai16z的AI Agent框架ElizaLangChain和phidata对比OpenAI SwarmAI Agent开…...
录播检测原理是什么?
直播间录播的检测可以通过多种方式进行。以下是一些常见的检测方法: 1、水印识别:直播平台可以在实时直播画面中嵌入特定的水印,通过识别水印来判断是否存在录播行为。 2、特征分析:直播平台可以通过对直播画面进行特征分析,检测…...
IndexOf Apache Web For Liunx索引服务器部署及应用
Apache HTTP Server 是一款广泛使用的开源网页服务器软件,它支持多种协议,包括 HTTP、HTTPS、FTP 等 IndexOf 功能通常指的是在一个目录中自动生成一个索引页面的能力,这个页面会列出该目录下所有的文件和子目录。比如网上经常看到的下图展现的效果,那么接下来我们就讲一下…...
MySQL索引为什么是B+树
MySQL索引为什么是B树 索引是帮助MySQL高效获取数据的数据结构,在数据之外,数据库还维护着满足特定查找算法的数据结构B树,这些数据结果以某种特定的方式引用数据,这样就可以在这些数据结构上实现高级查找算法,提升数据…...
ffmpeg之播放一个yuv视频
播放YUV视频的步骤 初始化SDL库: 目的:确保SDL库正确初始化,以便可以使用其窗口、渲染和事件处理功能。操作:调用 SDL_Init(SDL_INIT_VIDEO) 来初始化SDL的视频子系统。 创建窗口用于显示YUV视频: 目的:…...
《2023-2024网络安全产业发展核心洞察与趋势预测》
2023年至2024年间,我国经济总体上逐步显现出复苏迹象,并开始释放向上增长的潜力。在此背景下,网络安全产业也经历了经济环境的深刻影响,不仅实现了阶段性的稳定发展,也展现出较强的韧性与适应能力,为未来的…...
为什么环境影响评价导则中生态环境评价中的【植被类型图】制作比较难?制作流程是什么
最新《环境影响评价技术导则生态影响HJ19—2022》于2022年1月15日发布,2022-07-01正式实施,新导则颁布后,要求生态现状评价内容中基本图件构成包含:项目区域地理位置图、工程平面图、调查样方、样线、点位、断面等布设图、土地利用…...
肿瘤电场治疗费用
肿瘤电场治疗作为一种前沿的肿瘤治疗方法,近年来备受关注。该方法通过利用特定频率的交流电场,作用于恶性肿瘤细胞,以达到抑制肿瘤生长的目的。然而,随着这种治疗方法的普及,其费用问题也逐渐成为患者和家属关注的焦点…...
替换 Docker.io 的 Harbor 安全部署指南:域名与 IP 双支持的镜像管理解决方案
经过验证 替换 Docker.io 的方式失败了, 以下的过程中还是需要设置 registry-mirrors 才行 以下是一篇详细教程,展示如何基于 openssl.conf 配置生成域名为 registry-1.docker.io 和 IP 地址为 172.16.20.20 的证书,构建 Harbor 服务。 环境准备 系统环境…...
Python知识图谱框架
Python中用于构建知识图谱的框架和库有很多,它们各自有不同的特点和功能,适用于不同的应用场景。以下是一些常用的框架: 1. NetworkX 功能:NetworkX是一个用于创建、操作和研究复杂网络的Python库。它可以用于构建知识图谱&…...
elasticsearch 杂记
8.17快速安装与使用 系统:ubuntu 24 下载地址: https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.0-linux-x86_64.tar.gz 解压后进入目录:cd ./elasticsearch-8.17.0 运行:./bin/elasticsearch 创…...
Text2Reward学习笔记
1. 环境配置 1.1 安装 PyTorch-1.13.1 pip install torch1.13.1cu116 torchvision0.14.1cu116 \ torchaudio0.13.1 --extra-index-url https://download.pytorch.org/whl/cu1161.2 安装工具库 pip install stable-baselines31.8.0 wandb tensorboard \ -i https://pypi.tuna…...
KylinOS V10 SP3下编译openGauss与dolphin插件
编译环境 KylinOS v10 sp3gcc 7.3.0make 4.3opengauss 5.0.0 mkdir -p /data/opengauss cd /data/opengauss git clone https://gitee.com/opengauss/openGauss-server.git git clone https://gitee.com/opengauss/Plugin.git wget -c https://opengauss.obs.cn-south-1.myhu…...
NPM老是无法install,timeout?npm install失败
NPM老是无法install,timeout? 尝试一下如下操作 一、 更换国内源 npm config set registry https://registry.npmmirror.com npm install或指定源install npm install pkg --registry https://registry.npmmirror.com --legacy-peer-deps如下图 二…...
安卓project级别build.gradle和主module的build.gradle
以穿山甲为例讲解 如下图 gradle和gradle插件对应关系 Android Gradle 插件 8.7 版本说明 | Android Studio | Android Developers gradle对应在项目里的配置为 gradle插件对应的位置为...
大模型(LLM)提示工程(Prompt Engineering)初识
大模型提示工程(Prompt Engineering)是指设计和优化给定任务的输入提示,以便从大型语言模型(如GPT-4、GPT-3等)中获得最佳输出。其核心目标是通过合理设计输入内容(提示词或提示结构)࿰…...
大数据-256 离线数仓 - Atlas 数据仓库元数据管理 正式安装 启动服务访问 Hive血缘关系导入
点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop࿰…...
gaussian_splatting 构建submodules的diff-gaussian-rasterization失败报错
c:\program files\nvidia gpu computing toolkit\cuda\v11.8\include\crt/host_config.h(231): fatal error C1083: 无法打开包括文件: “crtdefs.h”: No such file or directory 配置: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8\bin\nvcc.profil…...
template<typename Func, typename = void> 在类模板中的应用
1、基础语法 在 C 中,template<typename Func, typename void> 这一模板声明不仅仅限于函数模板,它在类模板中同样具有强大的应用。结合 SFINAE(Substitution Failure Is Not An Error)和 类型特征(type trait…...
如何将网页转化为可编辑设计稿?3大核心场景与实现方案
如何将网页转化为可编辑设计稿?3大核心场景与实现方案 【免费下载链接】figma-html Convert any website to editable Figma designs 项目地址: https://gitcode.com/gh_mirrors/fi/figma-html 你是否曾遇到过看到优秀网页设计却无法直接复用的困境ÿ…...
ISO 15765应用层定时参数P2/P2*详解:不同会话模式下的超时策略与网关影响
ISO 15765应用层定时参数P2/P2*深度解析:从理论到工程实践 在汽车电子系统开发中,诊断通信的可靠性直接影响着整车调试效率与售后服务质量。作为CAN总线诊断的核心规范,ISO 15765-3的应用层定时参数P2/P2*直接决定了诊断会话的响应时效与稳定…...
ILI9342_T4驱动库:Teensy 4.x高性能LCD显示后端
1. 项目概述 ILI9342_T4 是一款专为 Teensy 4、Teensy 4.1 及 Teensy MicroMod 平台深度优化的 ILI9342/ILI9342C 显示控制器驱动库。该库并非从零构建,而是基于成熟的 ILI9341_T4 驱动框架进行针对性重构,继承了其全部高性能特性,并针对 ILI…...
华硕笔记本散热难题:3步用G-Helper解决风扇失控与性能调优
华硕笔记本散热难题:3步用G-Helper解决风扇失控与性能调优 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix…...
FPGA直方图均衡化/直方图拉伸/FPGA图像处理 工程和算法包含以下内容: 1,MATLAB...
FPGA直方图均衡化/直方图拉伸/FPGA图像处理 工程和算法包含以下内容: 1,MATLAB中实现图像处理。 2,verilog代码利用MATLAB联合modelsim仿真实现的图像处理。 3,小梅哥AC620和正点原子新起点/开拓者的FPGA板卡上实现的图像处理。 4…...
学生项目福音:AI超清画质增强快速入门,WebUI界面开箱即用
学生项目福音:AI超清画质增强快速入门,WebUI界面开箱即用 1. 为什么你需要AI画质增强技术 1.1 低清图像的普遍困扰 作为学生开发者,你可能经常遇到这样的场景:课程项目需要展示清晰的图片素材,但手头只有模糊的截图…...
扩展你的 RAG:基于 Rust 的 LanceDB 和 Candle 索引管道
原文:towardsdatascience.com/scale-up-your-rag-a-rust-powered-indexing-pipeline-with-lancedb-and-candle-cc681c6162e8?sourcecollection_archive---------2-----------------------#2024-07-11 构建大规模文档处理的高性能嵌入和索引系统 https://medium.co…...
扶摇速记:眼前流水,曲折前向
英语单词 went,意为【走】或走【去】,它是动词 go 的过去式。 went v. (go过去式) 去,走 我们可以这样去理解,其中 -t,表动词,是构词语法形式,含义主要来自wen-,而went 或 wen-的首字…...
考虑气电联合需求响应的气电综合能源配网系统协调优化运行代码功能说明
考虑气电联合需求响应的 气电综合能源配网系统协调优化运行 该文提出气电综合能源配网系统最优潮流的凸优化方法,即利用二阶锥规划方法对配电网潮流方 程约束进行处理,并提出运用增强二阶锥规划与泰勒级数展开相结合的方法对天然气潮流方程约束进行处理&…...
SEO_如何通过内容SEO有效获取精准流量?
如何通过内容SEO有效获取精准流量? 在互联网时代,获取精准流量是每个网站和博客主人的首要目标之一。通过内容SEO,我们可以有效地提高网站在搜索引擎上的排名,吸引更多的访客。如何通过内容SEO有效获取精准流量呢?本文…...
