连续值处理
上篇介绍了几种按数据属性对决策树划分的方法,下面考虑一下一些连续型的属性应该怎样处理。
- 处理连续型属性(例如西瓜的成熟度、学生成绩)时,需要将其离散化,将连续型属性的值划分到不同的区间(类似于二叉排序树),比较各个分裂点的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)=t∈TamaxGain(D,a,t)=t∈Tamax Ent(D)−[∣D∣∣∣Dt−∣∣Ent(Dt−)+∣D∣∣∣Dt+∣∣Ent(Dt+)]=t∈Tamax Ent(D)−λ∈{−,+}∑∣D∣∣∣Dtλ∣∣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\} t∈Ta, Ta={2ai+ai+1,1⩽i⩽n−1},即取相邻两个点的中值。 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=1∣y∣D~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~k表示无缺失值样本中第k类所占的比例)r~v=∑x∈Dw∑x∈D~w=∑x∈D~w∑x∈D~kw(1⩽k⩽∣Y∣)=∑x∈D~w∑x∈D~vw(1⩽v⩽V)(r~v表示无缺失值样本在属性a上取值av的样本所占的比例)
此时重新定义信息增益计算方式来选择最优属性:
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=1∑Vr~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=w∗r~v, r ~ v \tilde{r}_{v} r~v即对应属性值 a v a_v av中的 r ~ v \tilde{r}_{v} r~v值。