使用MICE进行缺失值的填充处理

在我们进行机器学习时,处理缺失数据是非常重要的,因为缺失数据可能会导致分析结果不准确,严重时甚至可能产生偏差。处理缺失数据是保证数据分析准确性和可靠性的重要步骤,有助于确保分析结果的可信度和可解释性。

在本文中,我们讲重点介绍MICE。

MICE(Multiple Imputation by Chained Equations)是一种常用的填充缺失数据的技术。它通过将待填充的数据集中的每个缺失值视为一个待估计的参数,然后使用其他观察到的变量进行预测。对于每个缺失值,通过从生成的多个填充数据集中随机选择一个值来进行填充。通常会重复这个过程多次以增加填充的稳定性。

首先我们先介绍一些常用的缺失数据处理技术:

删除

处理数据是困难的,所以将缺失的数据删除是最简单的方法。

对于小数据集

如果某列缺失值< 3%,则可以将缺失的样本删除,如果某列缺失值>40%,则可以将该列直接删除。

而对于缺失值在>3%和<40%的数据,则需要进行填充处理。

对于大数据集:

缺失值< 10%可以使用填充技术

缺失值> 10%则需要测试相关性并决定该特征是否值得用于建模后逐行删除缺失记录

删除是处理缺失数据的主要方法,但是这种方法有很大的弊端,会导致信息丢失。

填充

填充是一种简单且可能是最方便的方法。我们可以使用Scikit-learn库中的SimpleImputer进行简单的填充。

 from sklearn.impute import SimpleImputer

SimpleImputer有“strategy”参数,它可以让我们选择填充的策略

比如特征是数值可以使用均值或中位数作为策略来估算值,特征是分类的可以使用众数作为策略来估算值

K-最近邻插值算法

KNN算法是一种监督技术,它简单地找到“特定数据记录中最近的k个数数据点”,并对原始列中最近的k个数数据点的值取简单的平均值,并将输出作为填充值分配给缺失的记录。

我们可以根据现有数据的特点选择不同的距离度量——“欧几里得距离”、“曼哈顿距离”、“闵可夫斯基距离”等。对于数值特征,KNN插值对相邻值进行加权平均。对于分类特征,KNN取最近邻值的众数。

这里的“K”是一个超参数。

MICE

Multiple Imputation by Chained Equations的基本假设是

“数据是随机丢失的,通过查看其他数据样本/记录,可以对数据的真实价值做出有根据的猜测。”

看到他的英文我们就知道,他又2个主要的工作步骤:

  1. 多重插补(Multiple Imputation):MICE通过多次生成填充数据集来处理缺失数据。在每次迭代中,它将缺失值填充为估计的值,然后将完整的数据集用于下一次迭代,从而产生多个填充的数据集。
  2. 链式方程(Chained Equations):MICE使用链式方程的方法进行填充。它将待填充的缺失值视为需要估计的参数,然后使用其他已知的变量作为预测变量,通过建立一系列的预测方程来进行填充。每个变量的填充都依赖于其他变量的估计值,形成一个链式的填充过程。

步骤:

  1. 初始化:首先,确定要使用的填充方法和参数,并对数据集进行初始化。
  2. 循环迭代:接下来,进行多次迭代。在每次迭代中,对每个缺失值进行填充,使用其他已知的变量来预测缺失值。
  3. 生成多个填充数据集:每次迭代生成一个填充的数据集,直到达到设定的迭代次数或者满足收敛条件。
  4. 合并结果:最后,将生成的多个填充数据集进行合并,通常采用简单的方法(如取均值)来汇总结果,得到一个最终的填充数据集。

优点:

  • 考虑了变量之间的相关性,能够更准确地估计缺失值。
  • 生成了多个填充数据集,能够反映不确定性。
  • 能够灵活地处理不同类型的变量和不同分布的数据。

注意事项:

  • 对于不适用于预测的变量,需要进行预处理或者使用专门的方法进行填充。
  • 需要根据实际情况选择合适的迭代次数和收敛条件,以确保填充结果的稳定性和准确性。
  • 填充后的数据集可能会影响后续分析的结果,因此需要进行适当的验证和比较。

下面我们来使用

fancyimpute

库来进行代码显示。

fancyimpute

提供了多种高级的缺失数据填充技术,包括矩阵分解、K-最近邻、插值和矩阵完成等。它的设计目标是提供一种方便、灵活且高效的方式来处理缺失数据,以便于后续的数据分析和建模。

 import pandas as pd
 from sklearn.model_selection import train_test_split
 from fancyimpute import IterativeImputer
 
 .#In these steps we undertake data exploration and pre-processing
 .#I intend to skip till the completion of train-test split of data
 .
 .
 .
 
 xtrain, xtest, ytrain, ytest = train_test_split(x, y, test_size=0.25, random_state=101)
 
 # Initialize MICE imputer
 imputer = IterativeImputer()
 
 # Fit and transform MICE imputer on training data
 xtrain_imputed = imputer.fit_transform(xtrain)
 
 # Transform test data using the trained MICE imputer
 xtest_imputed = imputer.transform(xtest)

这里需要注意的是,我们需要在训练集上进行拟合,然后在测试集上进行转换,这样可以保证不会有数据泄露的问题。

总结

虽然MICE带来了计算成本,需要考虑以非常接近真实的标签估算为代价,但是它可以有效地处理各种类型和分布的缺失数据,是处理缺失数据的重要工具之一。其他技术相对非常简单,但是结果的质量没有MICE那么好。

https://avoid.overfit.cn/post/912ca36b9d44439c801243267178c02a

作者:Rahul Kotecha

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

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

相关文章

Linux_环境变量_命令行参数

一.环境变量 在Linux中自己写的程序必须要带路径才能运行&#xff0c;相对路径或是绝对路径&#xff0c;但是像ls pwd这样的程序&#xff0c;不带路径也能运行。当你想要运行一个程序时&#xff1a; 如果带有路径的话&#xff0c;则直接将对应路径的程序加载进内存&#xff0…

LeetCode、1268. 搜索推荐系统【中等,前缀树+优先队列、排序+前缀匹配】

文章目录 前言LeetCode、1268. 搜索推荐系统【中等&#xff0c;前缀树优先队列、排序前缀匹配】题目类型及分类思路API调用&#xff08;排序前缀匹配&#xff09;前缀树优先队列 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创…

内网穿透 | 推荐两个免费的内网穿透工具

目录 1、简介 2、Ngrok 2.1、下载安装 2.2、运行 2.3、固定域名 2.4、配置多服务 3、cpolar 3.1、下载安装 3.2、运行 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应…

2024 年 5 款适用于免费 iPhone 数据恢复的工具软件

搜索一下&#xff0c;你会发现许多付费或免费的iPhone数据恢复工具声称它们可以帮助你以很高的成功率找回所有丢失的数据。然而&#xff0c;这正是问题所在。真的很难做出选择。为了进一步帮助您解决数据丢失问题&#xff0c;我们在此列出了 5 款最好的免费 iPhone 恢复软件供您…

[Doris] Doris的安装和部署 (二)

文章目录 1.安装要求1.1 Linux操作系统要求1.2 软件需求1.3 注意事项1.4 内部端口 2.集群部署2.1 操作系统安装要求2.2 下载安装包2.3 解压2.4 配置FE2.5 配置BE2.6 添加BE2.7 FE 扩容和缩容2.8 Doris 集群群起脚本 3.图形化 1.安装要求 1.1 Linux操作系统要求 1.2 软件需求 1…

Hive的小文件问题

目录 一、小文件产生的原因 二、小文件的危害 三、小文件的解决方案 3.1 小文件的预防 3.1.1 减少Map数量 3.1.2 减少Reduce的数量 3.2 已存在的小文件合并 3.2.1 方式一&#xff1a;insert overwrite (推荐) 3.2.2 方式二&#xff1a;concatenate 3.2.3 方式三&#xff…

[Python] 如何用import导入模块

本篇博客来记以下关于import导入模块的笔记~ 可莉将这篇博客收录在了&#xff1a;《Python》 可莉推荐的优质博主主页&#xff1a;Kevin ’ s blog 我们在Python中可以使用import从标准库中导入一天模块&#xff0c;模块相当于是一个 .py 文件&#xff0c;我们导入后调用相当于…

腾讯云4核8G服务器多少钱?646元一年零3个月

腾讯云服务器4核8G配置优惠价格表&#xff0c;轻量应用服务器和CVM云服务器均有活动&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;轻量应用服务器4核8G12M带宽一年446元、529元15个月&#xff0c;腾讯云百科txybk.com分…

pythondjangomysql苏州一日游之可视化分析69216-计算机毕业设计项目选题推荐(附源码)

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对旅游服务等问题&#xff0c;对旅游服务进行…

【动态规划】【中位数】【C++算法】1478. 安排邮筒

# 作者推荐 【深度优先搜索】【树】【图论】2973. 树中每个节点放置的金币数目 本文涉及知识点 动态规划汇总 LeetCode1478. 安排邮筒 给你一个房屋数组houses 和一个整数 k &#xff0c;其中 houses[i] 是第 i 栋房子在一条街上的位置&#xff0c;现需要在这条街上安排 k…

C++基础入门:掌握核心概念(超全!)

C作为一门广泛使用的编程语言&#xff0c;以其高性能和灵活性在软件开发领域占据重要地位。无论是游戏开发、系统编程还是实时应用&#xff0c;C都是一个不可或缺的工具。本博客旨在为初学者提供C编程语言的核心概念&#xff0c;帮助你建立坚实的基础。 C关键字 C关键字是编程…

扫拖一体洗地机哪个好用?热门扫拖一体机品牌

扫拖一体洗地机是一种现代化的清洁设备&#xff0c;它可以帮助我们更快、更有效地清洁地面。这几年市面上的主流品牌纷纷更新迭代产品&#xff0c;那么&#xff0c;选择什么品牌的洗地机才是算是一个不错的选择呢&#xff1f;我们先了解下洗地机吧。 洗地机的功能与原理 市面…

编码、理解和实现LLM中的自注意力、多头注意力、交叉注意力和因果注意力

原文链接&#xff1a;understanding-and-coding-self-attention 2024年1月14日 自注意力是 LLM 的一大核心组件。对大模型及相关应用开发者来说&#xff0c;理解自注意力非常重要。近日&#xff0c;Ahead of AI 杂志运营者、机器学习和 AI 研究者 Sebastian Raschka 发布了一篇…

三天翻倍!ARM 被炒成“英伟达第二”?

周一&#xff0c;Arm股价再度大涨29%&#xff0c;盘中涨幅一度超过40%&#xff0c;单日交易量是过去三个月日均交易量的十倍以上&#xff0c;创下历史新高。自2月7日市场收盘后Arm公布财报以来&#xff0c;短短三个交易日内&#xff0c;Arm股价累计上涨超过90%。 上周&#xf…

前端JavaScript篇之await 在等待什么呢?async/await 如何捕获异常

目录 await 在等待什么呢&#xff1f;async/await 如何捕获异常 await 在等待什么呢&#xff1f; await 关键字实际上是等待一个表达式的结果&#xff0c;这个表达式的计算结果可以是 Promise 对象或者其他值。如果 await 后面的表达式不是 Promise 对象&#xff0c;那么 awai…

论文阅读-Pegasus:通过网络内一致性目录容忍分布式存储中的偏斜工作负载

论文名称&#xff1a;Pegasus: Tolerating Skewed Workloads in Distributed Storage with In-Network Coherence Directories 摘要 高性能分布式存储系统面临着由于偏斜和动态工作负载引起的负载不平衡的挑战。本文介绍了Pegasus&#xff0c;这是一个利用新一代可编程交换机…

CTFshow web(php命令执行 68-71)

web68 还是那句话&#xff0c;没看到flag在哪&#xff0c;那就优先找到flag位置 这里cvar_dump(scandir("/")); 直接输出根目录的位置&#xff0c;然后查看源代码&#xff0c;发现flag位置为flag.txt 知道flag在根目录下面的flag.txt直接访问就好了 cinclude(/flag…

【开源】JAVA+Vue.js实现农村物流配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理&#xff1a;2.2.2 位置信息管理&#xff1a;2.2.3 配送人员分配&#xff1a;2.2.4 路线规划&#xff1a;2.2.5 个人中心&#xff1a;2.2.6 退换快递处理&#xff1a;…

Zig、C、Rust的Pk1

Zig、C、Rust的Pk1 github.com上看到“A basic comparitive analysis of C, C, Rust, and Zig.”&#xff1a;https://github.com/CoalNova/BasicCompare/tree/main 里边的代码是9个月之前的&#xff0c;用现在的zig 0.11.0 及0.12-dev都无法通过编译(具体为&#xff1a;zig-w…

快速搭建PyTorch环境:Miniconda一步到位

快速搭建PyTorch环境&#xff1a;Miniconda一步到位 &#x1f335;文章目录&#x1f335; &#x1f333;一、为何选择Miniconda搭建PyTorch环境&#xff1f;&#x1f333;&#x1f333;二、Miniconda安装指南&#xff1a;轻松上手&#x1f333;&#x1f333;三、PyTorch与Minic…