专栏首页华章科技一文看懂数据预处理最重要的3种思想和方法

一文看懂数据预处理最重要的3种思想和方法

导读:本文我们考虑应当采用哪些预处理步骤,让数据更加适合挖掘。数据预处理是一个广泛的领域,包含大量以复杂的方式相关联的不同策略和技术。我们将讨论一些最重要的思想和方法,并试图指出它们之间的相互联系。

作者:陈封能(Pang-Ning Tan)、迈克尔·斯坦巴赫(Michael Steinbach)等

来源:大数据DT(ID:hzdashuju)

这些重要的思想和方法,具体地说包括:

  • 聚集
  • 抽样
  • 维归约
  • 特征子集选择
  • 特征创建
  • 离散化和二元化
  • 变量变换

粗略地说,这些主题分为两类,即选择分析所需要的数据对象和属性,以及创建/改变属性。这两种情况的目标都是改善数据挖掘分析工作,减少时间,降低成本,提高质量。

本文将讨论聚集、抽样、维归约的细节,其余主题请关注大数据DT后续文章,或阅读《数据挖掘导论》(原书第2版)一书第2.3节。

术语注记:在下面的内容中,我们有时根据习惯用法,使用特征(feature)或变量(variable)指代属性(attribute)。

01 聚集

有时,“少就是多”,而聚集就是如此。聚集(aggregation)将两个或多个对象合并成单个对象。考虑一个由事务(数据对象)组成的数据集,它记录一年中不同日期在各地(Minneapolis Chicago……)商店的商品日销售情况,见表2.4。

对该数据集的事务进行聚集的一种方法是,用一个商店的事务替换该商店的所有事务。这把每天出现在一个商店的成百上千个事务记录归约成单个日事务,而每天的数据对象的个数减少为商店的个数。

▲表2.4 包含顾客购买信息的数据集

在这里,一个显而易见的问题是如何创建聚集事务,即在创建代表单个商店或日期的聚集事务时,如何合并所有记录的每个属性的值。定量属性(如价格)通常通过求和或求平均值进行聚集。定性属性(如商品)可以忽略,也可以用更高层次的类别来概括,例如电视和电子产品。

表2.4中的数据也可以看作多维数组,其中每个属性是一个维。从这个角度,聚集是删除属性(如商品类型)的过程,或者是压缩特定属性不同值个数的过程,如将日期的可能值从365天压缩到12个月。这种类型的聚集通常用于联机分析处理(OnLine Analytical Processing,OLAP),OLAP的引用在参考文献中给出。

聚集的动机有多种。

首先,数据归约导致的较小数据集需要较少的内存和处理时间,因此可以使用开销更大的数据挖掘算法。

其次,通过高层而不是低层数据视图,聚集起到了范围或标度转换的作用。在前面的例子中,在商店位置和月份上的聚集给出数据按月、按商店,而不是按天、按商品的视图。

最后,对象或属性群的行为通常比单个对象或属性的行为更加稳定。这反映了统计学事实:相对于被聚集的单个对象,诸如平均值、总数等聚集量具有较小的变异性。

对于总数,实际变差大于单个对象的(平均)变差,但是变差的百分比较小;而对于均值,实际变差小于单个对象的(平均)变差。聚集的缺点是可能丢失有趣的细节。在商店的例子中,按月的聚集就丢失了星期几具有最高销售额的信息。

例2.7 澳大利亚降水量 该例基于澳大利亚从1982年到1993年的降水量。我们把澳大利亚国土按经纬度0.5°乘以0.5°大小分成3030个网格。图2.8a的直方图显示了这些网格单元上的平均月降水量的标准差。而图2.8b的直方图显示了相同位置的平均年降水量的标准差。可见,平均年降水量比平均月降水量的变异性小。所有降水量的测量(以及它们的标准差)都以厘米(cm)为单位。

▲图2.8 澳大利亚从1982年到1993年月和年降水量标准差的直方图

02 抽样

抽样是一种选择数据对象子集进行分析的常用方法。在统计学中,抽样长期用于数据的事先调查和最终的数据分析。在数据挖掘中,抽样也非常有用。

然而,在统计学和数据挖掘中,抽样的动机并不相同。统计学家使用抽样的原因是获取感兴趣的整个数据集的代价太高并且太费时间,而数据挖掘人员进行抽样,通常是因为处理所有数据所需的内存或时间方面的计算成本太高。在某些情况下,使用抽样的算法可以压缩数据量,以便可以使用更好但开销较大的数据挖掘算法。

有效抽样的主要原理如下:如果样本是有代表性的,则使用样本与使用整个数据集的效果几乎一样。反过来说,若样本近似地具有与原数据集相同的(感兴趣的)性质,则称样本是有代表性的。如果数据对象的均值(平均值)是感兴趣的性质,而样本具有近似于原数据集的均值,则样本就是有代表性的。

由于抽样是一个统计过程,特定样本的代表性是不一样的,因此最好能做的就是选择一个抽样方案,以确保以很高的概率得到有代表性的样本。如下所述,这涉及选择适当的样本容量以及抽样技术。

1. 抽样方法

有许多抽样技术,但是这里只介绍少量最基本的抽样技术及其变种。最简单的抽样是简单随机抽样(simple random sampling)。对于这种抽样,选取任何特定项的概率相等。

随机抽样有两种变种(其他抽样技术也一样):

  1. 无放回抽样——每个选中项立即从构成总体的所有对象集中删除;
  2. 有放回抽样——对象被选中时不从总体中删除。在有放回抽样中,相同的对象可能被多次抽出。

当样本与数据集相比相对较小时,两种方法产生的样本差别不大。但是对于分析,有放回抽样较为简单,因为在抽样过程中,每个对象被选中的概率保持不变。

当总体由不同类型的对象组成并且每种类型的对象数量差别很大时,简单随机抽样不能充分地代表不太频繁出现的对象类型。在分析需要所有类型的代表时,这可能出现问题。例如,当为稀有类构建分类模型时,样本中适当地提供稀有类是至关重要的,因此需要提供具有不同频率的感兴趣的项的抽样方案。

分层抽样(stratified sampling)就是这样的方法,它从预先指定的组开始抽样。在最简单的情况下,尽管每组的大小不同,但是从每组抽取的对象个数相同。另一种变种是从每一组对象抽取的样本数量正比于该组的大小。

例2.8抽样与信息损失 一旦选定抽样技术,就需要选择样本容量。较大的样本容量增大了样本具有代表性的概率,但也抵消了抽样带来的许多好处。反过来,使用较小容量的样本,可能丢失模式或检测出错误的模式。 图2.9a显示了包含8000个二维点的数据集,而图2.9b和图2.9c显示了从该数据集抽取的容量分别为2000和500的样本。该数据集的大部分结构都出现在2000个点的样本中,但是许多结构在500个点的样本中丢失了。

▲图2.9 抽样丢失结构的例子

例2.9确定合适的样本容量 为了说明确定合适的样本容量需要系统的方法,考虑下面的任务。 给定一个数据集,它包含少量容量大致相等的组。从每组至少找出一个代表点。假定每个组内的对象高度相似,但是不同组中的对象不太相似。图2.10a显示了一个理想簇(组)的集合,这些点可能从中抽取。

▲图2.10 从10个组中找出具有代表性的点

使用抽样可以有效地解决该问题。一种方法是取数据点的一个小样本,逐对计算点之间的相似性,然后形成高度相似的点组。从每个点组取一个点,则可以得到具有代表性的点的集合。然而,按照该方法,我们需要确定样本的容量,它以很高的概率确保得到期望的结果,即从每个簇至少找出一个代表点。

图2.10b显示了随着样本容量从10变化到60,从10个组的每一个组中得到一个对象的概率。有趣的是,使用容量为20的样本,只有很小的机会(20%)得到包含所有10个组的样本。即便使用容量为30的样本,得到不包含所有10个组中对象的样本的概率也很高(几乎40%)。

2. 渐进抽样

由于可能很难确定合适的样本容量,因此有时需要使用自适应(adaptive)或渐进抽样(progressive sampling)方法。这些方法从一个小样本开始,然后增加样本容量直至得到足够容量的样本。尽管这种技术不需要在一开始就确定正确的样本容量,但是需要评估样本的方法,确定它是否足够大。

例如,假定使用渐进抽样来学习一个预测模型。尽管预测模型的准确率随样本容量的增加而增加,但是在某一点准确率的增加趋于稳定。我们希望在稳定点停止增加样本容量。通过掌握模型准确率随样本逐渐增大的变化情况,并通过选取接近于当前容量的其他样本,我们可以估计出与稳定点的接近程度,从而停止抽样。

03 维归约

数据集可能包含大量特征。考虑一个文档的集合,其中每个文档是一个向量,其分量是文档中每个词出现的频率。在这种情况下,通常有成千上万的属性(分量),每个代表词汇表中的一个词。

再看一个例子,考虑包含过去30年各种股票日收盘价的时间序列数据集。在这种情况下,属性是特定日期的价格,也数以千计。

维归约有多方面的好处。关键的好处是,如果维度(数据属性的个数)较低,许多数据挖掘算法的效果就会更好。部分是因为维归约可以删除不相关的特征并降低噪声,另一部分是因为维灾难。(维灾难在下面解释。)

还有一个好处是维归约可以使模型更容易理解,因为模型可能只涉及较少的属性。此外,维归约也可以更容易让数据可视化。即使维归约没有将数据归约到二维或三维,数据也可以通过观察属性对或三元组属性达到可视化,并且这种组合的数目也会大大减少。最后,使用维归约降低了数据挖掘算法的时间和内存需求。

术语“维归约”通常用于这样的技术:通过创建新属性,将一些旧属性合并在一起以降低数据集的维度。通过选择旧属性的子集得到新属性,这种维归约称为特征子集选择或特征选择。

下面简单介绍两个重要的主题:维灾难和基于线性代数方法(如主成分分析)的维归约技术。

1. 维灾难

维灾难是指这样的现象:随着数据维度的增加,许多数据分析变得非常困难。特别是随着维度增加,数据在它所占据的空间中越来越稀疏。因此,我们观测到的数据对象很可能不是总体数据对象的代表性样本。

对于分类,这可能意味着没有足够的数据对象来创建模型,将所有可能的对象可靠地指派到一个类。对于聚类,点之间的密度和距离的定义(对聚类是至关重要的)失去了意义。

结果是,对于高维数据,许多分类和聚类算法(以及其他的数据分析算法)都麻烦缠身——分类准确率降低,聚类质量下降。

2. 维归约的线性代数技术

维归约的一些最常用的方法是使用线性代数技术,将数据由高维空间投影到低维空间,特别是对于连续数据。

主成分分析(Principal Component Analysis,PCA)是一种用于连续属性的线性代数技术,它找出新的属性(主成分),这些属性是原属性的线性组合,是相互正交的(orthogonal),并且捕获了数据的最大变差。例如,前两个主成分是两个正交属性,是原属性的线性组合,尽可能多地捕获了数据的变差。

奇异值分解(Singular Value Decomposition,SVD)是一种线性代数技术,它与PCA有关,并且也用于维归约。请参考附录A和B获取更多细节。

关于作者:陈封能(Pang-Ning Tan) ,密歇根州立大学计算机科学与工程系教授,主要研究方向是数据挖掘、数据库系统、网络空间安全、网络分析等。

本文摘编自《数据挖掘导论》(原书第2版),经出版方授权发布。

延伸阅读《数据挖掘导论》(原书第2版)

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:本书为斯坦福大学、密歇根州立大学、明尼苏达大学、得克萨斯大学等知名高校的数据挖掘课程教材。从算法的角度介绍数据挖掘所使用的主要原理与技术。所涵盖的主题包括:数据预处理、预测建模、关联分析、聚类分析、异常检测和避免错误发现。通过介绍每个主题的基本概念和算法,为读者提供将数据挖掘应用于实际问题所需的必要背景以及方法。

有话要说?

Q: 你常用哪些数据预处理操作?

欢迎留言与大家分享

本文分享自微信公众号 - 大数据(hzdashuju),作者:陈封能 等

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 5G的未来投资机会在哪里?(附中国5G产业发展与投资报告全文)

    导读:日前,为了更好地以资本助推5G产业发展,中国移动投资公司与中国移动研究院联合发布了《洞见5G,投资未来——中国5G产业发展与投资报告》,分析了5G对生产和...

    华章科技
  • 在线票务哪家强?数据图解告你知!

    近日,第一财经CBNData发布了《2016上半年中国在线票务平台大数据报告》,报告对2016年上半年的在线票务市场做了数据分析。数据显示,目前已经形成“BAT...

    华章科技
  • 入门干货:从《权力的游戏》战斗场景中搞懂数据抽样和过滤

    导读: 直观来看,处理大数据的一个方法就是减少要处理的数据量,从而使处理的数据量能够达到当前的处理能力能够处理的程度。可以使用的方法主要包括抽样和过滤。两者的区...

    华章科技
  • BGAN:支持离散值、提升训练稳定性的新GAN训练方法

    首先,让我们温习一下GAN(对抗生成网络)的概念。简单来说,GAN是要生成“以假乱真”的样本。这个“以假乱真”,用形式化的语言来说,就是假定我们有一个模型G(生...

    崔庆才
  • 10条很棒的Python一行代码

    自从我用Python编写第一行代码以来,我就被它的简单性、出色的可读性和特别流行的一行代码所吸引。在下面,我想介绍并解释其中一些一行程序—可能有一些您还不知道,...

    HuangWeiAI
  • Python编程思想(5):列表与元组的基础知识

    列表(list)、 元组(tuple) 和字典(dict)是Python中非常常用的三种集合类型数据结构,这三种数据结构都可用于保存多个数据项,这对于编程而言是...

    蒙娜丽宁
  • (七)python3 只需3小时带你轻松入门——List与dict

    List列表 python中最基本的数据结构之一。序列(或者说集合)中的每个元素都分配一个数字用来表示它的位置(索引),第一个索引是0,第二个索引是1,依此类...

    公众号 碧油鸡
  • 在windows程序中嵌入Lua脚本引擎--编写自己的Lua库

            在《在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统》一文中,我提到了使用Lua的ffi库,可以让我们像写C代码一...

    方亮
  • stm32之CAN

    注:显性电平对应逻辑0,CAN_H和CAN_L之差为2.5V左右。而隐性电平对应逻辑1,CAN_H和CAN_L之差为0V

    心跳包
  • python迭代器(函数名的应用,新版格

    s1 = 'asdf' obj = iter(s1) #转化为迭代器 print(obj)#<str_iterator object at 0x000002...

    py3study

扫码关注云+社区

领取腾讯云代金券