机器学习300问】95、什么是KNN算法?它和K-means什么关系?

一、KNN算法的定义

        KNN(K-Nearest Neighbors)算法,是一种简单而有效的监督学习方法。它既可以用在分类任务,也可用在回归任务中。KNN算法的核心思想:在特征空间中,如果有一个数据点周围的大多数邻居属于某个类别,则该数据点也应该被归为那么类别(分类任务中)。或者其预测值应该接近这些邻居的平均值(回归任务中)。

二、K值的选择

        K是一个重要的超参数,其大小直接影响预测的准确性。

  • K值较小可能导致过拟合,因为模型变得对噪声敏感;
  • K值较大可能导致欠拟合,因为模型可能开始考虑远处的、不那么相关的邻居。

        可以依据经验来选择,虽然经验可以在某些情况下提供指导,但确定K值通常依赖于更系统的方法。以下是几种常用的策略: 

(1)依据经验

        经验一:对于K的初试选择,K值常常在较小的范围内试探,比如从1开始,逐渐增加到如5、10、15等。这个范围的选择是为了平衡过拟合和欠拟合的风险。K值太小(如K=1)时,模型可能对噪声很敏感,容易过拟合;而K值太大时(比如大于训练样本数的平方根),模型可能会忽略局部特征,趋向于简单多数类,导致欠拟合。

        经验二:如果数据集较小,K值通常不宜设置得太大,以免引入过多的噪声或稀释关键信息。相反,大数据集可能允许较大的K值。

        经验三:有时推荐使用奇数K值以避免出现平票的情况,尤其是当类别分布较为均衡时。如果采用偶数K且遇到类别票数相同的情况,可能需要额外的规则来决定归属类别,如随机选择或考虑距离加权。

(2)交叉验证

        这是一种常用的模型选择方法,也可以用来确定K值。具体操作是将数据集分割成训练集和验证集,然后对于每个候选的K值,使用训练集训练模型并在验证集上评估性能。重复这一过程,选择在验证集上表现最好的K值。

三、KNN算法步骤

(1)训练阶段

        KNN算法非常不同,它的训练阶段不需要学习任何模型参数,它只是简单地存储所有的训练数据集,不做任何进一步的处理。

(2)预测阶段

① 数据准备与设置参数

        收集数据:首先,需要有一组已经分类好的训练数据集,每条数据包括多个特征和对应的标签(分类任务)或数值(回归任务)。特征选择与标准化:选择对分类或回归有用的特征,并对数据进行预处理,如缩放特征值到同一尺度,以消除特征间因量纲不同造成的影响。选择K值:这是最重要的超参数之一,决定了在分类或回归时要考虑的最近邻居的数量。

③ 计算距离

        对于每一个新的未知类别的样本,计算其与训练集中每个样本之间的距离。常用的距离度量方法有欧氏距离、曼哈顿距离、切比雪夫距离等。

④ 选择邻居并做出决策

        根据计算出的距离,找出距离最近的K个训练样本作为邻居。 

  • 分类任务:查看这K个邻居中哪个类别的样本最多,将新样本归为该类别。可以简单计数或距离加权(考虑距离远近)后决定。
  • 回归任务:取这K个邻居的目标值的平均值(或加权平均)作为新样本的预测值。

⑤ 评估模型并优化调整

        使用交叉验证或独立的测试集来评估模型的性能,包括准确率、召回率、F1分数等。根据评估结果,可能需要调整K值或考虑其他改进措施,如使用不同的距离度量方法、维度减少(如PCA)、或采用KD树等数据结构加速最近邻搜索。

四、KNN与K-means的关系

(1)KNN与K-means的区别

  • 应用场景不同:KNN用于有监督学习的分类和回归问题,而K-means用于无监督学习的聚类任务。
  • 对初始条件敏感性不同:K-means算法对初始聚类中心的选择非常敏感,不同的初始化可能导致完全不同的聚类结果。KNN算法则不受初始条件影响,因为它是基于查询点周围最近邻的直接比较,没有迭代优化聚类结构的过程。
  • K的意义不同:在KNN中,K代表考虑的最近邻居的数量,直接影响模型的复杂度和预测的稳定性。较大的K值可以减少噪声的影响,但可能使边界变得模糊;较小的K值则可能对噪声敏感,但边界更清晰。在K-means中,K代表期望形成的簇的数量,需要事先指定,且选择合适的K值对聚类效果至关重要。错误的K值可能导致过分割或欠分割问题。

(2)KNN的优缺点

优点:简单易懂,原理直观,实现起来相对直接。无需训练,没有复杂的训练过程,计算负担主要在预测时。既能分类又能回归

缺点:计算成本高,特别是对于大规模数据集,需要计算测试样本与所有训练样本之间的距离,非常耗时。存储需求大,需要存储整个训练数据集。对异常值敏感,训练数据中的异常点可能严重影响预测结果。特征尺度影响大,不同特征的尺度差异可能导致距离度量失真,通常需要进行特征缩放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/14626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5. JVM面试题汇总

Java全栈面试题汇总目录-CSDN博客 1. 说一下JVM的主要组成部分及其作用? JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。 Cl…

linux mail命令及其历史

一、【问题描述】 最近隔壁组有人把crontab删了,crontab这个命令有点反人类,它的参数特别容易误操作: crontab - 是删除计划表 crontab -e 是编辑,总之就是特别容易输入错误。 好在可以通过mail命令找回,但是mai…

【计算机网络】初识Tcp协议

💻文章目录 📄前言Tcp基础概念Tcp 的报文格式三次握手四次挥手 Tcp的滑动窗口机制概念超时重传机制高速重传 TCP传输控制机制流量控制拥堵控制慢启动 Tcp的性能优化机制延迟应答捎带应答 📓总结 📄前言 TCP三次握手、四次挥手&…

Java刷题总结(面试)

1、String类 String不可变 java 中String是 immutable的,也就是不可变,一旦初始化,其引用指向的内容是不可变的。 也就是说,String str “aa”;str“bb”;第二句不是改变“aa”所存储地址的内容&#xf…

Overleaf是什么?如何升级到标准版OR专业版?

1. Overleaf介绍 Overleaf是一个使用LaTeX进行多人协同编辑的平台,可以免费注册和使用,不用下载LaTeX软件,是最为著名的LaTeX在线协作系统。 主要特色是有LaTeX插件,编辑功能十分完善,有实时预览(即编即看…

Java 使用继承和重写父类方法写一个商品入库案例

package 练习.商品入库;import java.util.Scanner; // 抽象手机类 public abstract class Phone {//测试方法public static void main(String[] args){// 华为手机huawei h new huawei();h.setName("华为P40");h.setPrice(1999.99);h.setConfiguration("8128GB…

【排名公布】绵阳男科医院排名发布,绵阳高水男科医院究竟咋样啊?

【排名公布】绵阳男科医院排名发布,绵阳高水男科医院究竟咋样啊? 绵阳高水医院,是一家医保定点单位,地址位于绵阳市涪城区长虹大道北段113号。一所与国际接轨的现代化男子医院,有良好地就医环境,拥有多名有经验的专家…

基于Tensorflow实现了三个模型对MNIST数据集的识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 MNIST手写数字数据集是计算机视觉和机器学习领域的一个经典数据集,常用于评估图像…

攻防世界-mobile-easy-app详解

序言 这道题网上很多分析,但是分析的都是arm版本的,我选了arm64的来分析,arm64相比arm难度高一些,因为arm64编译器搞了inline优化,看起来略抽象 分析 这道题逻辑很简单,输入flag然后一个check函数验证&a…

改进rust代码的35种具体方法-类型(十八)-不要惊慌

上一篇文章 它看起来非常复杂,这就是为什么它贴合的塑料盖上用大号友好字母印上“不要恐慌”的原因之一。——道格拉斯亚当斯 此项目的标题将更准确地描述为更喜欢返回Result而不是使用panic!(但不要惊慌更吸引人)。 Rust的panic机制主要是为…

算法入门----小话算法(1)

下面就首先从一些数学问题入手。 Q1&#xff1a; 如何证明时间复杂度O(logN) < O(N) < O(NlogN) < O(N2) < O(2N) < O(N!) < O(NN)? A&#xff1a; 如果一个以整数为参数的不等式不能很容易看出不等的关系&#xff0c;那么最好用图示或者数学归纳法。 很显…

Python3 笔记:sort() 和 sorted() 的区别

1、sort() 可以对列表中的元素进行排序&#xff0c;会改变原列表&#xff0c;之前的顺序不复存在。 list.sort&#xff08;key&#xff0c; reverse None&#xff09; key&#xff1a;默认值是None&#xff0c;可指定项目进行排序&#xff0c;此参数可省略。 reverse&#…

rmxprt转换的3D模型只有一半?---模大狮模型网

在3D建模和渲染的工作流程中&#xff0c;我们经常需要用到各种转换工具来兼容不同平台或软件之间的模型格式。rmxprt(或其他类似的模型转换工具)就是其中的一种&#xff0c;它能够将模型从一种格式转换为另一种格式。然而&#xff0c;有时在转换过程中可能会遇到一些问题&#…

微服务雪崩问题、Sentinel(请求限流、线程隔离、服务熔断)、Seata分布式事务

文章目录 前言一、微服务保护二、Sentinel2.1 微服务整合2.2 簇点链路2.3 请求限流2.4 线程隔离2.5 服务熔断 三、分布式事务3.1 Seata3.1.1 Seata架构3.1.2 部署TC服务3.1.3 微服务集成Seata 3.2 XA模式3.3 AT模式 前言 微服务之间为什么会雪崩&#xff1f;怎么解决雪崩问题&…

Oracle体系结构初探:数据库启动与停止

往期内容 参数管理 控制文件添加 启动 在启动Oracle数据库时&#xff0c;我们一般会使用如下命令&#xff1a; startup 虽然命令只有一个&#xff0c;但其中却是经历了3个阶段&#xff0c;从下面执行 startup 命令返回也可以看出来。 总结为3个阶段&#xff1a; nomount&…

ubuntu下python导入.so库

ubuntu下python导入.so库 文章目录 ubuntu下python导入.so库1. 什么是.so文件&#xff1f;2. 使用python脚本编译.so库文件Reference 最近遇到了python导入c编译的 .so库的问题&#xff0c;发觉挺有意思&#xff0c;于是写下这篇blog以作记录。 1. 什么是.so文件&#xff1f; …

【简单介绍下深度神经网络】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

句柄降权绕过CallBacks检查

看到前辈们相关的文章&#xff0c;不太明白什么是句柄降权&#xff0c;于是专门去学习一下&#xff0c;过程有一点波折。 句柄降权 什么是句柄 当一个进程利用名称来创建或打开一个对象时&#xff0c;将获得一个句柄&#xff0c;该句柄指向所创建或打开的对象。以后&#xf…

什么是DNS缓存投毒攻击,有什么防护措施

随着企业组织数字化步伐的加快&#xff0c;域名系统&#xff08;DNS&#xff09;作为互联网基础设施的关键组成部分&#xff0c;其安全性愈发受到重视。然而&#xff0c;近年来频繁发生的针对DNS的攻击事件&#xff0c;已经成为企业组织数字化发展中的一个严重问题。而在目前各…

在 Visual Studio 2022 (VS2022) 中删除 Git 分支的步骤如下

git branch -r PS \MauiApp1> git push origin --delete “20240523备份” git push origin --delete “20240523备份”