6 数据预处理之数据转换与归一化
系列进度
数据挖掘入门 · 第 6 / 18 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
数据挖掘不是只跑算法,而是从数据准备、模式发现到结果解释的一整条流程。阅读时可以按「数据转换 -> 归一化 -> 数据清洗 -> 特征探索」建立结构,再回到正文里的代码、案例或指标做验证。
读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「数据转换」,再查「归一化」。
在数据挖掘的过程中,数据预处理是一个不可或缺的环节。我们在上一篇中讨论了如何处理缺失值,确保数据集中每一个样本都有尽可能完整的信息。这一部分将重点介绍数据预处理中的一个重要方面——数据转换与归一化。我们会探讨这些步骤如何帮助提高后续建模的效果,并结合实例和代码更好地理解这些概念。
数据转换
数据转换是指对数据进行某种形式的变换,以便使其更加适合于模型的训练或分析。常见的转换操作包括:
做数据转换与归一化时,先看字段量纲、数值范围、异常值和模型需求。尺度不一致会让结果偏向大数值字段。
-
对数变换:通常用于处理右偏分布的数值特征,能够减小极端值的影响。
例如,考虑某企业的收入数据,其分布可能高度右偏。这时,我们可以使用对数变换:
这里的 '+1' 是为了避免对数零不能计算的问题。
import pandas as pd import numpy as np # 创建数据框 df = pd.DataFrame({'收入': [5000, 10000, 150000, 2000000]}) # 进行对数变换 df['收入_log'] = np.log(df['收入'] + 1) print(df) -
平方根变换:另一种常见的处理偏态数据的方法,尤其对于数据都为正的情况。
标准化:标准化是对特征进行线性变换,使其均值为 0,方差为 1,这一过程使得不同尺度的特征可以比较。
其中 是特征的均值, 是特征的标准差。
from sklearn.preprocessing import StandardScaler
# 示例数据
data = np.array([[1, 2], [2, 3], [3, 4]])
scaler = StandardScaler()
standardized_data = scaler.fit_transform(data)
print(standardized_data)
归一化
与标准化相似,归一化是另一种常用的数据预处理技术,特别适用于在一个固定范围内缩放特征。归一化的常见方法是 Min-Max 归一化,它将特征缩放到 [0, 1] 区间。
阅读《数据预处理之数据转换与归一化》前,可以先用配图确认主线;读完后再检查哪些步骤能直接操作,哪些还需要补资料。
这种方式尤其适用于需要保持原特征分布形态的情况,并且在使用一些基于距离的算法(如 KNN、SVM 等)时,归一化会显著提高模型的表现。
from sklearn.preprocessing import MinMaxScaler
# 示例数据
data = np.array([[1, 2], [2, 3], [3, 4]])
scaler = MinMaxScaler()
normalized_data = scaler.fit_transform(data)
print(normalized_data)
实际案例
假设我们在开展客户离职预测的项目,在数据集中我们有多种特征,例如客户的年龄、年收入、账户余额等。这些特征的取值范围与数据分布差异较大,直接投入模型可能导致模型的性能不佳。因此,适当地进行数据转换与归一化是非常必要的。
- 数据转换:我们首先对年收入进行对数变换,以便减小其与其它特征的差异。
- 数据归一化:我们使用 Min-Max 归一化对年龄和账户余额进行处理,这样做能够保证每个特征的数值范围更为一致。
下面是一个完整的数据预处理示例:
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
# 创建客户数据集
data = pd.DataFrame({
'客户ID': [1, 2, 3, 4],
'年龄': [25, 45, 35, 23],
'年收入': [5000, 10000, 150000, 2000000],
'账户余额': [100, 1500, 3000, 50000]
})
# 年收入对数变换
data['年收入_log'] = np.log(data['年收入'] + 1)
# 对年龄和账户余额进行 Min-Max 归一化
scaler = MinMaxScaler()
data[['年龄', '账户余额']] = scaler.fit_transform(data[['年龄', '账户余额']])
print(data)
学完《数据预处理之数据转换与归一化》后,不妨换一个自己的场景试一次,重点观察输入、处理和输出是否能对应起来。
如果想把《数据预处理之数据转换与归一化》用到自己的任务里,可以先缩小场景,只验证一个最关键的判断点。
小结
在这部分中,我们详细介绍了数据转换与归一化的概念以及常用的方法。通过对数据进行适当的变换与缩放,能够让后续的模型训练更加高效,提高数据的可预测性,同时也能够减少不同特征之间的干扰。在数据处理完成后,我们可以进入下一步,进行探索性数据分析的描述性分析,以深入理解数据的特征与趋势,为模型选择提供支持。
接下来,我们将探讨探索性数据分析之描述性分析的内容。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
数据预处理之数据转换与归一化适合谁读?
这是 数据挖掘入门 系列第 6 / 18 篇,适合正在学习数据挖掘入门,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇数据挖掘入门教程要多久?
按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读