ML工作流程(第5部分) - 特征预处理

本译文自EROGOLhttp://www.erogol.com 发表的 ML Work-Flow (Part 5) – Feature Preprocessing,文中版权,图像代码的数据均归作者所有。为了本土化,本文略作修改。

我们已经讨论了ML工作流程的前四个步骤。到目前为止,我们通过DICTR(离散化,积分,清理,转换,还原)对原始数据进行预处理,然后采用特征提取的方式将数据转化为机器可理解的表示形式,最后将数据分割为训练和测试集等不同的串。现在是对特征值进行预处理的时候了,并且为ML艺术的发展做好了准备。

我们需要特征预处理以便:

  1. 消除尺寸之间的差异
  2. 将实例传递到空间中的有界区域
  3. 删除不同维度之间的相关性

你可能会问:“为什么我们如此关心这些?”,因为:

  1. 减少比例差异减少了特定特征尺寸之间的单位差异。考虑你的顾客的年龄和身高。年龄缩放数年,高度缩放cm。因此,这两个维度值是以不同的方式分配的。我们需要解决这个问题,并在训练您的ML算法之前将数据转换为一个尺度不变的表示,特别是如果您使用Logistic回归或SVM(基于树的模型更有效地缩放差异)等线性模型。
  2. 将实例传递到空间中的有界区域可以解决实例之间的表示偏差。例如,如果您用文字袋表示法处理文档分类问题,那么您应该关心文档长度,因为较长的文档会包含更多的词,从而导致更多拥挤的特征柱状图。解决这个问题的合理方法之一是将每个词的频率除以文档中的总词频,以便我们可以将每个直方图的值转换为在文档中看到该词的概率。结果,文档被表示为其元素的总数为1的特征向量。这个新的空间在文献中被称为矢量空间模型。
  3. 删除维度之间的相关性将清除您的数据与多个维度显示的冗余信息。因此,数据投影到一个新的空间,每个维度解释了其他特征维度中独立重要的东西。

好吧,我希望现在清楚了为什么我们关心这些。今后,我将尝试在我们的工具包中强调一些基本功能,以进行特征预处理。

标准化

  • 可以应用于特征维度或数据实例。
  • 如果我们应用于维度,它减少了单位效应,如果我们应用于实例,那么我们就像文档分类问题一样解决实例偏差。
  • 标准化的结果是每个特征维度(实例)被缩放到定义的均值和方差中,以便我们确定维度之间的单位差异。
  • :对于每个维度(实例),减去平均值并除以该维度(实例)的方差,使得每个维度保持在均值= 0,方差= 1的曲线内。

Min Max Scaling

  • 就我个人而言,我并没有将Min-Max Scaling应用于实例,
  • 单位差异问题仍然有用。
  • 取代分布式考虑,它取决于0,1范围内的值。
  • :查找特征尺寸的最大值和最小值并应用公式。

注意事项1:缩放和标准化的一个常见问题是:你需要保留标准化的最小值、最大值、新的数据以及测试时间的标准化的平均值和方差值。我们仅从训练数据中估计这些值,并假设这些值对测试和现实世界数据仍然有效。这个假设对于小问题可能是正确的,但特别是对于在线环境来说,这样的处理是非常重要的。

Sigmoid函数

  • Sigmoid函数自然会将给定值提取到0,1范围内
  • 不需要关于数据如均值和方差的任何假设
  • 它比较小的价值惩罚大的价值。
  • 您可以使用其他激活功能,如tanh。
Sigmoid函数

注意事项2:如何选择和选择什么是非常依赖于问题的问题。然而,如果你有一个聚类问题,那么标准化似乎更适合实例之间的更好的相似度测量,如果你打算使用神经网络,那么一些特定类型的NN需求0,1缩放数据(或更有趣的尺度范围更好在NN模型上的梯度传播)。另外,我个人使用sigmoid函数来解决简单的问题,以便在没有复杂调查的情况下通过SVM获得快速结果。

零相组分分析(ZCA美白)

  • 正如我之前所解释的那样,白化是通过用最终的对角相关矩阵解相关数据来减少冗余信息的过程,优选的所有对角线都是1。
  • 在图像识别和特征学习中有着特别重要的意义,从而使图像的视觉线索更为具体。
  • 公式与代码结合会更加的直观。
  • 蒙特利尔集团的一个很好的导师
  • 由dolaameng 提供的笔记本

我试图触及一些特征预处理的方法和常见问题,但并不完整。尽管如此,还是有收获到一点东西; 在进入训练阶段之前不要忽略规范化的特征值,并通过仔细研究这些值来选择正确的方法。

PS:我实际上答应每周写一篇文章,但现在我像蜜蜂一样忙碌,我几乎没有时间写一些新东西。对此感到非常抱歉。

原文链接:http://www.erogol.com/ml-work-flow-part-5-feature-processing/

原文作者:EROGOL

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏alexqdjay

HashMap 多线程下死循环分析及JDK8修复

1.2K4
来自专栏Phoenix的Android之旅

Java 集合 Vector

List有三种实现,ArrayList, LinkedList, Vector, 它们的区别在于, ArrayList是非线程安全的, Vector则是线程安全...

692
来自专栏xingoo, 一个梦想做发明家的程序员

Spark踩坑——java.lang.AbstractMethodError

百度了一下说是版本不一致导致的。于是重新检查各个jar包,发现spark-sql-kafka的版本是2.2,而spark的版本是2.3,修改spark-sql-...

1300
来自专栏刘君君

JDK8的HashMap源码学习笔记

3318
来自专栏后端之路

LinkedList源码解读

List中除了ArrayList我们最常用的就是LinkedList了。 LInkedList与ArrayList的最大区别在于元素的插入效率和随机访问效率 ...

21110
来自专栏xingoo, 一个梦想做发明家的程序员

20120918-向量实现《数据结构与算法分析》

#include <iostream> #include <list> #include <string> #include <vector> #include...

1906
来自专栏MelonTeam专栏

ArrayList源码完全分析

导语: 这里分析的ArrayList是使用的JDK1.8里面的类,AndroidSDK里面的ArrayList基本和这个一样。 分析的方式是逐个API进行解析 ...

4809
来自专栏java闲聊

JDK1.8 ArrayList 源码解析

当运行 ArrayList<Integer> list = new ArrayList<>() ; ,因为它没有指定初始容量,所以它调用的是它的无参构造

1242
来自专栏开发与安全

算法:AOV网(Activity on Vextex Network)与拓扑排序

在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称之为AOV网(Activity on Vextex ...

4087
来自专栏学海无涯

Android开发之奇怪的Fragment

说起Android中的Fragment,在使用的时候稍加注意,就会发现存在以下两种: v4包中的兼容Fragment,android.support.v4.ap...

3225

扫码关注云+社区