决策树中连续型值和缺失值处理

连续值处理

上篇介绍了几种按数据属性对决策树划分的方法,下面考虑一下一些连续型的属性应该怎样处理。

  • 处理连续型属性(例如西瓜的成熟度、学生成绩)时,需要将其离散化,将连续型属性的值划分到不同的区间(类似于二叉排序树),比较各个分裂点的Gain值的大小。
    在C4.5决策树算法中,采用二分法处理连续型属性。

例子:
假设有连续属性a,D={ a 1 , a 2 , . . . a i . . . , a n a_1,a_2,...a_i...,a_n a1,a2,...ai...,an},例如学生成绩,有n个学生,学生成绩在[0,100]区间内,假设学生成绩 D = { 34 , 43 , 23 , 45 , . . . 55 , 70 , 80 , 85 , 90 , 99 } D=\{34,43,23,45,...55,70,80,85,90,99\} D={34,43,23,45,...55,70,80,85,90,99}

  • 首先将学生成绩进行从小到大排序,
  • 分数t(划分点)将D划分成两个集合 D t − D_t^{-} Dt表示不大于t分数的人群,和 D t + D_t^{+} Dt+表示大于t分数的人群。
  • 此时应该注意不能简单的按照t=50分或者是第(1+n)/2个分数值进行划分,因为我们都知道,学生分数大多数集种在中等的区间[70,90],而少数分布在[0,30],[90,100],所以要选择另一种方法来进行选择。
    方法如下:排序后 D = 8 , 23 , 34 , 43 , . 70 , . . , 80 , 85 , 90 D={8,23,34,43,.70,..,80,85,90} D=8,23,34,43,.70,..,80,85,90,我们首先要找到划分值集合T,然后比较按照 t i t_i ti划分,然后根据计算 G a i n ( D , a , t ) Gain(D,a,t) Gain(D,a,t)的值,选出最优的划分点。
    我们可以用每个点作为尝试计算熵值,更好的方法是取相邻两点之间的值,在这两点中取任何值划分情况相同,可以取他们的中值,就可以将这两个点划分到不同区间,例 ( 8 + 23 ) 2 , ( 23 + 34 ) 2 , . . . , 90 + 99 2 \frac{(8+23)}{2},\frac{(23+34)}{2},...,\frac{90+99}{2} 2(8+23),2(23+34),...,290+99,
    将这些划分点放入 T = { ( 8 + 23 ) 2 , ( 23 + 34 ) 2 , . . . , 90 + 99 2 } , T=\{\frac{(8+23)}{2},\frac{(23+34)}{2},...,\frac{90+99}{2}\}, T={2(8+23),2(23+34),...,290+99},
    然后计算通过计算这些点分别划分后的熵值,这里并不是用这些点一次将集合划分成多个集合,而是分别使用点 t i t_i ti将集合D划分成两个集合 D t − D_t^{-} Dt D t + D_t^{+} Dt+计算熵值,选择其中信息增益最大的t值.
    信息增益在这里的表示:
    Gain ⁡ ( D , a ) = max ⁡ t ∈ T a Gain ⁡ ( D , a , t ) = max ⁡ t ∈ T a   Ent ⁡ ( D ) − [ ∣ D t − ∣ ∣ D ∣ Ent ⁡ ( D t − ) + ∣ D t + ∣ ∣ D ∣ Ent ⁡ ( D t + ) ] = max ⁡ t ∈ T a   Ent ⁡ ( D ) − ∑ λ ∈ { − , + } ∣ D t λ ∣ ∣ D ∣ Ent ⁡ ( D t λ ) \begin{aligned} \operatorname{Gain}(D, a) &=\max _{t \in T_{a}} \operatorname{Gain}(D, a, t) \\ &=\max _{t \in T_{a}}  \operatorname{Ent}(D) -[\frac{\left|D_{t}^{-}\right|}{|D|} \operatorname{Ent}\left(D_{t}^{-}\right)+\frac{\left|D_{t}^{+}\right|}{|D|} \operatorname{Ent}\left(D_{t}^{+}\right)]\\&=\max _{t \in T_{a}}  \operatorname{Ent}(D)-\sum_{\lambda \in\{-,+\}} \frac{\left|D_{t}^{\lambda}\right|}{|D|} \operatorname{Ent}\left(D_{t}^{\lambda}\right) \end{aligned} Gain(D,a)=tTamaxGain(D,a,t)=tTamax Ent(D)[DDtEnt(Dt)+DDt+Ent(Dt+)]=tTamax Ent(D)λ{,+}DDtλEnt(Dtλ)
    其中,划分点集合 t ∈ T a ,   T a = { a i + a i + 1 2 , 1 ⩽ i ⩽ n − 1 } t \in T_{a}, T_{a}=\left\{\frac{a^{i}+a^{i+1}}{2}, 1 \leqslant i \leqslant n-1\right\} tTa, Ta={2ai+ai+11in1},即取相邻两个点的中值。 D t − D_t^{-} Dt D t + D_t^{+} Dt+表示被 t i t_i ti划分的两个集合。
    Gini 指数的计算不需要对数运算,更加高效;
    Gini 指数更偏向于连续属性,熵更偏向于离散属性。

缺失值处理

缺失值是指一个样本的某些属性值有缺失。
当属性值有缺失时要解决两个问题
(1)在有属性值有缺失的情况下,如何选择最优属性?

假设有训练集 D D D,样本有属性a,现将训练集中a属性无缺失的样本放入 D ~ \tilde{D} D~,a的取值可能集合为{ a 1 , a 2 , . . . a i . . , a V a_1,a_2,...a_i..,a_V a1,a2,...ai..,aV},
对属性集 D ~ \tilde{D} D~做一些处理:

  • 按属性值: D ~ \tilde{D} D~中在属性a的取值为 a i a_i ai的样本集 D ~ v \tilde{D}^{v} D~v内,显然在一个 D ~ \tilde{D} D~中有 V V V个这样的集合,即 D ~ = ⋃ v = 1 V D ~ v \tilde{D}=\bigcup_{v=1}^{V} \tilde{D}^{v} D~=v=1VD~v;
  • 按类别:假设训练集有 ∣ y ∣ 个 类 |y|个类 y D ~ \tilde{D} D~中第 k k k ( k = 1 , 2 , … , ∣ Y ∣ ) (k=1,2, \dots,|\mathcal{Y}|) (k=1,2,,Y)个类为 D ~ k \tilde{D}_{k} D~k,所以 D ~ = ∪ k = 1 ∣ y ∣ D ~ k \tilde{D}=\cup_{k=1}^{|y |} \tilde{D}_{k} D~=k=1yD~k;

假设D中某个样本为 x x x,为 x x x赋权值 w w w,(样本权重初始值为1,后面会用到)并且定义:
ρ = ∑ x ∈ D ~ w ∑ x ∈ D w ( ρ 表 示 无 缺 失 值 样 本 所 占 的 比 例 ) p ~ k = ∑ x ∈ D ~ k w ∑ x ∈ D ~ w ( 1 ⩽ k ⩽ ∣ Y ∣ ) ( p ~ k 表 示 无 缺 失 值 样 本 中 第 k 类 所 占 的 比 例 ) r ~ v = ∑ x ∈ D ~ v w ∑ x ∈ D ~ w ( 1 ⩽ v ⩽ V ) ( r ~ v 表 示 无 缺 失 值 样 本 在 属 性 a 上 取 值 a v 的 样 本 所 占 的 比 例 ) \begin{aligned} \rho &=\frac{\sum_{\boldsymbol{x} \in \tilde{D}} w}{\sum_{\boldsymbol{x} \in D} w} \\ (\rho表示无缺失值样本所占的比例) \\ \tilde{p}_{k} &=\frac{\sum_{\boldsymbol{x} \in \tilde{D}_{k}} w}{\sum_{\boldsymbol{x} \in \tilde{D}} w} \quad(1 \leqslant k \leqslant|\mathcal{Y}|) \\(\tilde{p}_{k} 表示无缺失值样本中第k类所占的比例) \\ \tilde{r}_{v} &=\frac{\sum_{\boldsymbol{x} \in \tilde{D}^{v}} w}{\sum_{\boldsymbol{x} \in \tilde{D}} w} \quad(1 \leqslant v \leqslant V) \end{aligned}\\(\tilde{r}_{v}表示无缺失值样本在属性a上取值a^v的样本所占的比例) ρ(ρ)p~k(p~kkr~v=xDwxD~w=xD~wxD~kw(1kY)=xD~wxD~vw(1vV)(r~vaav
此时重新定义信息增益计算方式来选择最优属性:
Gain ⁡ ( D , a ) = ρ × Gain ⁡ ( D ~ , a ) = ρ × ( Ent ⁡ ( D ~ ) − ∑ v = 1 V r ~ v Ent ⁡ ( D ~ v ) ) \begin{aligned} \operatorname{Gain}(D, a) &=\rho \times \operatorname{Gain}(\tilde{D}, a) \\ &=\rho \times\left(\operatorname{Ent}(\tilde{D})-\sum_{v=1}^{V} \tilde{r}_{v} \operatorname{Ent}\left(\tilde{D}^{v}\right)\right) \end{aligned} Gain(D,a)=ρ×Gain(D~,a)=ρ×(Ent(D~)v=1Vr~vEnt(D~v))
其中 ∑ v = 1 V r ~ v Ent ⁡ ( D ~ v ) \sum_{v=1}^{V} \tilde{r}_{v} \operatorname{Ent}\left(\tilde{D}^{v}\right) v=1Vr~vEnt(D~v)表示按 a a a的属性值进行划分 D ~ 1 \tilde{D}^{1} D~1 D ~ v . . . \tilde{D}^{v}... D~v... D ~ V \tilde{D}^{V} D~V集合的熵值乘上 r ~ v \tilde{r}_{v} r~v(该属性值无缺失的比例占整个无缺失样本的比例),然后求和。
(2)给定划分属性后,训练集中属性值含有缺失值,如何划分样本?
若样本属性已知,则将样本划分到与其取值相同的子节点中,权值 w w w不变
若样本属性缺失,则将该样本同时划分到所有子节点,调整样本权值为 w = w ∗ r ~ v w=w*\tilde{r}_{v} w=wr~v r ~ v \tilde{r}_{v} r~v即对应属性值 a v a_v av中的 r ~ v \tilde{r}_{v} r~v值。

你可能感兴趣的:(Machine,Learning)