决策树C4.5

C4.5

对ID3的优化

为了处理ID3中信息增益对(取值较多的属性)的偏向问题,我们加入了一个惩罚项\(IV\)(Intrinsic Value):

\[IV(a) = -\sum_{v=1}^V\frac{|D^v|}{|D|}\log_2\frac{|D^v|}{|D|} \]

序号 居住地 学历 性别
1 北京 小学
2 北京 初中
3 北京 高中
4 北京 大学
5 上海 小学
6 上海 初中
7 上海 高中
8 上海 大学

在之前的例子中可以计算:

\[\begin{align} IV(a=“居住地”)&=-0.5*\log_20.5-0.5*\log_20.5\\ &=1\\ IV(a=“学历”)&=-(0.25*\log_20.25)*4\\ &=2 \end{align} \]

信息增益率(Gain Ratio)

\[GainRatio(D,a)=\frac{Gain(D,a)}{IV(a)} \]

此时我们的最优划分属性变成了:

\[a^*=\mathop{\arg\max}_aGainRatio(D,a) \]

在之前我们已经算出两个属性的\(Gain(D,a)\)值相同,所以可以很容易得到居住地的信息增益率比较大,所以居住地是一个更好的划分属性。

借此我们规避了对取值较多的属性的偏向。

可是新问题接踵而至,我们加了惩罚项不就说明我们对(取值较少的)属性有偏向么?而且如果在某一个属性下,所有样本均为同一类别,此时的\(IV\)值:

\[IV(a')=-1*\log_21=0 \]

在计算\(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\)的所有样本及其补集。此时的信息增益计算如下:

\[\begin{align} Gain(D,a)&=\mathop{\arg\max}_tGain(D,a,t)\\ Gain(D,a,t)&=Ent(D)-\sum_{\lambda \in -,+}\frac{|D_t^\lambda|}{|D|}Ent(D^\lambda) \end{align} \]

\(|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。

\[\begin{align} \rho &= \frac{\sum_{x\in\widetilde D}\omega_x}{\sum_{x\in D}\omega_x}\\ \widetilde{p_k} &=\frac{\sum_{x\in\widetilde {D_k}}\omega_x}{\sum_{x\in D}\omega_x}\\ \widetilde{r^v} &=\frac{\sum_{x\in\widetilde {D^v}}\omega_x}{\sum_{x\in D}\omega_x}\\ \end{align} \]

\(\rho\)表示在\(a\)中无缺失值的样本比例,\(\widetilde{p_k}\)表示在\(a\)中无缺失值的样本中类别为\(k\)的比例,\(\widetilde{r^v}\)表示表示在\(a\)中无缺失值的样本中取值为\(a^v\)的比例。

此时信息增益计算如下:

\[\begin{align} Gain(D,a)&= \rho Gain(\widetilde D,a)\\ &=\rho (Ent(\widetilde D)-\sum_{v=1}^V\widetilde{r^v}Ent(\widetilde {D^v}))\\ Ent(\widetilde D)&= -\sum_k^\gamma\widetilde{p_k}\log(\widetilde{p_k}) \end{align} \]

若样本\(x\)在该节点存在值,那么正常分类,权重\(\omega_x\)不变;若值缺失,那么将其划入所有子节点,每个子节点内对其权重重新分配为\(\widetilde{r^v}·\omega_x\)。(就是以不同概率将此样本分配至不同节点)

权重改变后,重新计算\(\rho·\widetilde{r^v}·\widetilde{p_k}\)

Code

github

待完成

CART,回归,多变量决策树

posted @ 2020-01-01 23:23  Lyu1997  阅读(580)  评论(0)    收藏  举报