[DataAnalysis]机器学习算法——决策树详解(属性划分+剪枝+缺失值/连续值处理)

决策树简述

决策树是一种用于对实例进行分类的树形结构。决策树由节点(node)和有向边(directed edge)组成。节点分成根节点、内节点(表示一个特征或者属性的测试条件)和叶子节点(表示一个分类)。

决策树的生成是一个递归过程。在决策树算法中,有三种情形会导致递归返回。(1)当前结点包含的样本全属于同一类别,无需划分;(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分。(3)当前结点包含的样本集合为空,无法划分。

划分选择(如何选择最优划分属性)

1、信息熵

(1)信息增益

假定当前样本集合D中第k类样本所占的比例为p_k(k=1,2,3,4...|\gamma |),则D的信息熵定义为

Ent(D)=-\sum_{k=1}^{|\gamma |}p_{k}log_{2}p_k,该值越小,则D的纯度越高

信息熵定义为:

Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D_v|}{D}Ent(D_v)

信息增益越大,说明用属性a来进行划分所获得的“纯度提升”越大。选择信息增益最大的作为划分属性。

(2)增益率

由于信息增益准则会偏好取值数目较多的属性,因此我们引入“增益率”对取值数目较多的属性增加惩罚。

增益率定义为:

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|}a的属性值越多,则IV(a)越大。

但是增益率对可取值数目较少的属性有所偏好。

从而我们先从候选划分属性中找出信息增益高于平均水平的属性,再从中选取增益率最高的。

2、基尼系数

CART决策树用“基尼系数”来选取划分属性。

Gini(D)=1-\sum_{k=1}^{|\gamma |}p_k^2

3、误分类概率

剪枝处理puring

在决策树学习中,为了尽可能正确分类训练样本,可能会导致决策树分支过多,可能会出现过拟合的问题。剪枝就是决策树学习算法中应对“过拟合”的主要手段。

1、预剪枝

预剪枝要对划分前后的泛化性能进行估计来决定是否要进行这个划分。

2、后剪枝

(1)分析剪枝前后泛化能力(验证集精度)

(2)奥卡姆剃刀原则:虽然剪枝后精度并未提升,但是模型简化了也需要剪枝。

连续值处理

可以采用二分法对连续属性进行处理(如C4.5决策树算法中采用的机制)

给定样本集D和连续属性a,假定aD上出现了n个不同的取值,将这些取值从大到小进行排序,记为\{a^1,a^2,a^3...a^n\}。我们考虑包含n-1个元素的候选划分点集合

T_a=\{\frac{a^i+a^{i+1}}{2}|1\leq i\leq n-1\}

即把区间[a^i,a^{i+1})的中位数作为候选划分点,选取最优的划分点作为样本集合的划分。

缺失值处理

在属性数目较多的情况下,往往会有大量样本出现缺失值。如果简单地放弃不完整样本,仅使用无缺失值的样本进行学习,显然是对样本信息的极大浪费。

给定训练集D和有缺失值的属性a,令\tilde{D}表示D中在属性a上没有缺失值的样本子集,假定属性aV个可取值\{a^1,a^2,...a^V\}

\tilde{D}^v表示\tilde{D}中在属性a上取值为a^v的样本子集,\tilde{D}_k表示\tilde{D}中属于第k类的样本子集。假定我们为每一个样本赋予一个权重w_x。定义:

\rho =\frac{\sum_{x\in \tilde{D}}w_x}{\sum_{x\in D}w_x}

\tilde{\rho}_k =\frac{\sum_{x\in \tilde{D}_k}w_x}{\sum_{x\in \tilde{D}}w_x}

\tilde{r}_v =\frac{\sum_{x\in \tilde{D}^v}w_x}{\sum_{x\in \tilde{D}}w_x}

直观来看,对属性ap表示无缺失值样本所占的比例,\tilde{\rho}_k表示无缺失值样本中第k类所占的比例,\tilde{r}_v则表示无缺失值样本中在属性a上取值a^v的样本所占的比例。

信息增益的计算式推广为

Gain(D,a)=\rho *Gain(\tilde{D},a)=\rho*(Ent(\tilde{D})-\sum_{v=1}^{V}\tilde{r}_vEnt(\tilde{D}^v))

Ent(\tilde{D})=-\sum_{k=1}^{|\gamma |}\tilde{p}_klog_2\tilde{p}_k

多变量决策树

用于处理真实边界比较复杂的情形,我理解这种情形下已经不是传统的决策树,解释性较差。可以考虑用SVM或者其他的分类方法。

猜你喜欢

转载自blog.csdn.net/TOMOCAT/article/details/82382987