大数据分析笔记 - 决策树
分类问题 (Classification)
分类是一种在数据挖掘相关应用中出现的基础学习方法。分类器 (classifier) 的基本任务在于将标签分配给新的观测数据。分类算法是监督学习的,从一组带标签的观测数据训练集 (training set of labelled observation) 开始,学习这些观测数据的属性有助于对将来未打标签的观测数据进行分类的可能性有多大(predict the outcome for new observation)。
决策树 (Decision Tree)
定义
一个决策树使用树形结构来指定决策与结果的序列(sequences of decisions and consequences)。给定输入变量X={x1, x2, …, xn},目的是预测一个答复或者输出变量Y(output variable)。
每一个 节点(node) 测试一个特定的输入变量。
每一个 分支(branch) 代表一个决定。
对新观察值进行分类将遍历此决策树。
节点的深度(depth of node) 是从根节点到达节点所需的最小步数(steps)。
叶节点(leaf nodes) 位于树上最后一个分支的末尾,代表了类标签(class labels)。
用例
- 动物分类 (比如是冷血还是温血,是否哺乳动物)。
- 评估病人的症状检查列表。
- 电子游戏的人工智能中,使用决策树来控制游戏角色的行为。
- 零售商使用决策树来划分客户或者预测市场和促销活动的反应率。
- 金融机构可以使用决策树来帮助决定批准还是拒绝贷款申请。
算法
决策树算法的目的在于基于训练集S构建一棵树T。
算法选择最能提供信息的属性来对树进行分支,并对每个子树进行递归执行。最丰富的信息属性由 基于熵(Entropy)计算的信息增益(Information gain) 来决定。
熵 (Entropy)
熵用来衡量属性的杂质。给定分类X和对应的标签x,P(x)表示x的概率,则X的熵Hx的定义如下。
考虑抛硬币的例子,当正面和反面有相等的概率P(x=1) = P(x=0) = 0.5 时,
熵Hx = −(0.5 × log2 0.5 + 0.5 × log2 0.5) = 1。
条件熵 (Conditional entropy)
给定属性X,其值是x,其结果属性是Y,值是y,条件熵 Hy|x 是对于给定X时Y的熵,定义如下。
注意条件熵永远小于或者等于基础熵。当属性与结果相关联时,条件熵小于基础熵。在最坏情况下,当属性与结果不相关时,条件熵则等于基础熵。
信息增益(Information Gain)
属性A的信息增益定义为基础熵与属性的条件熵之差。
信息增益比较了分裂前的父节点纯净度等级与分裂后的子节点纯净度等级。(The degree of purity of the parent node before a split and the degree of purity of the child node after a split)
在每一轮,算法在具有最大信息增益的属性上进行分裂。
结束标准
算法会不断重复地构建子树直到以下某一条件满足:
- 所有叶节点都满足最小纯净度阈值(minimum purity threshold) (足够纯净)
- 属性分裂没有足够的信息增益(no sufficient information gain)。
- 当所有的叶子节点都属于某个分类的时候(如,subscribed=yes)
- 所有的记录都具有相同的属性值。
- 到达预设的最大树深(maximum depth of the tree)。
算法示例(ID3)
A作为一组分类输入变量,P作为输出变量(预测分类),T作为训练集。
决策树使用贪心算法(greedy algorithm),因为算法总是选择在当时看来最好的选项。然而,这种选择可能不是整体最好的,他只能保证在那一步是最好的(可能会导致过拟合)。
解决方案: 可以使用集成技术(如random forest 随机森林)随机选择分裂点或者随机选择数据。从而产生一个多重树结构。这些树随后对每个分类进行投票,获得最多票数的类被选中为预测分类。
评估决策树
评估方法
- 评估树的分裂是否有意义,与领域专家一起对决策规则进行精确验证,然后确定规则是否合理。
- 查看树的深度和节点。过多的层和只有少数成员的节点可能是过度拟合的信号。
- 使用分类器的标准诊断工具。
决策树中的过度拟合
可能原因:
- 缺乏训练集
- 训练集具有偏向性(biased)。
- 节点有太多层数。
避免方法:
- 当达到所有训练数据被完美分类那个点之前,提前停止树的增长。
- 建完树后,使用错误率降低剪枝(reduced-error pruning) 和规则后剪枝 (rule-based post pruning)等方法对树进行后剪枝(post-prune)。
决策树属性
- 决策树的计算代价低,很容易对数据进行分类。
- 决策树的输出很容易解释为固定的简单测试序列。
- 决策树可以处理数值(numerical)和分类(categorical)属性。在有冗余和关联变量的情况下也很健壮。
- 决策树还能够处理对结果有非线性影响的变量。所以它在处理高度非线性问题的时候,比线性模型 (如线性回归和逻辑回归) 更有效。
- 如果数据集中包含了许多不相干的变量,那么决策树不是一个好的选择。(如果数据集包含不相干的变量,而且这些变量碰巧又被选中为树的分裂点,则决策树可能生长的过大,还可能在每个分裂点包含太少数据) 因此,特征选择很重要。
当在有许多变量的数据集上使用例如逻辑回归方法的时候,决策树可以根据信息增益帮助确定那些最有用的变量,用于逻辑回归。决策树也可以用于去除冗余变量。