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

机器学习数据预处理全流程:从缺失值处理到特征编码

在机器学习项目中,数据预处理是决定模型效果的关键步骤 —— 未经清洗和标准化的数据,即使使用复杂模型也难以达到理想效果。本文基于实战案例,详细讲解数据预处理的核心环节(缺失值处理、数据标准化、特征编码、数据二值化),并提供 Pandas 与 Scikit-learn 的完整代码示例,适合初学者快速上手。

一、数据预处理整体框架

数据预处理的核心目标是将原始数据转换为模型可接受的格式,主要包含四大模块,各模块职责如下:

  • 缺失值处理:识别并填充 / 删除数据中的空值,避免模型报错或偏差。
  • 数据标准化:消除特征间的量纲差异(如 “年龄”(0-100)与 “收入”(0-100000)),避免方差大的特征主导模型。
  • 特征编码:将非数值型特征(如 “性别”“学历”)转换为数值,满足模型输入要求。
  • 数据二值化:将连续特征按阈值分为 0/1 两类,简化模型计算(如将 “年龄> 30” 标记为 1,否则为 0)。

二、缺失值处理:识别与修复数据漏洞

原始数据中常存在 “NaN”“n/a”“na” 等缺失值,需先统一识别,再通过 “删除” 或 “填充” 处理。

2.1 缺失值识别:Pandas.isnull ()

Pandas 默认仅识别 “NaN” 为缺失值,需手动指定其他缺失值标记(如 “n/a”“na”),再用isnull()判断单元格是否为空

输出说明:
  • 原始数据中 “n/a”“na” 会被转换为 “NaN”;
  • isnull()返回布尔值数组,True表示对应位置为缺失值。

2.2 缺失值处理方案

根据数据量和业务场景,选择不同处理方式:

方案 1:删除含缺失值的行(dropna ())

适用于数据量较大、缺失值占比低的场景,直接剔除含空值的行,避免干扰模型。

语法参数

参数说明
axis默认为 0,删除含空值的行;若为 1,删除含空值的列
how"any"(默认):有一个空值就删除;"all":所有值为空才删除
subset指定需检查的列(如subset=['NUM_BEDROOMS']仅检查卧室数量列)
inplaceTrue:直接修改原数据;False:返回新数据(默认)

方案 2:填充缺失值(fillna ()/ 均值 / 中位数 / 众数)

适用于数据量较小、缺失值需保留的场景,用合理数值填充空值,常见填充方式如下:

填充方式适用场景代码示例
固定值无明显规律的分类特征df.fillna(666, inplace=True)(用 666 填充所有空值)
均值连续特征(无异常值)x = df["ST_NUM"].mean()
df["ST_NUM"].fillna(x, inplace=True)
中位数连续特征(含异常值)x = df["ST_NUM"].median()
df["ST_NUM"].fillna(x, inplace=True)
众数分类特征(如 “性别”“血型”)用 Scikit-learn 的 SimpleImputer 实现(见下文)

三、数据标准化:消除量纲差异

标准化的核心是将特征转换为均值为 0、方差为 1的标准正态分布(或固定范围),确保各特征对模型的影响均衡。

3.1 标准化的核心价值

  • 无量纲化:将 “身高(cm)”“体重(kg)” 等不同单位的特征转为同一规格;
  • 提升模型效率:避免方差大的特征(如 “收入”)主导梯度下降等优化过程;
  • 保证可比性:让不同特征的权重更新更公平。

3.2 常用标准化工具(Scikit-learn)

工具 1:MinMaxScaler(最大最小值标准化)

将特征压缩到指定范围(默认 [0,1]),公式为:
X_scaled = (X - X_min) / (X_max - X_min)

特征编码:非数值特征转数值

机器学习模型仅接受数值输入,需将 “性别”“学历” 等分类特征编码,按特征类型选择不同方案:

4.1 特征类型划分

特征类型定义示例
名义变量无顺序关系,仅用于分类性别(男 / 女)、血型(A/B/AB/O)
有序变量有顺序关系,但无法计算学历(小学 / 初中 / 高中)、成绩(高 / 中 / 低)
有距变量有顺序且可计算分数(100/90/60)、年龄(20/30/40)

常用预处理函数速查表

为方便实战查阅,整理 Scikit-learn 核心预处理函数:

函数功能描述
preprocessing.scale()快速实现 Z 值标准化(单次使用)
preprocessing.MinMaxScaler()最大最小值标准化(支持自定义范围)
preprocessing.StandardScaler()Z 值标准化(支持拟合后复用)
preprocessing.RobustScaler()抗异常值标准化(基于中位数和四分位数)
preprocessing.OneHotEncoder()独热编码(适用于名义变量)
preprocessing.OrdinalEncoder()序号编码(适用于有序变量)
preprocessing.LabelEncoder()目标标签编码(仅用于 y)
preprocessing.Binarizer()特征二值化(按阈值分 0/1)
sklearn.impute.SimpleImputer()缺失值填充(均值 / 中位数 / 众数 / 固定值)

总结

数据预处理是机器学习的 “地基”,核心流程可总结为:

  1. 查缺失:用isnull()识别空值,指定缺失值标记;
  2. 补 / 删空值:小数据量用填充(均值 / 中位数 / 众数),大数据量用删除;
  3. 标准化:用 MinMaxScaler/StandardScaler 消除量纲;
  4. 编特征:名义变量用独热编码,有序变量用序号编码;
  5. 二值化:按需简化连续特征。

掌握以上步骤,可应对 80% 以上的机器学习数据预处理场景。实际项目中需结合数据特点灵活选择方案,后续可进一步学习特征选择、数据降维等进阶内容。

http://www.dtcms.com/a/340183.html

相关文章:

  • Python 全栈开发常用命令
  • 安路EF2系列芯片单口ram ip核使用方法
  • 阿里通义千问Qwen-Long 快速文档解析
  • 【Git】执行命令时要求输入Username、Password
  • RabbitMQ:SpringAMQP Topic Exchange(主题交换机)
  • Flink双流join
  • 【黑客技术零基础入门】PHP环境搭建、安装Apache、安装与配置MySQL(非常详细)零基础入门到精通,收藏这一篇就够
  • (认识异常)
  • 建模工具Sparx EA的多视图协作教程
  • [系统架构设计师]面向服务架构设计理论与实践(十五)
  • Shader学习路线
  • C++ MFC/BCG编程:文件对话框(CFileDialog、CFolderPickerDialog)
  • 【免费AI文档助手开发实战系列】基于正则表达式的PDF脱敏python服务构建(一)
  • 国产化PDF处理控件Spire.PDF教程:如何使用 Python 添加水印到 PDF
  • 太阳光模拟器在无人机老化测试中的应用
  • JVM参数优化
  • Nacos-8--分析一下nacos中的AP和CP模式
  • InfoNES模拟器HarmonyOS移植指南
  • SpringAI接入openAI配置出现的问题全解析
  • hadoop技术栈(九)Hbase替代方案
  • 深入理解计算机系统
  • 9-302 家里网能搜出两个ip, 无法联大堂监控室
  • LangChain —多模态 / 多源上下文管理
  • 银河麒麟V10一键安装Oracle 11g脚本分享
  • 【运维进阶】管理大项目
  • Linux数据库:【索引】
  • 如何成功初始化一个模块
  • 第4章 React状态管理基础
  • TDengine IDMP 运维指南(4. 使用 Docker 部署)
  • LWIP的IP 协议栈