机器学习:knn算法

news2024/12/23 13:23:46

1、概述

        全称是k-nearest neighbors,通过寻找k个距离最近的数据,来确定当前数据值的大小或类别。K-近邻算法是一种基本而又有效的机器学习算法,用于分类和回归任务。它属于实例学习方法,或者说是一种基于规则的记忆方法。

2、基本概念

  • K值(Number of Neighbors, K)

    • K是算法中的一个关键参数,决定了评估新数据点时考虑的最近邻居的数量。

  • 特征空间(Feature Space)

    • 特征空间是数据点的所有特征组成的空间,每个数据点在这个空间中都有一个位置。

  • 距离度量(Distance Metric)

    • 用于计算特征空间中两个点之间的距离。常见的距离度量包括欧氏距离、曼哈顿距离和闵可夫斯基距离。

    • 欧氏距离(Euclidean Distance)(最常用):

      • 最常用的距离度量,定义为多维空间中两点之间的直线距离。公式为:

        𝑑(𝑝,𝑞)=

      • 其中 p 和 q 是两个点,pi 和 qi 是它们在第 i维的坐标。

    • 曼哈顿距离(Manhattan Distance)

      • 也称为城市街区距离,是两点在标准坐标系上的绝对轴距之和。公式为:

        𝑑(𝑝,𝑞)=

  • 超参数(Hyperparameter)

    • 算法运行之前需要设置的参数,K值就是K-NN算法的一个超参数。

  • 训练集(Training Set)

    • 用于训练模型的数据集,包含输入特征和对应的标签。

  • 测试集(Test Set)

    • 用于评估模型性能的数据集,通常不参与训练过程。

3、算法流程

  • 选择K值:确定考虑的邻居数量。

  • 确定距离度量:选择一种距离度量方法。

  • 对测试数据点进行距离计算:计算测试点与训练集中所有点的距离。

  • 找到K个最近邻居:根据距离排序,选择最近的K个点。

  • 进行决策:根据K个邻居的标签进行投票(分类)或计算平均值(回归)。

  • 输出预测结果:将决策结果作为新数据点的预测输出。

  • 例子

    

import numpy as np

#导入txt文件,numpy可以读取txt文件以二维数组的形式保存
data=np.loadtxt("datingTestSet2.txt")

#导入k-近邻分类器
from sklearn.neighbors import KNeighborsClassifier
#获取数组除最后一列的数据子集,特征集
# 特征集(Feature Set):
# 特征集是由多个特征(Feature)组成的集合,这些特征是输入到模型中用于进行预测的数据点。
# 特征可以是连续的数值,也可以是离散的类别。
# 在监督学习中,特征集通常不包含目标变量(即我们想要预测的值)。
# 例如,在房价预测模型中,特征可能包括房屋的大小、位置、建造年份等。
x=data[:,:-1]
#获取数组最后一列的数据子集,标签集
# 标签集(Label Set):
# 标签集是与特征集相对应的,包含了每个数据点的目标变量或结果。
# 在监督学习中,标签集是我们希望模型学习并预测的值。
# 标签可以是连续的数值(如回归问题)或离散的类别(如分类问题)。
# 继续上面房价的例子,标签集将包含每个房屋的实际售价。
y=data[:,-1]
#设置k-近邻分类,近邻数为10
neigh=KNeighborsClassifier(n_neighbors=10)
#将特征集和标签集训练分类器
neigh.fit(x,y)
#对指定一个数据预测
print(neigh.predict([[42383,12.36756,1.5236]]))
#对指定列表预测
predict_data=[[56789,08.12345,2.67890],
        [12345,67.23456,3.45678],
        [23456,78.34567,4.56789],
        [34567,89.45678,5.67890],
        [45678,90.56789,6.78901],
        [56789,01.23456,7.89012]]
print(neigh.predict(predict_data))

4、KNN算法优缺点

  • 优点

    • 简单易懂:无需训练过程,实现简单。

    • 无参数学习:除了K值外,没有其他需要调节的参数。

    • 适用于多分类问题。

  • 缺点

    • 计算成本高:特别是对于大规模数据集,每次预测都需要遍历整个训练集。

    • 对噪声敏感:训练数据中的异常值会对预测结果产生较大影响。

    • 存储需求大:需要存储全部训练数据。

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

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

相关文章

STM32外设篇:MPU6050

MPU6050简介 MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合可进一步得到姿态角(欧拉角),常应用于平衡小车、飞行器等需要检测自身姿态的场景。 3轴加速度计3轴陀螺仪传感…

各种国产操作系统,一个 U 盘搞定

熟悉 Windows 装机的朋友对老毛桃和大白菜这类装机工具应该不陌生。这两款流行的工具可以用来制作启动盘,方便进行系统安装、备份和还原等操作。它们集成了多种磁盘工具,并支持一个启动 U 盘安装多个版本的 Windows 系统,如 Windows 7、Windo…

css中的高度塌陷

CSS高度塌陷(或称为高度坍塌)是指在某些特定情况下,元素的高度无法被正确计算或显示的现象。这通常发生在具有浮动属性的元素或使用绝对定位的元素周围。 原因 高度塌陷通常发生在父元素包含着一个或多个浮动元素时。由于浮动元素被移出了正…

ChatTTS部署

1、创建conda环境 conda create -n TTS python3.10 conda activate TTS2、拉取源代码 # 从 GitHub 下载代码 git clone https://github.com/2noise/ChatTTS cd ChatTTS拉取模型文件 git clone https://www.modelscope.cn/pzc163/chatTTS.git ChatTTS-Model3、安装环境依赖 …

UDP详解/消息边界

本文旨在解释了为什么说UDP是不可靠,到底什么是UDP的消息边界,以及UDP是否会出现粘包和半包的问题 概念 UDP协议是一种面向非连接的协议,面向非连接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送,至于对方是否可以接收到这些数据内容,UDP协议无法控制…

HTML+CSS进阶用法 (下)——移动端适配、媒体查询和响应式布局

欢迎来到移动端适配方案的介绍!随着移动互联网的快速发展,越来越多的用户通过手机和平板电脑访问网站。为了确保网站能够在各种设备上呈现出最佳的视觉效果和用户体验,我们需要采取有效的适配策略。本篇文章将带你了解几种常用的适配方法&…

记事本打不开(保姆级教程)

问题可能是这样的: 1. 应用程序故障:记事本程序可能遇到了临时的应用程序故障或错误。 2. 系统文件损坏:系统文件损坏或丢失可能导致记事本无法正常启动。 3. 注册表问题:注册表中的条目错误或缺失可能影响记事本的加载。 4. 输入…

Blender的Python编程介绍

在Blender这个免费的开源3D设计软件中,最值得称道的一点是可以用Python程序来辅助进行3D设计,我们可以通过Python来调整物体的属性,生成新的物体,甚至生成新的动画等等。 在最近的一个项目中,我用Blender制作了一个动…

PVE 系统下虚拟机数据盘从IDE转换为VIRIO

一、卸载已经挂载的 IDE 数据盘 [rootlocalhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 29G 897M 29G 4% / devtmpfs 909M 0 909M 0% /dev tmpfs 920M 0 920M 0% /dev/shm tmpfs 920M 8.5M 912M 1% /run tmpfs 920M 0 920M 0% /sys/fs/cgro…

nginx的平滑升级及版本回滚

官方源码包下载地址:nginx: download 一、编译安装Nginx-1.24.0 [rootNginx ~]# dnf install gcc pcre-devel zlib-devel openssl-devel -y [rootNginx ~]# mkdir /nginx #创建目录,将nginx-1.24.0.tar.gz放在这个目录里 [rootNginx nginx]# tar…

C++的动态数组以及std:vector的优化

文章目录 静态数组动态数组代码背景第一种打印方式:使用 for 循环和索引解释 第二种打印方式:使用基于范围的 for 循环解释改进方式:避免拷贝 总结清理数组 代码示例代码分析输出结果总结 代码示例代码详解总结使用 reserve 的优点:使用 empl…

【考研数学】定积分应用——旋转体体积的计算(一文以蔽之)

目录 一、如何计算旋转体体积?思考一个小例子 二、旋转体体积的二重积分表达式 三、用真题,小试牛刀 定积分的应用中,有一类题是求解旋转体的体积问题。 相较于记忆体积计算公式,有一种通法求解体积更不容易出错:二重…

系统数据库介绍及实践

目录 案例 【题目】 【问题 1】(8 分) 【问题 2】(13 分) 【问题 3】(4 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于应用系统数据架构的说明,在答题纸上回答问题 1 至问题 3。 【题目】 某软件公司拟开发一套…

svn文件定时全量备份

在win11操作系统中,使用定时任务脚本的方式实现对SVN文件的定时备份 SVN备份脚本 1 创建脚本simpleBackup.bat 该脚本主要用于实现备份过程的信息展示 echo 正在备份版本库%1...... md %BACKUP_DIRECTORY%\%2 %SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_D…

蓝桥杯 双周赛 第16场 强者赛 题目复盘 (2024年8月10日)

6. 花魁之争 解题思路: 根据题意,对于每一次操作,每个仙女来说都取最优解,那第一次每个仙女都操作一次,这时候胜出的仙女,是一定赢的。所以,只要计算n个字符串操作一次的最优字符串,…

HarmonyOS NEXT - 通过 module 模块化引用公共组件和utils

demo 地址: https://github.com/iotjin/JhHarmonyDemo 代码不定时更新,请前往github查看最新代码 HarmonyOS NEXT 一、HAP & HSP & HAR介绍HAP官方介绍HAR官方介绍HSP官方介绍怎么理解App、HAP、HAR的关系HAR如何转换为HSPHSP模块如何快速切换成HAR模块 二…

【JavaSE】基础知识复习(六)(不全)

1.File与IO流 File类就是代表系统的文件 / 目录,IO流是用来处理File类的 File类 构造器 分隔符(三种) 第三种File.separator是跨平台的,获取当前操作系统的分隔符 常用方法 length() 返回文件大小(字节),如果是目录&am…

EcoDev Studio 与 gitlab【拉取项目,切换分支,再修改提交】

1 安装git工具 https://blog.csdn.net/mukes/article/details/115693833 2 创建空项目 3 推送gitlab 1、进入本地该项目目录下,右键Git Bash Here打开git命令窗口 2、初始化本地仓库: git init将本地项目的所有文件添加到暂存区: git a…

EMC学习笔记2——电磁兼容问题分析

分析一个电磁兼容问题一般从三方面入手,分别是骚扰源、敏感源、耦合路径。解决掉其中一个问题,就能解决大部分的电磁兼容问题。 例如:当骚扰源是雷电时,敏感源是电子线路时,我们需要消除的就是耦合电路。 耦合路径就是…

吴恩达机器学习-C2W1L1-神经元和层

在本实验中,我们将探索神经元/单元和层的内部工作原理。特别地,这个实验将与你在课程1中掌握的模型,回归/线性模型和逻辑模型进行类比。本实验室将介绍Tensorflow,并演示如何在该框架中实现这些模型。 包 Tensorflow和Keras Te…