根据特征的取值情况可将其分为连续型和离散型两种:连续型特征值为实数,例如天气的温度,服刑人员再犯罪率等;离散型特征值主要用类别或符号等来描述特征所代表的含义,例如服刑人员的受教育程度可以用“小学”“初中”“高中”“大学”“研究生”来描述,服刑人员的婚姻状况可以用“未婚”“已婚”“离异”“丧偶”来描述;当然也可以用数字来对符号进行编码,例如用一个数字集合{1,2,3,4}来量化服刑人员的婚姻状况。
在日常生活中,问题域空间中的特征类型常常既有连续型的特征,也有离散型的特征。而针对应用场景,当确定了算法后,算法对输入的特征类型要求就确定了。例如关联规则挖掘算法只能处理输入特征为布尔型的数据,ID3决策树算法只能处理输入特征为离散型的数据。研究表明:对于一些问题进行离散化处理能够使得部分模型产生更好的预测效果,例如在将数据集的特征离散化处理后,朴素贝叶斯算法的正确率比处理没有离散化特征的数据高出10%[27]。
综上所述,为了提高算法的准确性,对特征数据进行离散化处理已经成为数据预处理以及特征工程中的重要一环。
1.连续特征离散化
连续特征的离散化就是在连续特征的值域上,将值域划分为若干个离散的区间段,然后使用区间段代替在该区间段内的特征值。区间段之间的分割点称为切分点,由切分点切分出来的子区间段的个数称为元数。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应地缩小。一些数据挖掘算法,特别是某些分类算法,例如ID3、Apriori等算法要求输入的是离散(分类)特征数据,这样将连续特征变换为离散特征即为连续特征的离散化。
根据我国年龄阶段的划分,我们将服刑人员的“年龄”这个连续型特征离散化,“年龄”特征的取值范围在[0,150]之间,用4个切分点:7、18、41、66切分为5个区间段如下:
童年:7>年龄≥0,也即:[0,7)
少年:18>年龄≥7,也即:[7,18)
青年:41>年龄≥18,也即:[18,41)
中年:66>年龄≥41,也即:[41,66)
老年:150≥年龄≥66,也即:[66,150]
如何在数据信息损失尽可能少的情况下减少元数是连续特征离散化追求的目标,因此如何选择切分点,进而产生合理的子区间段也成为决定特征离散化成功的关键。
对连续特征进行离散化处理,一般经过以下步骤:
①对此特征进行排序。对连续型特征值进行升序或降序排列,特别是对于大数据集,排序算法的选择要有助于节省时间,提高效率,减少离散化的整个过程的时间开支及复杂度。
②切分点选择。选择某个点作为切分点,用所选取的具体的离散化方法的尺度进行衡量此切分点是否满足要求,常用的评价准则是基于信息增益或者基于统计量。
③区间段分裂或合并。若切分点满足离散化的衡量尺度,则基于选择的切分点对数据集进行分裂或合并,得到新的区间段;再选择下一个切分点,重复步骤②、③。
④判断离散是否停止。当离散算法存在停止准则时,如果满足停止准则,则不再进行离散化过程,从而得到最终的离散结果。我们可以事先设定元数K作为简单的停止判断标准,也可以设定复杂的判断标准函数。
连续特征离散化分为有监督和无监督两种,无监督直接根据特征本身的分布特征进行离散化处理;有监督除了自变量特征本身外,还需要参考数据集中的预测特征y(因变量)。无监督离散化方法主要包括等宽法、等频法和基于聚类的方法等;有监督离散化方法主要包括信息增益离散化、卡方离散化等。
(1)等宽离散化。等宽离散化也叫等距离离散法。该离散法将连续特征值域均匀地分为具有相同宽度的k个区间,区间的个数k根据实际情况来决定。假设我们用x表示连续型特征,则离散化的区间宽度计算公式为:
其中,w为子区间段宽度,xmax,xmin分别为连续特征x的最大值和最小值。根据上述公式,我们即可找到(k-1)个切分点,从而获得连续特征的k个离散化区间。
例如,我们假定监狱服刑人员的特征“年龄”分布在[0,90]之间,最小值为0,最大值为90,我们要将其分为k=5部分,则每个子区间段的长度为:(90-0)/5=18,4个切分点分别为:18、36、54、72;区间被划分为[0,18)、[18,36)、[36,54)、[54,72)、[72,90],每个特征值对应属于它的那个子区间段。
等宽法计算简单,但当特征值存在离群值时,会造成切分点严重偏移。例如某监狱的某个服刑人员的年龄为150,则离群值150会导致xmax偏大,切分点严重偏移,切分点变成30、60、90、120,从而造成离散后各子区间段不均衡,甚至在[90,120)区间段内出现无数据的极端情况。
(2)等频离散化。当特征值的分布不均匀(例如存在离群值)时,使用等宽离散化方法造成子区间段中的样本数据量可能出现严重不均衡现象。为了解决这个问题,我们可以让离散化后的每个子区间段内的样本数据量均衡,这种方法即为等频法。等频法即是将特征值域中数据均匀分为n等份,每份内包含的观察点数相同,即把相同数量的记录放到每个区间。根据连续型特征值的总数n及要切分的区间段数k,则每个子区间段的样本数为:n/k,然后每个区间段所含的取值范围即为对应的特征离散化区间。
例如,有20个样本数据分别为:1,2,3,4,5,6,7,8,9,10,41,42,43,44,45,46,47,48,49,50。进行等频法离散,每个子区间段中的样本数为4,区间段数为5,具体见表4-3所示。从表4-3可以看出:样本数据被分为5个不等宽的子区间段,切分点为4、8、42、46,保证了各区间段有相同数量的样本。然而,这样做会导致取值接近甚至相同的样本被划分到不同的区间段内,例如8和9、42和43被切分到两个不同区间段内。
表4-3 等频离散数据
这两种方法都比较简单,易于操作,但都需要人为地规定划分区间的个数。另外,等宽法对离群点比较敏感,会不均匀地把特征值分布到各个区间;一些区间包含许多数据记录,而一些区间的数据记录数较少,从而对模型产生不良影响。等频法虽然避免了上述缺陷,但却可能将相同的数据值分到不同的区间来满足每个区间中相同的数据记录数,从而使得相邻区间段的数据具有相似的特性。
(3)聚类离散化。将相似的样本数据通过离散化切分到相同的子区间段可以很好地保持原始数据样本的信息,而聚类正是将相似的样本划分到相同的簇的方法。聚类的思想是:同一个簇中的样本高度相似,不同簇间的样本有很多的差异性,据此,可以利用聚类对连续型特征进行离散化处理。基于聚类分析的离散化处理分为三个步骤,即:
①根据连续特征值的分布情况,使用选定聚类算法对具有连续特征的样本数据进行聚类划分。
②基于聚类分析的结果和特定的策略,决定是否对簇进行进一步的划分或合并处理。可利用自顶向下的策略对划分后的每一个簇继续进行更细的子簇划分或利用自底向上的策略将相邻的相似簇合并成新的簇。
③当最终划分好簇后,确定切分点和区间数。
注:基于聚类的方法,簇的个数及簇间相似性的计算要根据聚类算法的实际情况来决定,比如对于K-means算法,簇的个数可以自己决定,但对于DBSCAN,则是由算法找寻簇的个数。如何选择簇的个数及计算簇间相似性将影响到聚类算法的效果,从而影响连续特征值的离散化效果。
(4)信息增益离散化。信息增益是特征选择中的一个重要指标,它定义为一个特征能够为预测模型带来多少信息,带来的信息越多,该特征越重要。信息增益主要含义是指期望信息或者信息上的有效减少量,根据其来确定在什么样的层次上选择什么样的变量来分类。要想理解信息增益,首先要明白信息熵。对一个特征而言,系统有它和没它时信息量将发生变化,而前后信息量的差值就是这个特征给系统带来的信息量,其实就是信息熵。信息熵是对一个事物(信息)不确定性的量化描述,也可以说是一个集合混乱程度的量化描述。对于任意一个分类预测系统,分类的结果为yj(m≥j≥1,m为分类的类别数),则有分类别C类的整体信息熵计算公式为:
其中,yi代表某个随机的类别或事件,p(yi)表示发生这个随机类别或事件的概率。例如,在监狱服刑人员是否再犯罪的预测系统中,若服刑人员再犯罪为C1,服刑人员不再犯罪为C0,则该预测系统的信息熵为:
其中,p(C0)和p(C1)分别为服刑人员不再犯罪和再犯罪的概率。(www.xing528.com)
信息增益是针对一个一个的特征而言的,也就是引入某个特征X后信息熵称为条件熵,通常根据某个给定的特征X划分的各个小的分类系统的信息熵加权求和,权重就是各个小系统占系统S的比例(各个小系统的概率)。信息熵和条件熵的差值就是信息增益,那么特征X的信息增益即为:
其中,H(C|X)是条件熵,条件熵中X也是一个变量,意思是给定一个特征X的条件下(X的每个值都会取),分类的类别C熵对X的期望。条件熵的计算公式为:
其中,n为特征X的取值数,m为分类类别C的取值数。
基于信息增益的离散化方法的步骤如下:
①对连续型特征进行排序;
②把特征的每一个取值看作是候选分裂节点(或切分点),然后计算出对应的熵;接着,选择熵最小的特征取值作为分裂节点,把原来的区间划分为两个子区间段;
③对②中得到的两个子区间段递归进行划分,直到每个子区间段内特征的类别一样为止;
④合并相邻的、类的熵值为零且特征类别相同的各子区间段,并重新计算新区间段类的熵值;
⑤重复执行步骤④,直到满足终止条件(终止条件可以是限制决策树的深度或者叶子结点的个数等)。
ID3和C4.5是最常用的基于信息增益来进行特征选择分类的决策树算法,基于信息增益进行特征离散化就是基于单个特征构建决策树建模,然后根据决策树模型中节点分裂的阈值对特征进行划分。
(5)卡方离散化。上述基于信息增益离散化方法采用自顶向下的划分方法,而基于卡方离散化方法则采用自底向上的合并方法。首先将特征的所有数据值列为一个单独的区间,再递归地找出最佳邻近可合并的区间,然后合并它们,进而形成较大的区间。决定是否进行相似区间段合并的标准是卡方统计量。卡方检验针对分类变量,就是统计样本的实际观测值与理论推断值之间的偏离程度:实际观测值与理论推断值之间的偏离程度决定卡方值的大小,卡方值越大,两者越不符合;卡方值越小,偏差越小,两者越趋于符合,若两个值完全相等时,卡方值就为0,表明理论值完全符合。卡方检验是由英国统计学家Karl Pearson在1900年首次提出的,因此也被称为Pearsonχ2,其计算公式为:
其中,Ai为落入i区间段的样本个数,也即观察频数,Ei为i区间段对应的期望频数,n为总频数,pi为i区间的期望频率;Ei等于总频数n乘以i区间段的期望频率pi,k为单元格数;当n较大时,χ2统计量近似服从k-1(计算Ei时用到的参数个数)个自由度的卡方分布。
常用的基于卡方的离散化方法是ChiMerge方法,其基本思想为:对于精确的离散化,相对类频率在一个区间内应当完全一致。因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开。而低卡方值表明它们具有相似的类分。ChiMerge算法用卡方统计量来决定相邻区间是否一致或者是否区别明显。如果经过验证,类别属性独立于其中一个区间,则这个区间就要被合并。ChiMerge算法包括两部分:初始化和自底向上合并,当满足停止条件的时候,区间合并停止。步骤如下:
第一步:初始化
对要离散特征的每个取值看作是一个单独的区间段,然后按照取值大小进行排序;
第二步:自底向上合并区间,又包括两步骤:
①计算每一对相邻区间的卡方值。
②将卡方值最小的或者低于阈值(预先设定一个卡方的阈值)的一对相邻区间进行合并,阈值之上的区间保持分区间。
卡方的计算公式为:
其中,Aij为第i个区间段内类别为j的样本个数,k为要比较的区间个数,C为类别个数,且有:
其中,Ri为第i个区间内的实例数量,Cj为第j类的实例数量,N为总的实例数量,Eij为Aij的期望。
使用ChiMerge方法进行离散化需要先选择显著性水平,再由公式得到对应的卡方值。推荐使用0.90、0.95、0.99置信度,最大区间数取10到15之间。然而,该离散化方法每次迭代过程中只能合并两个区间,如果数据集中、样本量较大,则算法的开销会较大。
2.分类特征离散化
大多数机器学习算法不能识别类别数据,要求数据必须是数值型的,故一名合格的数据挖掘分析师必须对相应转换方法有所了解。
以性别为例,性别特征具有两个选项:男或女,机器学习模型搞不懂何为“男、女”,但清楚何为“1、0”。直观的做法,将“男、女”对“1、0”进行映射,但这种做法存在一个明显的缺陷,即“0、1”具有大小可比性,而实际上sex只是一个标称特征,不应具有“数学”意义,故比较合理的做法是将sex特征拆成两个特征,“是否男”与“是否女”。由此,如果一个用户的sex为男,则这两个特征联合在一起可表示为(1,0),否则表示为(0,1)。
综上所述,分类数据离散化的核心就是将某个类别特征的m个取值转化为m个特征,如果具有某个特征值,则代表该特征的特征值表示为1,其他为0。
3.数据离散化的原因
离散化指把连续型数据切分为若干“段”,是数据分析中常用的手段。在数据挖掘中,离散化得到普遍采用。究其原因,有这样几点:
(1)算法需要。决策树、NaiveBayes等算法本身不能直接使用连续型变量,连续型数据只有经离散处理后才能进入算法引擎。这一点在使用具体软件时可能不明显。因为大多数数据挖掘软件内已经内建了离散化处理程序,所以从使用界面看,软件可以接纳任何形式的数据。但实际上,在运算决策树或NaiveBayes模型前,软件都要在后台对数据先作预处理。
(2)离散化可以有效地克服数据中隐藏的缺陷。离散化可以使模型结果更加稳定。例如,数据中的极端值是影响模型效果的一个重要因素。极端值导致模型参数过高或过低,或导致模型被虚假现象“迷惑”,把原来不存在的关系作为重要模式来学习。而离散化,尤其是等距离散,可以有效地减弱极端值和异常值的影响。
(3)有利于对非线性关系进行诊断和描述。对连续型数据进行离散处理后,自变量和目标变量之间的关系变得清晰化。如果两者之间是非线性关系,可以重新定义离散后变量每段的取值,如采取“0,1”的形式,由一个变量派生为多个哑变量,分别确定每段和目标变量间的联系。这样做,虽然减少了模型的自由度,但可以大大提高模型的灵活度。
通过对连续型特征进行离散化,将其取值转换为有明确含义的区间,含义更加明确,从而使得数据的可解释性更强,模型更易于理解和使用。离散化后的特征取值大大减少,既减少了数据集对于存储空间的需求,也减少了模型训练所需要的计算资源,从而提高了模型训练的计算效率。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。