特征工程中使用的 6 大技术 [机器学习]

已发表: 2021-03-12

目录

介绍

特征工程是任何数据科学项目最重要的方面之一。 特征工程是指用于从原始数据中提取和细化特征的技术。 特征工程技术用于为模型创建适当的输入数据并提高模型的性能。

这些模型是基于我们从原始数据中获得的特征进行训练和构建的,以提供所需的输出。 可能会发生我们拥有的数据不足以让模型从中学习一些东西。 如果我们能够推导出找到解决我们潜在问题的特征的特征,那么它将证明是数据的良好表示。 更好的是数据的表示,更好的模型拟合,更好的结果将由模型展示。

任何数据科学项目的工作流程都是一个迭代过程,而不是一次性过程。 在大多数数据科学项目中,基础模型是在从原始数据中创建和细化特征之后创建的。 在获得基础模型的结果后,可以调整一些现有的特征,也可以从数据中衍生出一些新的特征来优化模型结果。

特征工程

特征工程过程中使用的技术可以以相同的方式为所有算法和数据集提供结果。 特征工程过程中使用的一些常用技术如下:

1. 价值转换

通过使用对数函数、根函数、指数函数等参数,可以将特征的值转换为其他度量。这些函数有一些限制,可能不适用于所有类型的数据集。 例如,根变换或对数变换不能应用于包含负值的特征。

最常用的函数之一是对数函数。 对数函数可以帮助减少可能偏向一端的数据的偏斜。 对数转换倾向于规范化数据,从而减少异常值对模型性能的影响。

它还有助于减少特征中值的大小。 当我们使用一些算法认为具有较大值的特征比其他特征更重要时,这很有用。

2. 数据插补

数据插补是指用一些统计值填补数据集中的缺失值。 这种技术很重要,因为某些算法不适用于限制我们使用其他算法或估算这些缺失值的缺失值。 如果特征中缺失值的百分比较小(大约 5% 到 10%),则最好使用它,否则会导致数据分布的更多失真。 对于数值和分类特征,有不同的方法可以做到这一点。

我们可以使用指定范围内的任意值或使用平均值、中位数等统计量度来估算数值特征中的缺失值。这些估算值必须谨慎进行,因为统计量度容易出现异常值,而这会降低模型的性能. 对于分类特征,我们可以用数据集中缺失的附加类别来估算缺失值,或者如果类别未知,则简单地将它们估算为缺失。

前者需要良好的领域知识才能找到正确的类别,而后者更多是泛化的替代方案。 我们还可以使用模式来估算分类特征。 如果缺失值的数量过多,使用模式对数据进行插补也可能导致最频繁标签的过度表示。

加入来自世界顶级大学的在线人工智能课程——硕士、高级管理人员研究生课程和 ML 和 AI 高级证书课程,以加快您的职业生涯。

3.分类编码

许多算法的要求之一是输入数据本质上应该是数字的。 事实证明,这是在此类算法中使用分类特征的一个约束。 要将分类特征表示为数字,我们需要执行分类编码。 将分类特征转换为数字的一些方法如下:

1. One-hot 编码: - One-hot 编码创建一个新特征,它为分类特征中的每个标签取一个值(0 或 1)。 此新功能指示每个观察是否存在该类别的标签。 例如,假设一个分类特征中有 4 个标签,那么在应用 one-hot 编码时,它将创建 4 个布尔特征。

也可以用 3 个特征提取相同数量的信息,就好像所有特征都包含 0,那么分类特征的值将是第 4 个标签。 如果数据集中有许多具有大量标签的分类特征,则该方法的应用会增加特征空间。

2. 频率编码: - 此方法计算分类特征中每个标签的计数或百分比,并将其映射到同一标签。 这种方法没有扩展数据集的特征空间。 这种方法的一个缺点是,如果两个或多个标签在数据集中具有相同的计数,它将为地图提供所有标签的相同编号。 这将导致关键信息的丢失。

3. 序数编码: - 也称为标签编码,此方法将分类特征的不同值映射为从 0 到 n-1 的数字,其中 n 是特征中标签的不同数量。 这种方法不会扩大数据集的特征空间。 但它确实在特征的标签内创建了序数关系。

4. 异常值的处理

异常值是其值与批次的其余部分非常不同的数据点。 为了处理这些异常值,我们需要先检测它们。 我们可以使用 Python 中的箱线图和散点图等可视化来检测它们,或者我们可以使用四分位距 (IQR)。 四分位距是第一季度(第 25 个百分位)和第三个季度(第 75 个百分位)之间的差值。

不在 (Q1 – 1.5*IQR) 和 (Q3 + 1.5*IQR) 范围内的值称为异常值。 在检测到异常值后,我们可以通过将它们从数据集中删除、应用一些变换、将它们视为缺失值以使用某种方法对其进行估算等来处理它们。

5. 特征缩放

特征缩放用于改变特征的值并将它们置于一个范围内。 如果我们使用对值的大小敏感的算法,如 SVM、线性回归、KNN 等,则应用此过程非常重要。 为了缩放特征,我们可以执行标准化、归一化、最小-最大缩放。 归一化将特征值的范围从 -1 重新调整到 1。它是每个观察值的减法与平均值与该特征的最大值和最小值的减法之比。 即[X – 平均值(X)]/[最大值(X) – 最小值(X)]。

在 min-max 缩放中,它使用特征的最小值而不是平均值。 这种方法对异常值非常敏感,因为它只考虑特征的最终值。 标准化将特征的值从 0 重新调整为 1。它不会标准化数据的分布,而前一种方法会做到这一点。

6. 处理日期和时间变量

我们遇到了许多以不同格式表示日期和时间的变量。 我们可以从日期中获取更多特征,例如月份、星期几/月份、年份、周末与否、日期之间的差异等。这可以让我们从数据集中提取更多有洞察力的信息。 从时间特征中,我们还可以提取小时、分钟、秒等信息。

大多数人错过的一件事是所有日期和时间变量都是循环特征。 例如,假设我们需要检查星期三 (3) 和星期六 (7) 之间的哪一天更接近星期日(为 1)。 现在我们知道星期六更近,但从数字上看,这将是一个星期三,因为 3 和 1 之间的距离小于 7 和 1 之间的距离。当时间格式为 24 小时格式时,同样可以应用。

为了解决这个问题,我们可以将这些变量表示为 sin 和 cos 函数。 对于“分钟”功能,我们可以使用 NumPy 应用 sin 和 cos 函数以循环性质表示它,如下所示:

minute_feature_sin = np.sin(df['minute_feature']*(2*π/60))

minute_feature_cos = np.cos(df['minute_feature']*(2*π/60))

(注:除以 60 因为一小时有 60 分钟。如果要连续做几个月,除以 12 以此类推)

通过将这些特征绘制在散点图上,您会注意到这些特征之间呈现出循环关系。

另请阅读:机器学习项目的想法和主题

结论

本文重点介绍了特征工程的重要性,同时引用了特征工程过程中使用的一些常用技术。 这取决于算法和手头的数据来决定上面列出的所有技术中的哪些技术可以提供更好的见解。

但这确实是一个难题,并且不能安全地假设,因为数据集可能不同,并且用于数据的算法也可能不同。 更好的方法是遵循增量方法并跟踪已构建的模型及其结果,而不是鲁莽地执行特征工程。

如果您有兴趣了解有关机器学习的更多信息,请查看 IIIT-B 和 upGrad 的机器学习和 AI 执行 PG 计划,该计划专为工作专业人士设计,提供 450 多个小时的严格培训、30 多个案例研究和作业、IIIT -B 校友身份,5 个以上实用的实践顶点项目和顶级公司的工作协助。

使用基于平均中位数的数据插补技术有什么缺点?

当使用平均插补时,变量之间的联系和相关性不会被保留。 但是估算平均值会保持观察到的数据的平均值。 结果,即使所有数据都随机丢失,平均估计值仍将保持无偏。 使用均值插补减少插补变量的方差。 平均插补减少了标准误差,导致大多数假设检验和置信区间计算不准确。 像这样,第一类错误是在不知不觉中犯下的。

为什么需要特征提取?

特征提取用于定位最小且信息量最大的特征集合(不同的模式),以提高分类器的有效性。 特征提取有助于减少数据收集中不必要的数据,以便仅将重点放在相关信息和特征上。 最后,减少数据使机器更容易以更少的努力开发模型,并加快机器学习过程中的学习和泛化过程。 特征工程最重要的应用是在生物医学信号分类中,其中特征提取是一个重要元素,因为如果不仔细选择特征,分类性能可能会受到影响。

使用特征提取技术有什么缺点吗?

特征提取提出了一些普通人无法阅读或理解的新特征。 可扩展性是特征提取过程中面临的另一个挑战。 如果数据集很大,一些特征提取技术将无法执行。 特别是复杂的非线性特征提取方法是不可能实现的。 大多数技术依赖于某种形式的近似来有效地处理特征选择问题,这在某些情况下无法解决精确的问题。