当前位置: 首页 > ops >正文

KNN(k近邻算法)

这份文档围绕机器学习中的 K 近邻算法(KNN) 展开,以电影分类为核心案例引入,结合理论讲解、距离度量方法和鸢尾花分类实践,系统介绍了 KNN 算法的原理与应用

一。K 近邻算法(KNN)核心理论

 算法定义

KNN(k-Nearest Neighbor,K 近邻算法)的核心逻辑是:每个样本可由其最接近的 K 个 “邻居”(相似样本)来代表,未知样本的类别由这 K 个邻居中出现频率最高的类别决定。

 核心步骤

输入无标签的新数据,将其每个特征(如电影的 “打斗 / 接吻镜头数”)与样本集中的数据特征逐一对比;

计算新数据与所有已知样本的距离,按距离从小到大排序;

选取距离最小的K 个样本(K 常不大于 20);

统计这 K 个样本中各分类的出现频率;将频率最高的分类作为新数据的预测类别。

K 值的影响(关键示例)

文档通过可视化案例展示了 K 值对分类结果的影响:

K=3时,未知样本(图中 “X”)的 3 个最近邻居中 “蓝三角” 占比更高,故判定为 “蓝三角” 类;

K=5时,未知样本的 5 个最近邻居中 “红圆” 占比更高,故判定为 “红圆” 类。 这说明 K 值的选择会直接影响分类结果,需根据场景合理设定。

二、距离度量:KNN 的 “相似性标准”

判断样本是否为 “邻居”,需通过距离度量量化样本间的相似度,文档重点介绍两种常用方法:

 欧式距离(最常用)

欧式距离即 “多维空间中两点的绝对距离”,适用于连续型特征:

二维空间(如电影的 “打斗 / 接吻镜头”):距离公式为 \(d=\sqrt{(x_1-x_2)^2+(y_1-y_2)^2}\)(文档中公式表述略有笔误,核心是 “坐标差平方和的平方根”);、

三维空间:需加入 z 轴坐标差的平方项;n 维空间(如多特征数据):公式扩展为 \(d=\sqrt{\sum_{i=1}^n (x_{1i}-x_{2i})^2}\),即所有特征维度坐标差平方和的平方根。

曼哈顿距离

由闵可夫斯基提出,又称 “出租车距离”,指 “两点在坐标系上的绝对轴距总和”:

平面上两点\((x_1,y_1)\)与\((x_2,y_2)\)的曼哈顿距离为 \(d=|x_1-x_2|+|y_1-y_2|\),更适用于特征值为整数或离散型的场景。

三、实践练习:KNN 的实际应用

 鸢尾花分类(基于 sklearn 工具)

文档以经典的 “鸢尾花分类” 为例,展示了 KNN 算法的代码实现流程:

数据加载:加载 sklearn 内置的鸢尾花数据集(iris=datasets.load_iris()),数据集包含 4 个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)和 3 个类别(山鸢尾、变色鸢尾、维吉尼亚鸢尾);

数据划分:用train_test_split将数据按 7:3 划分为训练集(x_train,y_train)和测试集(x_test,y_test);

模型训练:创建 KNN 实例(设 K=5,距离度量为欧式距离),通过fit(x_train,y_train)训练模型;

模型评估与预测:用score计算训练集 / 测试集准确率,用predict(x_test)预测测试集样本类别。

总结

文档以 “案例引入→理论讲解→实践落地” 的逻辑,清晰阐释了 KNN 算法的核心(“找邻居定类别”)、关键参数(K 值)、距离度量方法,并用鸢尾花分类、电影分类两个实例,让算法从理论走向应用,突出了 KNN“简单直观、无需训练过程(lazy learner)” 的特点,适合作为机器学习入门的基础教学内容。

http://www.xdnf.cn/news/17768.html

相关文章:

  • Chrome插件开发实战:从架构到发布全流程
  • 准备用Qt6 重写音视频会议系统服务端
  • 开源 Arkts 鸿蒙应用 开发(十五)自定义绘图控件--仪表盘
  • 开源 Arkts 鸿蒙应用 开发(十六)自定义绘图控件--波形图
  • 【Javaweb学习|黑马笔记|Day1】初识,入门网页,HTML-CSS|常见的标签和样式|标题排版和样式、正文排版和样式
  • 前端css学习笔记6:盒子模型
  • 国内著名AI搜索优化专家孟庆涛发表《AI搜索内容可信度评估综合指南》
  • liteflow
  • Vue3中的ref与reactive全面解析:如何正确选择响应式声明方式
  • Java List 集合详解(ArrayList、LinkedList、Vector)
  • 水印消失术!JavaAI深度学习去水印技术深度剖析
  • 传输层协议TCP(3)
  • Flink Stream API 源码走读 - socketTextStream
  • 集成电路学习:什么是Machine Learning机器学习
  • 从单机到分布式:用飞算JavaAI构建可扩展的TCP多人聊天系统
  • 【力扣56】合并区间
  • easyexcel模板导出Map数据时空值列被下一行列非空数据覆盖
  • 从零开始的云计算生活——第四十三天,激流勇进,kubernetes模块之Pod资源对象
  • 使用Docker和Miniconda3搭建YOLOv13开发环境
  • 深入解析 Spring IOC 容器在 Web 环境中的启动机制
  • 小知识:for of,for in与forEach
  • Spark Shuffle机制原理
  • 图论(5)最小生成树算法
  • 计算机视觉Open-CV
  • OpenCV图像处理2:边界填充与平滑滤波实战
  • 23.Linux : ftp服务及配置详解
  • C语言指针使用
  • Python网络爬虫(二) - 解析静态网页
  • 【ai写代码】lua-判断表是否被修改
  • 分布式事务、锁、链路追踪