数据挖掘工作始终是以数据为中心开展的,分类、聚类、回归、关联分析及可视化等工作的顺利进行完全是建立在良好的输入数据的基础之上的。而现实世界的数据规模越来越大,会出现很多如数据不完整、噪声、数据不一致等数据质量问题,这类数据称为“脏数据”。软件开发行业有句格言:“Garbage-In-Garbage-Out”这句话同样适用于数据科学,数据中存在的不一致及噪声,对很多数据挖掘算法影响较大,甚至会“挖掘”出错误的知识。所以,在执行挖掘算法之前,首先要对数据进行一些移植、清洗、切片、转换等预处理工作。
跨行业数据挖掘标准流程(简称CRISP-DM)指出:在一个数据挖掘项目中,50%~70%的时间和努力都用在了数据预处理阶段。没有高质量的数据,就没有高质量的挖掘结果。数据预处理为后续数据挖掘算法提供了干净、准确、更有针对性的数据,从而减少了挖掘过程中的数据处理量,提高了挖掘效率、知识发现的起点和知识的准确度 [3] 。
人工输入错误或仪器设备测量精度,以及数据收集过程机制缺陷等方面的原因都会造成收集的数据存在质量问题,这些问题主要包括测量误差、数据收集错误、噪声、离群点、缺失值、不一致值、重复数据等。数据清洗阶段的主要任务就是通过处理缺失值、平滑噪声数据等手段清洗数据。
1.处理缺失值
数据的收集过程很难做到数据全部完整。例如,数据库中表格的列值不会全部强制不为空类型;问卷调查对象不想回答某些选项或不知道如何回答;设备异常;对数据改变没有日志记载。处理缺失值的方法有以下3种。
(1)忽略元组:也就是将含有缺失属性值的对象(元组,记录)直接删除,从而得到一个完备的信息表。这种方法在缺失属性对象相对于整个数据集所占比例较小时比较适用,特别是在分类任务中缺少类别标号属性时常采用。如果数据集中有较高比例的数据对象存在缺失值问题,那么这种方法失效。在样本资源比较少的挖掘任务中,删除宝贵的数据对象会严重影响挖掘结果的正确性。
(2)数据补齐:使用一定的值对缺失属性进行填充补齐,从而使信息表完备化。数据补齐的具体实行方法较多。
①人工填写:需要用户非常了解数据相关信息,并且数据量大时,这种方法效率太低。
②特殊值填充:将所有空值使用一个特殊值(如“unknown”)进行填充,这种方法可能导致严重的数据偏离。
③平均值填充:如果属性是数值型的,可以采用所有对象属性的平均值来填充,对于倾斜分布情况也可以采用中位数来填充;如果属性是非数值型的,可以采用出现频率最高的值来填充。
④使用最有可能的值填充:采用基于推断的方法填充缺失值。例如,可以使用包含空值对象周围与其相似的对象值对其进行填充;也可以建立回归模型,对缺失属性值进行估计;还可以使用贝叶斯模型推理或决策树归纳确定。
(3)不处理:有很多数据挖掘方法在属性值缺失方面具有良好的稳健性,直接在包含空值的数据上进行数据挖掘。这类方法包括贝叶斯网络和人工神经网络等。
【例2-9】学生成绩如表2-6所示,请对其中的缺失值进行处理。
表2-6 学生成绩
程序如下:
2.平滑噪声
噪声是一个测量变量中的随机错误或偏差。造成这种误差有多方面原因,如数据收集工具的问题、数据输入错误、数据传输错误、技术限制等。可以通过对数值进行平滑处理来消除噪声,主要使用的技术有回归、分箱、离群点分析。有时需要综合采用上述技术来平滑噪声。下面介绍分箱与离群点分析相结合的平滑噪声方法。
分箱是指将属性的值域划分成若干连续子区间。如果一个属性值在某个子区间范围内,就把该值放进这个子区间所代表的“箱子”中。把待处理的数据(某列属性值)按照一定规则放进一些箱子中,考察每个箱子中的数据,采用某种方法分别对各个箱子中的数据进行处理。在采用分箱技术时,需要确定的两个主要问题是:如何分箱及如何对每个箱子中的数据进行平滑处理。
1)分箱方法
分箱方法有4种:等深分箱法、等宽分箱法、最小熵法和用户自定义区间法。
(1)等深分箱法:将数据集按记录行数分箱,每箱具有相同的记录数,每箱记录数称为箱子的深度。这是最简单的一种分箱方法。
(2)等宽分箱法:使数据集在整个属性值的区间上平均分布,即每箱的区间范围是一个常量,称为箱子的宽度。
(3)最小熵法:在分箱时考虑因变量的取值,使得分箱后箱内达到最小熵。
(4)用户自定义区间法:用户可以根据需要自定义区间,当用户明确希望观察某些区间范围内的数据分布时,使用这种方法可以方便地帮助用户达到目的。
2)局部平滑方式
将数据分箱后,对每个分箱中的数据进行局部平滑,常用的方式有下面3种。
(1)按平均值平滑:对同一箱子中的数据求平均值,用平均值替代该箱子中的所有数据。
(2)按边界值平滑:用距离较小的边界值替代箱子中的每个数据。
(3)按中值平滑:取箱子的中值,用来替代箱子中的所有数据。
【例2-10】用等深分箱法进行数据平滑,数据如表2-7所示。
表2-7 等深分箱法数据平滑表
图2-5是平滑噪声数据后对比图,从图中可以看出,在例2-10中的等深分箱中,原始数据有一个异常值,边界值平滑后该异常值仍然存在,平均值平滑和中值平滑后该异常值被平滑。对于边界值平滑后该异常值仍然存在的情况,需要进一步采用删除离群点方法处理该异常值。
图2-5 平滑噪声数据后对比图
离群点是在某种意义上具有不同于数据集中其他大部分数据对象特征的数据对象,或是相对于该属性值不寻常的属性值,如图2-5中很明显有个离群点93。对于离群点,可以通过聚类来检测离群点,落在簇之外的数据对象被视为离群点,如图2-6所示;或者使用回归函数检测离群点,如图2-7所示,根据数据相关属性作为自变量,利用它们之间的关系建立回归模型来预测数据走向的关系,删除离群点对于分析整个数据的特征更有利。
图2-6 聚类删除离群点
图2-7 回归函数删除离群点
等深分箱及平滑的程序实现:
数据对于数据挖掘任务来说是非常重要的,用户永远希望尽最大可能获得更多的挖掘目标数据。例如,在一些监督学习任务中,分类器的准确性与训练数据的数量有非常大的联系 [4] 。
数据集成就是将若干分散数据源中的数据,逻辑地或物理地集成到一个统一的数据集合中。这些数据源包括关系数据库、数据仓库和一般文件。数据集成的核心任务是将互相关联的分布式异构数据源集成到一起,使用户能够以透明的方式访问这些数据源。集成是指维护数据源整体上的数据一致性、提高信息共享利用的效率。透明的方式是指用户无须关心如何实现对异构数据源数据的访问,只关心以何种方式访问何种数据即可。
1.实体识别问题
实体识别问题是数据集成中的首要问题,因为只有来自多个信息源的现实世界的等价实体才能匹配。一般会有以下3种情况。
(1)同名异义:如苹果既可以代表手机也可以代表水果。又如,姓名王伟是一个很普通的名字,但是它却表示不同的实体。
(2)异名同义:如“李白”和“李太白”指的就是一个人。又如,我们会习惯性地给某个人加上职位性的称谓,如“陈主任”“王博士”“周院长”等。我们需要能够将这些称谓与其真姓名对应起来。
(3)单位统一:用于描述同一个实体的属性有时可能出现单位不统一的情况,这种情况也需要能够统一起来,如120cm和1.2m,要知道计算机在进行处理时是没有量纲的,要么统一量纲,要么去量纲化(归一化)。
2.属性冗余问题
如果一个属性可以由其他属性或它们的组合导出,那么这个属性可能是冗余的,如“年收入”,这个属性可以用各个月份的工资计算出来,所以“年收入”属性就是冗余属性。
有些冗余是可以被相关分析检测到的。两个属性存在多大程度的相关性,就说明两个属性有多强的关联,如果存在强关联,那么就会存在一个属性可以替代另一个属性。对于标称数据,可以使用卡方检验;对于数值数据,可以使用相关系数、协方差来检验。
3.数据值冲突问题
属性值的表示、规格单位、编码不同,也会造成现实世界相同的实体在不同的数据源中属性值不相同。例如,单位分别以千克和克表示的质量数值,性别中男性用M和male表示。属性名称相同,但表示的意思不相同。例如,总费用属性可能有包含运费和不包含运费的区分。
来自不同数据源的属性间语义和数据结构等方面的差异,给数据集成带来了很大困难。需要小心应对,避免最终集成数据集中出现冗余和不一致问题。
在对数据进行分析前,通常需要进行数据规范化,也称为标准化。举个例子,假设小明考了80分,小花也考了80分,但是前者是100分制的,后者是150分制的,如果把这两类数据进行集成、挖掘,无论使用什么算法,结果也是不正确的,所以,有时候数据变换比算法选择更重要,数据错了,算法再正确也是错的。如何将不同量纲的数据进行统一?这就需要数据规范化。
数据规范化主要包括数据同趋化处理和无量纲化处理两个方面,可以使属性值按比例落入一个特定区间,如[-1,1]或[0,1]。
数据规范化一方面可以简化计算,提升模型的收敛速度;另一方面,在涉及一些距离计算的算法时防止具有较大初始值域的属性与具有较小初始值域的属性相比权重过大,可以有效提高结果精度。
1.最小-最大规范化
最小-最大规范化也称离差标准化,是对原始数据的线性变换,假定min、max分别为属性 A 的最小值和最大值。转换函数如下:
将 x 转换到区间[new_min,new_max]中,结果为 x′ 。这种方法有一个缺陷就是当有新的数据加入时,可能导致max、min值的变化,需要重新定义。另外,如果要做0-1规范化,式(2.7)可以简化为:
【例2-11】表2-8中是某部分学生的数学和语文成绩,数学是100分制的,语文是150分制的,两组数据不在同一个量纲,需要对其进行最小-最大规范化。
表2-8 成绩表
程序实现:在sklearn库中有个函数MinMaxScaler是专门进行最小-最大规范化的,会把原始数据投射到[0,1]范围内。
运行结果:
结果分析:以姓名为胡建的学生为例,他的(数学,语文)成绩是(80,80),由于分制不同,所以直接比较是不正确的,经过最小-最大规范化后可以得出(数学,语文)成绩是(0.57142857,0),这样就可以比较得出该同学的数学成绩要比语文成绩好。
2.z-score规范化
z-score规范化也称为标准差标准化,经过处理的数据符合标准正态分布,即平均值为0,标准差为1。转化函数如式(2.9)所示,其中 表示属性 A 的中均值, σ A 为标准差。
当属性 A 的实际最大值和最小值未知,或有超出取值范围的孤立点时,该方法适用。
【例2-12】以例2-11中的数据为样本数据,z-score规范化程序实现:在sklearn库中使用函数preprocessing.scale(),可以直接将给定数据进行z-score规范化,所有数值都符合平均值为0、方差为1的正态分布。
运行结果:
运行结果中,语文和数学两列数据符合平均值为0、方差为1的正态分布,通过数据规范化,两列数据都在同一量纲下,可以为提取数据特征打好基础。
3.按小数定标规范化
通过移动数据的小数点位置来进行标准化。小数点的移动位数取决于属性 A 的最大绝对值。 x 规范后的值 x′ 计算方法如下:
式中, j 是使 的最小整数。例如,-84< x <231,取 j =3,-84规范化后值为-0.084,231规范化后值为0.231。
需要注意的是,z-score规范化和按小数定标规范化在计算过程中有参数值,需要保存起来,作为后续的数据统一标准化使用。
【例2-13】对于样本数据(0,-3,1)、(3,1,2)、(0,1,-1),通过按小数定标规范化实现标准化的程序如下:
运行结果:
4.独热编码处理标称属性数据
前面介绍过,对于标称属性数据,可以使用数字对不同类别进行编码。例如,血型一般分为A、B、O、AB 4个类型,为无序多分类变量,通常情况下在处理数据时为了使数据量化,会对其进行数字化编号,如1、2、3、4分别表示A、B、O、AB的血型编号。但是这样编号存在的问题是它们具有从小到大的、一定的顺序关系,而实际上,4种血型之间并没有这种关系存在,它们之间是平等独立的关系。若按照1、2、3、4赋值,后续如果计算对象之间的差异,则会得到错误的结果。
独热编码(One Hot Encoding)将每个标称属性进行扩充,在上面的例子中,可以将表2-9扩充为表2-10。将表2-9进行独热编码,结果如表2-10所示。
表2-9 标称属性
表2-10 标称属性的独热编码表
这样做的好处是任意两个血型之间的差异是相同的,如编号1和编号3的人血型差异是 (欧几里得距离),可以看到任意两个人之间的血型差异都是 ,这和数值本身的实际意义是相符合的。
独热编码能够处理非连续型数值属性,并在一定程度上扩充了数据特征,独热编码将离散属性的取值扩展到欧几里得空间,回归、分类和聚类等很多数据挖掘算法对距离或相似度的计算都是非常普遍的,而独热编码会使距离的计算更加合理。但也要认识到独热编码有时会带来数据维度极度扩张的负面影响。
【例2-14】对表2-10中的数据进行独热编码,程序如下:
运行结果:
当我们在数据仓库上进行数据挖掘时,如果在海量高维数据上进行复杂的数据分析和挖掘,算法可能因运行时间超出我们的忍受范围而失效。在这种情况下,可以使用原数据集的一个特征、样本子集来完成挖掘。
数据规约(Data Reduction)技术是指在尽可能地保持原始数据集完整性的前提下,最大限度地精简数据量。数据规约技术可以用来得到数据集的规约表示,它虽然小,但仍能大致保持原数据的完整性。这样,在规约后的数据集上挖掘将更有效,并产生相同(或几乎相同)的分析结果。数据规约的策略主要包括维规约和数量规约。
维规约减少所考虑的随机变量或属性的个数,主要方法有小波变换、主成分分析和属性子集选择,通过这些方法可以把原始数据变换或投影到较小的空间,其中不相关、弱相关或冗余的属性要么未被检测要么删除。
数量规约用替代的、较小的数据表示形式替换原始数据,这些方法可以是参数方法或非参数方法。对于参数方法而言,使用模型估计数据,使得一般只需要存放模型参数而不是实际数据(离群点需存放)。非参数方法包括直方图、聚类、抽样和数据立方体聚类。
1.主成分分析
主成分分析(Principal Component Analysis,PCA)是一种广泛用于不同领域的无监督线性数据转换技术。PCA的目标是在高维数据中找到最大方差的方向,并将数据映射到一个维度小得多的新子空间上。借助于正交变换,将其分量相关的原随机向量转化成其分量不相关的新随机向量。
PCA在代数上表现为将原随机向量的协方差矩阵变换成对角矩阵,在几何上表现为将原坐标系变换成新的正交坐标系,使之指向样本点散布最开的几个正交方向,如图2-8所示。
图2-8 PCA的几何解释
图2-8(a)中的每个样本数据都可以有两个维度 X 1 和 X 2 ,每个数据都可以看作二维空间上的一个坐标向量( x 1 , x 2 ),可以看到, n 个样本数据在 X 1 和 X 2 两个坐标轴上的投影范围比较大,也就是在两个坐标轴上的方差都比较大,数据分布特征需要考虑两个坐标轴的分布情况,如果考虑降维,无论去掉哪个维度,都会使数据包含的信息损失比较大。但是根据散点图发现,样本数据的分布如果旋转 Y 1 和 Y 2 为坐标轴,转换坐标轴后如图2-8(b)所示。此时,样本数据的大部分信息就集中在了 Y 1 方向上,而在 Y 2 方向上的离散程度很小,也就是方差很小,此时只保留 Y 1 而忽略 Y 2 ,并且样本数据信息损失也比较小,尽可能保证了原数据的特征,就可以实现降维的目的。
PCA通过创建一个替换的、更小的变量集来组合属性的基本要素,去掉了一些不相关的信息和噪声,数据得到了精简的同时又尽可能多地保存了原数据集的有用信息。PCA的应用条件是要求属性间存在较大的相关性,当相关性较小时,应用PCA没有意义。
PCA的基本过程如下。
(1)首先对所有属性数据进行规范化,每个属性都落入相同的区间,消除量纲对算法的影响。
(2)计算样本数据的协方差矩阵。
(3)求出协方差矩阵的特征值及相应正交化单位特征向量。前 m 个较大的特征值就是前 m 个主成分对应的方差。主成分的方差贡献优选法反映信息量的大小。
(4)通过计算累计贡献率来选择主成分。主成分向量构成了一组正交基,输入数据可以由它们的线性组成表示。
(5)对主成分按重要性排序。主成分是新空间下的坐标轴,提供了关于方差的重要信息。
(6)选择重要性最高的若干主成分,同时将剩下的较弱主成分舍弃,这样就完成了约简数据的规模。
【例2-15】用Python程序实现一个二维样本数据的PCA,二维样本数据如表2-11所示。
表2-11 二维样本数据
样本数据散点图如图2-9所示。通过样本数据的( x 1 , x 2 )向量值散点图可以看到, x 1 和 x 2 两个属性之间有较强的相关性,可以通过PCA进行降维。具体操作步骤如下。
图2-9 样本数据散点图
步骤1:将数据表示成2×10的矩阵。
步骤2:零均值数据变换。在数据的每一维上减掉这一维的均值,使得每一维数据零均值化。均值向量 ,变换后的数据向量矩阵如下。
零均值化后的样本散点图如图2-10所示。
图2-10 零均值化后的样本散点图
步骤3:求样本协方差矩阵。
步骤4:计算协方差矩阵的特征值和特征向量。
特征值 λ=(λ 1 λ 2 )=(0.06048991 7.58317676)
特征向量
步骤5:将特征向量按照对应的特征值从大到小进行排序。
最大特征值 λ 2 =7.58317676
排序后的特征向量
步骤6:将样本投影到新的坐标系上。
根据新坐标中的数据矩阵 Y ,得到新的散点图,如图2-11所示。
图2-11 新坐标散点图
步骤7:分析新坐标中的数据结果。
通过新坐标散点图可以看出,在 Y 1 轴上包含原始二维数据中的大部分信息, Y 1 轴上包含的信息占比是 ≈ 99.2%,所以只取主成分 Y 1 上的信息即可, Y 1 =-0.27187955 x 1 -0.96233129 x 2 ,就可以忽略 Y 2 轴上的信息,从而可以将二维数据降维为一维数据。
程序实现:
运行结果:
2.属性子集选择
属性子集选择通过删除不相关或冗余的属性(或维)减少数据量。属性子集选择的目标是找出最小属性集,使得数据类的概率分布尽可能地接近使用所有属性得到的原分布。在缩小的属性集上挖掘还有其他的优点:它减少了出现在发现模式上的属性数目,使得模式更易于理解。
“如何找出原属性的一个‘好的’子集?”对于 n 个属性,有2 n 个可能的子集。穷举搜索找出属性的最佳子集可能是不现实的,特别是当 n 和数据类的数目增加时。因此,对于属性子集选择,通常使用压缩搜索空间的启发式算法。这些方法是典型的贪心算法,在搜索属性空间时,总是做看上去是最佳的选择。它们的策略是做局部最优的选择,期望由此得到全局最优解。在实践中,这种贪心算法是有效的,并可以逼近最优解。属性子集选择的基本启发式算法包括以下技术。
(1)逐步向前选择:该过程由空属性集作为规约集开始,确定原属性集中最好的属性,并将它添加到规约集中。在其后的每次迭代,将剩下的原属性集中最好的属性添加到该集合中。
(2)逐步向后删除:该过程由整个属性集开始。在每一步中,删除尚在属性集中最差的属性。
(3)逐步向前选择和逐步向后删除的组合:可以将逐步向前选择和逐步向后删除的方法结合在一起,每一步选择一个最好的属性,并在剩余属性中删除一个最差的属性。
(4)决策树归纳:决策树算法最初是用于分类的。决策树归纳构造一个类似流程图的结构,其中每个内部(非树叶)节点表示一个属性上的测试,每个分支对应测试的一个结果;每个外部(树叶)节点表示一个类预测。在每个节点上,算法选择最好的属性,将数据划分成类。
当决策树归纳用于属性子集选择时,由给定的数据构造决策树,不出现在树中的所有属性假定是不相关的,出现在树中的属性形成规约后的属性子集。上述方法的结束条件不同,可以使用一个度量阈值来决定何时停止属性选择过程。
在某些情况下,可基于其他属性创建一些新属性。属性构造可提高准确性和对高维数据结构的理解。通过组合属性,属性构造可以发现关于数据属性间联系的缺失信息,对知识发现是有用的。
3.直方图
2.3.1节中学习过,平滑噪声的一种方法就是分箱,即将数据划分为不相交的子集,并给予每个子集相同的值。
直方图使用分箱近似数据分布,是一种流行的数据规约形式。属性 A 的直方图将 A 的数据分布划分为不相交的子集或桶。桶安放在水平轴上,而桶的高度(和面积)是该桶所代表的值的平均频率。如果每个桶只代表单个属性值/频率对,则该桶称为单值桶。通常,桶表示给定属性的一个连续区间。
【例2-16】我们得到一个商店每日利润数据(单位:元):390、100、350、380、160、350、400、340、430、150、380、390、400、440、600、230、440。
首先,以50元为区间统计利润的直方图,如图2-12所示。
图2-12 以50元为区间统计利润的直方图
其次,以100元为区间统计利润的直方图,如图2-13所示。
图2-13 以100元为区间统计利润的直方图
以50元划分区间得到了13个桶的数据,以100元为区间得到了7个桶的数据。利用直方图压缩了数据,而得到结论仍然是商店每日利润集中在300~400元这个区间。
4.聚类
把数据元组看作对象。它将对象划分为群或簇,使得一个簇中的对象相互“相似”,而与其他簇中的对象“相异”。通常,相似性基于距离函数,形心距离是另一种度量。聚类方法在第5章有详细介绍。
5.抽样
很多应用领域的数据也不能被完全存储,或者分析的时候以动态的流式数据形式存在,在很多情况下,数据抽样是数量规约的一种常见方法。常见的抽样有简单抽样(包含不放回简单随机抽样和有放回简单随机抽样)、簇抽样、分层抽样。
s 个样本的不放回简单随机抽样(SRSWOR):从 D 的 N 个元组中抽取 s 个样本( s < N );其中 D 中任何元组被抽取的概率均为1/ N ,即所有元组是等可能的。
s 个样本的有放回简单随机抽样(SRSWR):该方法类似SRSWOR,不同在于当一个元组被抽取后,记录它,然后放回去。这样,一个元组被抽取后,它又被放回 D ,以便它可以再次被抽取。
簇抽样:如果 D 中的元组被分组放入 M 个互不相交的“簇”,则可以得到簇的 s 个简单随机抽样(SRS),其中 s < M 。例如,数据库中元组通常一次取一页,这样每页就可以视为一个簇。可以将SRSWOR用于页,得到元组的簇样本,由此得到数据的规约表示。
分层抽样:如果 D 被划分成互不相交的部分,称为“层”,则通过对每层的简单随机抽样就可以得到 D 的分层抽样。特别是当数据倾斜时,这可以帮助确保样本的代表性。例如,可以得到关于顾客数据的一个分层抽样,其中对顾客的每个年龄组创建分层。这样,具有最少顾客数目的年龄组肯定能够被代表。
采用抽样进行数据规约的优点是,得到样本的花费正比例于样本集的大小 s ,而不是数据集的大小 N 。因此,抽样的复杂度可能亚线性(Sublinear)于数据的大小。其他数据规约技术至少需要完全扫描 D 。对于固定的样本大小,抽样的复杂度仅随数据的维数 n 线性增加;而其他技术(如使用直方图)的复杂度随 d 呈指数级增长。
数据离散化是指将连续的数据分段,使其变为一段段离散化的区间。连续属性离散化的问题本质是:决定选择多少个分割点和确定分割点位置。任务可分为两个步骤完成:首先,将连续属性排序并通过指定 n -1个分割点把它们分成 n 个区间;然后,将一个区间中的所有值映射到相同的分类值中。
1.数据离散化的原因
(1)算法需要。决策树、NaiveBayes算法都是基于离散数据展开的。如果要使用该类算法,必须将连续数据处理成离散数据。
(2)数据离散化更方便对连续数据的理解。例如,某个问题中的年龄属性可以按照如下方法离散化:[0-11]→儿童,[12-17]→青少年,[18-44]→青年,[45-69]→中年,[69-∞]→老年。这样,可以更方便大家对年龄属性的理解。
(3)可以有效地弥补数据中隐藏的缺陷,使模型结果更加稳定。例如,如果对用户年龄离散化,[18-44]作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。
2.数据离散化的方法
数据离散化的方法有多种类型,通常可以分为无监督离散化和有监督离散化。在离散化过程中使用类信息的方法是有监督的,而不使用类信息的方法是无监督的。
无监督离散化方法中最简单的方法是等宽分箱法和等深分箱法(分箱法参见2.3.1节)。
等宽分箱法将排好序的数据从最小值到最大值均匀划分成 n 等份,每份的间距是相等的。假设 A 和 B 分别是属性值的最小值和最大值,那么划分间距为 W =( B-A )/ n ,每个类别的划分边界将为 A + W , A +2 W , A +3 W ,…, A +( n -1) W 。这种方法的缺点是对异常点比较敏感,倾向于不均匀地把实例分布到各个箱中。
等深分箱法将数据总记录数均匀分为 n 等份,每份包含的数据个数相同。如果 n =10,那么每份中将包含大约10%的数据对象。这两种方法都需要人工确定划分区间的个数。等深分箱法可能将具有不相同类标号的相同属性值分入不同的箱中以满足箱中数据的固定个数的条件。
以上两种方法容易实现,适用较广,但是在有些情况下存有弊端。例如,假设对某一工资属性进行划分,用等宽区间划分方法划分为5个区间,最高工资为50000元,则所有工资低于10000元的人都被划分到同一区间。等深区间划分方法可能正好相反,所有工资高于50000元的人都会被划分到50000元这一区间中。这两种方法都忽略了样本数据所属的类别信息,划分区间的边界不太可能落在最合理的地方。
ChiMerge是一种监督的、基于卡方检验的数据离散化方法。其基本思想是:对于精确的离散化,相对类频率在一个区间内应当完全一致。因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开。而低卡方值表明它们具有相似的类分布。
ChiMerge离散化数据操作流程包含以下两个步骤。
第1步:初始化。
根据连续变量值的大小排序,进行初始的离散处理。
第2步:合并。
箱子合并过程分为两个步骤,连续重复进行。
(1)对每对相邻的区间进行卡方检验。
(2)将最小卡方值的相邻区间合并成一个区间。根据卡方检验原理可知卡方值越小,表明两个类别越独立,相互影响的程度越小;或者另一种理解是两箱分布相似,可以进行合并。
重复执行卡方检验并且至底向上合并区间,直到卡方值达到设定的阈值。
合并停止条件是直到所有相邻箱子的卡方值大于或等于设置的卡方值阈值。
根据自由度和显著性水平选取合适的卡方值阈值;自由度则是根据数据能够确定的,为( R -1)×( C -1),因为都是计算相邻两箱的,故 R =2; C 也可根据数据情况确定。显著性水平推荐选择0.1、0.05、0.01。或者,箱子数量达到预先设置的数量。