freeCodeCamp/guide/chinese/machine-learning/feature-engineering/index.md

89 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Feature Engineering
localeTitle: 特色工程
---
## 特色工程
机器学习最适合格式良好的数据。特征工程描述了某些技术,以确保我们正在使用我们收集的数据的最佳表示。
## 为什么特征工程有用?
* 特征的数量和质量会影响模型的预测能力。更高质量的功能可以产生更好的模型。
* 通过获取您拥有的数据来构建更好的模型,并使用其他地方获得的其他主题相关信息对其进行扩充。
* 新功能可以导致模型预测稳健结果的“突破”。
## 注意事项以工程为特色
* 基于已知特征的新特征创建可以导致多重共线性,即两个特征线性相关的情况。这相当于模型中的“双重浸渍”并且可能导致过度拟合。
* 更多并不总是更好。添加预测能力较差的功能可以增加计算时间,而不会给模型带来好处。
## 特征工程的示例:
* 如果您有“日期”功能请尝试将其子集化为“星期几”“一年中的某一周”或“一年中的某个月”。同样从“一天中的时间”创建AM / PM功能。
* 像PCA一样执行数据缩减然后将PCA中的矢量作为新功能添加到数据中。
* 通过数字转换当前功能来生成新功能。示例是对数转换数据或将分类特征编码为数字(将低/中/高转换为1/2/3
* 假设您的数据集包含位置信息(城市,州,县等),请使用人口普查数据创建新功能(例如平均收入)。
以下是两种特征工程技术:缩放和选择。
### 特征缩放
我们假设您的数据包含人的体重和身高。这两个特征的原始数量差异很大例如80千克和180厘米或175磅对5.9英尺),这可能会影响某些机器学习算法的结果。对于使用[距离函数的](https://en.wikipedia.org/wiki/Euclidean_distance)算法尤其如此。
为了解决这个问题我们将原始数字表示为0到1范围。我们可以使用以下公式实现 `(x - xMin) / (xMax - xMin)`
使用这个公式我们需要特别注意异常值因为这些可以通过推高xMax并下推xMin来大大影响结果。这就是为什么在缩放之前经常消除异常值的原因。
### 特征选择
这一切都是为了确定负责我们在数据中观察到的趋势的特征子集。
我们为什么要关心? [维度的诅咒](https://en.wikipedia.org/wiki/Curse_of_dimensionality)是大数据时代的一大敌人。我们不能使用我们所有的数十到数百个功能。这不仅会提高我们数据的维度2 ^ n其中n是特征的数量而且在特定用例中通常也没有任何意义。想象一下想要预测明天的天气在这种情况下最后几天的天气趋势更可能比在最后几天出生的婴儿更重要。所以你可以很容易地消除婴儿特征。
但是现在忘了宝宝,让我们深入了解更多细节。
#### 过滤和包装
这里我们描述两种一般方法。过滤方法独立于您选择的学习算法,包装方法包含您的学习者。
过滤方法在将数据注入ML算法之前选择要素子集。他们使用例如与待预测变量的相关性来识别要选择的特征子集。这些方法的计算速度相对较快但没有利用[学习者](https://en.wikipedia.org/wiki/Inductive_bias)的[偏见,](https://en.wikipedia.org/wiki/Inductive_bias)因为过滤的发生与您选择的ML模型无关。
包装搜索算法确实利用了学习偏差因为它们包含了您选择的ML模型。这些方法的功能是删除删除时分数变化最小的功能并重复此过程直到分数发生显着变化。这意味着一遍又一遍地运行学习算法这会导致大量的计算时间。这些方法也存在过度拟合的危险因为您基本上是根据您选择的ML模型优化功能集。
#### 关联
选择特征的另一种方法是使用[BOC贝叶斯最优分类器](https://scholar.google.de/scholar?q=Bayes+Optimal+Classifier&hl=en&as_sdt=0&as_vis=1&oi=scholart&sa=X&ved=0ahUKEwiO16X0tIbXAhXiKsAKHbGrBzoQgQMIJjAA) 。这里的规则是:
* 如果删除它会降低BOC则该功能具有很强的相关性
* 如果某项功能不具有很强的相关性并且与其他功能相结合则该功能可以提高BOC
* 否则一个功能是无关紧要的
好吧,并非总是如此。这取决于您拥有的数据量和竞争信号的强度。您可以通过事先突出显示它来帮助您的算法“专注”重要事项。
* 来自阈值的指标变量:假设您正在研究美国消费者的酒精偏好,并且您的数据集具有年龄特征。您可以为年龄> = 21创建指标变量以区分超过法定饮酒年龄的受试者。
* 来自多个功能的指标变量您正在预测房地产价格并且您具有n _间卧室和n_间浴室的功能。如果拥有2张床和2个浴室的房屋作为出租房产获得溢价您可以创建一个指示变量来标记它们。
* 特殊事件的指标变量:您正在为电子商务网站的每周销售建模。您可以为黑色星期五和圣诞节创建两个指标变量。
* 类别组的指标变量您正在分析网站转换而您的数据集具有分类功能流量_来源。您可以_通过使用“Facebook广告”或“Google Adwords”的流量来源值标记观察结果_来为付费_流量_创建指标变量_ 。
## 互动功能
下一类特征工程涉及突出显示两个或多个特征之间的交互。
你有没有听过这句话,“总和大于部分?”嗯,某些功能可以结合起来提供比个人更多的信息。
具体而言,寻找机会获取多个特征的总和,差异,产品或商。
\*注意:我们不建议使用自动循环来为您的所有功能创建交互。这导致“特征爆炸”。
* 两个特征的总和假设您希望根据初步销售数据预测收入。您有销售_蓝色_笔和销售_黑色_笔的功能。如果您只关心整体sales\_pens可以对这些功能进行总结。
* 两个功能之间的区别您具有房屋_建造_日期和房屋_购买_日期的功能。您可以利用他们的不同来创建特征房屋_年龄_ at\_purchase。
* 两个功能的产品:您正在运行定价测试,并且您具有功能价格和指标变量转换。您可以使用他们的产品来创建功能收入。
* 两个功能的商数您拥有营销广告系列的数据集其中包含n _次点击和n次_展示。您可以按展示次数除以点击创造点击_率_ ,让您在不同体积的运动进行比较。
#### 更多信息:
* [论文探索“文本分类的特征工程”](https://pdfs.semanticscholar.org/6e51/8946c59c8c5d005054af319783b3eba128a9.pdf)
* [文章“发现特征工程,如何设计特征以及如何获得它”](https://machinelearningmastery.com/discover-feature-engineering-how-to-engineer-features-and-how-to-get-good-at-it/)
* [全面的数据分析指南](https://www.analyticsvidhya.com/blog/2016/01/guide-data-exploration/)
* [数据转换](https://onlinecourses.science.psu.edu/stat501/node/318)
* [数据科学中的特征工程](https://docs.microsoft.com/en-us/azure/machine-learning/team-data-science-process/create-features)