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

【漫话机器学习系列】257.填补缺失值(Imputing Missing Values)

数据科学必备技能:填补缺失值(Imputing Missing Values)

在数据分析和机器学习项目中,缺失值(Missing Values) 是非常常见的问题。缺失的数据如果处理不当,会严重影响模型的训练效果,甚至导致模型性能大幅下降。因此,掌握缺失值填补的方法,是数据科学工作中非常重要的一步。

本文将基于一张图,详细介绍几种常见且实用的缺失值填补方法,并结合实际例子进行讲解。


1. 定量分析:用平均值填补

如果缺失的是定量变量(Quantitative Variable),如数值型数据:年龄、身高、收入等,常用均值(mean)进行填补。

原理:均值可以代表数据的整体水平,用均值填补可以尽量减少数据波动带来的影响。

示例
假设你有一组数据:

年龄
25
27
NaN
29
31

缺失了一个年龄值,可以先计算现有数据的平均值:

然后将缺失值填补为28。

代码示例(Python + Pandas)

import pandas as pddf = pd.DataFrame({'Age': [25, 27, None, 29, 31]})
df['Age'].fillna(df['Age'].mean(), inplace=True)
print(df)

2. 定性分析:用众数填补

如果缺失的是定性变量(Categorical Variable),如性别、城市类别、颜色等,常用众数(mode)进行填补。

原理:众数是出现次数最多的类别,使用众数可以最大限度保持数据分布的一致性。

示例
假设你的数据如下:

城市
北京
上海
NaN
北京
广州

北京出现次数最多,因此缺失值可以填补为“北京”。

代码示例(Python + Pandas)

import pandas as pddf = pd.DataFrame({'City': ['北京', '上海', None, '北京', '广州']})
df['City'].fillna(df['City'].mode()[0], inplace=True)
print(df)

3. 使用模型预测填补缺失值

对于缺失值较多、或者缺失值和其他特征有明显相关性的情况,可以使用预测模型来填补缺失值。例如,使用 K近邻(KNN)决策树线性回归等算法。

3.1 K近邻(KNN)填补

KNN可以根据数据中与缺失值样本最相似的其他样本的特征,预测其可能的取值。

原理简述

  • 找到与缺失样本最接近的K个完整样本;

  • 取这K个样本中对应特征的均值(定量)或众数(定性)作为填补值。

代码示例(Python + sklearn)

import numpy as np
import pandas as pd
from sklearn.impute import KNNImputerdf = pd.DataFrame({'Height': [1.7, 1.8, np.nan, 1.6, 1.75],'Weight': [65, 80, 70, 60, 75]
})imputer = KNNImputer(n_neighbors=2)
df_filled = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
print(df_filled)

拓展内容:其他常用填补策略

除了以上三种常见方法,还有一些高级处理方法:

  • 插值法(Interpolation):适用于时间序列数据,比如线性插值、样条插值等。

  • 基于多重插补(MICE):多次预测缺失值,减少单次预测误差。

  • 直接删除缺失行/列:如果缺失比例非常高,可以考虑删除相关样本或特征。

  • 添加缺失值指示变量:为缺失的位置添加0/1标记,作为额外特征喂给模型。

选择哪种方法,需要根据数据特点、业务需求、模型要求综合判断。


总结

场景填补方法
定量分析(数值型)平均值填补
定性分析(类别型)众数填补
缺失复杂、相关性强建模预测填补

掌握缺失值处理的正确姿势,可以有效提升数据质量,保证后续分析和建模的准确性。在实际工作中,建议结合探索性数据分析(EDA)对缺失情况进行全面了解后,制定最适合的填补策略。


如果你觉得本文有帮助,欢迎点赞、收藏或留言交流~

相关文章:

  • 【LeetCode 热题 100】二叉树的最大深度 / 翻转二叉树 / 二叉树的直径 / 验证二叉搜索树
  • 机器学习——聚类算法练习题
  • 我们该如何使用DeepSeek帮我们减负?
  • flowable
  • 芦康沙妥珠单抗说明书摘要
  • MUSE Pi Pro 编译kernel内核及创建自动化脚本进行环境配置
  • Azure 应用的托管身份与服务主体
  • STM32 启动文件分析
  • Linux架构篇、第五章git2.49.0部署与使用
  • Unity3d 打包安卓平台(Android apk)报错Gradle build failed解决方法
  • 2. 盒模型/布局模块 - 响应式产品展示页_案例:电商产品网格布局
  • JavaScript编译原理
  • 数据结构(七)——图
  • Kingston FURY全新推出高性能PCIe 5.0 NVMe固态硬盘
  • AI+可视化:数据呈现的未来形态
  • 微信小程序 自定义图片分享-绘制数据图片以及信息文字
  • 位运算【入门-->精通】
  • Github 2025-05-13 Python开源项目日报 Top10
  • 我喜欢的vscode几个插件和主题
  • Datawhale 5月llm-universe 第1次笔记
  • 外媒:初步结果显示,菲律宾前总统杜特尔特当选达沃市市长
  • 《AI×SCIENCE十大前沿观察》9:合成数据和数据基础设施
  • 区域国别学视域下的东亚文化交涉
  • 金俊峰已跨区任上海金山区委副书记
  • 上报集团社长李芸:发挥媒体优势,让中非民心在数字时代更深层互联互通
  • 马上评丨规范隐藏式车门把手,重申安全高于酷炫