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

数据清洗-缺失值填充-K-NN算法(K-Nearest Neighbors, K-NN算法)

目录

  • 一、安装所需的python包
  • 二、采用K-NN算法进行缺失值填充
    • 2.1代码(完整代码关注底部微信公众号获取)
    • 2.2以某个缺失值数据进行实战
      • 2.2.1代码运行过程截屏:
      • 2.2.2填充后的数据截屏:
  • 三、K 近邻算法 (K-Nearest Neighbors, KNN) 介绍
    • 3.1 K 近邻算法定义
    • 3.2 K 近邻算法的基本思想
    • 3.3 K 近邻算法的步骤
    • 3.4 K 近邻算法的距离度量
    • 3.5 K 近邻算法的优缺点
      • 3.5.1 优点
      • 3.5.2 缺点
    • 3.6 K 近邻算法的应用场景
    • 3.7 K 近邻算法的改进方法

感觉大家对原理性的东西不太感兴趣,那我就直接举例提供代码,以及详细的注释,大家自己对照改代码应用于你自己建立的模型吧。

完整代码关注博客底部微信公众号获得!

这些代码全部是我自己做数模竞赛时候自己用的代码。可以直接运行,记得修改文件路径。

一、安装所需的python包

pip install pandas scikit-learn scipy numpy joblib

二、采用K-NN算法进行缺失值填充

注意代码需要把自己的数据文件格式转换为CSV文件,并且把路径修改为自己文件所在的路径,不会转换的参考我此教程文件格式转换:EXCEL和CSV文件格式互相转换。

我知道大家对原理性的东西不感兴趣,我把他的原理介绍放在文末,需要写论文的同学自己拿去用,记得修改,否则查重率过不去。

2.1代码(完整代码关注底部微信公众号获取)

"""
K-NN
1.**K-最近邻 (K-Nearest Neighbors, K-NN)**: K-NN是一种
基于实例的学习,或是局部而似和将所有计算推识到分类之
后的情性学习。整个训练数据集都存储在横型中。K-NN算
法比其他技术更适合用于多类目分类问题,如果你对填补缺
失值的速度和精度的平衡感兴趣,这是一个不错的选择。这个的效果比牛顿插值法差一点,,而那些训练模型的那个可能是因为数据量太少,效果差,这是我的一点经验。
"""import pandas as pd
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from sklearn.impute import KNNImputer
from scipy.interpolate import interp1d
import numpy as np
import joblib# 读取数据,请将'缺失值填充.csv'替换为你的真实数据文件名
filename = '缺失值填充.csv'
data = pd.read_csv(filename, encoding='gbk')# 输出处理后的数据
print(original_data)
original_data.to_csv('knn填充.csv', index=False)

2.2以某个缺失值数据进行实战

注意:数据量较少,由自己构建,均有规律,
如下图:
在这里插入图片描述

构造缺失值,如下图:
在这里插入图片描述

运行代码查看填充后的数据怎么样,
运行代码如下图+填充后的截图:

2.2.1代码运行过程截屏:

在这里插入图片描述

2.2.2填充后的数据截屏:

在这里插入图片描述

说明:估计是数据量太小,或者缺失值太多,导致填充的效果一般(对于这种规律的数据使用牛顿插值法倒是挺不错的,数据量大的,可以使用神经网络遗传算法来进行缺失值填充,下面我都会介绍),但是你在进行数模比赛时候,需要说明为什么你要选用knn算法,说明他的原理即可,不必纠结填充的数据是否正确,因为你本身也不知道数据的正确性。

接下来我将分享其他我参加数模时候常用的几种数据填充的代码,都是我自己调试跑通过的,大家直接复制粘贴使用。

三、K 近邻算法 (K-Nearest Neighbors, KNN) 介绍

3.1 K 近邻算法定义

K 近邻算法 (K-Nearest Neighbors, KNN) 是一种基本的监督学习算法,主要用于分类和回归问题。KNN 算法基于“相似的输入具有相似的输出”这一假设,通过计算给定数据点与训练数据集中其他点的距离,找出与其最接近的 K 个邻居,然后根据这些邻居的类别或数值进行预测。KNN 算法的核心思想是:相似的样本往往具有相似的输出。

3.2 K 近邻算法的基本思想

KNN 算法没有显式的学习过程,也不需要构建显式的模型,它属于 惰性学习算法。KNN 的主要步骤如下:

  1. 计算距离:对于一个需要分类或回归的数据点,计算它与训练集中每个数据点的距离。常用的距离度量方法包括欧几里得距离、曼哈顿距离和闵可夫斯基距离等。
  2. 选择最近的 K 个邻居:根据计算出的距离,选择距离最小的 K 个邻居。
  3. 投票或平均
    • 分类问题:在分类问题中,KNN 算法根据 K 个邻居中出现次数最多的类别进行投票决定待预测点的类别。
    • 回归问题:在回归问题中,KNN 算法通过 K 个邻居的数值平均来预测待预测点的值。

3.3 K 近邻算法的步骤

  1. 选择参数 K 的值:决定选择多少个邻居参与投票或计算平均值。
  2. 计算距离:对于待分类或回归的样本,计算它与训练数据集中每个样本的距离。
  3. 选择最近的 K 个邻居:根据距离对训练数据进行排序,选取距离最近的 K 个样本。
  4. 进行分类或回归
    • 分类:在 K 个邻居中,选择出现次数最多的类别作为预测结果。
    • 回归:在 K 个邻居中,取目标值的平均值作为预测结果。

3.4 K 近邻算法的距离度量

常用的距离度量方法有:

  • 欧几里得距离 (Euclidean Distance)
    d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x, y) = \sqrt{\sum_{i=1}^n (x_i - y_i)^2} d(x,y)=i=1n(xiyi)2

  • 曼哈顿距离 (Manhattan Distance)
    d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ d(x, y) = \sum_{i=1}^n |x_i - y_i| d(x,y)=i=1nxiyi

  • 闵可夫斯基距离 (Minkowski Distance)
    d ( x , y ) = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 / p d(x, y) = \left( \sum_{i=1}^n |x_i - y_i|^p \right)^{1/p} d(x,y)=(i=1nxiyip)1/p

3.5 K 近邻算法的优缺点

3.5.1 优点

  • 简单易懂:KNN 算法简单直观,易于理解和实现。
  • 无需训练:由于 KNN 是惰性学习算法,它不需要显式的训练过程,计算开销集中在预测阶段。
  • 可用于分类和回归:KNN 算法既可以用于分类问题,也可以用于回归问题。

3.5.2 缺点

  • 计算复杂度高:对于大数据集,计算待预测点与所有训练数据点的距离需要大量的计算资源。
  • 内存开销大:需要存储所有的训练数据,在内存有限的情况下处理大规模数据可能存在困难。
  • 对不相关特征敏感:KNN 算法对数据中的不相关特征和噪声比较敏感,需要进行特征选择和数据预处理。
  • 参数选择困难:选择合适的 K 值是一个挑战,K 值过小容易导致过拟合,K 值过大容易导致欠拟合。

3.6 K 近邻算法的应用场景

KNN 算法广泛应用于以下场景:

  • 分类问题:例如,文本分类、图像分类、用户行为分类等。
  • 回归问题:例如,预测房价、预测股票价格等。
  • 异常检测:例如,检测信用卡欺诈、网络入侵检测等。
  • 推荐系统:例如,电影推荐、商品推荐等。

3.7 K 近邻算法的改进方法

  • 归一化或标准化数据:由于 KNN 算法对特征的尺度非常敏感,通常需要对数据进行归一化或标准化处理。
  • 使用加权 KNN:在基本的 KNN 中,所有邻居的权重相同,可以改进为对距离更近的邻居赋予更大的权重,以提高算法的准确性。
  • 使用降维方法:可以使用 PCA(主成分分析)或其他降维方法减少特征维数,以减少计算量和内存使用。

相关文章:

数据清洗-缺失值填充-K-NN算法(K-Nearest Neighbors, K-NN算法)

目录 一、安装所需的python包二、采用K-NN算法进行缺失值填充2.1代码(完整代码关注底部微信公众号获取)2.2以某个缺失值数据进行实战2.2.1代码运行过程截屏:2.2.2填充后的数据截屏: 三、K 近邻算法 (K-Nearest Neighbors, KNN) 介…...

爬虫----webpack

目录 一. 什么是webpack 出现的原因:同名函数 概念: 特征:大量缩进 webpack的格式 简单的webpack格式: 详细的webpack格式: 几个参数的运用 1. webpack数组形式 2. webpack对象格式 3.多个js文件打包 打印要扣的代码 …...

Spring Mybatis PageHelper分页插件 总结

1.简介 使用分页插件可以帮助我们自动分页&#xff0c;不用手动在写sql的分页逻辑。 2.配置步骤 在pom.xml中添加依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.11<…...

9、等保测评介绍

数据来源&#xff1a;9.等保测评介绍_哔哩哔哩_bilibili 信息系统等级测评 信息系统等级测评是测评机构依据国家信息安全等级保护制度的规定&#xff0c;按照相关管理规范和技术标准&#xff0c;对未涉及国家秘密的信息系统的安全等级保护状况进行检测评估的活动。 等级测评…...

解决Gson将长数字( json字符串)转换为科学记数法格式

Gson&#xff08;又称Google Gson&#xff09;是Google公司发布的一个开放源代码的Java库&#xff0c;主要用途为序列化Java对象为JSON字符串&#xff0c;或反序列化JSON字符串成Java对象。 依赖 Gradle: dependencies {implementation com.google.code.gson:gson:2.11.0 }…...

php环境搭建教程

PHP环境搭建教程 在构建和开发PHP应用程序时&#xff0c;搭建一个稳定、高效的PHP环境是基础且关键的一步。本教程将详细介绍如何在不同操作系统&#xff08;Windows和Linux&#xff09;上搭建PHP环境&#xff0c;包括Apache服务器的安装与配置、PHP的安装与配置、MySQL的安装…...

测试ASP.NET Core的WebApi项目调用WebService

虚拟机中部署的匿名访问的WebService&#xff0c;支持简单的加减乘除操作。本文记录在WebApi中调用该WebService的方式。   VS2022创建WebApi项目&#xff0c;然后在解决方案资源管理器的Connected Services节点点右键&#xff0c;选择管理连接的服务菜单。 点击下图圈红处…...

【用Java学习数据结构系列】对象的比较(Priority Queue实现的前提)

看到这句话的时候证明&#xff1a;此刻你我都在努力 加油陌生人 个人主页&#xff1a;Gu Gu Study 专栏&#xff1a;用Java学习数据结构系列 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹 喜欢的话可以点个赞谢谢了。 作者&#xff…...

快手视频怎么保存到相册?(详细操作)

随着短视频的流行&#xff0c;快手已经成为越来越多人日常生活的一部分。无论是搞笑片段、旅行记录&#xff0c;还是生活点滴&#xff0c;用户们每天都会在快手上浏览到大量有趣的视频。有时候&#xff0c;我们会遇到特别想保存的视频&#xff0c;想要分享到朋友圈&#xff0c;…...

为什么 ECB 模式不安全

我们先来简单了解下 ECB 模式是如何工作的 ECB 模式不涉及链接模式&#xff0c;所以也就用不着初始化向量&#xff0c;那么相同的明文分组就会被加密成相同的密文分组&#xff0c;而且每个分组运算都是独立的&#xff0c;这也就意味着可以并行提高运算效率&#xff0c;但也正是…...

『功能项目』事件中心处理怪物死亡【55】

本章项目成果展示 我们打开上一篇54回调函数处理死亡的项目&#xff0c; 本章要做的事情是用事件中心处理怪物死亡后的逻辑 首先打开之前事件中心脚本&#xff08;不做更改&#xff0c;调用即可&#xff09;&#xff1a; using System.Collections.Generic; using UnityEngine…...

一个安卓鸿蒙化工具

DevEco插件&#xff0c;为已有安卓项目鸿蒙化加速。 目前支持&#xff1a; 1、安卓Vector Assets转svg&#xff1b; 2、json转ets model&#xff1b; 3、kotlin model转ets model&#xff1b; 下载地址&#xff1a;andtoharplugin1.1.0 安装&#xff1a; deveco插件安装选硬…...

PyQt5库学习之QFileDialog.getExistingDirectory函数

PyQt5库学习之QFileDialog.getExistingDirectory函数 一、简介 QFileDialog.getExistingDirectory 是 PyQt5 中的一个函数&#xff0c;它提供了一个标准的目录选择对话框&#xff0c;允许用户选择一个已存在的目录。这个函数是 QFileDialog 类的一部分&#xff0c;通常用于打开…...

AUTOSAR_EXP_ARAComAPI的5章笔记(9)

☞ 返回总目录 5.4 骨架类&#xff08;Skeleton Class&#xff09; 骨架类是由AUTOSAR 元模型的服务接口描述&#xff08;SI description&#xff09;生成的。ara::com对生成的骨架类的接口进行了标准化。自适应平台&#xff08;AP&#xff09;产品供应商的工具链将生成一个完…...

京东-第2题-撞车

Powered by:NEFU AB-IN Link 文章目录 京东-第2题-撞车题意思路代码 京东-第2题-撞车 题意 一条单向单车道的道路上有n辆车&#xff0c;第i辆车位于 xi;&#xff0c;速度大小为 vi。 显然&#xff0c;如果车辆保持此速度行驶下去&#xff0c;在大多数情况下都会发生碰撞。 现…...

Vue3流程图插件-Vue Flow

1、安装&#xff1a;通过 npm 或 yarn 安装 Vue Flow。 npm install vueflow/core# 或者yarn add vueflow/core 2、引入&#xff1a;在你的 Vue 3 项目中引入 Vue Flow。 import { VueFlow, Background, Controls, MiniMap } from vueflow/core;3、使用&#xff1a;在 Vue…...

初始网络编程(下)

所属专栏&#xff1a;Java学习 1. TCP 的简单示例 同时&#xff0c;由于 TCP 是面向字节流的传输&#xff0c;所以说传输的基本单位是字节&#xff0c;接受发送都是使用的字节流 方法签名 方法说明 Socket accept() 开始监听指定端口&#xff08;创建时绑定的端口&…...

java计算机毕设课设—土地档案管理系统(附源码、文章、相关截图、部署视频)

这是什么系统&#xff1f; 资源获取方式在最下方 java计算机毕设课设—土地档案管理系统(附源码、文章、相关截图、部署视频) 土地档案管理系统是一种将传统纸质档案进行数字化管理的软件。通过该系统&#xff0c;用户能够高效地进行土地档案的存储、查阅、修改和删除等操作…...

第4步CentOS配置SSH服务用SSH终端XShell等连接方便文件上传或其它操作

宿主机的VM安装CENTOS文件无法快速上传&#xff0c;也不方便输入命令行&#xff0c;用SSH终端xshell连接虚拟机的SSH工具就方便多了&#xff0c;实现VM所在宿主机Win10上的xshell能连接vm的centos要实现以下几个环节 1、确保宿主机与虚拟机的连通性。 2、虚拟机安装SSH服务&…...

Spring:统一结果私有属性造成的前端无法访问异常报错问题

用户未填写任何评价 1.问题复现 &#xff08;1&#xff09;看一段代码 controller&#xff1a; import lombok.extern.slf4j.Slf4j; import org.ljy.testdemo.common.Result; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.w…...

Docker容器部署elasticsearch8.*与Kibana8.*版本使用filebeat采集日志

第 1 步&#xff1a;使用 Docker Compose 部署 Elasticsearch 和 Kibana 首先&#xff0c;我们需要创建一个 docker-compose.yml 文件来定义和运行 Elasticsearch 和 Kibana 服务。这种方式可以轻松管理两个容器的配置和网络。 创建 docker-compose.yml 文件 在一个新的文件夹…...

怎么解决cesium加载模型太黑,程序崩溃,不显示,位置不对模型太大,Cesium加载gltf/glb模型后变暗

有时候咱们cesium加载模型时候型太黑&#xff0c;程序崩溃&#xff0c;不显示&#xff0c;位置不对模型太大怎么办 需要处理 可以联系Q:424081801 谢谢 需要处理 可以联系Q:424081801 谢谢...

人机融合智能 | 可穿戴计算设备的多模态交互

可穿戴计算设备可以对人体以及周围环境进行连续感知和计算,为用户提供随时随地的智能交互服务。本章主要介绍人机智能交互领域中可穿戴计算设备的多模态交互,阐述以人为中心的智能穿戴交互设计目标和原则,为可穿戴技术和智能穿戴交互技术的设计提供指导,进而简述支持智能穿戴交…...

Java异步编程难题拆解技术

异步编程基础与核心概念 异步编程模型与同步模型的对比 Java中异步编程的常见场景&#xff08;IO密集型、高并发任务等&#xff09; 关键术语&#xff1a;Future、CompletableFuture、回调、事件循环 Java异步编程的核心API与框架 Future接口的局限性及基本用法 Completable…...

ZephyrOS 嵌入式开发Black Pill V1.2之Debug调试器

版本和环境信息如下&#xff1a; PC平台&#xff1a; Windows 11 专业版 Zephyr开发环境&#xff1a;v4.1.0 Windows 下搭建 Zephyr 开发环境 WeAct BlackPill V1.2开发板&#xff1a; WeAct STM32F411CEU6 BlackPill 核心板 Debug调试器&#xff1a; ST-LINK V2: ST-LINK V2 S…...

04 Deep learning神经网络编程基础 梯度下降 --吴恩达

梯度下降在深度学习的应用 梯度下降是优化神经网络参数的核心算法,通过迭代调整参数最小化损失函数。 核心公式 参数更新规则: θ t + 1 = θ t − η ∇ J ( θ...

Spring Boot 3.3 + MyBatis 基础教程:从入门到实践

Spring Boot 3.3 MyBatis 基础教程&#xff1a;从入门到实践 在当今的Java开发领域&#xff0c;Spring Boot和MyBatis是构建高效、可维护的后端应用的两个强大工具。Spring Boot简化了Spring应用的初始搭建和开发过程&#xff0c;而MyBatis则提供了一种灵活的ORM&#xff08;…...

【CSS-4】掌握CSS文字样式:从基础到高级技巧

文字是网页内容的核心载体&#xff0c;良好的文字样式设计不仅能提升可读性&#xff0c;还能增强网站的整体视觉效果。本文将全面介绍CSS中控制文字样式的各种属性和技巧&#xff0c;帮助您打造专业级的网页排版。 1. 基础文字属性 1.1 字体设置 (font-family) body {font-f…...

【软件工具】批量OCR指定区域图片自动识别内容重命名软件使用教程及注意事项

批量OCR指定区域图片自动识别内容重命名软件使用教程及注意事项 1、操作步骤1-5&#xff1a; 安装与启动&#xff1a;安装成功后&#xff0c;在桌面或开始菜单找到软件图标&#xff0c;双击启动。 导入图片&#xff1a;进入软件主界面&#xff0c;点击 “导入图片” 按钮&a…...

【超详细】英伟达Jetson Orin NX-YOLOv8配置与TensorRT测试

文章主要内容如下&#xff1a; 1、基础运行环境配置 2、Torch-GPU安装 3、ultralytics环境配置 4、Onnx及TensorRT导出详解 5、YOLOv8推理耗时分析 基础库版本&#xff1a;jetpack5.1.3, torch-gpu2.1.0, torchvision0.16.0, ultralytics8.3.146 设备的软件开发包基础信息 需…...