数据表示
数据表示可以分为:线性,层次,图状结构,决策树用的是层次表示的结构
组成
decision tree由三部分组成:决策节点,分支和叶节点,决策节点如是否单身?天气是否下雨等进行判断的属性,分支如树的枝,叶节点如最终预测的结果
过程
从root节点开始,从上到下匹配,抵达某一叶节点
决策节点排序
基本思想如哈夫曼树,出现频率高的结果相对应的决策节点应尽量靠近root节点。
何时终止
抵达叶节点,符合剪枝策略时
ID3算法
hunt算法:ID3,C4.5,CART算法的基础
信息熵
信息熵:描述信源的不确定度,熵越大变量的不确定性越大,把它搞清楚所需要的信息量也就越大.S代表样本,E代表Entropy下面一致
E
(
S
)
=
E
(
p
1
,
p
2
,
.
.
.
,
p
n
)
=
−
∑
p
i
l
o
g
2
p
i
E(S) = E(p1, p2, ..., pn) = -∑p_i log_2p_i
E(S)=E(p1,p2,...,pn)=−∑pilog2pi
信息增益
S代表样本,A代表决策属性,G代表Gain下main一致
信息增益: G ( S , A ) = E ( S ) − E A ( S ) G(S, A) = E(S) - E_A(S) G(S,A)=E(S)−EA(S)
其中 E A ( S ) = ∑ ∣ S i ∣ S E ( S i ) E_A(S) = ∑\frac{|S_i|}{S}E(S_i) EA(S)=∑S∣Si∣E(Si)
比如当前属性wind表示刮风,取值{week, strong} ,它将样本S划分为2个样本S1,S2,分别计算E(S1)和E(S2),带入公式 E A ( S ) = ∑ ∣ S i ∣ S E ( S i ) E_A(S) = ∑\frac{|S_i|}{S}E(S_i) EA(S)=∑S∣Si∣E(Si),再带入公式 G ( S , A ) = E ( S ) − E A ( S ) G(S, A) = E(S) - E_A(S) G(S,A)=E(S)−EA(S)即可算出信息增益
E A ( S ) E_A(S) EA(S)算出来表示用属性A将S划分后,划分样本混乱程度的总和,也就是信息熵加权平均之和,熵越小越好,说明属性A划分出来的结果偏于不混乱状态,那么信息增益 E ( S ) − E A ( S ) E(S) - E_A(S) E(S)−EA(S)就是越大越好。
伪代码
训练集数据S,训练集数据属性集和F,函数DT(S,F):
- if 样本S全部属于同一个类别 C then
- 创建一个叶节点,并标记类号为C
- return
- else
- 计算属性集F中每一个属性的信息增益,假定信息增益最大的属性为A
- 创建节点,取属性A为该节点的决策属性
- for 节点属性A每个可能的取值V
- 为该节点添加一个新的分支,假设Sv为属性A取值为V的样本子集
- if Sv全部属于同一个类别C then
- 为该分支添加一个叶节点,并标记类号为C
- else
- 递归调用DT(Sv, F-{A}),为该分支创建子树
- end if
- end for
- end if
ID3算法特点
- 自顶向下,贪婪搜索
- 搜索策略是爬山法,用信息熵作为评价函数
- 核心是再决策树各级节点上选择属性,以信息增益作为选择的标准,使系统熵值最小
- 无法处理连续型数据
C4.5算法
为了解决ID3算法无法处理连续型数据的缺点,C4.5加入了分裂点计算信息增益
信息增益率
如果属性A为连续型数据,将A属性的数据的某点作为分裂点,左右分成两部分,计算
E
A
(
S
)
=
∣
S
L
∣
S
E
(
S
L
)
+
∣
S
R
∣
S
E
(
S
R
)
E_A(S) = \frac{|S_L|}{S}E(S_L)+\frac{|S_R|}{S}E(S_R)
EA(S)=S∣SL∣E(SL)+S∣SR∣E(SR)
选择
E
A
(
S
)
E_A(S)
EA(S)值最小的分裂作为属性A最佳的分裂点,并将以该最佳分裂点按属性A对集合S的划分熵值作为属性A划分S的熵值
计算完
E
A
(
S
)
E_A(S)
EA(S)后,还引入了分裂信息来调节信息增益,S表示SpilitE
S
(
A
)
=
−
∑
∣
S
i
∣
S
l
o
g
2
∣
S
i
∣
S
S(A) = -∑ \frac{|S_i|}{S}log_2 \frac{|S_i|}{S}
S(A)=−∑S∣Si∣log2S∣Si∣
我们会发现如果划分区间数越多,S(A)越大,G(A)也会增加,用信息增益率来表示更加稳定
信息增益率表示为:
GR表示GainRatio
G
R
(
A
)
=
G
(
A
)
S
(
A
)
GR(A) = \frac{G(A)}{S(A)}
GR(A)=S(A)G(A)
CART算法
分类与回归数算法,采用二元递归划分方法,CART为二叉树,可计算离散和数值型数据,CART采用Gini系数来度量属性
Gini系数
t是属性节点,j是类别,k为当前属性下测试输出的类别数,p(j|t)表示节点t中样本测试输出取类别j的概率,Gini系数:
G
(
t
)
=
1
−
∑
j
=
1
k
p
2
(
j
∣
t
)
G(t) = 1 - \sum_{j=1}^kp^2(j|t)
G(t)=1−j=1∑kp2(j∣t)
G(t)越小表明该节点所包含的样本越集中在某一类上。Gini系数来度量对某个属性变量测试输出的两组取值的差异性,理想的分组应该尽量使两组中样本输出变量取值的差异性总和达到最小,及纯度越大,也就是使两组输出变量取值的差异性下降最快,纯度增加最快
Gini增益系数,为了统一叫为差异性损失,t是节点 ,
ξ
\xi
ξ是该节点的一个属性分支条件
Δ
G
(
ξ
,
t
)
=
G
(
t
)
−
(
∣
S
L
∣
S
G
(
t
L
)
+
∣
S
R
∣
S
G
(
t
R
)
)
\Delta G(\xi,t) = G(t) - (\frac{|S_L|}{S}G(t_L)+\frac{|S_R|}{S}G(t_R))
ΔG(ξ,t)=G(t)−(S∣SL∣G(tL)+S∣SR∣G(tR))
R(t) :用平均值估计偏差大小
R
(
t
)
=
1
N
−
1
∑
i
=
1
N
(
y
i
(
t
)
−
y
‾
(
t
)
)
2
R(t) = \frac{1}{N-1}\sum_{i=1}^N(y_i(t) - \overline{y}(t))^2
R(t)=N−11i=1∑N(yi(t)−y(t))2
方差增益系数:
Δ
R
(
t
)
=
R
(
t
)
−
(
∣
N
L
∣
N
R
(
t
L
)
+
∣
N
R
∣
N
R
(
t
R
)
)
\Delta R (t) = R(t) - (\frac{|N_L|}{N}R(t_L)+\frac{|N_R|}{N}R(t_R))
ΔR(t)=R(t)−(N∣NL∣R(tL)+N∣NR∣R(tR))