郭震 AI公众号:郭震AI

6 数据预处理之数据转换与归一化

发布日期:

分类: 数据挖掘小白

预计阅读: 4 分钟

数据预处理之数据转换与归一化结构图查看大图
数据预处理之数据转换与归一化结构图

数据挖掘不是只跑算法,而是从数据准备、模式发现到结果解释的一整条流程。阅读时可以按「数据转换 -> 归一化 -> 数据清洗 -> 特征探索」建立结构,再回到正文里的代码、案例或指标做验证。

数据预处理之数据转换与归一化核对图查看大图
数据预处理之数据转换与归一化核对图

读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「数据转换」,再查「归一化」。

在数据挖掘的过程中,数据预处理是一个不可或缺的环节。我们在上一篇中讨论了如何处理缺失值,确保数据集中每一个样本都有尽可能完整的信息。这一部分将重点介绍数据预处理中的一个重要方面——数据转换与归一化。我们会探讨这些步骤如何帮助提高后续建模的效果,并结合实例和代码更好地理解这些概念。

数据转换

数据转换是指对数据进行某种形式的变换,以便使其更加适合于模型的训练或分析。常见的转换操作包括:

数据转换归一化判断卡查看大图
数据转换归一化判断卡

做数据转换与归一化时,先看字段量纲、数值范围、异常值和模型需求。尺度不一致会让结果偏向大数值字段。

  1. 对数变换:通常用于处理右偏分布的数值特征,能够减小极端值的影响。

    例如,考虑某企业的收入数据,其分布可能高度右偏。这时,我们可以使用对数变换:

    X=log(X+1)X' = \log(X + 1)

    这里的 '+1' 是为了避免对数零不能计算的问题。

    import pandas as pd
    import numpy as np
    
    # 创建数据框
    df = pd.DataFrame({'收入': [5000, 10000, 150000, 2000000]})
    
    # 进行对数变换
    df['收入_log'] = np.log(df['收入'] + 1)
    print(df)
    
  2. 平方根变换:另一种常见的处理偏态数据的方法,尤其对于数据都为正的情况。

    X=XX' = \sqrt{X}

  3. 标准化:标准化是对特征进行线性变换,使其均值为 0,方差为 1,这一过程使得不同尺度的特征可以比较。

    X=XμσX' = \frac{X - \mu}{\sigma}

    其中 μ\mu 是特征的均值,σ\sigma 是特征的标准差。

    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] 区间。

数据挖掘阅读地图卡查看大图
数据挖掘阅读地图卡

阅读《数据预处理之数据转换与归一化》前,可以先用配图确认主线;读完后再检查哪些步骤能直接操作,哪些还需要补资料。

X=XXminXmaxXminX' = \frac{X - X_{min}}{X_{max} - X_{min}}

这种方式尤其适用于需要保持原特征分布形态的情况,并且在使用一些基于距离的算法(如 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)

实际案例

假设我们在开展客户离职预测的项目,在数据集中我们有多种特征,例如客户的年龄、年收入、账户余额等。这些特征的取值范围与数据分布差异较大,直接投入模型可能导致模型的性能不佳。因此,适当地进行数据转换与归一化是非常必要的。

  1. 数据转换:我们首先对年收入进行对数变换,以便减小其与其它特征的差异。
  2. 数据归一化:我们使用 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)
数据预处理之数据转换与归一化应用复盘卡查看大图
数据预处理之数据转换与归一化应用复盘卡

学完《数据预处理之数据转换与归一化》后,不妨换一个自己的场景试一次,重点观察输入、处理和输出是否能对应起来。

数据预处理之数据转换与归一化应用检查卡查看大图
数据预处理之数据转换与归一化应用检查卡

如果想把《数据预处理之数据转换与归一化》用到自己的任务里,可以先缩小场景,只验证一个最关键的判断点。

小结

在这部分中,我们详细介绍了数据转换与归一化的概念以及常用的方法。通过对数据进行适当的变换与缩放,能够让后续的模型训练更加高效,提高数据的可预测性,同时也能够减少不同特征之间的干扰。在数据处理完成后,我们可以进入下一步,进行探索性数据分析的描述性分析,以深入理解数据的特征与趋势,为模型选择提供支持。

接下来,我们将探讨探索性数据分析之描述性分析的内容。

相关教程

相关页面

AI 教程列表
微博邮件

延伸教程

AI 教程列表

相关内容

相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...