KNN分类算法 HNUST【数据分析技术】(2025)

news2024/12/26 19:38:03

1.理论知识

KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。

KNN算法的思想:

对于任意n维输入向量,分别对应于特征空间中的一个点,输出为该特征向量所对应的类别标签或预测值。

KNN算法是一种非常特别的机器学习算法,因为它没有一般意义上的学习过程。它的工作原理是利用训练数据对特征向量空间进行划分,并将划分结果作为最终算法模型。存在一个样本数据集合,也称作训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的数据后,将这个没有标签的数据的每个特征与样本集中的数据对应的特征进行比较,然后提取样本中特征最相近的数据(最近邻)的分类标签。

图2.1 KNN算法示意图

其中常用的距离量度方式包括:

  1. 闵可夫斯基距离
  2. 欧氏距离
  3. 曼哈顿距离
  4. 切比雪夫距离
  5. 余弦距离

2.算法流程图


3.关键代码

from numpy import *
import operator


# k近邻分类算法
def classify0(inX, dataSet, labels, k):
    # 欧式距离计算
    dataSetSize = dataSet.shape[0]
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet
    sqDiffMat = diffMat ** 2
    sqDistinces = 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 - minVals
    normDataSet = zeros(shape(dataSet))
    m = dataSet.shape[0]  # 获取数据行数
    normDataSet = dataSet - tile(minVals, (m, 1))
    normDataSet = normDataSet / tile(ranges, (m, 1))
    return normDataSet, ranges, minVals


if __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 实验结果


算法特点

优点:

  1. 简单易用。相比其他算法,KNN 算法比较简洁明。
  2. 模型训练时间快,上面说到 KNN 算法是惰性的。
  3. 预测效果好。
  4. 对异常值不敏感。

缺点:

  1. 对内存要求较高,因为该算法存储了所有训练数据。
  2. 预测阶段可能很慢。
  3. 对不相关的功能和数据规模敏感。

 其他实验(我是芒果酱点一个关注吧(σ′▽‵)′▽‵)σ)

  • k-Means聚类算法 HNUST【数据分析技术】(2024)-CSDN博客
  • PageRank Web页面分级算法 HNUST【数据分析技术】(2024)-CSDN博客
  • KNN分类算法 HNUST【数据分析技术】(2024)-CSDN博客
  • Apriori关联规则算法 HNUST【数据分析技术】(2024)-CSDN博客

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

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

相关文章

使用 Three.js 创建一个 3D 人形机器人仿真系统

引言 在这篇文章中,我们将探讨如何使用 Three.js 创建一个简单但有趣的 3D 人形机器人仿真系统。这个机器人可以通过键盘控制进行行走和转向,并具有基本的动画效果。 技术栈 HTML5Three.jsJavaScript 实现步骤 1. 基础设置 首先,我们需要…

Android unitTest 单元测试用例编写(初始)

文章目录 了解测试相关库导入依赖库新建测试文件示例执行查看结果网页结果其他 本片讲解的重点是unitTest,而不是androidTest哦 了解测试相关库 androidx.compose.ui:ui-test-junit4: 用于Compose UI的JUnit 4测试库。 它提供了测试Compose UI组件的工具和API。 and…

【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块

目录 一、温度传感器模块 (1)资源介绍 🔅原理图 🔅STS30-DIS-B 🌙引脚分配 🌙通信 🌙时钟拉伸(Clock Stretching) 🌙单次触发模式 🌙温度数据转…

如何在任何地方随时使用本地Jupyter Notebook无需公网IP

文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 今天就来给大家安利一套神器组合:通过Windows系统本地部…

长沙景区数据分析项目实现

一、设计题目 长沙景区数据分析项目 二、设计目的 通过本项目让学生独立完成数据统计、数据可视化、数据分析的过程,并提高学生解决问题的能力。 三、设计要求 读取‘长沙景区信息.xlsx’文件(读取Excel文件的方法为pandas.read_excel()&#xff0c…

Kafka可视化工具 Offset Explorer (以前叫Kafka Tool)

数据的存储是基于 主题(Topic) 和 分区(Partition) 的 Kafka是一个高可靠性的分布式消息系统,广泛应用于大规模数据处理和实时, 为了更方便地管理和监控Kafka集群,开发人员和运维人员经常需要使用可视化工具…

PHP后执行php.exe -v命令报错并给出解决方案

文章目录 一、执行php.exe -v命令报错解决方案 一、执行php.exe -v命令报错 -PHP Warning: ‘C:\windows\SYSTEM32\VCRUNTIME140.dll’ 14.38 is not compatible with this PHP build linked with 14.41 in Unknown on line 0 解决方案 当使用PHP8.4.1时遇到VCRUNTIME140.dll…

详解MySQL在Windows上的安装

目录 查看电脑上是否安装了MySQL 下载安装MySQL 打开MySQL官网,找到DOWNLOADS 然后往下翻,找到MySQL Community(GPL) Downloads>> 然后找到MySQL Community Server 然后下载,选择No thanks,just start my download. 然后双击进行…

Excel粘贴复制不完整的原因以及解决方法

在数据处理和分析的过程中,Excel无疑是不可或缺的工具。然而,在使用Excel进行复制粘贴操作时,有时会遇到粘贴不完整的情况,这可能会让人感到困惑和烦恼。本文将深入探讨Excel粘贴复制不完整的原因、提供解决方案,并给出…

嵌入式轻量级开源操作系统:HeliOS的使用

嵌入式轻量级开源操作系统:HeliOS的使用 📍项目地址:https://github.com/heliosproj/HeliOS HeliOS项目是一个社区交付的开源项目,用于构建和维护HeliOS嵌入式操作系统(OS)。HeliOS是一个功能齐全的操作系统&#xff0…

Linux复习3——管理文件系统2

修改文件权限命令 chmod 功能: chmod 命令主要用于修改文件或者目录的权限 只有文件所有者和超级用户可以修改文件或目录的权限 (1)使用数字表示法修改权限 所谓数字表示法是指将读取(r)、写入(w)和执行(x)分别以4、2、1来表示,没有授予的部分就表示…

ECharts散点图-气泡图,附视频讲解与代码下载

引言: ECharts散点图是一种常见的数据可视化图表类型,它通过在二维坐标系或其它坐标系中绘制散乱的点来展示数据之间的关系。本文将详细介绍如何使用ECharts库实现一个散点图,包括图表效果预览、视频讲解及代码下载,让你轻松掌握…

嵌入式驱动开发详解21(网络驱动开发)

文章目录 前言以太网框架ENET 接口简介MAC接口MII \ RMII 接口MDIO 接口RJ45 接口 PHY芯片以太网驱动驱动挂载wifi模块挂载后续 前言 linux驱动主要是字符设备驱动、块设备驱动还有网络设备驱动、字符设备驱动在本专栏前面已经详细将解了,网络设备驱动本文会做简要…

论文解读 | EMNLP2024 一种用于大语言模型版本更新的学习率路径切换训练范式

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 点击 阅读原文 观看作者讲解回放! 作者简介 王志豪,厦门大学博士生 刘诗雨,厦门大学硕士生 内容简介 新数据的不断涌现使版本更新成为大型语言模型(LLMs&#xff…

FFmpeg 的常用API

FFmpeg 的常用API 附录:FFmpeg库介绍 库介绍libavcodec音视频编解码核心库编码 (avcodec_send_frame, avcodec_receive_packet)。解码 (avcodec_send_packet, avcodec_receive_frame)。libavformat提供了音视频流的解析和封装功能,多种多媒体封装格式&…

trap命令

信号 linux信号是由一个整数构成的异步消息,可以由某个进程发给其他的进程,也可以在用户按下特定键发生某种异常事件时,由系统发给某个进程 信号列表 kill -l trap -l 在使用信号名时,需要省略SIG前缀 trap trap命令用于指定…

Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码 【AI辅助开发系列】

🎀🎀🎀【AI辅助编程系列】🎀🎀🎀 Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…

Llama 3 模型系列解析(一)

目录 1. 引言 1.1 Llama 3 的简介 1.2 性能评估 1.3 开源计划 1.4 多模态扩展 ps 1. 缩放法则 2. 超额训练(Over-training) 3. 计算训练预算 4. 如何逐步估算和确定最优模型? 2. 概述 2.1 Llama 3 语言模型开发两个主要阶段 2.2…

【多时段】含sop的配电网重构【含分布式电源】【已更新视频讲解】

1 主要内容 之前分享了很多配电网重构的程序,每个程序针对场景限定性比较大,程序初学者修改起来难度较大,本次分享一个基础程序,针对含sop的配电网重构模型,含风电和光伏,优化了33节点网络电压合理性&…

使用 Elastic AI Assistant 简化威胁情报报告

作者:来自 Tommy Bumford 了解 SRE 不断扩展的角色以及所需的新技能:成本管理和 AI。 通过 AI 驱动的报告为分析师提供支持 在不断发展的网络安全领域,威胁分析师不断被新的威胁情报 (threat intelligence - TI) 数据淹没。挑战不仅在于理解…