本译文自EROGOL 在 http://www.erogol.com 发表的 ML WORK-FLOW (Part2) - Data Preprocessing ,文中版权、图像代码的数据均归作者所有。为了本土化,本文略作修改。
尽量保持我承诺的日期。下面详细介绍了我提出的机器学习工作流程的第一步讨论,即数据预处理。
数据预处理是一个重要的步骤,其中的主要目的是提高原始数据质量,然后再深入研究技术问题。即使这个步骤涉及到非常简单的任务,但是如果没有这个,你可能会在最后看到错误的结果。
我也在工作流程中说过,数据预处理是ML以外的统计工作。也就是是说,数据预处理需要在做出任何可能的决定之前进行良好的数据推理和分析。这些组件不是ML课程的主题,而是一个统计数据。因此,如果你的目标是在整个ML上,不要忽视统计数据。
我们可以将数据预处理分成5个不同的部分;
将来自不同来源的不同格式数据转换成之后要使用的统一格式。这些不同的来源可能被称为不同的数据库,甚至有可能是excel表。为了这一简单的想法,出现了几套不同的商业软件,即ETL(提取 - 转换 - 加载)工具。这些工具使您能够从单一视角到达不同的来源,并将数据与已定义的均一化数据流合并。令人遗憾的是,数据集成本身递归地包括其他标题。更明确地说,您的集成流程的任何子组件都可以包含我们在下面解释的更多数据预处理过程之一。
根据你的问题,在前期就定义数据格式是很重要的 。如果您对方便的格式不太确定,请去调查一下。否则,整合起来就很困难。特别是对于大量的数据以及下一步操作,将会耗费非常长的时间。
填写数据,属性或类别标签中的缺失值。最简单的方法是使用其他行的均值或中值或相同类实例的均值或中值。(一般而言,中位值对异常值是稳健的)。也许另一种方法是像类标签一样训练一个预测缺失值的模型。
识别异常值并消除噪音。异常值和嘈杂的实例正在欺骗AdaBoost等许多ML算法。因此,您需要在进一步的处理之前纠正数据。甚至,在删除异常值后,需要再次重复所有预处理,例如,如果通过包含异常值来填充缺失的值,这些也是错误的,需要重新定义。
对于异常移除,一种常见的方法是对数据进行聚类并移除可怜的聚类。此外,您可以使用特定的异常值检测算法(如我的宝贝RSOM 或LOF)。另一个选择是适合回归模型,将数据对齐直到这个去除异常值。
正确的数据不一致。这需要一般的专业知识。您应该咨询您的业务合作伙伴或客户。
标准化 - 缩放 - 标准化。根据您的进一步步骤(如特征提取),您可能需要将数据转换为不同的比例或域。这对于最终获得高质量的判别特征非常重要。特别是,如果你使用自动化的特征提取算法,一般来说,他们期望某些数据格式,然后又做不到。
构建新的属性。例如,如果您拥有客户的体重和身高值,那么添加BMI作为新的属性是非常合理的。这样的属性构造在领域中需要一定程度的经验和统计知识,但是却带来了很大的性能提升。
在某些情况下,对于特定的ML算法,连续值是有问题的。即使我试图用合理的算法来避免数据的离散化,特别是对于推理而言,离散化是非常必要的。
使用无监督的等分装箱。不用做任何详细的考虑就将数字数据划分成相同的大小或范围,
有监督的离散化。通过对值进行排序并通过在值之间观察类分布来放置值之间的铰链来使用类边界。您也可以使用熵度量来定义分区。现在,您定义了一些候选值分区集合,但是您可以选择具有最佳熵值的最佳信息增益值。我的选择是使用具有连续值的决策树从构建的树的节点定义值分区。
减少实例的数量。有时候,你更喜欢使用数据的子集而不是整个数据。在这种情况下,抽样模式适合您。尽管有许多不同的抽样方法,但我更喜欢最天真的随机抽样。如果我需要更多强大的结果与多个子集,我更喜欢使用引导与替换。
减少属性的数量。 请不要试图用巧克力的消费情况来预测一个国家的诺贝尔奖的数量(这是真实的故事)。
虽然这需要一定程度的专业知识,但是你依然可以把不相关的数据从数据中删除。如果您犹豫不决,请等待特征选择。
作为一个侧面说明,ML中还有一个子议题,如何将复杂的问题分解一个个子问题,以便通过简单的子问题解决整个问题。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。