决策树C4.5
C4.5
对ID3的优化
为了处理ID3中信息增益对(取值较多的属性)的偏向问题,我们加入了一个惩罚项\(IV\)(Intrinsic Value):
序号 | 居住地 | 学历 | 性别 |
---|---|---|---|
1 | 北京 | 小学 | 男 |
2 | 北京 | 初中 | 男 |
3 | 北京 | 高中 | 女 |
4 | 北京 | 大学 | 女 |
5 | 上海 | 小学 | 女 |
6 | 上海 | 初中 | 女 |
7 | 上海 | 高中 | 男 |
8 | 上海 | 大学 | 男 |
在之前的例子中可以计算:
信息增益率(Gain Ratio)
此时我们的最优划分属性变成了:
在之前我们已经算出两个属性的\(Gain(D,a)\)值相同,所以可以很容易得到居住地的信息增益率比较大,所以居住地是一个更好的划分属性。
借此我们规避了对取值较多的属性的偏向。
可是新问题接踵而至,我们加了惩罚项不就说明我们对(取值较少的)属性有偏向么?而且如果在某一个属性下,所有样本均为同一类别,此时的\(IV\)值:
在计算\(GainRatio\)时,\(IV\)作为分母,当然不允许为\(0\),或是其他很小的值。
所以在这里我们用了一个启发式规则,我们先从候选属性中筛选出那些\(Gain\)高于平均值的属性,然后再从中找到\(GainRatio\)最大的属性作为最优属性。
真就是一个踌躇的过程。。。。。
连续值处理
相比于ID3,C4.5还可以对连续值进行处理。
连续值可以是身高、体重等属性,离散值可以是居住地、肤色等属性。
C4.5使用二分法(bi-partition)对连续属性进行处理。先将所有样本在该属性上的值进行排序。
例如我们在此对西瓜的重量进行排序:
这里红色数字表示好瓜,黑色数字表示坏瓜。二分法的做法是这样的,在取到的属性值两两之间取中位点作为备选划分值。在12和14间我们选择13作为划分值。对于\(n\)个属性值,我们有\(n-1\)个备选划分值。这里我们有7个,分别为:13,14.5,15.5,17.5,21.5,23.5。
对于每一个划分值\(D_t\),我们都将此属性分为两部分\(D_t^-\)和\(D_t^+\),分别表示值小于\(D_t\)的所有样本及其补集。此时的信息增益计算如下:
\(|D_t^\lambda|\)表示值小于(或大于)\(D_t\)的样本个数。
相比于离散值属性,连续值属性有些不同,在某一个节点使用连续值属性\(a\)进行分类,其后代子节点仍有可能利用该属性再次进行分类。
连续值属性的优化
对于\(a\)属性的\(n\)个取值,我们要进行\(n-1\)次进行计算,当数据量很大时时间复杂度很高。
所以我们对数据进行观察:
很明显要想信息增益达到最大,分割点只会出现在前后分类不同的两个值之间:(14,15),(15,16),(16,19),(19,21)。所以这是我们要计算的备选划分值由7个降至4个。
缺失值处理
对于样本来说还有一种情况就是数据不完整。
\(\widetilde D\)表示在属性\(a\)上未缺失的样本子集,就是说这个集合的所有样本在此属性上均有取值。
\({a^1,a^2...a^v}\)表示属性\(a\)的\(v\)个可能的值,相应的,\(\widetilde {D^v}\)表示取值为\(a^v\)的\(\widetilde D\)子集。
此外还有\(\widetilde {D_k}\)表示类别为\(k\)的\(\widetilde D\)子集,其中\(k=1,2...\gamma\)。
每个样本的权重为\(\omega_x\),初始我们将所有样本权重均设为1。
\(\rho\)表示在\(a\)中无缺失值的样本比例,\(\widetilde{p_k}\)表示在\(a\)中无缺失值的样本中类别为\(k\)的比例,\(\widetilde{r^v}\)表示表示在\(a\)中无缺失值的样本中取值为\(a^v\)的比例。
此时信息增益计算如下:
若样本\(x\)在该节点存在值,那么正常分类,权重\(\omega_x\)不变;若值缺失,那么将其划入所有子节点,每个子节点内对其权重重新分配为\(\widetilde{r^v}·\omega_x\)。(就是以不同概率将此样本分配至不同节点)
权重改变后,重新计算\(\rho·\widetilde{r^v}·\widetilde{p_k}\)。
Code
待完成
CART,回归,多变量决策树