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

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

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

其次,预测编码过程从问题的特定学科知识中受益最大。在我刚才列举的例子中,你需要了解数据模式,然后改善预测因子的格式。特征工程与图像处理、信息检索以及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. 第八章 搭建hadoop2.2.0集群,Zookeeper集群和hbase-0.98.0-hadoop2-bin.tar.gz集群

    安装配置jdk,SSH 一.首先,先搭建三台小集群,虚拟机的话,创建三个 下面为这三台机器分别分配IP地址及相应的角色:集群有个特点,三台机子用户名最好一致,要不你就创建一个组,把这些用户放到组里面去 ...

  2. java传递是引用的拷贝,既不是引用本身,更不是对象

    java传递是引用的拷贝,既不是引用本身,更不是对象 2008-09-16 04:27:56|  分类: Java SE|举报|字号 订阅     下载LOFTER客户端     1. 简单类型是按值 ...

  3. enq:TM-contention

    enq:TM-contention 2011-08-04 15:55:17 分类: Linux 7.1 enq:TM-contention         执行dml期间,为防止对与dml相关的对象进 ...

  4. Python代码审计中一些需要重点关注的项

    SQL注入: 如果是常规没有进行预编译,或者直接使用原生的进行拼凑,那么在view的时候就需要多去观察了 [PythonSQL预编译]https://www.cnblogs.com/sevck/p/6 ...

  5. 五、配置jenkins定时构建或上游job触发构建

    我们之前说的都是通过检测github是否有push动作,即代码是否有更新,一旦检测到push动作就出发jenkins构建: 但是除了这种方式,我们可能还会需要定时进行构建,比如在每天的凌晨1:00构建 ...

  6. 摆脱Login控件,自己定义登录操作

    protected void ImageButton1_Click(object sender, ImageClickEventArgs e) { //在登录过程中,程序自动使用login.aspx进 ...

  7. .NET 等宽、等高、等比例、固定宽高生成缩略图 类

    #region 根据原图片生成等比缩略图 /// <summary> /// 根据源图片生成缩略图 /// </summary> /// <param name=&quo ...

  8. springMVC环境搭建(1)

    工作一年以来,写的都是.net,最近比较闲,想把之前学过的java相关的东西捡起来,也学点新的东西.以前做过SSH架构,一直好奇spring mvc是怎么样的,所以今天试试看. 总体的代码结构 手动输 ...

  9. a different object with the same identifier value was already associated with the session解决方案

    org.springframework.orm.hibernate3.HibernateSystemException: a different ]; nested exception ] at or ...

  10. 浅谈Trigger