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

KNN算法:从电影分类到鸢尾花识别

 在机器学习的众多算法中,K近邻算法(KNN)以其简单易懂、贴近生活的特点,成为入门者的理想学习对象。

一、从电影分类说起:KNN的生活化场景

我们都知道,电影可以大致分为爱情片、动作片等类型,那这些类型是如何区分的呢?答案是通过电影中“打斗镜头次数”和“接吻镜头次数”这两个特征来划分。

表格中列出了6部已知类型的电影数据:

3部爱情片:《California Man》(3次打斗,104次接吻)、《He's Not Really into Dudes》(2次打斗,100次接吻)、《Beautiful Woman》(1次打斗,81次接吻),不难发现爱情片的共同特点是接吻镜头多、打斗镜头少。

3部动作片:《Kevin Longblade》(101次打斗,5次接吻)、《Robo Slayer 3000》(99次打斗,2次接吻)、《Amped II》(98次打斗,2次接吻),动作片则是打斗镜头多、接吻镜头少。

那么“?”这个未知电影(这里先留个悬念,它的类型未知,打斗镜头18次,接吻镜头90次)

正是基于这些已知电影的特征和类型,我们可以思考:如何判断未知电影的类型呢?这就引出了我们今天的主角——KNN算法。

二、KNN算法:“物以类聚”的简单智慧

        KNN算法,全称K近邻算法(k-Nearest Neighbor),它的核心思想非常朴素,就像我们常说的“物以类聚,人以群分”。每个样本都可以用它最接近的K个邻近样本的特征来代表,通过这K个邻近样本的类别,就能推断出未知样本的类别。

1. 算法步骤拆解

KNN算法的工作流程可以总结为以下5个步骤:

1. 计算已知类别数据集中所有点与当前未知点之间的距离;

2. 按照距离从小到大的次序进行排序;

3. 选取与当前点距离最小的K个点;

4. 确定这K个点所在类别的出现频率;

5. 返回这K个点中出现频率最高的类别,作为当前未知点的预测分类。

2. K值的关键作用

K值是KNN算法中一个非常重要的超参数,它的取值会直接影响分类结果。通过图示直观地展示了这一点:

当K=3时,新样本被判定为“蓝三角”对应的类别;

当K=5时,新样本则被判定为“红圆”对应的类别。

一般来说,K值不宜过大,通常不超过20。K值太小,模型容易受到噪声的影响,出现过拟合;K值太大,又可能模糊类别边界,导致欠拟合。在实际应用中,需要通过多次实验来选择最合适的K值。

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

在KNN算法中,如何衡量两个样本之间的“接近程度”呢?这就需要用到距离度量方法。这里运用到两种常用的距离度量方式:

1. 欧式距离

欧式距离也称欧几里得距离,是最常见的距离度量方式,它衡量的是多维空间中两个点之间的绝对距离。

在二维空间中,两点(x₁,y₁)和(x₂,y₂)之间的欧式距离公式为:

在三维空间中,公式则扩展为:

推广到n维空间,欧式距离公式为:(i从1到n)

2. 曼哈顿距离

曼哈顿距离是由十九世纪的赫尔曼·闵可夫斯基提出的,它指的是两个点在标准坐标系上的绝对轴距总和,就像出租车在城市中行驶的距离一样,只能沿着直角方向移动。

在平面上,坐标(x₁,y₁)的点与坐标(x₂,y₂)的点之间的曼哈顿距离公式为:

d(i,j)=|X1-X2|+|Y1-Y2|

 四、实战演练:KNN的应用案例

1. 鸢尾花分类

鸢尾花数据集是机器学习中的经典数据集,包含了3个品种的鸢尾花:Iris Versicolor、Iris Setosa、Iris Virginica,每个品种有50个样本,每个样本包含4个特征:花萼长度(sepal length)、花萼宽度(sepal width)、花瓣长度(petal length)、花瓣宽度(petal width)(单位:cm)。

基于KNN算法,实现鸢尾花分类的步骤如下:

加载数据集:

划分训练集和测试集:将数据分为 70% 训练集(用于训练模型)和 30% 测试集(用于评估模型),避免模型 “记住” 训练数据而失去泛化能力。

训练模型:创建KNN实例,设置K值为5,距离度量采用欧式距离,然后进行训练:

评估模型:计算训练集和测试集的得分,评估模型的性能:

预测结果:对测试集的样本进行预测:`y_pred = knn.predict(x_test)`

最后得到结果:

 2. 未知电影类型判断

回到开篇的电影分类问题,我们可以用KNN算法来判断未知电影的类型。通过计算未知电影与已知电影的距离,选取距离最近的K个电影,根据这K个电影的类型,就能推断出未知电影的类型。

计算未知电影与所有已知电影的距离(以欧式距离为例):

电影名称距离计算距离值类型
Beautiful Woman(爱情片)(18−1)2+(90−81)2​=289+81​=370​≈19.219.2爱情片
California Man(爱情片)(18−3)2+(90−104)2​≈20.520.5爱情片
He's Not Really into Dudes(爱情片)(18−2)2+(90−100)2​=256+100​≈18.818.8爱情片
Kevin Longblade(动作片)(18−101)2+(90−5)2​≈6889+7225​≈118.8118.8动作片
Robo Slayer 3000(动作片)距离更大(约 117.7)-动作片

筛选最近的 3 个邻居:均为爱情片(距离 18.8、19.2、20.5),因此预测未知电影为爱情片。

总结

KNN算法的优势在于简单直观,不需要复杂的模型训练过程,易于理解和实现。但它也有不足之处,比如计算成本较高,因为需要计算未知样本与所有已知样本的距离。通过学习,我们不仅掌握了KNN算法的基本原理和应用方法,更重要的是体会到了机器学习算法与实际生活的紧密联系。

http://www.lryc.cn/news/621984.html

相关文章:

  • 标准电子邮件地址格式(RFC 5322 里的 mailbox 语法)
  • 机器学习之PCA降维
  • 大模型系列——从训练到推理:网页数据在大语言模型中的新角色
  • Autosar之CanNm模块
  • ScanNet项目介绍
  • Rust 入门 泛型和特征-深入特征 (十五)
  • 从“写代码”到“定义需求”:AI编程工具如何重构软件开发的核心流程?
  • 【Mysql语句练习】
  • PCA降维全解析:从原理到实战
  • epoll发数据学习
  • Flink中的处理函数
  • 【完整源码+数据集+部署教程】小鼠行为识别系统源码和数据集:改进yolo11-RFAConv
  • JavaScript 原型机制详解:从概念到实战(附个人学习方法)
  • Flink中基于时间的合流--双流联结(join)
  • Java集合Map与Stream流:Map实现类特点、遍历方式、Stream流操作及Collections工具类方法
  • Transformer实战(11)——从零开始构建GPT模型
  • 【入门级-算法-6、排序算法:排序的基本概念冒泡排序】
  • 【100页PPT】数字化转型某著名企业集团信息化顶层规划方案(附下载方式)
  • Redis入门和简介
  • LeetCode 刷题【42. 接雨水】
  • 基于51单片机声控灯设计 智能声音+光线控制 楼道灯 声控开关
  • RabbitMQ面试精讲 Day 23:分布式事务与可靠投递
  • 【Redis】分布式系统的演化过程
  • [Oracle数据库] Oracle 常用函数
  • 接口芯片断电高阻态特性研究与应用分析
  • 基于 ArcFace/ArcMargin 损失函数的深度特征学习高性能人脸识别解决方案
  • 解释器模式C++
  • EN 61547照明产品的电磁兼容抗干扰标准
  • 图数据库如何构筑 Web3 风控防线 聚焦批量注册与链上盗转 悦数图数据库
  • eBPF技术介绍