特征工程/数据预处理超全面总结(持续更新ing...)

264 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 32 天,点击查看活动详情

(本文是第46篇活动文章)

诸神缄默不语-个人CSDN博文目录

本文比较适宜于那种结构化数据的传统机器学习。但是深度学习的话,那也有很大概率会用到特征工程。因此在此做出总结,以资借鉴。 本文仅考虑结构化数据,不对使用图像、文本等非结构化数据进行表征、特征提取的工作进行介绍。 特征工程是玄学。本文仅作收集及按照本人理解做出讲解,具体的丹能不能炼出来还是要靠命。

最早更新时间:2022.12.1 最近更新时间:2023.3.1

@[toc]

1. 特征选择

  1. 相关系数:分类变量-数值变量用斯皮尔曼系数,数值变量-数值变量用皮尔森系数 示例代码:
s_ce=y.corr(x,method='spearman')  #spearman coefficient
p_ce=y.corr(x)  #pearson coefficient
  1. SelectKBest 示例代码:
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_regression
K=20
bestfeatures = SelectKBest(score_func=f_regression, k=K)
bestfeatures.fit(x,y)
selected_feature_columns=list(bestfeatures.get_support(True))

2. 数值型特征处理

2.1 无量纲化/归一化/正则化

(这部分内容我在小红书上更新过一个更简单的初版:深度学习中的trick | 常见归一化维度和方法

归一化的维度:

  1. 列归一化:传统机器学习常采用,为防止某些特征的量级远高于其他特征
  2. 行归一化:GNN中常用(从GCN到APPNP官方实现代码都会有),抹平在预测过程中节点之间特征值大小的量差(因为GNN是非欧数据,需要做MP,所以会有这个影响需要抹除,其他IID的任务这样做感觉一般不会产生什么影响的)
  3. 参数需要训练的归一化神经网络:Batch normalization(对batch的每一维特征进行归一化) VS. Layer normalization(对时序数据每一个时间步的特征进行归一化):Z-Score归一化

归一化的方法:

  1. 最大最小归一化
  2. Z-Score归一化
  3. LP归一化:将特征等比例缩放到总和为特征向量的LP模长。可参考函数torch.nn.functional.normalize的实现
    1. GNN中常用的做法(L1归一化):将特征(或者减去最小值后的特征)等比例缩放到总和为1。可以保留原数据中的稀疏性(可以参考PyG实现NormalizeFeatures类的实现,或者我的GitHub项目PolarisRisingWar/rgb-experiment的实现)
    2. L2归一化
      1. sklearn.preprocessing.Normalizer的实现
      2. lambda x:x / (torch.max(torch.norm(x, dim=1, keepdim=True), epsilon))(参考自HGB/GNN.py at master · THUDM/HGB,此处设置的epsilons是1e-12)
      3. tf.math.l2_normalize的实现

3. 分类型特征处理

3.1 哑编码/独热编码

4. 特征创建

5. 特征变换

6. 降维

奇异值分解SVD PCA

7. 缺失值、异常值处理

8. 数据不平衡问题处理

9. 聚类

10. 参考资料

  1. 使用sklearn做单机特征工程:还没补完
  2. 待补
    1. Machine Learning — Singular Value Decomposition (SVD) & Principal Component Analysis (PCA) | by Jonathan Hui | Medium
    2. 使用sklearn做单机特征工程 - jasonfreak - 博客园
    3. Feature Engineering and Selection:这是一门2009年的课程(全课的官网:Computer Science 294: Practical Machine Learning)中的一部分,老而弥坚了属于是……
    4. 手把手教你用sklearn做特征工程_sklearn_features_fuqiuai的博客-CSDN博客