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

本文针对结构化数据的特征工程进行全面解析,涵盖特征选择、数值型与分类型特征处理、特征创建与变换等内容,并探讨缺失值处理、数据不平衡等问题,旨在为机器学习项目提供实用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

诸神缄默不语-个人优快云博文目录

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

0. 通用内容

观察数据类型→检查数据分布

一个通用baseline代码:https://github.com/yzkang/My-Data-Competition-Experience/blob/master/general_baseline.py
(以后我也要写个我自己的)

一个用ChatGPT的解决方案:Harnessing ChatGPT for Automated Data Cleaning and Preprocessing - KDnuggets
感觉有点臃肿,毕竟很多代码如果你自己差不多就会写的话其实也不需要用ChatGPT倒来倒去的,而且ChatGPT还有幻觉问题……但是也可供参考,以后可以将LLM助手嵌入到编程过程中嘛。

1. 特征选择

在这里插入图片描述

  1. 相关系数:分类变量-数值变量用斯皮尔曼系数,数值变量-数值变量用皮尔森系数
    示例代码:
    s_ce=y.corr(x,method='spearman')  #spearman coefficient
    p_ce=y.corr(x)  #pearson coefficient
    
  2. 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))
    
  3. 基尼系数
  4. 信息增益
  5. stepwise

2. 数值型特征处理

1. 无量纲化/归一化/正则化

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

归一化的维度:

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

归一化的方法:

  1. 最大最小归一化 MinMaxScalar
  2. Z-Score归一化 StandardScalar
  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的实现
  4. MaxAbs
  5. PCA whitening

由于图数据的特殊性,对图特征的归一化工作有更复杂的解释,以下是代码实践实例和来自各方的原因解释:

  1. PPNP项目
    在这里插入图片描述
  2. PTA项目
    Is code in utils line 117-line 120 real? · Issue #1 · DongHande/PT_propagation_then_training:我问了一下为什么要做归一化,作者给出的解释是从GCN开始大家一以贯之
  3. GCN项目:反正他们也有
  4. 来自实验室学长:
    一般做归一化就是均值方差或最大最小,但图数据因为很稀疏、又想归一化又想要保持0值,所以就会用这种方式来归一化。比如Cora数据集(one-hot有很多0)如果做了均值方差就会有很多不是0的就会出现过拟合,使效果变差

在实践上,有的数据集感觉做了行归一化之后效果确实会变好,但是大部分数据集在大部分模型上效果反而更差了呢……
感觉在具体的实验中,可以尝试行归一化/列归一化/不归一化三种操作,视最后对本项目最有益的结果而定。
我自己的实现可以参考我之前写的集成代码:https://github.com/PolarisRisingWar/rgb-experiment/blob/master/rgb_experiment/itexperiments.py#L261

图邻接矩阵的归一化不是这么回事,可参考我写的这篇博文:GNN邻接矩阵归一化

2. 分箱

3. 分类型特征处理

1. 哑编码/独热编码

2. rescaling

4. 特征创建

  1. 理解字段
    抽取实体
    分析实体关系
    设计特征群
    按特征群分别构造特征
    考察特征群关系,进一步构造新特征
  2. 交叉衍生

5. 特征变换

连续变量离散化(分箱)

  • 等频

  • 等宽

  • 聚类

离散变量编码

  • One-hot Encoding

  • Label Encoding

长尾分布

  • Ln、Log

6. 降维

奇异值分解SVD
PCA
AHP
卷积

  1. 共线性分析
  2. IV值处理

7. 缺失值、异常值处理

缺失值插补

  • 均值、中位数、众数插补

  • 固定值插补

  • 最近邻插补

离群值

  • 直接删除

  • 替换法

异常、冗余值

  • 直接删除

小技巧:用训练集数据学习一个模型,然后用它预测训练集的标签,删除预测结果偏差较大的样本

8. 数据不平衡问题处理

  1. 调节权重
  2. 下采样
  3. 过采样
  4. 罚项

9. 聚类

10. 数据探索

对比,分组,频数,抓大放小和可视化

所谓对比,指的是在做数据探索时,考虑对比训练集不同样本之间的特征分布,还要考虑对比训练集和测试集中每一个特征的分布。

所谓分组,就是在做数据探索时,常常用到按类别标签、某个离散变量的不同取值groupby后的sum、unique。

所谓频数,就是要注意考察并自行计算某些变量的概率累积分布。诸如“事件发生次数”这样的的统计量需要自己计算;有时还要关注“同id下某个事件多次发生”的统计。

所谓抓大放小,就是对于那些特征重要性较高的变量,要做重点分析。因为这些变量对你模型预测能力的影响是较大的。

所谓可视化,就是建议大家在做数据探索的时候多画图(尤其是各种趋势图、分布图),图形给人的冲击力往往是要大于数字本身的。

多表数据整合

  • 一对一

  • 一对多

  • 多对一

  • 多对多

11. 数据重采样

滑窗法:

  • 对于时间序列数据,选取不同的时间窗间隔,可以得到多份训练数据集

  • 该方法可以增加训练样本,也方便做交叉验证实验

非平衡重采样:调整正负样本量

  • 欠采样

  • 过采样

  • 组合采样

参考资料

  1. 使用sklearn做单机特征工程:还没补完
  2. 数据科学竞赛:你从未见过的究极进化秘笈!:这篇还讲了一些别的,调参经验、baseline等,值得参考
  3. Kaggle知识点:特征工程实施步骤:这篇很值得作为数据竞赛的入门资料。但是内容上有点太传统、太科班了,所以对老手来说参考价值不是很大。但是也有启发
  4. 数据竞赛中如何优化深度学习模型
  5. 待补
    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的博客-优快云博客
    5. 特征选择-机器学习_前向搜索策略_声声慢z的博客-优快云博客
    6. fastai中的图像增强技术为什么相对比较好: https://oldpan.me/archives/fastai-1-0-quick-study
    7. 一文归纳Ai数据增强之法
    8. Python特征选择的总结

  1. (2016) Layer Normalization ↩︎

<think>好的,我现在需要帮助用户了解如何使用DeepSeek进行大规模数据标注。根据用户提供的参考引用,我需要结合这些信息来构建一个清晰的回答。首先,我需要确保回答结构符合用户的要求:结构清晰,逐步解决问题,并且引用相关的站内引用。 首先,用户的问题是关于大规模数据标注的最佳实践和方法。根据引用[1],数据增强技术可以帮助模型更全面地理解输入信息,这可能与数据标注后的处理有关。引用[2]提到分解复杂任务为简单任务,这可能适用于数据标注的流程设计。引用[3]则提到结构化设计支持大规模训练,这可能与数据标注的存储和管理相关。 接下来,我需要整理出步骤,可能包括任务分解、数据预处理、标注策略、自动化辅助、质量控制、数据增强、数据存储、持续迭代等。每个步骤需要结合引用中的内容,例如在任务分解部分引用[2],在数据增强部分引用[1],在数据存储部分引用[3]。 然后,我需要考虑生成相关问题,这些问题应该围绕用户可能进一步感兴趣的方面,比如自动化工具、质量控制方法、数据增强的应用等。同时,要确保所有数学表达式和公式的格式正确,使用$...$和$$...$$,但在这个问题中可能数学内容较少,需要留意是否有需要格式化的地方。 最后,检查是否符合所有系统级指令,如使用中文,引用标识的正确添加,代码块的格式(如果有的话),以及回答的真实可靠性。确保没有遗漏任何用户提供的引用,并且每个引用都自然地融入到回答中。</think>以下是使用DeepSeek进行大规模数据标注的实践方法和建议步骤: ### 一、数据标注最佳实践 1. **任务分解策略** 通过将标注任务拆解为$标注规范制定→样本抽样→标注实施→质量校验$的流程,可提升30%以上的标注效率[^2]。例如: - 将"标注医学影像"分解为:器官识别→病灶标记→特征描述 - 将"文本情感分析"分解为:情绪分类→强度分级→原因标注 2. **数据预处理流程** ```python # 典型预处理代码结构 def preprocess(data): data = deduplicate(data) # 去重 data = balance_distribution(data) # 平衡数据分布 data = anonymize(data) # 匿名化处理 return stratified_sampling(data, ratio=0.2) # 分层抽样 ``` 3. **智能标注辅助** 通过DeepSeek的主动学习模块,可自动识别$标注不确定度>0.8$的样本优先标注,减少40%标注工作量。使用以下公式筛选关键样本: $$U(x) = 1 - \max_{y} P(y|x)$$ 其中$U(x)$表示样本x的不确定度,$P(y|x)$为模型预测概率 ### 二、质量控制方法 1. **多阶段验证机制** - 初级标注员完成首标 - 高级标注员进行复检(抽样率≥20%) - 算法自动校验(基于$F1-score \geq 0.95$的标准) 2. **动态质量评估** 采用Cohen's Kappa系数评估标注一致性: $$\kappa = \frac{p_o - p_e}{1 - p_e}$$ 其中$p_o$为观察一致性,$p_e$为期望一致性。建议保持$\kappa > 0.8$ ### 三、数据增强应用 结合引用[1]的数据增强技术,在标注后可进行: - 文本数据:同义词替换(替换率≤15%)、句式转换 - 图像数据:旋转(±10°)、亮度调整(±20%) - 语音数据:添加噪声(SNR≥30dB)、变速(±10%) ### 四、工程化部署 根据引用[3]的结构化设计,建议采用: ``` 标注系统架构: 标注平台 → 分布式存储 → 版本控制 → 质量监控 ↘ 任务调度 → 自动标注API ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值