在数据挖掘的时候,有时候我们会想计算不同特征之间的相关,比如在建模时用来减少冗余特征。连续特征之间的相关性很简单,用皮尔逊相关就可以了,是非常通用且有效的方法。但是在实践里面,大部分时候我们处理的是离散特征,所以这里想提出一个离散特征之间的相关计算办法。这是之前在看决策树C4.5的时候想到的一个思路,就是离散特征之间的相关,可以用决策树的经典算法中的信息增益和信息增益比来描述。
假定有一组数据集S,两个离散特征分别为A和B。Entropy(SA)表示使用特征A对数据集S进行分类后,所对应的信息熵(如果是在分类问题里,那么这个特征A就是希望学会的分类)。信息熵的形式为
p(i)是特征A中,样品属于第i类的概率。如果样品都属于一个类别,那么Entropy(SA)=0,相反,样品类别越多,分布越均匀,则信息熵越大,也可以说这组数据的不纯度越高。比如A代表是否会打篮球这个特征,如果样品都是会打的,那么纯度就很高。
决策树算法中的信息增益,被定义为
这个式子看起来有点复杂,其中Gain(SA_B)表示加入特征B分类之后的信息增益,i是根据特征B来分类的第i个类别,Bi是第i个类别的样品集合,|Bi|就是第i个类别的样品数目,|S|是总样品数,最后Entropy(SA_Bi)指的是对于在第i个类别的样品集,使用A来分类得到的信息熵。
可以想象,如果A和B两个特征对S的分类是完全一致的,那么对于B所分的每一类数据子集,对A再进行分类也就归为一类,所以其信息熵Entropy(SA_Bi)全部为0,因而信息增益最大。A与B的分类越相似,信息增益的值也就越大,所以信息增益实际上就反映了A和B之间的相关。事实上,信息增益对于A、B也是对称的,即Gain(SA_B)=Gain(SB_A)。
可惜的是,信息增益有着一个巨大的缺点,那就是对于分类数目多的特征有不正确的偏向。比如若对于S对于特征B是每一个样品一个类别,那么显然信息增益也是最大,但这样的结果不是我们想要得到的。为了解决这个问题,非常直观地就会想到要根据特征本身的分类情况进行标准化,具体而言就是要除以这个分类的信息熵,亦即
在做决策树分类的时候这样是可行的,但是要用来描述A和B的相关则不行,因为信息增益对于A,B不对称。解决的方法也十分简单,就是改为去除以A和B的信息熵的乘积的开方
如此,我们就可以得到离散特征之间的相关程度了。
这里的思路其实非常简单,决策树每次选择不同特征进行分叉,本质上依据的就是特征跟目标分类之间的相关性,因此这种算法当然可以用于计算离散特征之间的相关。