【特征工程】特征工程技术与方法

引言

在之前学习机器学习技术中,很少关注特征工程(Feature Engineering),然而,单纯学习机器学习的算法流程,可能仍然不会使用这些算法,尤其是应用到实际问题的时候,常常不知道怎么提取特征来建模。

特征是机器学习系统的原材料,对最终模型的影响是毋庸置疑的。

特征工程的重要意义

数据特征会直接影响你使用的预测模型和实现的预测结果。准备和选择的特征越好,则实现的结果越好。

影响预测结果好坏的因素:模型的选择、可用的数据、特征的提取

优质的特征往往描述了数据的固有结构

大多数模型都可以通过数据中良好的结构很好的学习,即使不是最优的模型,优质的特征也可以得到不错的效果。优质特征的灵活性可以让你使用简单的模型运算的更快,更容易理解,更容易维护。

优质的特征可以在使用不是最优的模型参数的情况下得到不错的预测结果,这样你就不必费力去选择最适合的模型和最优的参数了。

特征工程定义

特征工程是将原始数据转化为特征,更好表示预测模型处理的实际问题,提升对于未知数据的准确性。它是用目标问题所在的特定领域知识或者自动化的方法来生成、提取、删减或者组合变化得到特征。

下面的图给出了特征工程的概貌:

特征工程的子问题

1. 机器学习中的特征(Feature)

在机器学习和模式识别中,特征是在观测现象中的一种独立、可测量的属性。选择信息量大的、有差别性的、独立的特征是模式识别、分类和回归问题的关键一步。

最初的原始特征数据集可能太大,或者信息冗余,因此在机器学习的应用中,一个初始步骤就是选择特征的子集,或构建一套新的特征集,减少功能来促进算法的学习,提高泛化能力和可解释性。

在表格数据中,观测数据或实例(对应表格的一行)由不同的变量或者属性(表格的一列)构成,这里属性其实就是特征。但是与属性一词不同的是,特征是对于分析和解决问题有用、有意义的属性。

在机器视觉中,一幅图像是一个观测,但是特征可能是图中的一条线;在自然语言处理中,一个文本是一个观测,但是其中的段落或者词频可能才是一种特征;在语音识别中,一段语音是一个观测,但是一个词或者音素才是一种特征。

2. 特征的重要性(Feature Importance)

你可以客观的评价特征的实用性。判别特征的重要性是对特征进行选择的预先指标,特征根据重要性被分配分数,然后根据分数不同进行排序,其中高分的特征被选择出来放入训练数据集。

如果与因变量(预测的事物)高度相关,则这个特征可能很重要,其中相关系数和独立变量方法是常用的方法。

在构建模型的过程中,一些复杂的预测模型会在算法内部进行特征重要性的评价和选择,如多元自适应回归样条法(Multivariate Adaptive Regression Splines, MARS)、随机森林(Random Forest)、梯度提升机(Gradient Boosted Machines)。这些模型在模型准备阶段会进行变量重要性的确定。

3. 特征提取(Feature Extraction)

一些观测数据如果直接建模,其原始状态的数据太多。像图像、音频和文本数据,如果将其看做是表格数据,那么其中包含了数以千计的属性。

特征提取是自动地对原始观测降维,使其特征集合小到可以进行建模的过程。

对于表格式数据,可以使用主元素分析(Principal Component Analysis)、聚类等映射方法;对于图像数据,可以进行线(line)或边缘(edge)的提取;根据相应的领域,图像、视频和音频数据可以有很多数字信号处理的方法对其进行处理。

4. 特征选择(Feature Selection)

不同的特征对模型的准确度的影响不同,有些特征与要解决的问题不相关,有些特征是冗余信息,这些特征都应该被移除掉。

特征选择是自动地选择出对于问题最重要的那些特征子集的过程。

特征选择算法可以使用评分的方法来进行排序;还有些方法通过反复试验来搜索出特征子集,自动地创建并评估模型以得到客观的、预测效果最好的特征子集;还有一些方法,将特征选择作为模型的附加功能,像逐步回归法(Stepwise regression)

就是一个在模型构建过程中自动进行特征选择的算法。

5. 特征构建(Feature Construction)

特征重要性和选择是告诉使用者特征的客观特性,但这些工作之后,需要你人工进行特征的构建。

特征构建需要花费大量的时间对实际样本数据进行处理,思考数据的结构,和如何将特征数据输入给预测算法。

对于表格数据,特征构建意味着将特征进行混合或组合以得到新的特征,或通过对特征进行分解或切分来构造新的特征;对于文本数据,特征够自己按意味着设计出针对特定问题的文本指标;对于图像数据,这意味着自动过滤,得到相关的结构。

6. 特征学习(Feature Learning)

特征学习是在原始数据中自动识别和使用特征。

现代深度学习方法在特征学习领域有很多成功案例,比如自编码器和受限玻尔兹曼机。它们以无监督或半监督的方式实现自动的学习抽象的特征表示(压缩形式),其结果用于支撑像语音识别、图像分类、物体识别和其他领域的先进成果。

抽象的特征表达可以自动得到,但是你无法理解和利用这些学习得到的结果,只有黑盒的方式才可以使用这些特征。你不可能轻易懂得如何创造和那些效果很好的特征相似或相异的特征。这个技能是很难的,但同时它也是很有魅力的,很重要的。

特征工程的流程

机器学习中数据的转换过程:

  1. 选择数据:收集整合数据,将数据规划化为一个数据集
  2. 预处理数据:对数据进行清洗、格式化、采样
  3. 转换数据:特征工程所在
  4. 对数据建模:构建模型、评估模型、调整模型

特征工程的迭代过程:

  1. 对特征进行头脑风暴:深入分析问题,观察数据特点,参考其他问题的有关特征工程的方法并应用到自己问题中
  2. 特征的设计:你可以自动提取特征,手动构造特征,或将两者相结合
  3. 特征选择:使用不同的特征重要性评分方法或特征选择方法
  4. 评估模型:利用所选择的特征对测试数据进行预测,评估模型准确性

参考资料

Wiki:Feature learning

机器学习中的数据清洗与特征处理综述

Discover Feature Engineering, How to Engineer Features and How to Get Good at It

关于推荐系统中的特征工程

转载请注明作者Jason Ding及其出处

Github博客主页(http://jasonding1354.github.io/)

GitCafe博客主页(http://jasonding1354.gitcafe.io/)

CSDN博客(http://blog.csdn.net/jasonding1354)

简书主页(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)

Google搜索jasonding1354进入我的博客主页

时间: 2024-07-28 17:20:43

【特征工程】特征工程技术与方法的相关文章

特征工程——特征预处理

特征的标准化和归一化 异常特征样本清洗 处理不平衡数据 特征的标准化和归一化   由于标准化和归一化这两个词经常混用,所以本文不再区别标准化和归一化,而通过具体的标准化和归一化方法来区别具体的预处理操作. z-score标准化:这是最常见的特征预处理方式,基本所有的线性模型在拟合的时候都会做 z-score标准化.具体的方法是求出样本特征x的均值mean和标准差std,然后用(x-mean)/std来代替原特征.这样特征就变成了均值为0,方差为1了.在sklearn中,我们可以用Standard

?????使用??AdvancedInstaller打包web工程设置tomcat端口的方法

原文:?????使用??AdvancedInstaller打包web工程设置tomcat端口的方法 1.首先,要把你要打包的tomcat下的server.xml文件删掉,因为tomcat自带的server.xml无法与你在Advanced Installer添加的对话框中的编辑框相关联. 2.随便找个地方,只要不是在要打包的tomcat下就行,新建一个server.xml文件,内容可以直接复制tomcat下的server.xml文件的内容. 3.在AdvancedInstaller的Dialog

Powerdesigner打开工程提示打印错误 解决方法

在使用PowerDesigner打开工程时, 提示打印错误的问题,具体错误信息提示如下: 在您可以执行与打印机有关的任务(例如页面设置或打印一个文档)之前,您必须已经安装打印机.您想现在安装打印机么? 解决办法: 打开windows的服务,把 Print Spooler 这个服务启动之后,问题就解决了 Powerdesigner打开工程提示打印错误 解决方法

工程中properties文件处理方法类

功能:properties文件加载.取得key对应的值 1 import java.util.ResourceBundle; 2 3 /** 4 * 工程中properties文件处理方法类 5 */ 6 public class ConfigHolder { 7 private static ResourceBundle bundle; 8 9 /** 10 * 加载properties文件 11 */ 12 private static void loadConfig() { 13 if(b

atitit.技术选型方法总结为什么java就是比.net有前途

#----按照不同的需要有不铜的法... 一般有开发效率,稳定性上的需要.. 作者 老哇的爪子 Attilax 艾龙,  EMAIL:[email protected] 转载请注明来源: http://blog.csdn.net/attilax #-----常规选型..一般还是java+php比较好.. 长期性:把需要都罗列出来,然后把那些在长期还用得到的标出来. 一般来说.console是最稳定性的...前端gui/web是不稳定性的...后端就是更好.. 查看历史:: 会晓得,为什么php会

使ie9以下版本支持canvas,css3等主流html5技术的方法

1.前言.   ie6,7,8支持html5,看起来比较难,其实有一种方法很通用,就是引入js和css,这种可插拔的引入对开发很有帮助.比如,下面是一个让网页支持canvas和css3的例子. 2.例子. 下面是一个在canvas画布中显示一个红球的例子的html. Java代码   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TIT

你必须知道的28个HTML5特征、窍门和技术

注意:每周有那么几次,此列表会更新一些新的窍门,最终,本文会成为超级有用的资源.//zxx:丑话说在前头,我可没功夫更新,所以,即使到您女儿出嫁那天,本文还是28项内容 前端的发展如此之迅猛,一不留神,大侠你可能就会被远远地甩在后面了.如果你不想被HTML5的改变/更新搅得不知所措的话,可以把本文的内容作为必须了解的热身课程. 一.新的Doctype //zxx:”doctype”中文意思指“文档类型” 仍在使用麻烦的,不可能记得住的XHTML文档类型? <!DOCTYPE html PUBLI

学习28个HTML5特征、窍门和技术

当下,H5火热得不行,写下这篇文章,认真的认识下HTML5. HTML5最早应该是09年左右被提出,然而当时受浏览器兼容性的影响,一直没得到普遍应用,最近也是因为移动端的发展,带动HTML5. 回归正题. 原文http://www.zhangxinxu.com/wordpress/?p=1058 一.Doctype //   ”doctype”中文意思指“文档类型” 原XHTML文档类型定义,代码一堆,谁能记住... <!DOCTYPE html PUBLIC "-//W3C//DTD X

Xcode新工程如何按照原有的方法适配iPhone6和plus大屏幕

我们知道 Xcode6新建工程后,会有main.storybord等,与原来新建项目有较大区别,而且随着iPhone6和plus的到来,屏幕适配也是一个问题,苹果提供了autolayout和 sizeClass来搞定这一块,但是很多人还是不习惯,那么我们如何按照原来的方式进行一个新项目的屏幕适应呢. 首先  我们创建一个新的single工程. 将 main interface清空, 然后在info.plist文件中将Launch screen interface... 删除 然后按照以前的方法添