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

用 KNN 算法解锁分类的奥秘:从电影类型到鸢尾花开

从电影分类说起:KNN 的核心思路

先来看一个有趣的例子。假设我们收集了一批电影的 “特征数据”:用 “打斗镜头数量” 和 “接吻镜头数量” 来描述一部电影,并且已经知道其中一些电影的类型(爱情片或动作片):

电影名称打斗镜头接吻镜头类型
California Man3104爱情片
He's Not Really into Dudes2100爱情片
Beautiful Woman181爱情片
Kevin Longblade1015动作片
Robo Slayer 3000992动作片
Amped II1890未知

现在问题来了:未知电影《Amped II》到底是爱情片还是动作片?

KNN 算法的思路特别 “实在”:看它 “最像” 哪些已知的电影。就像我们判断一个人是内向还是外向,会观察他最常来往的几个朋友的性格 ——KNN 的核心逻辑就是 “近朱者赤,近墨者黑”。

KNN 是怎么工作的?分 5 步走

KNN 的全称是 “K-Nearest Neighbor”(K 近邻),它的工作步骤简单到可以用 5 句话概括:

  1. 算距离:计算未知样本(比如《Amped II》)与所有已知样本(已分类的电影)的 “距离”。这里的 “距离” 不是物理距离,而是特征之间的差异(比如打斗镜头和接吻镜头的数值差)。

  2. 排顺序:把这些距离按从小到大的顺序排序,越近的样本说明和未知样本 “越像”。

  3. 选邻居:挑出距离最近的 K 个样本(K 是我们自己设定的数,一般不超过 20),这就是未知样本的 “近邻”。

  4. 看多数:统计这 K 个近邻的类型,哪种类型出现的次数最多,就是 “主流意见”。

  5. 下结论:把 “主流意见” 作为未知样本的分类结果。

实战:给《Amped II》贴标签

我们用上面的电影数据实战一下。

首先,计算《Amped II》(打斗 18,接吻 90)与其他已知电影的距离。这里我们用最常用的 “欧式距离”(可以理解为 “直线距离”),二维空间的公式是: \(d = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}\)

计算结果如下(只保留关键值):

  • 与《California Man》(3,104)的距离≈17.2
  • 与《He's Not Really into Dudes》(2,100)的距离≈13.1
  • 与《Beautiful Woman》(1,81)的距离≈18.4
  • 与《Kevin Longblade》(101,5)的距离≈108.6
  • 与《Robo Slayer 3000》(99,2)的距离≈107.6

排序后,最近的 3 个 “邻居”(K=3)是:《He's Not Really into Dudes》(爱情片)、《California Man》(爱情片)、《Beautiful Woman》(爱情片)。这 3 个都是爱情片,所以《Amped II》被分类为爱情片

距离怎么算?不止一种 “尺子”

刚才我们用了欧式距离,但 KNN 里还有其他 “尺子” 可以衡量距离,最常见的还有 “曼哈顿距离”。

  • 欧式距离:像乌鸦一样 “直线飞行” 的距离,适合衡量连续特征的差异(比如长度、数量)。 公式:\(d = \sqrt{\sum_{i=1}^{n}(x_i - y_i)^2}\)(n 为特征数量)

  • 曼哈顿距离:像出租车在城市里绕路一样,沿坐标轴 “直角转弯” 的距离总和,适合特征值是整数或离散的场景。 公式:\(d = \sum_{i=1}^{n}|x_i - y_i|\)

比如在电影分类中,用曼哈顿距离计算《Amped II》与《He's Not Really into Dudes》的距离:|18-2| + |90-100| = 16 + 10 = 26,同样能看出两者很接近。

从电影到花朵:KNN 的实际应用

KNN 的应用远不止给电影分类。在经典的 “鸢尾花分类” 问题中,它也能大显身手。

鸢尾花有 3 个品种(山鸢尾、变色鸢尾、维吉尼亚鸢尾),我们可以通过花萼长度、花萼宽度、花瓣长度、花瓣宽度这 4 个特征来区分它们。用 KNN 算法的步骤如下:

  1. 加载数据:用 Python 的 sklearn 库加载自带的鸢尾花数据集,包含 150 个样本的特征和标签。

  2. 拆分数据:把数据分成 “训练集”(80%,用来找 “邻居”)和 “测试集”(20%,用来检验效果)。

  3. 训练模型:设定 K 值(比如 5),选择距离度量(比如欧式距离),让模型 “记住” 所有已知样本的特征和类别。

  4. 评估效果:用测试集验证模型的分类准确率,一般来说,K 值合适的话,鸢尾花分类准确率能达到 90% 以上。

总结:KNN 的 “简单” 与 “不简单”

KNN 算法最大的优点是简单直观:不需要复杂的数学推导,像 “看邻居投票” 一样就能分类,而且能处理多类问题。但它也有 “小脾气”:

  • 计算量大:每预测一个样本,都要和所有已知样本算距离,数据量大时会变慢。
  • 依赖 K 值:K 太小容易 “以偏概全”,K 太大可能 “模糊重点”,需要根据数据调整。
  • 怕高维数据:特征太多时,距离计算会变得 “不准”(这就是 “维度灾难”)。

但这并不影响它成为机器学习的 “入门好工具”。下次当你纠结一部电影的类型时,或许可以试试用 KNN 的思路 —— 看看它和哪些已知电影 “最像”,答案可能就藏在 “邻居” 里。

从电影到花朵,从距离计算到分类决策,KNN 用最朴素的逻辑告诉我们:有时候,解决复杂问题的钥匙,就藏在 “相似性” 里。

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

相关文章:

  • 从电影分类到鸢尾花识别:KNN 算法实战指南
  • @[TOC](计算机是如何⼯作的) JavaEE==网站开发
  • MySQL 关键字总结,并结合 SQL 类型(DDL / DML / DQL / DCL / TCL) 说明每类关键字的作用、使用场景和示例
  • 华为实验综合小练习
  • Android RxJava变换操作符详解
  • MuMu模拟器Pro Mac 安卓手机平板模拟器(Mac中文)
  • 9.对象介绍
  • iOS App TF 上架多工具协作实战,一次高效的应用内测分发流程
  • 【数据结构初阶】--排序(三):冒泡排序、快速排序
  • Tomcat部署JDK8项目启动失败:系统化诊断指南
  • 【科研绘图系列】R语言绘制多种饼图
  • OpenCV 阈值处理
  • 基于定制开发开源AI智能名片与S2B2C商城小程序的H5页面小游戏营销模式创新研究
  • 综合案例:Python 函数知识整合 — 学生成绩管理系统
  • fastdds.ignore_local_endpoints 属性
  • 自动化框架pytest(1)
  • Vue3 Element-plus 封装Select下拉复选框选择器
  • Vue3 + Element Plus 实现可搜索、可折叠、可拖拽的部门树组件
  • 基于element-plus的基础表单样式
  • [微服务]ELK Stack安装与配置全指南
  • Pytest项目_day17(随机测试数据)
  • 大模型微调分布式训练-大模型压缩训练(知识蒸馏)-大模型推理部署(分布式推理与量化部署)-大模型评估测试(OpenCompass)
  • 专题:2025跨境电商市场布局、供应链与产业带赋能报告 |附130+份报告PDF、原数据表汇总下载
  • Sparse-ICP—(3) 点到面稀疏迭代最近点算法(matlab版)
  • PDF Replacer:高效便捷的PDF文档内容替换专家
  • 国内多光谱相机做得好的厂家有哪些?-多光谱相机品牌厂家
  • 8月4日实训考察:重庆五一职院走进成都国际影像产业园
  • ffmpeg-调整视频分辨率
  • 网站与政务新媒体自查情况的报告工具功能
  • Web攻防-大模型应用LLM搭建接入第三方内容喂养AI插件安全WiKI库技术赋能