周志华老师的《机器学习》书
1.决策树(decision tree)是一种常见的机器学习方法。一般的,一棵决策树包含一个根节点、若干个内部节点和若干个叶节点;叶节点对应于决策结果,而其他每个节点对应于一个属性测试。决策树学习目的是为了产生一棵泛化能力强的决策树。“分而治之”
1.输入:训练集D,属性集A={a1,a2,……}
过程:函数TreeGenerate(D,A)
2.生成结点node;
3.分别判断:
(1)当前D中样本是否属于同一类别,若是,则将node标记为C类叶结点,返回,无需划分;
(2)当前属性集为空或所有样本在所有属性集上取值相同,无法划分,若是则将node标记为叶结点,其类别标记为D中样本数最多的类,返回;
4.从A中选择最优化分属性a;
循环a的每一个值av,为node生成一个分支,令Dv表示D中在a上取值为av的样本子集;
判断:如果Dv为空,则将分支结点标为叶结点,其类别标记为D中样本最多的类,返回;
若不为空,则以TreeGenerate(Dv,A{a})为分支结点;(算一种递归?)
5.输出:以node为根节点的一颗决策树
即上述第四条
1.信息熵
假设当前样本集合D中第k类样本所占比例为pk(k=1,2,……,|y|)
E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k l o g 2 p k Ent(D)=-\sum_{k=1}^{|y|}p_klog_2p_k Ent(D)=−k=1∑∣y∣pklog2pk
Ent(D)越小,D纯度越高;最小为0,最大为log2|y|
2.信息增益
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V E n t ( D v ) Gain(D,a)=Ent(D)-\sum_{v=1}^{V}Ent(D^v) Gain(D,a)=Ent(D)−v=1∑VEnt(Dv)
信息增益越大,意味着使用属性a所划分获得的“纯度提升越大”,
故上述2.4中的最优划分则为
a ∗ = a r g m a x G a i n ( D , a ) a_*=argmaxGain(D,a) a∗=argmaxGain(D,a)
实际上信息增益准则对可取值数目较多的属性有所偏好,要减少这种偏好可能带来的不良影响,即使用增益率。
G a i n r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ Gain_{ratio}(D,a)=\frac{Gain(D,a)}{IV(a)} \\ IV(a)=-\sum_{v=1}^{V}\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|} Gainratio(D,a)=IV(a)Gain(D,a)IV(a)=−v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
IV(a)成为属性a的固有值,V越大,IV(a)越大
增益率准则对可选数目较少的属性有所偏好
故,可选属性较多时,使用增益率进行划分;可选属性较少时,使用信息增益进行划分。
G i n i ( D ) = ∑ k = 1 ∣ y ∣ ∑ k ‘ ≠ k p k p k ‘ = 1 − ∑ k = 1 ∣ y ∣ p k 2 Gini(D)=\sum_{k=1}^{|y|}\sum_{k^`\neq k}p_kp_k^`\\ =1-\sum_{k=1}^{|y|}p_k^2 Gini(D)=k=1∑∣y∣k‘=k∑pkpk‘=1−k=1∑∣y∣pk2
反映了随机抽取两个样本,其标记不一致的概率;Gini(D)越小越好
故,属性a的基尼指数为:
G i n i i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini_{index}(D,a)=\sum_{v=1}^{V}\frac{|D^v|}{|D|}Gini(D^v) Giniindex(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
故上述2.4中的最优划分则为
a ∗ = a r g m i n G i n i i n d e x ( D , a ) a_*=argminGini_{index}(D,a) a∗=argminGiniindex(D,a)
Gain IV 都是越大越好 Gini是越小越好
1.是处理“过拟合”的主要手段
2.基本策略:预剪枝(prepruning),后剪枝(postpruning)
预剪枝是在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;
后剪枝是先从训练集生成一颗完整的决策树,然后自底向上对非叶节点进行考察,若该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。
3.决策树桩:一颗仅有一层划分的决策树
过拟合,欠拟合,
预剪枝训练时间短,模型简单,防止过拟合性能好,但容易丢失信息,欠拟合;
后剪枝泛化性能优于预剪枝,但训练时间长。
前面使用的均为离散属性,下面讨论连续属性
二分法(不想打了,二分法应该都会)
ρ = ∑ x ∈ D ~ w x ∑ x ∈ D w x p ~ k = ∑ x ∈ D ~ w x ∑ x ∈ D w x ( 1 ≤ k ≤ ∣ y ∣ ) , r ~ v = ∑ x ∈ D ~ w x ∑ x ∈ D w x ( 1 ≤ v ≤ V ) , D ~ 表 示 D 中 在 属 性 a 上 没 有 缺 失 的 样 本 子 集 , w x 为 赋 给 每 个 样 本 x 的 权 重 ρ 表 示 无 缺 失 样 本 所 占 的 比 例 p ~ k 表 示 无 缺 失 值 样 本 中 第 k 类 所 占 的 比 例 r ~ v 表 示 无 缺 失 值 样 本 中 在 属 性 a 上 取 值 a v 的 样 本 所 占 比 例 故 信 息 增 益 计 算 式 可 变 为 : G a i n ( D , a ) = ρ × G a i n ( D , a ) = ρ × [ E n t ( D ~ ) − ∑ v = 1 V r ~ v E n t ( D ~ v ) ] 其 中 : E n t ( D ~ ) = − ∑ k = 1 ∣ y ∣ p ~ k l o g 2 p ~ k \rho=\frac{\sum_{x\in\tilde D}w_x}{\sum_{x\in D}w_x}\\ \tilde p_k=\frac{\sum_{x\in\tilde D}w_x}{\sum_{x\in D}w_x}~~~~~~(1\leq k \leq |y|),\\ \tilde r_v=\frac{\sum_{x\in\tilde D}w_x}{\sum_{x\in D}w_x}~~~~~~(1\leq v \leq V),\\ \tilde D表示D中在属性a上没有缺失的样本子集,w_x为赋给每个样本x的权重\\ \rho 表示无缺失样本所占的比例\\ \tilde p_k表示无缺失值样本中第k类所占的比例 \\ \tilde r_v表示无缺失值样本中在属性a上取值a^v的样本所占比例 \\ 故信息增益计算式可变为:\\ Gain(D,a)=\rho \times Gain(D,a)\\ =\rho \times [Ent(\tilde D)-\sum_{v=1}^{V}\tilde r_v Ent(\tilde D ^v)]\\ 其中:Ent(\tilde D)=-\sum_{k=1}^{|y|}\tilde p_klog_2 {\tilde p_k} ρ=∑x∈Dwx∑x∈D~wxp~k=∑x∈Dwx∑x∈D~wx (1≤k≤∣y∣),r~v=∑x∈Dwx∑x∈D~wx (1≤v≤V),D~表示D中在属性a上没有缺失的样本子集,wx为赋给每个样本x的权重ρ表示无缺失样本所占的比例p~k表示无缺失值样本中第k类所占的比例r~v表示无缺失值样本中在属性a上取值av的样本所占比例故信息增益计算式可变为:Gain(D,a)=ρ×Gain(D,a)=ρ×[Ent(D~)−v=1∑Vr~vEnt(D~v)]其中:Ent(D~)=−k=1∑∣y∣p~klog2p~k
1.决策树所形成的分类边界有一个明显特点:轴平行(axis-parallel)他的分类边界由若干个与坐标轴平行的分段组成。
2.若能使用斜的划分边界,则会大大简化决策树模型,即为多变量决策树。
老师在书中使用判断西瓜为好瓜还是坏瓜,非常生动有趣,便于理解,想不明白的时候建议看一下。