发布于 2026-01-06 9 阅读
0

增强机器学习模型:深入探讨特征工程 DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

增强机器学习模型:深入探讨特征工程

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

机器学习模型的有效性很大程度上取决于输入数据和特征的质量[1]。在传统机器学习中,将原始数据转换为特征对于模型精度至关重要。特征工程旨在将现有数据转换为信息丰富、相关性强且具有区分性的特征。尽管深度学习和端到端学习已经彻底改变了图像、文本和信号的自动化处理方式,但对于关系型数据和人类行为数据而言,特征工程仍然是一项迭代的、缓慢且费力的任务[2]。

本文探讨了特征工程技术,旨在提高预测模型的准确性和可靠性。此外,本文还提出了一些有助于简化特征工程流程的解决方案。


数据科学工作流程

数据科学工作流程:迭代的三步流程[2]
在初始阶段,分析师定义预测目标。数据工程师随后提取、加载和转换变量,构建特征,并定义目标标签。最后,机器学习工程师构建针对特定预测目标的模型,并通过迭代探索各种技术,找到最合适的解决方案。

什么是特征工程?

特征工程是传统机器学习模型中的关键步骤,专家需要手动设计并从处理后的数据中提取相关特征。其目标是将专家知识、直觉判断和人类先入为主的观念编码到机器学习模型中。这有助于模型更轻松地学习,尤其是在处理较小数据集时,并提高模型的准确性和可解释性。

然而,特征工程并非万能的解决方案。特征和技术的选择取决于数据的性质、问题的复杂性以及模型的目标。此外,特征工程是一个迭代过程,需要评估模型性能,并据此对特征进行优化和更新。

下图说明了如何简单地将现有协变量投影到更高维的空间,即创建现有特征的多项式变体,使数据线性可分,从而更容易被简单的机器学习模型学习。

支持向量机

特征工程如何提高模型准确率的示例 - 添加现有特征的多项式变体可以使类别线性可分,从而更容易让简单的机器学习模型学习。

关系型和时间型数据的基本特征工程技术

下表总结了一些与传统机器学习模型相关的基本特征工程技术。

技术 描述和用例 程序
估算 填充或估计缺失值以完善数据集。这对于在模型训练前处理缺失数据至关重要。 数值变量采用均值、中位数或众数进行插补。
规模化 将数值特征归一化到相似尺度以防止偏差。这对于防止较大数值特征占据主导地位至关重要。 最小-最大值缩放(取值范围为[0, 1])。Z分数归一化(均值为0,标准差为1)。
异常值 为数值设定预定义的上下限,以限制极端值(异常值)。这有助于防止极端值对模型产生过大的影响。 根据百分位数或特定阈值定义上限和下限。将高于上限的值限制在上限范围内,将低于下限的值限制在下限范围。
独热编码 将分类变量表示为二进制向量。这使得机器学习算法能够处理分类数据。 为每个类别创建一个二进制列。将对应类别的值赋为 1,否则赋值为 0。
分类 将连续数值特征转换为类别特征。这对于处理数值数据中的非线性关系非常有用。 将数值分组到离散的区间或箱中。
对数变换 对偏态数值特征应用对数变换。对于收入等分布偏态的变量非常有效。 取对数以处理右偏分布。
多项式特征 通过多项式变换创建新特征。捕捉数据中的非线性关系。 如果 x 是一个特征,则 x^2 和 x^3 将成为新的特征。
功能交互 通过组合现有特征创建新特征,捕捉对目标变量的联合影响。 如果 x1 和 x2 是特征,则创建一个新特征 x1 * x2。
特征聚合 将多个相关特征合并成一个信息量更大的单一特征。这样可以降低维度并提取整合后的信息。 计算相关特征的平均值或总和。
基于时间的功能 从时间戳或时间相关数据中提取时间信息。有助于理解数据中的时间模式。 例如:星期几、一天中的小时、时间序列数据的时间滞后。
正则表达式功能 使用正则表达式从文本数据中提取模式。可用于识别文本中的特定结构或格式。 例如:匹配电子邮件地址、提取日期、识别社交媒体文本中的话题标签。
频率编码 根据分类变量的频数赋予数值。适用于对频数变化较大的分类变量进行编码。 保留了类别分布信息。适用于高基数类别变量。

领域特定特征工程

自然语言处理(NLP)
任务需要从文本数据中提取特征,其中包括:

  • 分词:将文本拆分成单个单词或词元。
  • 词干提取和词形还原:从单词中去除前缀​​和后缀,并将它们映射到其词根或词典形式。
  • 词性标注 - 用相应的词性(即名词、动词、形容词等)标记每个单词。
  • 命名实体识别:在文本中定位和标记命名实体,例如人、组织和地点。
  • 词袋模型:将文本表示为一个整数向量,该向量包含预定义词汇表中每个单词的计数。
  • 词频-逆文档频率:根据单词在文档中的频率相对于其在所有文档中的频率,用数值权重来表示单词。
  • 词嵌入:基于语义相似性,将词语表示为连续向量空间中的稠密向量。
  • 情感分析:识别文本的情感或语气,是积极的、消极的还是中性的。
  • 主题建模:识别文档或文档集中的潜在主题。

计算机视觉(CV)
特征工程是指从图像中提取特征的技术,包括:

  • 图像增强:通过图像旋转和滤波器等几何变化来改变训练集,以增加训练集,从而提高模型的泛化能力。
  • 边缘检测滤波器:利用 Sobel、Prewitt、Laplacian 或 Canny 边缘滤波器来突出显示图像中强度或边缘的变化。
  • 尺度不变特征变换(SIFT):识别和描述图像中对尺度和旋转不变的局部特征。
  • 颜色直方图:用颜色分布来表示图像。
  • 方向梯度直方图(HOG):基于图像中梯度的分布从图像中提取特征。

时间序列分析
中的特征工程涉及从时间序列数据中提取特征的技术,包括:

  • 自相关:衡量时间序列与其滞后值之间的相关性。
  • 移动平均值:计算在特定窗口内时间序列数据子集的平均值。
  • 趋势分析:识别时间序列数据中的趋势和模式。
  • 傅里叶变换:将时间序列信号分解成其频率分量。
  • 梅尔频率倒谱系数(MFCC):用功率谱表示音频信号。
  • 音素:用音素表示单词,利用人类对单词发音的先入之见。

自动特征工程

有大量的工具和开源软件包可以帮助我们自动化和简化特征工程。这些软件包利用算法,根据数据特征生成和选择特征。这减少了人工操作,并拓宽了潜在特征的探索范围。

  • Featuretools:专为对时序和关系数据进行自动化特征工程而设计。

  • tsfresh:专为从时间序列和其他顺序数据中提取特征而设计

  • AutoFeat:简化从数据中生成非线性特征的过程。

  • TPOT(基于树的管道优化工具):旨在利用遗传编程自动执行机器学习管道的各个方面,例如特征工程、特征选择和模型优化。

  • featurewiz:自动进行特征工程和选择。

Featuretool 的深度特征合成 (DFS) [2] 算法因其多功能性而脱颖而出,尤其是在处理关系数据集和结合时间聚合时。

教程

在本教程中,我们将对包含四个表的数据集实现 Featuretools:

  • 客户 - 关于信用社客户的信息
  • 贷款 - 客户之前获得的贷款
  • 到期款项 - 付款到期日和金额
  • 结果——贷款支付及日期

数据来源:Kaggle [3]

数据样本

数据示例:此处的机器学习模型的目标是判断客户是否会按时支付下一笔款项。

Featuretools 具有三个显著优势,使其成为一款强大的自动化特征工程工具:

1. 基于实体集的方法
Featuretools 基于实体集(即数据框及其之间的关系)进行操作。这简化了关系型数据集的特征工程流程,使用户能够定义表之间的关系,并基于这些关系自动生成特征。

代码:
es = ft.EntitySet(id = 'clients')

## Entities Dataframe
es = es.add_dataframe(
    dataframe_name="clients",
    dataframe=clients,
    index="client_id",
    time_index="joined")

es = es.add_dataframe(
    dataframe_name="loans",
    dataframe=loans,
    index="loan_id",
    time_index="loan_start")

es = es.add_dataframe(
    dataframe_name="payments_due",
    dataframe=payments_due,
    index="payment_id",
    time_index="due_date")

es = es.add_dataframe(
    dataframe_name="outcome",
    dataframe=outcome,
    time_index="outcome_time")


## Adding Relationships in data frames

# Relationship between clients and previous loans
ed = es.add_relationship('clients', 'client_id', 'loans', 'client_id')

# Relationship between previous loans and payments
es = es.add_relationship('loans', 'loan_id', 'payments_due', 'loan_id')

# Relationship between payments and outcome
es = es.add_relationship('payments_due', 'payment_id', 'outcome', 'payment_id')


es.plot()


Enter fullscreen mode Exit fullscreen mode

Featuretools 实体集

Featuretools EntitySet - 表及其关系。

2. 特征原语、深度特征合成 (DFS)
“特征原语是 Featuretools 的构建模块。它们定义了可以应用于原始数据集以创建新特征的计算。”[4]。

特征基元分为两类:

  • 聚合:将每个父级的子级数据点分组在一起,并计算均值、方差等统计量的功能。[3]
  • 转换:对表中的列子集进行操作,例如从日期中提取日期、计算两列之间的差值等。[3]
代码:
# Index and the time to use as a cutoff time
cutoff_times = es['payments_due'][['payment_id', 'due_date']].sort_values(by='due_date')

# Rename columns to avoid confusion
cutoff_times.rename(columns = {'due_date': 'time'},
                    inplace = True)
cutoff_times.head()

# subtract 1 day from the time
cutoff_times['time'] = cutoff_times['time'] - pd.Timedelta(0, 'days')
payments_due

# Feature Primitives
agg_primitives =  ["sum","min"]
trans_primitives = ["time_since_previous"]

# Deep feature synthesis 
agg_primitives =  ["sum","count","max"]
trans_primitives = ["time_since_previous"]

# Deep feature synthesis 
f, feature_names = ft.dfs(entityset=es, target_dataframe_name='payments_due',
                       agg_primitives = agg_primitives,
                       trans_primitives = trans_primitives,
                       n_jobs = -1, verbose = 1,
                       cutoff_time = cutoff_times,                    
                       cutoff_time_in_index = True,
                       max_depth = 2)

Enter fullscreen mode Exit fullscreen mode

此外,Featuretools 提供了可视化表示,用于检查、解释和验证生成的特征,从而增强对后续构建的机器学习模型的理解和可解释性。

功能详情

featuretool 的可视化表示,展示了如何针对给定的数据集生成特定特征。

3. 数据泄露和处理时间
数据泄露以多种形式存在,对机器学习模型和系统而言仍然是一个挑战[5]。Featuretools 提供了一种内在的解决方案,通过为每条记录指定截止时间,并在计算特征之前过滤掉该时间戳之前的所有数据,来防止特征生成过程中的“时间泄露”,从而有效地防止引入时间泄露[6]。


有关如何使用 featuretool 并考虑处理时间的详细教程,请参见此处:Github


总之,特征工程是机器学习模型中至关重要的一步,能够显著提升模型的性能和准确率。诸如 Featuretools 之类的自动化工具和软件包可以简化特征工程流程,并有助于机器学习系统的成功。

参考

[1] Domingos, P., 2012. 关于机器学习需要了解的一些有用知识。ACM 通讯,55(10),第 78-87 页。

[2] Kanter, JM 和 Veeramachaneni, K.,2015 年 10 月。深度特征合成:迈向数据科学工作的自动化。载于 2015 年 IEEE 数据科学与高级分析国际会议 (DSAA)(第 1-10 页)。IEEE。

[3] 自动化特征工程教程 - Kaggle

[4] 特征原语 - Featuretools 文档

[5] Kapoor, S. 和 Narayanan, A., 2023. 基于机器学习的科学中的泄漏和可重复性危机。Patterns, 4(9)。

[6] 处理时间 - Featuretools 文档

文章来源:https://dev.to/salmank/enhancing-machine-learning-models-a-deep-dive-into-feature-engineering-2dh7