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

K 近邻算法(KNN)及其应用解析

在机器学习领域,分类问题是重要的研究方向之一。K 近邻算法(KNN,k-Nearest Neighbor)作为一种简单直观的分类方法,凭借其易于理解和实现的特点,在实际场景中得到了广泛应用。本文将从算法原理、距离度量方式到具体应用案例,全面解析 KNN 算法。

一、从实际问题出发:分类需求的普遍性

生活中处处存在分类需求。以电影分类为例,我们可以通过电影中 “打斗镜头” 和 “接吻镜头” 的数量来区分其类型:爱情片通常包含更多接吻镜头(如《California Man》有 104 个接吻镜头、仅 3 个打斗镜头),而动作片则以打斗镜头为主(如《Kevin Longblade》有 101 个打斗镜头、仅 5 个接吻镜头)。当面对一部未知类型的电影(如《Amped II》,含 18 个打斗镜头和 90 个接吻镜头)时,如何科学判断其类型?这便需要借助分类算法 ——KNN 正是解决此类问题的有效工具。

二、KNN 算法的核心原理

1. 算法定义

KNN 算法的核心思想是:每个样本可以用其最接近的 K 个邻近样本的特征来代表。对于未知标签的新数据,通过参考其 “邻居” 的类别,即可确定自身类别。

2. 算法步骤

KNN 的操作流程可概括为以下五步:

  1. 计算距离:计算新数据与样本集中所有已知数据的距离(衡量特征相似度);
  2. 排序:按照距离从小到大的顺序对已知数据进行排序;
  3. 选邻居:选取距离最近的 K 个已知数据(即 “K 个邻居”);
  4. 统计频率:统计这 K 个邻居所属类别的出现频率;
  5. 确定类别:将出现频率最高的类别作为新数据的预测分类。

3. K 值的影响

K 值(近邻数量)的选择对结果至关重要,通常 K 不大于 20。例如:

  • 当 K=3 时,若新数据的 3 个最近邻居中多数为 “蓝三角” 类,则新数据被判定为 “蓝三角”;
  • 当 K=5 时,若 5 个最近邻居中多数为 “红圆” 类,则新数据被判定为 “红圆”。
    不同 K 值可能导致不同结果,需结合实际场景调整。

三、距离度量:衡量相似度的标尺

计算 “距离” 是 KNN 算法的关键环节,常用的距离度量方式有两种:

1. 欧式距离

欧式距离(欧几里得距离)是最常用的度量方式,衡量多维空间中两点的绝对直线距离:

二维空间:d=(x1​−x2​)2+(y1​−y2​)2​;

三维空间:d=(x1​−x2​)2+(y1​−y2​)2+(z1​−z2​)2​;

n 维空间:d=∑i=1n​(x1i​−x2i​)2​。

2. 曼哈顿距离

曼哈顿距离(出租车几何)由赫尔曼・闵可夫斯基提出,计算两点在标准坐标系上的绝对轴距总和:

平面上,坐标(x1​,y1​)与(x2​,y2​)的曼哈顿距离为:d=∣x1​−x2​∣+∣y1​−y2​∣。

四、KNN 的实际应用案例

1. 鸢尾花分类

鸢尾花数据集是机器学习中的经典案例,包含 3 个品种(Iris Setosa、Iris Versicolor、Iris Virginica),每个样本有 4 个特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度。使用 KNN 实现分类的步骤如下:

数据加载:通过sklearn库加载数据集iris = datasets.load_iris(),获取特征(iris.data)、标签(iris.target);

数据划分:将数据集分为训练集(70%)和测试集(30%),即x_train, x_test, y_train, y_test = train_test_split(...)

模型训练:创建 KNN 实例(如 K=5,使用欧式距离),并通过训练集拟合模型:knn = KNeighborsClassifier(n_neighbors=5, metric="euclidean"); knn.fit(x_train, y_train)

模型评估:计算训练集和测试集的得分(knn.score(...)),并通过测试集预测标签(y_pred = knn.predict(x_test))。

2. 未知电影类型判断

对于含 18 个打斗镜头和 90 个接吻镜头的未知电影《Amped II》,可通过 KNN 算法判断类型:

计算该电影与已知电影(如爱情片《California Man》、动作片《Kevin Longblade》等)的距离;

选取 K 个最近邻,统计其类别(爱情片或动作片);

以多数类作为《Amped II》的预测类型。

五、总结

KNN 算法以 “近朱者赤,近墨者黑” 的朴素思想为核心,无需复杂的模型训练过程,仅通过距离度量和多数表决即可完成分类,在电影分类、花卉识别等场景中表现出色。其关键在于合理选择 K 值和距离度量方式,以提升分类准确性。作为一种直观高效的机器学习方法,KNN 为解决实际分类问题提供了有力工具。

http://www.dtcms.com/a/333774.html

相关文章:

  • strings命令和findstr命令验证iso文件中ntkrnlmp.exe系统版本
  • 昇腾AI自学Day1-- 深度学习基础工具与数学
  • Lecture 9: Concurrency 2
  • AAAI爆款:目标检测新范式,模块化设计封神之作
  • fs模块_写入文件
  • 高可用双向存储服务GlusterFS
  • 【SpringBoot】SpringBoot 整合JDBC、Mybatis、Druid
  • PCA降维理论详解
  • Spring Boot 拦截器详解
  • 固定资产管理系统 OCR 识别功能技术解析
  • 无脑整合springboot2.7+nacos2.2.3+dubbo3.2.9实现远程调用及配置中心
  • 强制从不抱怨环境。
  • [Julia] 网络和流
  • vue2 + SimpleMindMap 制作思维导图
  • 野指针:程序崩溃的隐形杀手
  • 订单状态定时处理(Spring Task 定时任务)
  • 机械学习---词向量转化评价,附代码实例
  • 力扣(接雨水)——单调栈
  • 第454题.四数相加II
  • JavaWeb开发_Day12
  • 基于Selenium的web自动化框架
  • 电视同轴电缆全面指南:从基础到应用,批量测量一键计量
  • 第四章:大模型(LLM)】06.langchain原理-(2)langchain Chain的使用方法
  • 力扣top100(day04-03)--二分查找
  • MqSQL中的《快照读》和《当前读》
  • [论文笔记] WiscKey: Separating Keys from Values in SSD-Conscious Storage
  • Linux core dump
  • Flutter开发 webview_flutter的基本使用
  • MC0423铺砖块
  • Linux系统编程—Linux基础指令