Skip to content

Latest commit

 

History

History
157 lines (79 loc) · 10.4 KB

7-steps-mastering-data-preparation-python.md

File metadata and controls

157 lines (79 loc) · 10.4 KB

7 步掌握 Python 数据准备

原文:www.kdnuggets.com/2017/06/7-steps-mastering-data-preparation-python.html/2

第 4 步:处理异常值

这不是关于制定处理数据中异常值策略的教程;在建模时,有时包括异常值是合适的,有时则不合适(无论有人怎样告诉你)。这取决于情况,没人能对你的情况是否属于 A 列或 B 列做出笼统的断言。

异常值

你能找到异常值吗?


我们的三大课程推荐

1. 谷歌网络安全证书 - 快速进入网络安全职业道路。

2. 谷歌数据分析专业证书 - 提升你的数据分析技能

3. 谷歌 IT 支持专业证书 - 支持你的组织 IT


一些关于处理异常值的讨论:

异常值可能是由于数据收集不当,也可能是真正的异常数据。这是两种不同的情况,必须以不同的方式处理,因此没有“一刀切”的建议,类似于处理缺失值。以上来自 Analysis Factor 文章的一个特别有价值的见解如下:

一个选项是尝试变换。平方根和对数变换都能拉拢高值。如果异常值是因变量,这可以使假设工作得更好;如果异常值是自变量,这可以减少单个点的影响。

我们将决定是否在数据集中保留异常值留给你。然而,如果你的模型确实需要以某种方式处理异常值,这里有一些讨论方法:

第 5 步:处理不平衡数据

那么,如果你的数据集在其他方面都很强大——没有缺失值和异常值——但由 2 个类别组成:一个包含 95%的实例,另一个仅包含 5%?或者更糟——99.8%对 0.2%?

如果是这样,那么你的数据集是不平衡的,至少在类别方面是这样。这可能会带来问题,我相信这些问题不需要指出。但也无需急于抛弃数据;当然有处理这种情况的策略。

请注意,虽然这可能不真正是数据准备任务,但这种数据集特征会在数据准备阶段早期显现出来(EDA 的重要性),并且这种数据的有效性可以在这一准备阶段初步评估。

首先,看看 Tom Fawcett 对如何处理的讨论:

  • 从不平衡类中学习,作者 Tom Fawcett

接下来,看看关于处理类别不平衡的技术的讨论:

  • 处理不平衡数据的 7 种技术,作者 Ye Wu & Rick Radewagen

不平衡数据

识别和处理不平衡是很重要的。

对于为什么我们可能会遇到不平衡数据的一个很好的解释,以及为什么在某些领域中我们可能比其他领域更频繁地遇到这种情况(来自上述链接的《处理不平衡数据的 7 种技术》):

这些领域使用的数据通常包含不到 1%的稀有但“有趣”的事件(例如,信用卡欺诈者,用户点击广告或损坏的服务器扫描其网络)。然而,大多数机器学习算法在处理不平衡数据集时效果不好。以下七种技术可以帮助你训练分类器以检测异常类别。

第 6 步:数据变换

维基百科将 数据变换 定义为:

在统计学中,数据变换是将确定性的数学函数应用于数据集中的每一个点 —— 即,每个数据点 zi 被替换为变换后的值 y[i] = f(z[i]),其中 f 是一个函数。通常应用变换是为了使数据更符合要应用的统计推断程序的假设,或改善图表的可解释性或外观。

数据变换是数据准备中最重要的方面之一,并且比大多数其他方面更需要技巧。当数据中出现缺失值时,它们通常很容易被发现,并可以通过上述常见方法(至少从表面上看)处理,或者通过在领域中获得的深入见解使用更复杂的措施。然而,何时需要数据变换——更不用说所需的变换类型——往往不那么容易识别。

存在大量的转换;与其尝试概括何时以及为什么转换有用,不如看几个具体的转换,以便更好地掌握它们。

Scikit-learn 文档中的这一概述提供了对一些最重要的预处理转换的理由,即标准化、归一化和二值化(还有一些其他的转换):

独热编码

独热编码转换的示例结果。

独热编码“将分类特征转换为更适合分类和回归算法的格式”(取自下文的第一个链接)。参见对独热转换的讨论以及使用 Pandas 的方法:

对数分布转换在“你假设一个非线性模型形式,但可以转换为线性模型”的情况下可能会很有用(取自下文)。稍微阅读一下这种被低估的转换类型:

如上所述,取决于数据和需求,可以进行多种转换。我希望未来能更详细地探讨数据转换,并在那时进行更深入的讨论。

请注意,整个讨论完全有意跳过了特征选择的提及,原因是:它在这篇更广泛的讨论中值得比简单几句话更多的关注。即将发布的特征选择专门指南将在完成后链接到这里。

第 7 步:最后润色与前进

好的,你的数据是“干净”的。就我们而言,这意味着你此时拥有一个有效且可用的 Pandas DataFrame。但你该如何处理它呢?

如果你想直接将数据输入到机器学习算法中以尝试构建模型,你可能需要将数据以更合适的表示形式准备。在 Python 生态系统中,这通常是 numpy ndarray(或矩阵)。你可以查看以下内容,以获取一些初步的想法(从基础的角度):

机器学习管道

非常简单的数据准备过程。

一旦你在 Python 中获得了适合机器学习的干净数据,为什么不看看以下这对文章呢,它们旨在涵盖你现在已经准备好的领域:

  • 掌握 Python 机器学习的 7 个步骤,作者 Matthew Mayo

  • 掌握 Python 机器学习的 7 个额外步骤,作者 Matthew Mayo

如果你不想马上进入建模阶段怎么办?或者,即使你想进入建模阶段,但你希望将数据输出到更适合你情况的存储形式呢?以下是有关 Pandas DataFrame 存储的一些信息:

不要忘记,在继续之前,还有一些数据集特定和相关的注意事项,包括(特别是?)将数据集拆分为训练集和测试集,这是所有机器学习任务都适用的过程:

作为纯粹的惩罚,以下是一些关于数据准备的额外见解:

  • 在 Python 中整理数据,作者 Jean-Nicholas Hould

  • 数据科学实践:Kaggle 指南 第三部分 – 清理数据,作者 Brett Romero

  • 从零开始的 Python 机器学习工作流 第一部分:数据准备,作者 Matthew Mayo

相关内容:

  • 理解 NoSQL 数据库的 7 个步骤

  • 掌握数据科学 SQL 的 7 个步骤

  • 理解深度学习的 7 个步骤

更多相关内容