ML 系列:机器学习和深度学习的深层次总结(07)数据预处理—解决缺失值、异常值和错误数据

news2024/9/23 5:17:46

文章目录

  • 一、说明
  • 二、数据预处理
  • 三、缺失值
  • 四、数据集中可能会出现多种类型的缺失值:
  • 五、处理缺失值的方法
  • 六、结论

一、说明

在AI数据挖掘中,对原始数据的预处理是必须的技术手段,本篇将对数据预处理的一系列注意事项进行展示。

二、数据预处理

在这里插入图片描述

3 级清理(缺失值、离群值和错误)
此级别的数据清理是最困难的数据清理级别,因为它需要更深入地了解数据预处理的分析目标。在第一级,我们清理了表格,而不管数据结构或记录的值如何。在第二级中,我们关注的是拥有一个支持我们分析目标的数据结构,但我们仍然没有太多关注记录值的正确性或适当性,我们在第三级中解决了这个问题。在第三级数据清理中,我们将重点关注记录值,并采取措施确保检查与数据中记录值相关的缺失值、异常值和错误这三个问题。是。首先,我们确保识别出数据中的缺失值,并调查发生这种情况的原因,并采取适当的措施来解决这些问题,以确保记录的值正确且无误。然后,确保在数据中识别出异常值,并采取适当的措施来修复它们。

第三级数据清理与第二级数据清理类似,涉及数据分析的目标和工具。一级数据清理可以单独进行,与数据分析的目标和工具无关。

三、缺失值

在数据分析中,缺失值是指特定观测值或变量中没有值。缺失值可能由于各种原因而发生,例如数据输入错误、设备故障,甚至是有意删除。缺失值可以表示为空单元格或特殊字符,例如“N/A”、“-9999”或“NaN”或空值。

缺失值的管理是数据清理和预处理的一个重要方面,因为它会对数据分析的准确性和有效性产生重大影响。处理缺失值的方法多种多样,包括插补、删除以及使用可以处理缺失数据的算法,方法的选择取决于数据的具体性质和目标。在图 2 中,我们有一些缺失值的虚拟数据,这些值可以使用 “isna()” 命令来识别。

以下是创建数据并将其转换为 CSV 文件的代码:

import csv

data = [
    ['Column_A', 'Column_B', 'Column_C'],
    [10, 20, 30],
    ['', 40, ''],
    [50, '', '']
]

with open('output.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerows(data)

我们可以用 pandas 读取和展示它:

import pandas as pd

df = pd.read_csv('output.csv')
df.head()

在这里插入图片描述

下面的代码标识这些缺失值并计算它们在每列中的数量。

print('Number of missing values:')
for col in df.columns:
    n_MV = sum(df[col].isna())
    print(f'{col}: {n_MV}')

输出:

Number of missing values:
Column_A: 1
Column_B: 1
Column_C: 2
现在,我们已经知道如何检测缺失值,我们需要将注意力转向了解导致这些值缺失的原因。在我们寻求处理缺失值的过程中,我们首先需要知道它发生的原因。在下文中,我们将讨论哪些情况会导致 missing 值。

缺失值的原因
出现缺失值的原因可能有很多。了解值缺失的原因是我们能够有效管理缺失值的最关键信息。以下列表提供了值可能缺失或缺失的最常见原因:

·人为错误

·受访者可以拒绝回答调查问题。

·参与调查的人不理解问题。

·提供的值是一个明显的错误,因此已被删除。

·没有足够的时间回答问题。

·故意删除和忽视数据收集(可能是出于欺诈目的)

·由于缺乏有效的数据库管理而导致记录丢失

·第三方操纵或阻止数据收集

·传感器故障

·编程错误

在处理数据时,有时我们所拥有的只是数据,没有人可以询问有关数据的问题。因此,这里重要的是对数据感到好奇,并了解缺失值背后的原因。但是,如果我们可以访问了解数据的人,则查找缺失值原因的最佳方法是询问该人。无论是什么导致了缺失值,从数据分析的角度来看,我们可以将所有缺失值分为三种类型。了解这些类型对于决定如何管理它们非常重要。

缺失值的类型
在这里插入图片描述

图 3. 缺失值的类型

四、数据集中可能会出现多种类型的缺失值:

  1. 完全随机缺失 (MCAR)
    当缺失数据与数据集中的任何其他变量无关时。换句话说,缺失数据是完全随机的,并且没有系统模式。当缺失值被分类为 MCAR 时,具有缺失值的数据对象可以是任何数据对象。例如,如果空气质量传感器由于 Internet 连接的随机波动而无法与其服务器通信以存储记录,则缺失值为 MCAR 类型。这是因为任何数据对象都可能发生 Internet 连接问题,但对于特定数据对象,这些问题完全随机发生。

  2. 随机缺失 (MAR)
    这种情况是指缺失数据与数据集的其他变量相关,但与缺失数据本身无关。这意味着缺失的概率取决于数据集中的其他观测变量。换句话说,缺失不是随机的,而是可以用数据集中的其他变量来解释的。例如,假设我们有一个数据集,其中包含有关收入和教育水平的信息,但某些观测值没有收入值。在这种情况下,缺失的数据可能与教育水平有关,但与收入本身无关。特别是,受教育程度较高的人不得输入收入值。这是 MAR 的一个示例,因为缺失数据的概率取决于观察到的变量(教育水平),而不是缺失变量(收入)。处理 MAR 的方法之一是使用根据观测数据估计缺失值的插补方法。有许多插补方法,包括均值插补、回归插补和多重插补。插补方法的选择取决于数据集的具体特征和感兴趣的研究问题。

  3. 失踪非随机 (MNAR)
    这种类型的缺失数据最难处理,因为当缺失的概率取决于未观察到的数据时,就会发生这种情况,并且可能与数据集未捕获的因素有关。换句话说,缺失不是随机的,不能用数据集中的任何观察或测量变量来解释。例如,假设我们有一个数据集,其中包含有关收入、教育水平和工作满意度的信息,但某些观测值没有收入值。在这种情况下,缺失数据可能与收入本身有关,因此收入较高的个人可能没有记录相关的收入金额(例如,逃税)。这是 MNAR 的一个例子,因为缺席的概率取决于未观察到的变量 (收入)。处理 MNAR 具有挑战性,因为缺失数据与难以或不可能测量或控制的未观察到的因素有关。插补方法可能不适用于 MNAR,因为这些方法假定缺失仅与观测变量相关。相反,数据分析师可能需要使用更复杂的统计方法,例如最大似然估计或贝叶斯建模,这些方法可以解释缺失数据机制并估计所需的参数。需要注意的是,MNAR 会导致偏倚并影响统计结论的有效性。

了解数据集中缺失值的类型对于选择适当的方法来处理数据非常重要。一般来说,MCAR 是最容易错过的类型,其次是 MAR,而 MNAR 是最难的。

五、处理缺失值的方法

有四种不同的方法可以处理缺失值:

  1. 第一种方法:保持缺失值不变。
    这种方法保留了缺失值并进入了数据预处理的下一阶段。在以下两种情况下,此方法是处理缺失值的最佳方法:

我们在必须与他人共享数据的情况下使用此策略,并且我们不是唯一打算使用数据进行分析的人。通过这种方式,我们还允许其他人根据自己的分析需求决定如何处理缺失值。
如果数据分析目标和我们使用的工具都可以处理缺失值,则最佳方法是保留它们。例如,可以采用 K 最近邻 (KNN) 算法来解决缺失值,而无需删除数据。
2. 第二种方法:删除具有缺失值的一行或多行数据。
应非常谨慎地选择这种方法,因为它可能会导致数据集出现偏差,还会遗漏有价值的信息。例如,当数据集中的缺失值为 MNAR 或 MAR 类型时,我们会尽可能避免删除具有缺失值的数据。这是因为样本的某一部分被排除在数据集之外。

即使缺失值是 MCAR 类型,我们也应该首先尝试找到其他方法来处理这些值,然后再继续删除行。当没有其他方法可以处理缺失值时,应将此方法视为最后的手段。

  1. 第三种方法:删除包含缺失值的特征(属性或列)
    当数据集中的大多数缺失值来自一个或两个特征时,我们可能会考虑将特征删除作为处理缺失值的一种方式。当然,如果该功能是我们无法继续项目的关键功能,那么这种方法将不起作用。但是,如果要素对于工程不是必需的,则移除缺失值较大的要素可能是一种不错的方法。当要素中的缺失值数量足够大(大约超过数据的 25%)时,估计和插补缺失值将变得毫无意义,并且删除要素比估计缺失值要好。

  2. 第四种方法:估计一个值并替换缺失值
    在这种方法中,我们使用知识和分析工具来填充缺失值。我们用另一个值替换缺失值,因为我们知道这可能会使分析产生偏差。如果缺失值是 MCAR 或 MAR 类型,并且我们选择的方法无法处理具有缺失值的数据集,则插补缺失值可能是最佳方法。

估计缺失值的替换项有四种常规方法,我们在下面介绍:

A. 使用中心趋势值(如平均值、中位数或众数)进行插值:

此方法更适合于缺失的 MCAR 值。

B. 将更相关的数据组的集中趋势值归因于缺失值:此方法更适合 MAR 缺失值。

C. 回归分析:该方法通常效率不高,但如果我们必须处理具有 MNAR 类型缺失值的数据集,则此方法更适合此类数据集。

D. 插值:当数据集为时间序列数据集且缺失值为 MCAR 类型时,此方法更合适。

注意:估计和插补过程中的一个常见错误是,我们想用最准确的替代项来估算缺失值,这不是正确的想法。插补时,我们的目标不是最好地预测缺失值的值,而是将它们替换为对分析造成的偏差最小的值。例如,对于聚类分析,如果数据集具有 MCAR 缺失值,则选择整个总体的集中趋势是最好的方法。这是因为 central tendency 的值在对数据对象进行分组的过程中充当中立投票。

注意: 在本章中,讨论的技术和方法基于 Roy Jafari 的《Hands-On Data Preprocessing in Python》一书,该书为理解和实施有效的数据预处理工作流提供了有价值的参考。

六、结论

在机器学习系列的第 7 部分中,我们深入探讨了 3 级清理,它包括三个主要部分:1. 缺失值,2. 异常值和 3. 错误。在这篇文章中,我们重点介绍了缺失值并探讨了与之相关的各个方面,包括缺失值出现的原因、缺失值的不同类型的缺失值以及有效处理缺失值的方法。

在即将发布的博文机器学习系列:第 8 天 — 预处理(第 3 部分)中,我们将把注意力转移到异常值上。异常值是与数据集中的大多数观测值明显不同的数据点。它们可能由于各种原因而产生,例如测量错误、数据输入错误或数据中真正的极值。检测和处理异常值至关重要,因为它们可能会对分析和建模过程产生不成比例的影响。

如果您喜欢这篇文章并希望支持我,请确保:

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

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

相关文章

JavaEE: 深入探索TCP网络编程的奇妙世界(五)

文章目录 TCP核心机制TCP核心机制六: 拥塞控制为什么要有拥塞控制?动态调整的拥塞控制拥塞控制中,窗口大小具体的变化过程 TCP核心机制七: 延时应答TCP核心机制八: 捎带应答 TCP核心机制 前一篇文章 JavaEE: 深入探索TCP网络编程的奇妙世界(四) 书接上文~ TCP核心机制六: 拥…

数据结构:二叉树OJ题(基础版)

前言 更完两期二叉树的知识之后,来做几道oj题巩固一下基础 一、翻转二叉树 链接:leetcode链接 还是分治思想,将问题分解成左子树和右子树交换,遇到空树停止 采用递归算法做题 TreeNode* invertTree(TreeNode* root) {if(root …

2D目标检测常用loss

在2D目标检测任务中,常用的损失函数(Loss)主要用于优化以下三个关键方面: 类别分类(Classification):用于区分检测到的对象属于哪一类。边界框回归(Bounding Box Regression&#x…

Spring Boot蜗牛兼职网:全栈开发

第4章 系统设计 4.1 系统体系结构 蜗牛兼职网的结构图4-1所示: 图4-1 系统结构 登录系统结构图,如图4-2所示: 图4-2 登录结构图 蜗牛兼职网结构图,如图4-3所示。 图4-3 蜗牛兼职网结构图 4.2开发流程设计 系统流程的分析是通…

在Web开发中使用和风天气接口

介绍 和风天气是一个提供全球天气预报和气象数据的服务平台,支持多种语言,提供实时天气、未来天气预报、空气质量指数、生活建议等多种气象数据,可以广泛用于网页开发、移动应用和物联网设备等场景。 开发文档:文档 | 和风天气开…

intellij idea 控制台运行java出现中文乱码的解决方法

原因: 字符编码不一致: 当你在intellij idea使用了UTF-8编码,而在控制台使用了其他编码(比如gbk),就可能导致乱码。 文件读写编码问题: 如果读取文件时使用的编码与文件实际编码不一致&#xf…

Chainlit集成LlamaIndex实现知识库高级检索(自动合并检索)

检索原理 自动合并检索 自动合并检索原理,和我的上一篇文章的检索方案: 将文本分割成512大小(一般对应段落大小)和128(一般对句子大小不是严格的句子长度)大小两种分别存储到索引库,再用llama_…

《深度学习》—— 卷积神经网络(CNN)的简单介绍和工作原理

文章目录 一、卷积神经网络的简单介绍二、工作原理(还未写完)1.输入层2.卷积层3.池化层4.全连接层5.输出层 一、卷积神经网络的简单介绍 基本概念 定义:卷积神经网络是一种深度学习模型,通常用于图像、视频、语音等信号数据的分类和识别任务。其核心思想…

如何在Markdown写文章上传到wordpress保证图片不丢失

如何在Markdown写文章上传到wordpress保证图片不丢失 写文日期,2023-11-16 引文 众所周知markdown是一款nb的笔记软件,本篇文章讲解如何在markdown编写文件后上传至wordpress论坛。并且保证图片不丢失(将图片上传至云端而非本地方法) 一&…

通信工程学习:什么是NFVI网络功能虚拟化基础设施层

NFVI:网络功能虚拟化基础设施层 NFVI(Network Functions Virtualization Infrastructure)即网络功能虚拟化基础设施层,是NFV(Network Functions Virtualization,网络功能虚拟化)架构中的一个重要…

精准农业中遥感技术应用(五)- 一站式遥感数据服务平台AIEarth

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、领域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&…

【LeetCode:116. 填充每个节点的下一个右侧节点指针 + BFS(层次遍历)】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

redis主从复制的理论和实战详细教程

0 前言 就是主从复制,master以写为主,slave以读为主,当master数据变化的时候,自动将新的数据异步同步到其他的slave数据库。也就是redis主从复制异步同步数据的,所以在主从架构中使用分布式锁时,可能会出现…

4--SpringBoot项目中分类管理

目录 新增分类 分类分页查询 启用禁用分类 根据类型查询 修改分类 本文介绍SpringBoot项目中的分类管理,操作类似员工管理模块,具体详解可见以下博客,此处给出各部分代码 2--SpringBoot项目中员工管理 详解(一)-C…

基于51单片机的手环设计仿真

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,DHT11温湿度采集温湿度,滑动变阻器连接ADC0832数模转换器模拟水位传感器检测水位,通过LCD1602显示信息,然后在程序里设置好是否…

vue3项目中引入词云图

在vue3中的项目引入词云图 前言&#xff1a;先看效果图步骤如下 前言&#xff1a; 公司产品要求项目中使用词云图&#xff0c;我算是第一次用&#xff0c;于是在网上查找资料&#xff0c;最后做出来了。 先看效果图 步骤如下 npm i echarts-wordcloud -S <template> …

恶意AI大模型的兴起将改变网络安全

LLM 的恶意版本&#xff08;如 ChatGPT 的黑暗变体&#xff09;的兴起正在通过使用更复杂和自动化的攻击来升级网络战。 这些模型可以生成令人信服的网络钓鱼电子邮件、传播虚假信息并制作有针对性的社会工程消息。 所有这些非法功能都对在线安全构成了重大威胁&#xff0c;并加…

2024年最新前端工程师 TypeScript 基础知识点详细教程(更新中)

1. TypeScript 概述 TypeScript 是由微软开发的、基于 JavaScript 的一种强类型编程语言。它是在 JavaScript 的基础上添加了静态类型检查、面向对象编程等功能的超集&#xff0c;最终会被编译为纯 JavaScript 代码。由于其扩展了 JavaScript 的功能&#xff0c;TypeScript 特…

[Redis][数据类型]详细讲解

1.Redis 特殊数据结构 1.Streams 应用场景&#xff1a;主要用为队列(阻塞队列) 2.Geospatial 应用场景&#xff1a;用来存储坐标(经纬度) 3.HyperLogLog 应用场景&#xff1a;估算集合中的元素个数注意&#xff1a; HyperLogLog不存储元素的内容&#xff0c;但是能够记录“…

【机器学习】ROC曲线

【机器学习】ROC曲线 1、ROC曲线简介2、ROC曲线和AUC值2.1 ROC曲线2.2 AUC值 3、实验内容3.1 准备数据集3.2 特征提取3.3 数据集划分3.4 模型训练与预测3.5 计算和绘制ROC曲线3.6 绘制混淆矩阵3.7 三分类混淆矩阵 4 源代码4.1 实现ROC二分类4.2 三分类混淆例子 1、ROC曲线简介 …