数据预处理步骤(含优先级)

数据预处理的四个步骤及优先级(附Python示例)

数据预处理是机器学习和数据分析的核心环节,目的是将原始数据转化为适合建模的格式。以下是 ‌四个关键步骤‌,按 ‌优先级从高到低‌ 排序,并附带Python代码示例:


1. 数据清理(最高优先级)

目标‌:解决数据中的 ‌错误、缺失、重复、异常值‌ 问题,保证数据基础质量。
为什么优先‌:脏数据会导致后续步骤全盘失效(如模型误判)。

具体操作‌:

  • 处理缺失值‌:删除或填充(均值、众数、插值)。
  • 删除重复值‌:去除完全相同的行。
  • 修正异常值‌:用Z-Score、IQR法过滤或截断。

Python示例‌:

import pandas as pd   

# 删除缺失值过多的行(阈值50%)

df = df.dropna(thresh=df.shape*0.5, axis=0)

# 用均值填充数值列

df['income'] = df['income'].fillna(df['income'].mean())

# 删除重复行

df = df.drop_duplicates()

# 过滤异常值(如年龄>100为异常)

df = df[df['age'] <= 100]


2. 数据转换(次优先级)

目标‌:将数据转换为 ‌模型可理解的格式‌,解决量纲、分布、类型问题。
为什么次优先‌:模型对数值敏感(如SVM受量纲影响,分类模型需要数值输入)。

具体操作‌:

  • 标准化/归一化‌:MinMaxScaler(缩放到[0,1])、StandardScaler(均值为0,方差为1)。
  • 分类数据编码‌:LabelEncoder(标签编码)、OneHotEncoder(独热编码)。
  • 文本向量化‌:TF-IDFWord2Vec
  • 日期/时间解析‌:提取年、月、日等特征。

Python示例‌:

from sklearn.preprocessing import StandardScaler, OneHotEncoder

# 数值标准化

scaler = StandardScaler()

df[['age', 'income']] = scaler.fit_transform(df[['age', 'income']])

# 分类数据独热编码

encoder = OneHotEncoder()

encoded_data = encoder.fit_transform(df[['city']]).toarray()


3. 特征工程(中优先级)

目标‌:通过 ‌创建、选择、组合特征‌ 提升模型性能。
为什么中优先‌:依赖干净且转换后的数据,但对结果影响显著(如特征决定模型上限)。

具体操作‌:

  • 特征构造‌:从现有特征生成新特征(如“单价=总价/数量”)。
  • 特征选择‌:用方差阈值卡方检验L1正则化筛选重要特征。
  • 降维‌:PCA(主成分分析)、LDA(线性判别分析)减少维度。

Python示例‌:

from sklearn.feature_selection import SelectKBest, chi2

# 选择Top 5重要特征(卡方检验)

selector = SelectKBest(chi2, k=5)

X_selected = selector.fit_transform(X, y)

# 特征构造(示例:电商数据)

df['price_per_item'] = df['total_price'] / df['item_count']


4. 数据分割(最后一步)

目标‌:将数据划分为 ‌训练集、验证集、测试集‌,避免数据泄露。
为什么最后做‌:确保预处理操作仅在训练集上完成,防止测试集信息污染模型。

具体操作‌:

  • 随机分割‌:train_test_split(常用比例:训练集70%,测试集30%)。
  • 时间序列分割‌:按时间划分,防止未来数据影响历史训练。
  • 分层抽样‌:保持类别分布一致(如分类任务中正负样本比例)。

Python示例‌:

from sklearn.model_selection import train_test_split

# 随机分割(分层抽样)

X_train, X_test, y_train, y_test = train_test_split

( X, y, test_size=0.3,

stratify=y, # 保持类别分布

random_state=42 )


优先级总结

步骤优先级原因
数据清理1基础质量不解决,后续操作无意义(如异常值导致模型偏差)。
数据转换2模型依赖规范化的输入(如归一化加速梯度下降收敛)。
特征工程3依赖干净且转换后的数据,但直接影响模型效果(如特征决定模型上限)。
数据分割4必须在所有预处理之后,避免测试集信息泄露(如标准化包含测试集数据)。

完整流程示例(Python)

# 1. 数据清理

df = df.dropna(subset=['age']) # 删除年龄缺失的行

df = df[df['income'] > 0] # 删除收入为负的异常值 

#2. 数据转换

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

df[['age', 'income']] = scaler.fit_transform(df[['age', 'income']])

# 3. 特征工程

df['income_age_ratio'] = df['income'] / df['age'] # 构造新特征

# 4. 数据分割

X = df.drop('target', axis=1)

y = df['target']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)


注意事项

避免测试集污染‌:所有预处理(如标准化)应仅从训练集计算参数,再应用到测试集。 

  • # 正确做法:用训练集的均值和标准差转换测试集
  •  scaler.fit(X_train) # 只在训练集上拟合
  • X_train = scaler.transform(X_train) X_test = scaler.transform(X_test) # 测试集使用相同的scaler

  • 自动化管道‌:使用sklearn.pipeline封装流程,确保步骤可复用。
     

    from sklearn.pipeline import Pipeline

  • pipeline = Pipeline([

  • ('imputer', SimpleImputer(strategy='mean')), # 填充缺失值

  • ('scaler', StandardScaler()), # 标准化

  • ('classifier', LogisticRegression()) # 直接接模型 ])

  • pipeline.fit(X_train, y_train)

注: 以下是数据预处理四个步骤与上篇写的数据预处理4个概念区分,

数据预处理4个概念:数据清洗,数据转换,数据规约,数据集成

在数据预处理中,‌数据规约‌(Data Reduction)和 ‌数据集成‌(Data Integration)确实是两个重要概念,但它们与 ‌特征工程‌ 和 ‌数据分割‌ 的范畴有所不同。以下是详细解释:

1. 特征工程 vs. 数据规约

特征工程(Feature Engineering)
  • 定义‌:通过 ‌创建新特征、选择关键特征、转换特征‌ 来提升模型性能。
  • 包含操作‌:
    • 构造新特征(如“单价=总价/数量”)。
    • 特征选择(过滤无关特征)。
    • 降维(如PCA、LDA)。
  • 与数据规约的关系‌:
    • 部分重叠‌:降维(如PCA)既是特征工程,也属于数据规约(减少维度)。
    • 差异‌:特征工程更侧重“增强特征表达力”,而数据规约更侧重“减少数据量”。
数据规约(Data Reduction)
  • 定义‌:通过 ‌压缩数据规模‌ 来降低计算成本,同时保留关键信息。
  • 包含操作‌:
    • 维度规约(降维、删除低方差特征)。
    • 数值规约(将连续值分箱为离散值)。
    • 数据抽样(从大数据集中抽取代表性样本)。
  • 示例‌:

    # 使用PCA降维(属于特征工程和数据规约)

  • from sklearn.decomposition import PCA

  • pca = PCA(n_components=2)

  • X_pca = pca.fit_transform(X)

总结
  • 特征工程‌ 的降维操作属于 ‌数据规约‌,但特征工程更广泛(还包含特征构造、选择等)。
  • 数据规约‌ 是独立的预处理步骤,目标更聚焦于“减少数据量”。

2. 数据分割 vs. 数据集成

数据分割(Data Splitting)
  • 定义‌:将数据划分为 ‌训练集、验证集、测试集‌,确保模型评估的可靠性。
  • 目的‌:防止数据泄露(测试集信息影响训练过程)。
  • 无关性‌:与数据集成、规约无直接关联,是独立步骤。
数据集成(Data Integration)
  • 定义‌:将 ‌多个数据源的数据合并‌,解决冗余、冲突和不一致。
  • 包含操作‌:
    • 实体识别(匹配不同数据源的同一实体)。
    • 冗余处理(删除重复列)。
    • 数据冲突解决(统一单位、格式)。
  • 示例‌:
    • 合并来自数据库和Excel表的数据。
    • 统一用户ID在不同系统中的名称(如“User_ID”和“UID”)。
总结
  • 数据分割‌ 是模型训练前的必要步骤,与数据集成无关。
  • 数据集成‌ 是数据清理的扩展,解决多源数据整合问题。

完整数据预处理流程(补充版)

若将 ‌数据规约‌ 和 ‌数据集成‌ 加入之前的四个步骤,完整流程如下:

  1. 数据清理‌(最高优先级)

    • 处理缺失值、重复值、异常值。
  2. 数据集成‌(如果需要多源数据)

    • 合并数据源,解决冗余和冲突。
  3. 数据转换

    • 标准化、编码、文本向量化。
  4. 特征工程‌(含数据规约)

    • 构造特征、选择特征、降维。
  5. 数据分割‌(最后一步)

    • 划分训练集、测试集。

关键结论

  • 特征工程‌ 和 ‌数据规约‌ 有部分重叠,但目标和范围不同。
  • 数据分割‌ 是独立步骤,与数据集成无关。
  • 实际项目中,步骤可能交叉或合并,需根据数据特点灵活调整。

附:数据预处理全流程的Python工具链

# 数据集成示例(合并两个表)

df1 = pd.read_csv('sales.csv')

df2 = pd.read_excel('customer.xlsx')

merged_df = pd.merge(df1, df2, on='customer_id') # 根据客户ID合并

# 数据规约示例(分箱简化数据)

merged_df['age_bin'] = pd.cut(merged_df['age'],

bins=[0, 18, 35, 60, 100], labels=['childl’, 'young', 'adult', 'senior'])

 

附:用经典的鸢尾花分类的模型训练及示例

基础步骤:
1️⃣ 准备数据(整理带标签的动物图集)
2️⃣ 选择学习方式(决定用哪种教科书)
3️⃣ 反复练习(调整脑回路)
4️⃣ 考试验收(用新图片测试)

关键点说明:

  • fit():训练时用的核心方法,相当于学习过程
  • predict():用训练好的模型做预测
  • 数据拆分:防止死记硬背(过拟合)
  • 准确率:评估模型好坏的核心指标

实际应用扩展:

  • 复杂任务会用深度学习(如CNN识别图片)
  • 数据需要预处理(如归一化、特征工程)
  • 参数调优很重要(相当于调整学习方法)
  • 常用库还有TensorFlow/PyTorch(处理更复杂任务)

就像学认字要先学笔画,模型训练就是让电脑通过大量例子学习数据中的规律,最终具备预测能力的人工智能基础技能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值