数据预处理任务及方法聚类(Aggregation)抽样(Sample)维数约减(Dimensionality reduction)特征子集选择(Feature subset selection)特征创造(Feature creation)离散化和二进制化(Discretization and binarization)变量转换(Variable transformation)总的来说,这些内容可以分为两类:为分析数据选择数据对象和属性;为分析数据创造或改变属性。
所有这些内容都是考虑到时间、成本和质量,提高数据挖掘分析质量。
(属性、特征、变量都是近义词,不做具体区分)一、聚类考虑到有时候“less is more”,将两个或多个对象合并成一个就是聚类的思想。
举个例子,下表是由交易记录(数据对象)构成的一个数据集,它是不同地点的商店在一年内的时间的产品日常销售数据(Minneapolis,Chicago,Paris,……)。
聚合这样的数据集的一种方法是将一个商店的所有的交易记录用一个单独的商店范围的交易代替。
这样就可以减少上千条交易记录了。
但是这样的方法有一个非常明显的问题:如何创造一个聚类的交易记录,即应该如何根据一个指定地点的记录来合并属性的值,创造聚类交易,使其能代表一个商店或者一个时间的交易。
数值型属性如价格,可以采用加和或者平均值的方式代替。
质量型属性如项目,则可以采用省略或者某个地点的项目和的方法。
该表格的数据可以看成是多维的列,每个属性即是一个维度。
根据这种思想,聚类可以看成是消除属性,如删除项目列,或者减少某个属性的值的数量,如将日期可能的值从365天改成12个月的记录方式。
这种聚类经常出现在在线分析处理中(Online AnalyticalProcessing, OLAP)中。
聚类的动机:1、小的数据集可以节省内存,提高处理效率。
2、聚类可以提供更高层的数据视图。
3、群体对象的行为要比个体更加稳定。
但是聚类有一个缺点就是可能会丢失有趣的细节。
二、抽样数据挖掘中的抽样动机与统计学中的抽样有所不同。
统计学的抽样是因为获得全体的成本花费太高,而数据挖掘的抽样是因为处理所有的数据代价太高。
抽样就要使样本具有代表性,即样本与总体有近似的属性。
抽样的方法:最简单的抽样方法是随机抽样。
随即抽样分成两种(其它抽样方法类似):不带重复的抽样和带重复的抽样。
当样本与总体数据相比很小时,两种方法没有大的区别,但是带重复的抽样在分析时相对简单,因为在样本处理中,选取任何对象的概率是一样的。
当总体有很多不同类型的对象,且对象的数量有很大不同时,简单随机抽样并不适合。
这就要使用分层抽样。
维数约减(Dimensionality Reduction)数据集可以有很多的特征。
对维数进行约减可以有很多好处。
其中一个关键的有点是很多数据挖掘算法在低维度的情况下有很好的表现。
这是因为维数约减可以消除无关的特征并降低噪音数据,也可能是因为维数灾难(the curse of dimensionality)。
维数约减的另一个好处是可以建立一个容易被理解的模型。
维数约减通常可以采用建立新属性的方式,将几个旧属性合并在一起。
也可以选择旧属性集中的子集,这种方法通常称为特征子集选择或者特征选择。
维数灾难(The Curse of Dimensionality)维数灾难是指很多情况下的数据分析在数据维度增加的情况下会变得非常困难的现象。
特别地,当数据维度增加时,数据会变得非常稀疏。
与维数约减有关的线性代数技术维数约减中最常用的方法(尤其是针对连续性数据来说)是使用线性代数的相关技术。
主成分分析(Principal Components Analysis, PCA)是给连续性数据建立新属性的线性代数的方法。
其新属性是:(1)源属性的线性联合,(2)是相互正交的,(3)是数据中变化最大的(capture the maximum amount of variation in the data)。
奇异值分解(Singular Value Decomposition, SVD)是一种与PCA有关的线性代数的技术,在维数约减中被经常使用。
三、特征子集选择只使用特征集中的一个子集是维数约减中的一种方法,尽管这样的方法可能会丢失信息,但是如果有多余的(redundant)和无关的(irrelevant)特征时就不会出现这种状况。
多余的特征(Redundant features)是指有重复的信息或者所有的信息都在一个或者多个属性中。
无关的特征(Irrelevant features)包含了目前的数据挖据中没有用的信息。
尽管无关的和多余的属性可以使用常识或者领域知识被消除,定期选择最好的特征子集需要一个系统的方法。
特征选择的完美的方法是尽可能尝试所有可能的特征子集作为数据挖掘算法的输入,然后选择输出结果最好的特征子集。
但是这样的穷举法显然不适合。
特征选择有三种标准的方法:嵌入式(embedded),过滤器(filter)和封装器(wrapper)。
嵌入式方法(Embedded approaches):特征选择是数据挖掘算法的一部分。
特别地,数据挖掘算法操作时,算法本身决定使用哪些属性忽略哪些属性。
过滤器方法(Filter approaches):在算法运行之前选择特征,使用一些独立于数据挖掘任务的方法。
比如,选择属性之间关联尽可能小的。
封装器方法(Wrapper approaches):这类的方法将目标数据挖掘算法作为一个黑盒寻找最好的属性子集。
但通常并不枚举出所有可能的子集。
特征子集选择的架构(An Architecture for Feature Subset Selection)一般的架构可能既包含过滤器也包含封装器。
特征选择处理一般有四个部分:一个评价子集的测量方法,一个搜寻策略(控制新特征子集的产生),一个停止标准和一个验证程序。
过滤方法和封装方法的不同仅仅在于其对子集的评价方式上。
从概念上说,特征子集选择就是搜寻所有可能的特征子集。
有很多搜寻策略可以使用,但是搜寻策略在计算代价方面要较小,且能够找出最优的或者近似最优的特征集合。
由于通常情况下不可能满足所有的要求,因此必须要权衡。
搜寻中一个必不可少的部分就是评价目前的特征子集。
这就需要针对特定的数据挖掘任务测量评价属性子集的好处。
对于过滤器方法,这些测量尝试预测在给定的属性集下实际的数据挖掘算法运行的情况。
对于封装器方法,评价是由实际运行的目标数据挖掘应用组成。
由于子集的数量可能很大,因此枚举出所有的子集实际上并不可能,所以需要一些停止策略。
这个策略通常基于以下一个或者多个情况:● 迭代次数● 子集价值的评价是否是最优的或者超过一个阙值 ● 是否已经得到一定量子集 ● 数量标准与评价标准是否同时达到 ● 这个策略下是否还有其他选项可以提升效果一旦子集确定了,关于该子集的目标数据挖掘结果就要被验证了。
一个直观的评价方法是直接运行算法并比较总体结果与子集结果。
希望的结果是利用子集产生的结果要比使用所有特征好或者至少差不多。
另一种验证方法是使用很多不同的特征选择算法获得特征子集并比较每种特征子集下算法运行的结果。
特征赋权(Feature Weighting )特征赋权是一种替代保持或消除特征的方法。
更重要的特征被赋予更高的权重,反之亦然。
这些权重有时是基于领域知识确定的。
也可以自动确定。
特征创造(Feature Creation )从源属性中创造一些包含重要信息的新的属性集也是一种高效的方法。
新的属性数量要比源属性少,这就使我们可以获得属性约减所有的好处。
特征创造有以下一些内容:特征抽Selected Attributes Validation Procedure Attributes Search StrategyEvaluationSubset of AttributesStopping CriterionNot DoneDone取(feature extraction),将数据映射到新的空间中(mapping the data to a new space),特征构造(feature construction)。
特征抽取(Feature Extraction)从原始数据源中构造新的特征集合叫做特征抽取。
例如,图片的分类可以根据它是否包含人脸来进行。
源数据是像素的集合,这并不适合大多数的分类算法。
然而,如果数据被处理后可以提供更高级别的特征,如与人脸相关的某些边界和区域是否存在。
那么,很多的分类技术就可以在这个问题上使用了。
不幸的是,通常情况下,特征抽取都是高度领域化的。
某个特定的领域,如图片处理中,需要很长时间来建立特征和技术来从众抽取,同时,这些技术很少可以使用到其它领域。
因此,当数据挖掘应用到一个新的领域时,就需要发展一些新的特征抽取方法了。
数据映射到新的空间(Mapping the Data to a New Space)举个例子,时间序列数据经常包含周期模式。
如果只有一种周期模式并且没有噪音,这样的周期模式就很容易被侦测。
相反,如果有很多周期模式且存在大量噪音数据,这就很难侦测。
这样的情况下,通常对时间序列使用傅立叶变换(Fourier transform)转换表示方法。
特征构造(Feature Construction)源数据中的某些特征有必要的信息,但其并不适合数据挖掘算法。
这种情况通常需要从原始特征中构造一个或多个新特征使用。
四、离散化和二进制化一些数据挖掘算法,尤其是某些分类算法,需要数据的属性是类别属性(categorical attributes)格式的。
关联规则算法需要数据的属性是二进制形式的(binary attributes)。
因此常常需要将连续属性(continuous attributes)转变成类别属性(categorical attributes),即离散化(discretization)。
而连续属性或者类别属性则可能需要变成二进制化(binarization)。
此外,如果类别属性有太多的值,或者一些值出现的频率很小,通过把一些值联合起来可以减少类别的属性。
类似于特征选择,离散化和二进制化最好的方法是“对分析数据的数据挖掘算法来说,会产生最好的结果”。
通常这并不实际,因此,离散化和二进制化都只是需要满足一些标准,以期能获得好点的数据挖掘结果。
二进制化(Binarization)类别属性的二进制化的一个简单的例子如下:如果类别有m个值,给每个原始的值赋予唯一的整数,其区间在[0,m-1]。
如果属性是顺序的,则赋值也是顺序的(注意,即便原始属性值是整数类型的,这一步也是必须的,因为原始的属性值可能不在[0,m-1]之间)。