当前位置: 首页 > 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.dtcms.com/a/333345.html

相关文章:

  • Linux运维新手的修炼手扎之第29天
  • C++中的适配器模式:灵活应对接口不兼容问题
  • JSX 与 JavaScript 的关系:从语法糖到生态系统
  • JavaWeb 欢迎页设置详解
  • 从 “碳足迹“ 到 “零碳圈“:上海零碳园区的改造密码
  • 容器技术:轻量虚拟化的未来
  • 状态流程框架(cola-component-statemachine)
  • 基于机器视觉的车道线检测与跟踪关键技术研究
  • GitHub 上 Star 数量前 18 的开源 AI Agent 项目
  • k8s注意事项
  • el-tree 编辑后保持现有展开状态
  • 【多模态大模型】--BLIP3
  • Backblaze 2025 Q2硬盘故障率报告解读
  • [TryHackMe](知识学习)缓冲区溢出
  • week1-[顺序结构]大海
  • 继续记录面试题
  • 优维HAO案例:某金融机构CMDB升级改造项目
  • Linux学习-软件编程(进程与线程)
  • 前端基础知识版本控制系列 - 01( 对版本管理的理解)
  • 基于 AutoGen 框架实现 - 电商客服订单处理演示
  • 【Java虚拟机】垃圾回收机制
  • 从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.15
  • 安全防范方案
  • 网络安全蓝队常用工具全景与实战指南
  • 从C到C++入门:C++有而C语言没有的基础知识总结
  • 机器学习之 KNN 算法学习总结
  • CK_Label_v51(外接供电版)
  • C#WPF实战出真汁07--【系统设置】--菜品类型设置
  • OpenCV---morphologyEx形态学操作
  • MCP Server Java 开发框架的体验比较(spring ai mcp 和 solon ai mcp)和实现示例对比