--- 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)