特征工程”这个华丽的术语,它以尽可能容易地使模型达到良好性能的方式,来确保你的预测因子被编码到模型中。例如,如果你有一个日期字段作为一个预测因子,并且它在周末与平日的响应上有着很大的不同,那么以这种方式编码日期,它更容易取得好的效果。

但是,这取决于许多方面。

首先,它是依赖模型的。例如,如果类边界是一个对角线,那么树可能会在分类数据集上遇到麻烦,因为分类边界使用的是数据的正交分解(斜树除外)。

其次,预测编码过程从问题的特定学科知识中受益最大。在我刚才列举的例子中,你需要了解数据模式,然后改善预测因子的格式。特征工程与图像处理、信息检索以及RNA表达谱等大不相同。你需要了解关于这个问题的一些信息,并且用你的特定数据集来做好特征工作。

下面是一些训练集的数据,使用两个预测因子来建立一个二分类系统模型(我会在后面揭晓数据来源):

这里还有我们将在下面使用到的相关测试集。

我们可以得到以下结论:

  • 这些数据是高度相关的(相关系数=0.85)。
  • 每个预测因子似乎是向右倾斜的。
  • 它们似乎是多信息的,从某种意义上来说,你或许可以画出一条对角线来区分类别。

取决于我们选择使用的模型,两个预测因子的相关性可能会困扰我们。同样,我们应该检查单个预测因子是否重要。为了衡量这一点,我们将直接使用在预测数据上的ROC曲线下方的面积。

下面是每一个预测因子的单变量盒图(在对数尺度上):

这两个类之间有一些细微的差别,但是有很多重叠部分。预测模型A和B的ROC曲线面积分别是0.61和0.59。这个结果并不好。

那我们能做什么?主成分分析(PCA)是一种预处理的方法,它以创建新的综合预测因子(即主要成分或PC's)的方式旋转预测数据。它通过这样的方式分析:第一个成分占预测数据中大多数(线性)变量或信息的比重。在提取第一个成分之后,第二个成分以同样的方式来处理剩下的数据,并且依次下去。对于这些数据,有两种可能的组成部分(因为只有两个预测因子)。以这种方式使用PCA通常被称为特征提取

我们来计算下这些成分:

> library(caret)
> head(example_train)
   PredictorA PredictorB Class
2 3278.726 154.89876 One
3 1727.410 84.56460 Two
4 1194.932 101.09107 One
12 1027.222 68.71062 Two
15 1035.608 73.40559 One
16 1433.918 79.47569 One
> pca_pp <- preProcess(example_train[, 1:2],
+ method = c("center", "scale", "pca"))
+ pca_pp
Call:
preProcess.default(x = example_train[, 1:2], method = c("center",
"scale", "pca")) Created from 1009 samples and 2 variables
Pre-processing: centered, scaled, principal component signal extraction PCA needed 2 components to capture 95 percent of the variance
> train_pc <- predict(pca_pp, example_train[, 1:2])
> test_pc <- predict(pca_pp, example_test[, 1:2])
> head(test_pc, 4)
        PC1         PC2
1 0.8420447 0.07284802
5 0.2189168 0.04568417
6 1.2074404 -0.21040558
7 1.1794578 -0.20980371

请注意,我们在训练集上计算了所有的必要信息,并且将这些计算应用到测试集。那么测试集是什么样的呢?

这是测试集预测因子简单的旋转。

PCA是非监督式的,这意味着当计算结束时,不需要考虑输出类。在这里,ROC曲线的下方部分,用第一个成分得到的面积是0.5,第二个成分得到的面积是0.81。这些结果与上面的点混在一起;第一个成分在类中具有随机混合的特性,而第二个成分似乎可以很好地分离类。两种成分的盒图反映了同样的情况:

在第二个成分中,两个类的分离度更高。

这很有趣。首先,尽管PCA是非监督式的,它还是成功地找到了一个新的预测因子来划分类别。其次,这些成分对于这些类别是最终要的,但对于预测器而言则没那么重要。通常PCA并不会保证任何成分会给出准确预测。但在这里,我们很幸运,它得到一个不错的预测结果。

但是,试想如果有上百个预测因子。我们可能只需要使用前X个成分来获取预测因子中绝大部分的信息,然后丢弃其他的成分。在这个例子中,第一个成分占据预测器变量的92.4%,同样的方法可能会丢弃最有效的预测因子。

特征工程的想法是怎么出现的呢?给定这两种预测因子,我们可以得到下面所示的散点图,我首先想到的事情是“有两个相关联的,正相关并且斜交的预测因子,一前一后地进行分类”。其次我想到的是“利用比例”。那么数据是什么样的呢?

ROC曲线下方的相应面积是0.8,它跟第二个成分的结果很相近。一个基于数据视觉化探索的简单转换可能会与没有偏差的经验算法效果相当。

这些数据来自于Hill等人的细胞分割实验,预测因子A是“由旋转得到的等效圆直径的球体表面”(标记为EqSphereAreaCh1),预测因子B是细胞核的周长(PerimCh1)。一个高内涵筛选的专家,可能会自然而然的采用这两种细胞特征的比率,因为它会带来科学意义上良好的效果(我并不是那个人)。在这一问题的范围内,它们的直觉应该驱动特征工程处理。

然而,在保证诸如PCA算法效能时,机器会因此受益。总的来说,这些数据中有近60个预测因子,它们的特征和EqSphereAreaCh1相近。我的个人爱好是“基于共生矩阵像素空间排列的Haralick 结构测量”。为此研究了一段时间。问题的关键是,经常有太多的特征需要设计,而且它们很可能在一开始就很不直观。

特征提取的另一方面关系到相关性。在特定数据集上的预测因子之间往往有着高度相关性,这是很好理解的。比如,有不同的方法来量化细胞的离心率(比如拉伸程度)。此外,细胞核的大小与细胞整体大小相关等等。PCA可以显著地缓解相关性的效果。手动采用多预测因子比例的做法似乎可能不太有效,而且会花费更多的时间。

去年,在我支持的一个R&D小组中,专注于偏差分析(即建立我们预先知道的模型)和专注于非偏差分析(即让机器去寻找最优模型)的科学家之间存在着争议。我的观点处于这两者之间,认为它们之间存在一些交集。一旦挖掘完毕,机器可以将新的、有趣的特征打上“已知事物”的标签,并把它们作为知识来使用。

原文链接:Feature Engineering versus Feature Extraction: Game On! (译者/刘翔宇 审校/刘帝伟、朱正贵 责编/周建丁)

特征工程 vs. 特征提取的更多相关文章

  1. 使用sklearn做单机特征工程

    目录 1 特征工程是什么?2 数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 标准化与归一化的区别 2.2 对定量特征二值化 2.3 对定性特征哑编码 2.4 缺 ...

  2. 【转】使用sklearn做单机特征工程

    这里是原文 说明:这是我用Markdown编辑的第一篇随笔 目录 1 特征工程是什么? 2 数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 无量纲化与正则化的区别 ...

  3. 转载:使用sklearn做单机特征工程

    目录 1 特征工程是什么?2 数据预处理 2.1 无量纲化 2.1.1 标准化 2.1.2 区间缩放法 2.1.3 标准化与归一化的区别 2.2 对定量特征二值化 2.3 对定性特征哑编码 2.4 缺 ...

  4. Python机器学习笔记 使用sklearn做特征工程和数据挖掘

    特征处理是特征工程的核心部分,特征工程是数据分析中最耗时间和精力的一部分工作,它不像算法和模型那样式确定的步骤,更多的是工程上的经验和权衡,因此没有统一的方法,但是sklearn提供了较为完整的特征处 ...

  5. AI学习---特征工程【特征抽取、特征预处理、特征降维】

    学习框架 特征工程(Feature Engineering) 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已 什么是特征工程: 帮助我们使得算法性能更好发挥性能而已 sklearn主 ...

  6. sklearn—特征工程

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  7. Auto-ML之自动化特征工程

    1. 引言 个人以为,机器学习是朝着更高的易用性.更低的技术门槛.更敏捷的开发成本的方向去发展,且Auto-ML或者Auto-DL的发展无疑是最好的证明.因此花费一些时间学习了解了Auto-ML领域的 ...

  8. 谷歌大规模机器学习:模型训练、特征工程和算法选择 (32PPT下载)

    本文转自:http://mp.weixin.qq.com/s/Xe3g2OSkE3BpIC2wdt5J-A 谷歌大规模机器学习:模型训练.特征工程和算法选择 (32PPT下载) 2017-01-26  ...

  9. Sklearn与特征工程

    Scikit-learn与特征工程 “数据决定了机器学习的上限,而算法只是尽可能逼近这个上限”,这句话很好的阐述了数据在机器学习中的重要性.大部分直接拿过来的数据都是特征不明显的.没有经过处理的或者说 ...

随机推荐

  1. ALSA声卡16_编写ALSA声卡应用程序_学习笔记

    1.体验 (1)ALSA声卡使用体验:使用arecord录音,使用aplay播放,在Alsa-utils里面) 准备: cd linux-3.4.2 patch -p1 < ../linux-3 ...

  2. 我为什么一直不愿意用bootstrap

    做前端有2年多的时间了,知道bootstrap已经很久了. 第一次了解bootstrap是1年前,公司的一次培训中. 当时感到非常的愤怒,因为对框架的了解不够深入产生了这样的一个想法: 怎么会有这种框 ...

  3. 如何在OS X 10.9 Mavericks下安装Command Line Tools(命令行工具)

    随着OS X 10.9 于 2013年6月10日在旧金山WWDC(world wide developer conference)上发布.是首个不使用猫科动物命名的系统,而转用加利福尼亚的产物. 该系 ...

  4. yum ftp本地源

    一. 准备工作1. 安装系统centos7.32. 环境 10.10.10.14 controller-1 10.10.10.15 computer-1 3. 在14主机上安装FTP服务yum ins ...

  5. leetcode125

    public class Solution { Stack<char> S = new Stack<char>(); Queue<char> Q = new Que ...

  6. TRegEx 正则表达式

    TRegEx #include <System.RegularExpressions.hpp> void __fastcall TForm1::Button1Click(TObject * ...

  7. linux系统构架 - LB集群之LVS的DR设置

    在lvs的nat模式的基础上 1.清空ipvsadm规则 ipvsadm -C 查看 ipvsadm -ln 2.清空iptables规则 iptables -t nat -F 3.修改rs的网卡配置 ...

  8. 重构--去除丑陋的switch语句

    最近几天,在进行重构的时候,遇到了一个极其丑陋的代码(自己写的 /捂脸  当时时间紧,于是....),今天去重构的时候无论如何也想不出方法,去除这个丑陋的switch语句 ,于是写篇博客,让自己记住这 ...

  9. Linux实战教学笔记35:企业级监控Nagios实践(下)

    七,服务器端Nagios图形监控显示和管理 前面搭建的Nagios服务虽然能显示信息,能报警.但是在企业工作中还会需要一个历史趋势图,跟踪每一个业务的长期趋势,并且能以图形的方式展示,例如:根据磁盘的 ...

  10. Perl 变量:数组变量

    Perl 数组Perl 数组一个是存储标量值的列表变量,变量可以是不同类型.数组变量以 @ 开头.访问数组元素使用 $ + 变量名称 + [索引值] 格式来读取. 1.创建列表.数组1.数组变量以 @ ...