机器学习特征工程:缺失值处理与特征缩放方法

在机器学习面试中,特征工程是必考的核心领域。数据预处理的质量直接决定了模型的性能上限。本文将深入探讨特征工程中两个关键环节:缺失值处理与特征缩放,并提供面试中常见的考察点与实用代码示例。

一、缺失值处理

缺失值是现实数据中的常见问题,处理不当会导致模型偏差或无法运行。面试官通常会考察候选人对不同缺失机制的理解和处理策略的选择。

1.1 缺失机制

  • 完全随机缺失(MCAR):缺失与任何变量无关
  • 随机缺失(MAR):缺失与已观测变量相关
  • 非随机缺失(MNAR):缺失与未观测变量相关(最难处理)

1.2 常用处理方法

删除法

import pandas as pd
import numpy as np

# 创建示例数据
data = pd.DataFrame({
    'A': [1, 2, np.nan, 4, 5],
    'B': [np.nan, 2, 3, np.nan, 5],
    'C': [1, 2, 3, 4, 5]
})

# 删除包含缺失值的行
data_drop_rows = data.dropna()
print("删除行后数据形状:", data_drop_rows.shape)

# 删除缺失值超过阈值的列
data_drop_cols = data.dropna(thresh=0.7*len(data), axis=1)
print("删除列后数据形状:", data_drop_cols.shape)

填充法

from sklearn.impute import SimpleImputer

# 均值填充
imputer_mean = SimpleImputer(strategy='mean')
data_mean = imputer_mean.fit_transform(data)

# 中位数填充(对异常值更鲁棒)
imputer_median = SimpleImputer(strategy='median')
data_median = imputer_median.fit_transform(data)

# 众数填充(适用于分类特征)
imputer_mode = SimpleImputer(strategy='most_frequent')
data_mode = imputer_mode.fit_transform(data)

# 常数填充
imputer_constant = SimpleImputer(strategy='constant', fill_value=-1)
data_constant = imputer_constant.fit_transform(data)

模型预测法

from sklearn.ensemble import RandomForestRegressor
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer

# 使用迭代插补(MICE算法)
imputer_iterative = IterativeImputer(
    estimator=RandomForestRegressor(n_estimators=10, random_state=42),
    max_iter=10,
    random_state=42
)
data_iterative = imputer_iterative.fit_transform(data)

面试提示:当被问到如何处理缺失值时,不仅要给出方法,还要说明选择依据。例如,对于时间序列数据,可以使用前向填充或后向填充;对于数据库中的复杂缺失值分析,可以使用 dblens SQL编辑器 进行高效的数据探查和模式识别,其可视化界面能快速发现缺失值分布规律。

二、特征缩放

特征缩放是将不同量纲的特征转换到相同尺度,这对基于距离的算法(如KNN、SVM)和梯度下降优化至关重要。

2.1 为什么要特征缩放?

  1. 加速梯度下降收敛
  2. 防止某些特征主导模型
  3. 提高基于距离算法的准确性

2.2 常用缩放方法

标准化(Z-score标准化)

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_scaled = scaler.fit_transform(data_iterative)  # 使用之前处理好的数据
print("标准化后均值:", X_scaled.mean(axis=0))
print("标准化后方差:", X_scaled.var(axis=0))

标准化将数据转换为均值为0、标准差为1的分布,适用于特征近似正态分布的情况。

归一化(Min-Max缩放)

from sklearn.preprocessing import MinMaxScaler

scaler_mm = MinMaxScaler(feature_range=(0, 1))
X_normalized = scaler_mm.fit_transform(data_iterative)
print("归一化后最小值:", X_normalized.min(axis=0))
print("归一化后最大值:", X_normalized.max(axis=0))

归一化将数据缩放到指定范围(默认[0,1]),对异常值敏感。

鲁棒缩放

from sklearn.preprocessing import RobustScaler

scaler_robust = RobustScaler()
X_robust = scaler_robust.fit_transform(data_iterative)

鲁棒缩放使用中位数和四分位数范围,对异常值不敏感。

最大绝对值缩放

from sklearn.preprocessing import MaxAbsScaler

scaler_maxabs = MaxAbsScaler()
X_maxabs = scaler_maxabs.fit_transform(data_iterative)

将每个特征除以该特征的最大绝对值,适用于稀疏数据。

2.3 缩放方法选择指南

方法 适用场景 注意事项
标准化 特征近似正态分布 受异常值影响
归一化 需要固定范围 对异常值敏感
鲁棒缩放 存在异常值 不保证固定范围
最大绝对值缩放 稀疏数据 范围[-1, 1]

面试技巧:当被问到如何选择缩放方法时,可以结合具体业务场景回答。例如,在图像处理中常使用归一化到[0,1];在金融风控中,由于存在极端值,鲁棒缩放更合适。在实际工作中,可以使用 QueryNote 记录不同缩放策略的实验结果,方便团队协作和知识沉淀。

三、实战面试题解析

3.1 面试题示例

问题:在一个电商用户数据集中,年龄特征有10%的缺失值,收入特征有5%的缺失值且存在极端高值。你会如何处理这些特征?

参考答案

  1. 年龄特征

    • 首先分析缺失机制,如果是随机缺失,可以使用均值/中位数填充
    • 如果与其他特征相关(如注册渠道),可以使用模型预测填充
    • 考虑添加“是否缺失年龄”的指示变量
  2. 收入特征

    • 对极端值进行缩尾处理(Winsorization)
    • 使用鲁棒缩放而非标准化或归一化
    • 考虑对收入取对数转换,使其分布更接近正态
# 综合处理示例
import numpy as np
from sklearn.preprocessing import RobustScaler
from sklearn.impute import SimpleImputer

# 假设df是原始数据框
# 处理年龄缺失
age_imputer = SimpleImputer(strategy='median')
df['age_filled'] = age_imputer.fit_transform(df[['age']])
df['age_missing'] = df['age'].isnull().astype(int)

# 处理收入异常值和缩放
# 缩尾处理(将超出99分位数的值替换为99分位数)
q99 = df['income'].quantile(0.99)
df['income_winsorized'] = np.where(df['income'] > q99, q99, df['income'])

# 鲁棒缩放
scaler = RobustScaler()
df['income_scaled'] = scaler.fit_transform(df[['income_winsorized']])

3.2 常见陷阱

  1. 数据泄露:在训练集上拟合scaler,然后在测试集上transform
  2. 忽略特征类型:对分类特征进行数值缩放
  3. 盲目填充:不考虑缺失机制直接填充
  4. 顺序错误:先拆分数据集再处理缺失值

四、总结

特征工程是机器学习项目成功的关键,而缺失值处理和特征缩放是其中最基础也最重要的环节。面试中考察这些知识点,不仅看技术实现,更看重候选人的思考过程和实际经验。

关键要点回顾

  1. 缺失值处理需要先分析缺失机制,再选择合适的方法
  2. 特征缩放方法的选择取决于数据分布和算法需求
  3. 始终注意防止数据泄露,正确处理训练集和测试集
  4. 记录实验过程和结果至关重要,QueryNote 可以帮助团队高效协作
  5. 对于复杂的数据预处理流程,dblens SQL编辑器 提供了强大的数据探索和转换能力

掌握这些核心概念并能在面试中清晰表达,将大大增加获得机器学习相关职位的机会。记住,优秀的特征工程不仅需要技术知识,更需要业务理解和实践经验。

posted on 2026-01-30 16:46  DBLens数据库开发工具  阅读(0)  评论(0)    收藏  举报