本文是译文,可以转载,但需注明出处,点击这里可以获取原文,有删减。


机器学习中,特征工程是创建新特征,能有效提高模型性能的方法之一。

特征工程比较困难,耗时且需要领域专业知识。
应用机器学习的基础是特征工程。 ———吴恩达

通过特征工程,可以区分出哪些是主要信息,突出特征模式,引进领域专业知识。毫无疑问,特征工程的无限制性使得特征工程构建者很容易陷入僵局。
接下来,我们将讨论几个常见的特征工程构建方法。
什么是特征工程?
特征工程是一个非正式的主题,业界也有许多有关它的定义。而我们对特征工程的定义——为了提高模型性能,从已存在的特征中构建新特征的过程。
以下是典型数据科学过程:

  • 确定项目范围/数据收集

  • 探索分析

  • 数据清洗

  • 特征工程

  • 模型训练(包括交叉验证和模型调参)

  • 项目交付/获得洞察

什么不是特征工程?
以下数据处理技术不纳入特征工程讨论范围:

  • 收集原始数据

  • 创建目标变量

  • 去除重复值,处理缺失值及修复错误值

  • 数据标准化

  • 特征选择和PCA(主成分分析)

接下来开启我们的特征工程之旅。
指示变量
第一种特性工程使用指示变量来获取关键信息。也许你会问:“模型不是能自己识别哪些是关键信息么?”
有时候的确能,但并不是所有时候都可以——这取决于数据的样本量。在建模之前可以构建如下指示变量:

  • 阈值型指示变量:假设正在研究美国市民的酒精偏好,而数据集中有“age”变量。此时,我们可以建立“age >= 21”变量来区分那些合法饮酒年龄之上的公民;

  • 多特征型指示变量:如果你正在研究不动产价格,且你有“n_bedrooms”和“n_bathrooms”变量。如果在租赁房屋时,2个床位和2个浴室意味着非常有优势,则可以构建相应的指示变量来标识它们;

  • 特殊事件指示变量:在预测电商网站周销量时,可以构建两个指示变量——黑色星期五和圣诞节;

  • 组内指示变量:网站转化分析中,若数据集中含有“traffic_source”类别型变量。我们可以构建“paid_traffic”指示变量来标识"Facebook Ads"或"Google Adwords"的流量来源。

交叉变量
第二种特性工程使用变量间的交叉信息来获取数据关键信息。
也许你听过这句名言——整体大于局部。的确如此,组合变量带来的信息通常比单个变量本身的信息要多。
特别地,可以留心观察变量之间的和,差,积和商。

说明:不推荐构建所有变量之间的交叉变量,这样做会导致“特征暴增”。

  • 变量之和:如果想通过基础销售数据来预测税收,若数据集中含有“sales_blue_pens ”变量和“sales_black_pens”变量。这时可以构建“sales_pens”变量来表示两者之和;

  • 变量之差:可以通过“house_built_date”变量和“house_purchase_date”变量来构建“house_age_at_purchase”变量;

  • 变量之积:在价格数据集中,可以通过“price”变量和“conversion”变量来构建“earnings”变量;

  • 变量之商:若营销活动数据中含有“n_clicks”变量和“n_impressions”,可以构建“click_through_rate”变量表示两者之商,据此可以对比不同营销活动的营销效果。

特征代表
第三种特性工程在数据预处理中也比较有效——特征代表。
原始数据中的数据集通常不是以理想格式存入的,这时同一数据的不同格式通常含有不同的信息。

  • 日期及时间特征:对于“purchase_datetime”变量,可以构建“purchase_day_of_week”变量和“purchase_hour_of_day”变量,也可以构建聚合变量——“purchases_over_last_30_days”变量;

  • 数值变量离散化:我们可以通过“years_in_school”变量构建“grade”,以便区分“Elementary School”,“Middle School”和“High School”;

  • 稀疏类别聚合化:离散型变量中,一些类别可能含有较少的样本数,可能把较少样本的类别合并成“Other”类;

  • 哑变量:根据模型的需要,可能把离散型变量转换成哑变量。

注意:“稀疏类别聚合化”操作永远在“哑变量”操作之前。

外部数据
接下来介绍另一种可以引起模型性能突破的特征工程——外部数据。
许多机器学习可以从外部数据中获益,如:

  • 时间序列数据:时间序列数据最大的好处是只需构建一个“date”变量即可把别的数据集分层;

  • 外部API:许多API都可以帮助你构建特征工程。如:Microsoft Computer Vision API可以返回图片中脸的张数;

  • 地理编码:可以对“street_address”,“city”和“state”进行地理编码,从而获得“latitude”和“longitude”,并通过其它数据获得当地人口统计资料,如:“median_income_within_2_miles”变量;

  • 其它资源:Facebook跟踪像素,Google Analytics以及其余第三方软件。

误差分析(建模后)
最后一类特征工程发生在建模后——误差分析。
误差分析泛指一类技术——分析模型中错误分类或高错误率的样本,并决定下一步的改进方向的一类技术。
下一步改进方向可能有收集更多的数据,问题分裂化,构建新的特征工程等。在进行误差分析之前,必须弄清楚模型为什么会失效。我们可以做以下工作:

  • 从拥有更大误差的样本入手:误差分析是典型的手动处理处理过程,一般没有时间对每一个样本进行仔细分析。推荐从拥有更大误差的样本入手,从而找出相应的特征,并据此构建出新的特征工程;

  • 用类别对样本进行分割:另一种技术是分割样本,并计算每组样本的平均误差。可以根据这些分组的最高误差来建立指示变量;

  • 非监督聚类:如果不能定位错误分类样本的特征,可以对这些样本施加非监督聚类算法,不推荐盲目地把这些聚类划分成新的特征,但这样做可以更快地定位到错误分类样本的特征。记住,我们的目标是找到模型误分的原因;

  • 寻求同事或领域专家的帮助:作为其他三种技术的补充,寻求同事或领域专家的帮助通常也可以使我们获益。

良性特征
良性特征通常具有如下特点:

  • 可以从将来的观测中计算获得;

  • 具有可解释性;

  • 可通过领域知识或探索性分析获知;

  • 具有潜在的可预测性;

  • 不包含目标变量信息。

【译】特征工程最佳实践相关推荐

  1. 解密谷歌机器学习工程最佳实践——机器学习43条军规 翻译 2017年09月19日 10:54:58 98310 本文是对Rules of Machine Learning: Best Practice

    解密谷歌机器学习工程最佳实践--机器学习43条军规 翻译 2017年09月19日 10:54:58 983 1 0 本文是对Rules of Machine Learning: Best Practi ...

  2. 机器学习法则:(谷歌)机器学习工程最佳实践(译)

    本文来源:<Rules of Machine Learning:Best Practices for ML Engineering> 作者:Martin Zinkevich google ...

  3. 风控特征—关系网络特征工程入门实践

    " 本文业务角度分享了风控业务中构建关系特征的一些实践经验,包括数据源分析,关系网络和特征的构建,特征性能的评估以及线上方案的落实." 作者:求是汪在路上 来源:知乎专栏 风控模型 ...

  4. 【译】缓存最佳实践 max-age的陷阱

    本文翻译自:jakearchibald.com/2016/cachin- 这是一篇2016年的老文章.作者是Chrome浏览器的开发成员. 本文首发于公众号:符合预期的CoyPan 使用正确的缓存可以 ...

  5. 风控特:关系网络特征工程入门实践

    风控业务背景 常规RFM时间切片统计特征侧重于纵向维度量化用户风险,而关系网络特征则从横向维度来评估.纵向是指同一用户在不同时间段上的行为异常风险:横向是指在同一个时间段里聚集的不同用户放在一起评估风 ...

  6. [译] 搜索结果页的最佳实践

    原文地址:Best Practices for Search Results 原文作者:Nick Babich 译文出自:掘金翻译计划 译者:sunui 校对者:iloveivyxuan.Granin ...

  7. 译:Kubernetes 最佳实践

    本文翻译自 Jack Roper 的文章 Kubernetes Best Practice. 译者:文章中作者从应用程序开发.治理和集群配置三个方面给出了一些 Kubernetes 的最佳实践,同时翻 ...

  8. [译]React Component最佳实践

    原文:Our Best Practices for Writing React Components . 这里意译.有些点在之前的文章里提到过:#2 译文地址:https://github.com/Y ...

  9. 【译】ZFS最佳实践指南-Part2

    1.2 存储池性能事项 1.2.1 通用存储池性能事项 为了更佳的性能,请使用单个磁盘或至少只是由少数盘组成的LUN.通过使ZFS于LUN的设置中更可见,ZFS能够提供更佳的I/O调度决策. 依赖于作 ...

最新文章

  1. 【BZOJ-3456】城市规划 CDQ分治 + NTT
  2. 将整个ASCII文件读入C ++ std :: string [重复]
  3. C++ Opengl纹理过滤和光照实例源码
  4. 横版游戏的摄像机移动理论与实践(上)
  5. 我的世界java版游戏崩溃_我的世界全攻略之-游戏崩溃的解决方法
  6. 《南溪的目标检测学习笔记》——数值编码(encode)的学习笔记
  7. 2019腾讯广告算法初赛第一名的模型
  8. 泄漏计算机网络安全法情节,第十一章网络安全法第十二章电子商务纠纷的法律解决详细分解.doc...
  9. 使用C++和LIBSVM实现机器学习+样本分类
  10. React实现todos
  11. 引起相变的无序结构域(IDRs)怎么预测?跟踪热点,提升文章档次!
  12. 华为云安装:宝塔linux+wordpress建站
  13. moment系列一:add() 方法和subtract() 方法的使用
  14. Google推出移动搜索 80亿网页、8亿图片尽在掌中
  15. linux安装mysql步骤用yum_linux 使用yum安装mysql详细步骤
  16. android 摇晃工具箱
  17. ffmpeg实现变速播放
  18. 改造宿舍门成为智能门(未完)
  19. 快速建立个性化网站【凡科建站】
  20. python调用百度api接口_python调用百度API

热门文章

  1. Java如何校验两个文件内容是相同的?
  2. 用 Dubbo 传输文件?被老板一顿揍
  3. 趣谈GC技术,解密垃圾回收的玄学理论(一)
  4. 技术经理:求求你,别再乱改数据库连接池的大小了!
  5. IDEA中用好Lombok,撸码效率至少提升5倍
  6. 竞赛中如何做特征工程
  7. 我从吴恩达 AI For Everyone 中学到的十个重要 AI 观
  8. 超全!CS 顶会历届最佳论文大列表,机器学习、深度学习一应俱全!
  9. 超年轻!93年小伙已是985大学教授、博导!
  10. Kaggle金牌拿Offer有多简单?