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

server/2024/12/27 6:49:07/

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


算法特点

优点:

  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.ppmy.cn/server/153550.html

相关文章

jsp | servlet | spring forEach读取不了对象List

导致这个问题的原因有很多的&#xff0c;这里讲到的只是原因之一 原因 taglib不认识forEach 解决办法 添加<% taglib uri"http://java.sun.com/jsp/jstl/core" prefix"c" %> &#xff08;我忘写这个东西了哈哈哈&#xff09;

音视频入门知识(七):时间戳及其音视频播放原理

七、时间戳 解码时间戳DTS和显示时间戳PTS 解码时间戳&#xff08;DTS&#xff09; 定义&#xff1a;读入内存中的比特流在什么时候开始送入解码器中进行解码 作用&#xff1a;DTS 主要应用在编码视频流中&#xff0c;其中 B 帧&#xff08;双向预测帧&#xff09;和 P 帧&…

datax ubuntu安装

一、datax 安装 #环境 JDK(1.8以上&#xff0c;推荐1.8) Python(2或3都可以) #下载datax https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz cd /root/datax tar -zxvf datax.tar.gz #自检&#xff0c;执行如下命令 python3 /root/datax/datax/bi…

微信小程序用户信息解密 AES/CBC/NoPadding 解密失败问题

解密文档如下 java springboot 微信小程序登录,获取获取手机号,获取unionId和解密用户信息 问题: 突然有一天解密失败,之前使用AES/CBC/NoPadding都可以,然后debug查看多出一些字符 原因: **AES/CBC/NoPadding**** 模式下解密后的数据可能包含额外的填充字符**&#xff08;例…

TDengine时序数据库

TDengine 现有版本 本地3.0,server收费 云数据库 TDengine cloud 云数据库收费&#xff0c;使用docker 如何在docker中使用TDengine 拉取镜像 docker pull tdengine/tdengine:latestdocker run -d -p 6030:6030 -p 6041:6041 -p 6043:6043 -p 6044-6049:6044-6049 -p 6044-…

ffmpeg源码分析(九)解协议

本文将聚焦于FFmpeg协议处理模块&#xff0c;以avformat_open_input函数为核心&#xff0c;详细剖析其在最新FFmpeg源码中的实现。 音视频处理流程简介 avformat_open_input概述 avformat_open_input是FFmpeg用于打开输入多媒体数据的关键函数。它通过统一的接口处理多种协议…

各种网站(学习资源及其他)

欢迎围观笔者的个人博客~ 也欢迎通过RSS网址https://kangaroogao.github.io/atom.xml进行订阅~ 大学指南 上海交通大学生存手册中国科学技术大学人工智能与数据科学学院本科进阶指南USTC不完全入学指南大学生活质量指北科研论 信息搜集 AI信息搜集USTC飞跃网站计算机保研 技…

产品初探Devops!以及AI如何赋能Devops?

DevOps源自Development&#xff08;开发&#xff09;和Operations&#xff08;运维&#xff09;的组合&#xff0c;是一种新的软件工程理念&#xff0c;旨在打破传统软件工程方法中“开发->测试->运维”的割裂模式&#xff0c;强调端到端高效一致的交付流程&#xff0c;实…