数据挖掘算法之离散化和二元化
离散化和二元化
有些数据挖掘算法,特别是某些分类算法,要求数据是分类属性形式。发现关联模式的算法要求数据是二元属性形式。这样,常常需要将连续属性变换成分类属性(离散化,discretization),并且连续和离散属性可能都需要变换成一个或多个二元属性(二元化,binarization)。此外,如果一个分类属性具有大量不同值(类别),或者某些值出现不频繁,则对于某些数据挖掘任务,通过合并某些值减少类别的数目可能是有益的。
与特征选择一样,最佳的离散化和二元化方法是"对于用来分析数据的数据挖掘算法,产生最好结果"的方法。直接使用这种判别标准通常是不实际的。因此,离散化和二元化一般要满足这样一种判别标准,它与所考虑的数据挖掘任务的性能好坏直接相关。
1. 二元化
一种分类属性二元化的简单技术如下:如果有m个分类值,则将每个原始值唯一地赋予区间[0, m 1]中的一个整数。如果属性是有序的,则赋值必须保持序关系。(注意,即使属性原来就用整数表示,但如果这些整数不在区间[0, m 1]中,则该过程也是必需的。)然后,将这m个整数的每一个都变换成一个二进制数。由于需要n =? log2m 个二进位表示这些整数,因此要使用n个二元属性表示这些二进制数。例如,一个具有5个值{awful, poor, OK, good, great}的分类变量需要三个二元变量x1、x2、x3。转换见表2-5。
表2-5? 一个分类属性到三个二元属性的变换
??其中, 是第i个区间中类j的概率(值的比例)。该划分的总熵e是每个区间的熵的加权平均,即
?其中,m是值的个数,wi = mi/m是第i个区间的值的比例,而n 是区间个数。直观上,区间的熵是区间纯度的度量。如果一个区间只包含一个类的值(该区间非常纯),则其熵为0并且不影响总熵。如果一个区间中的值类出现的频率相等(该区间尽可能不纯),则其熵最大。
一种划分连续属性的简单方法是:开始,将初始值切分成两部分,让两个结果区间产生最小熵。该技术只需要把每个值看作可能的分割点即可,因为假定区间包含有序值的集合。然后,取一个区间,通常选取具有最大熵的区间,重复此分割过程,直到区间的个数达到用户指定的个数,或者满足终止条件。
例2.13? 两个属性离散化? 该方法用来独立地离散化图2-14所示的二维数据的属性x和y。在图2-14a所示的第一个离散化中,属性x和y被划分成三个区间。(虚线指示分割点。)在图2-14b所示的第二个离散化中,属性x和y被划分成五个区间。
?(点击查看大图)图2-14? 离散化四个点组(类)的属性x和y?
这个简单的例子解释了离散化的两个特点。首先,在二维中,点类是很好分开的,但在一维中,情况并非如此。一般而言,分别离散化每个属性通常只保证次最优的结果。其次,五个区间比三个好,但是,至少从熵的角度看,六个区间对离散化的改善不大。(没有给出六个区间的熵值和结果。)因而需要有一个终止标准,自动地发现划分的正确个数。
3. 具有过多值的分类属性
分类属性有时可能具有过多的值。如果分类属性是序数属性,则可以使用类似于处理连续属性的技术,以减少分类值的个数。然而,如果分类属性是标称的,就需要使用其他方法。考虑一所大学,它有许多系,因而系名属性可能具有数十个不同的值。在这种情况下,我们可以使用系之间联系的知识,将系合并成较大的组,如工程学、社会科学或生物科学。如果领域知识不能提供有用的指导,或者这样的方法会导致很差的分类性能,则需要使用更为经验性的方法,如仅当分组结果能提高分类准确率或达到某种其他数据挖掘目标时,才将值聚集到一起。
?