kNN算法-概述

所谓kNN算法就是K-nearest neigbor algorithm。这是似乎是最简单的监督机器学习算法。在训练阶段,kNN算法存储了标签训练样本数据。简单地说,就是调用训练方法时传递给它的标签训练样本会被它存储起来。

kNN算法也叫lazy learning algorithm懒惰学习算法。因为在训练阶段传递给它的训练样本会延迟到预测阶段处理。换句话说,对于kNN算法,训练阶段的方法调用只是为了把训练样本存储到模型中而已,不会做什么具体的训练。这也是由它的算法特点决定。

在预测阶段,kNN算法会找到离查询点(预测点)最近的k个点,然后统计这个k个点的标签,最后以标签最多的结果作为查询结果。

所以kNN算法并没有训练的阶段。所以它计算预测点到样本点的距离的工作,只能够延迟到预测阶段,用来传入的查询点来完成计算。

kNN算法的预测是基于查询点到样本点的比较。所以在预测时,它的所有样本点必须加载到内存中,没有样本点,kNN算法是无法工作的,所以kNN又叫懒惰的基于实例(基于内存)算法。

在继续往下说前,我们先来了解两个概念:离散数据和连续数据,它们都是量化数据的类型,主要的区别在于它们所表示的信息类型。离散数据通常仅仅表示特定事件的信息,而连续数据通常表示随着时间变化的趋势。

  • 离散数据通常是一个确切的数字,我们能够数出来的,例如,一个班级的学生人数,鞋子的尺寸。相反,连续数据通常包括表示一系列信息的可测量值,如房价、股票价格。离散值是一个特定值,而连续值可以是任意值。
  • 在一个特定时间区间中,离散数据是一个常量,而连续数据则有多个不同的值。比如股价在交易时段中,价格就会一直在变化,可能会出现许多不同的价格,这是典型的连续数据。

kNN机器学习可以解决两大类问题:分类问题和回归问题。因为kNN算法会携带着训练数据来做预测,因此当数据集变得很大时,它的性能就会下降得很快。kNN算法一般用于一些简单的推荐系统、模式识别、数据挖掘、金融市场的预测、入侵检测等等。

kNN算法的距离度量问题

这个问题主要是解决哪些数据点离我们要查询的数据点比较近。所以查询数据点与其他数据点的距离是需要先算出来的。这个距离的度量有效地帮助我们形成决策的范围,简单来说就是帮我们找到那k个最近的点。

分类问题

对于分类问题,它是根据多数票来分配类别标签的。首先,用kNN算法构建的模型,要确定它要对什么东西分类,有多少类,然后将这些分类数据构建出来:一个样本数据包括了特征和标签数据,当这些数据给到模型训练时,它们都是一一对应的。这样模型才能基于正确的特征和对应的标签找到一个映射的方法(函数)完成输入到输出的映射。

这个多数票是怎么来的呢?首先kNN中的k代表了我们要从训练数据(kNN算法是一个用训练数据去做预测的算法)中找离我们要预测的数据点(这个数据点,我们只提供特征数据,目的是想让模型告诉我们,它属于哪个分类)最近的k个点,这k个数据点它们的分类可能是不同的,于我们对它们的分类标签进行统计(计票),最终的结果就是以票数多的数据点的分类标签作为这一次的预测结果。

在kNN算法中,我们还可以对于计票结果作一些要求,比如说如果分类类别只有两种的话,可以要求票数必须超过50%,如果是4个分类的话,可以要求票数必须超过25%。

请添加图片描述
在完成一个分类的预测前,我们要用到欧几里德距离来确定预测点与训练数据集中的点的距离,以此找出k个距离最近的点。

回归(Regression)问题

Regression,回归,“the act of going back,回去的行为",所以回归问题就是通过找到预测的数据(没有见过的数据,未知的数据)与过去已知数据的关系,以此来预测当前的数据点。房价预测、股价预测都是很典型的例子。

回归问题和分类问题很类似。区别在于分类问题是用于离散数据的,而回归问题则是用于连续数据的。

我们先说这么多先。后面继续介绍。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

给浮躁的面试者一个建议

哈喽,大家好,我叫人宅,关于找工作,大家心态非常浮躁,尤其是零零后,或者是九五后。本次为大家分享一下关于就业问题和就业态度。 我讲解的这些其实适合所有高科技行业。我这边就拿程序员为例。 如果你是刚毕…

【React】Redux与React - 环境准备

配套工具 在React中使用redux,官方要求安装俩个其他插件 - Redux Toolkit 和 react-redux 配置基础环境 使用 CRA 快速创建 React 项目 npx create-react-app react-redux安装配套工具 npm i reduxjs/toolkit react-redux启动项目 npm run start

【实战项目二】Python爬取豆瓣影评

目录 一、环境准备 二、编写代码 一、环境准备 pip install beautifulsoup4 pip intall lxml pip install requests我们需要爬取这些影评 二、编写代码 我们发现每个影评所在的div的class都相同,我们可以从这入手 from bs4 import BeautifulSoup import request…

Linux用户和用户组的管理

目录 前言一、系统环境二、Linux用户组的管理2.1 新增用户组2.2 删除用户组2.3 修改用户组2.4 查看用户组 三、Linux用户的管理3.1 新增用户3.2 删除用户3.3 修改用户3.4 查看用户3.5 用户口令(密码)的管理 总结 前言 本篇文章介绍如何在Linux系统上实现…

第103天: 权限提升-Linux 系统辅助项目脏牛Dirty内核漏洞SUIDGUID

项目下载地址 综合类探针: https://github.com/liamg/traitor 自动化提权: https://github.com/AlessandroZ/BeRoot 信息收集: https://github.com/rebootuser/LinEnum https://github.com/sleventyeleven/linuxprivchecker 漏洞探针&#xf…

实践分享:如何用小程序里的小组件做应用开发?

随着移动互联网的快速发展,小程序等轻量级应用平台日益成为用户获取信息和服务的重要渠道。而小组件也在其中扮演了至关重要的角色,不仅能够提升用户的交互体验,还能帮助开发者高效地构建功能丰富、界面美观的小程序。 本文中,我们…

STM32的FreeRtos的学习

首先就是去官网下载一个源文件:FreeRtos官网 下载下来的是一个zip文件,解压缩了。 然后再工程文件夹中创建个文件夹: 在这个文件夹中创建3个文件夹: 然后开始把下载下来的文件夹中的文件挑选出来放到我们的工程文件夹中&#xff1…

C++ 史上首次超越 C,跃至榜二

TIOBE 公布了 2024 年 6 月的编程语言排行榜。 C在本月的TIOBE指数中成功超越了C,成为新的第二名。它是一种被广泛应用于嵌入式系统、游戏开发和金融交易软件等领域的编程语言。这次的排名是C在TIOBE指数中的历史最高位,同时也是C语言的历史最低位。 T…

Java Web学习笔记29——Vue路由

Vue路由: 前端路由:点击菜单栏,地址栏会发生变化,会显示对应的组件。 URL中的Hash(#号后面的部分)与组件之间的对应关系。 Hash是/dept,那么就是部门管理组件; Hash是/emp, 那么…

【CS.AL】算法复杂度分析 —— 时间复杂度详解

文章目录 1 概述2 时间复杂度的详细分析2.1 常数时间复杂度(O(1))2.2 对数时间复杂度(O(log n))2.3 线性时间复杂度(O(n))2.4 线性对数时间复杂度(O(n log n))2.5 平方时…

iOS 17.5中的一个漏洞

i0S 17.5中的一个漏洞 iOS 17.5中的一个漏洞会使已刚除的照片重新出现,并目此问题似乎会影响甚至已擦除并出售给他人的 iPhone 和 iPad. 在2023年9月,一位Reddit用户根据Apple的指南擦除了他的iPad,并将其卖给了一位朋友。然而,这…

野火FPGA跟练(四)——串口RS232、亚稳态

目录 简介接口与引脚通信协议亚稳态RS232接收模块模块框图时序波形RTL 代码易错点Testbench 代码仿真 RS232发送模块模块框图时序波形RTL 代码Testbench 代码仿真 简介 UART:Universal Asynchronous Receiver/Transmitter,异步串行通信接口。发送数据时…

Sentinel1.8.6更改配置同步到nacos(项目是Gateway)

本次修改的源码在:https://gitee.com/stonic-open-source/sentinel-parent 一 下载源码 地址:https://github.com/alibaba/Sentinel/releases/tag/1.8.6 二 导入idea,等待maven下载好各种依赖 三 打开sentile-dashboard这个模块&#xf…

HTML开发 Vue2.x + Element-UI 动态生成表单项并添加表单校验

基于vue2.x 和element-ui 动态生成表单项并添加表单校验; 1、需求问题 如下图,项目有个需求,点击添加按钮,新增一行设备信息,且每项信息必填; 2、代码 看到这个需求,首先想到要使用v-for的形…

大众汽车裁员加速,38万元遣散费起步

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 几周前,大众汽车宣布了一项新的裁员计划。 一、裁员行动与额外福利并行 大众汽车近期在裁员行动上取得了显著进展,其遣散…

基于I2C协议的OLED显示(利用U82G库)

目录 一、I2C协议的基本原理和时序协议I2C通信协议的原理I2C时序基本单元I2C时序 二、建立工程RCC配置TIM1配置时钟树配置工程配置 三、U8g2移植精简u8g2_d_setup.c精简u8g2_d_memory.c编写移植函数stm32_u8g2.hstm32_u8g2.c 四、实验1.U82G的demo例程2.显示网名昵称中文取模步…

Pytorch 从零实现 Transformer

前言 之前虽然了解过 Transformer 架构,但是没有自己实现过。 最近阅读 transformers 库中 Llama 模型结构,于是想试着亲手实现一个简单的 Transformer。 在实现过程中加深了理解,同时发现之前阅读 Llama 中一些错误的地方,因此…

蓝桥杯--跑步计划

问题描述 小蓝计划在某天的日期中出现 11 时跑 55 千米,否则只跑 11 千米。注意日期中出现 11 不仅指年月日也指星期。 请问按照小蓝的计划,20232023 年小蓝总共会跑步锻炼多少千米?例如,55 月 11 日、11 月 1313 日、1111 月 55 日、44 月…

Linux:基本指令

文章目录 ls指令pwd指令cd指令touch指令mkdir指令rmdir指令 && rm指令cp指令man指令echo指令输出重定向追加重定向 cat指令输入重定向 mv指令which指令alias指令more && less指令head && tail指令事件相关的指令date显示时间戳 cal指令find指令grep指令…

c++之旅第十弹——IO流

大家好啊,这里是c之旅第十弹,跟随我的步伐来开始这一篇的学习吧! 如果有知识性错误,欢迎各位指正!!一起加油!! 创作不易,希望大家多多支持哦! 一.流的概念&…