• 【机器学习】之决策树---更新中


    决策树个人小结

    最近一直在看决策树以及集成学习相关的内容,分开来看的话,很多概念当时看都能理解,但是回顾的时候就很懵逼,还是需要整体来总结一下,做一个知识梳理。

    什么是决策树

    先忘记随机森林,adaboost,gbdt等内容!!!你的心里只有决策树!!!

    现在我们只考虑决策树。决策树就向线性回归、逻辑回归以及SVM等基本的机器学习模型一样,是一种可以用来解决分类或回归问题的机器学习模型。

    决策树,顾名思义,是一种树形的结构,通过训练生成决策树,可以用它来完成预测。它的内部节点表示一个特征或者属性,叶节点表示一个类。

    决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个好的分类过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。决策树的生成是只考虑局部最优的。

    决策树不一定是二叉树,也可能是多叉树。

    决策树的分类

    1. 从目的来看,可分为:分类树和回归树

    分类树用来进行类别预测;回归树用来进行回归预测

    1. 从特征选择的算法来看:ID3、C4.5、CART

    前面说过,在决策树的生成过程中,要进行特征空间的划分,通俗来说,就是每一步根据某个特征进行划分。

    Q: 那么在每一步中,以什么样的标准来选择特征进行划分呢???
    A: 一般有三种标准(最大信息增益,最大信息增益比,基尼指数)

    ID3

    • 信息熵

    信息熵用来度量样本集合纯度。信息熵越大,表示纯度越高。

    ID3决策树是使用最大信息增益来进行特征划分的。对训练数据集(或子集)D,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。

    • 信息增益算法

    (1) 计算当前结点数据集D的信息熵(H(D))

    (H(D) = -sumlimits_{k=1}^K frac{|C_k|}{|D|} log_2 frac{|C_k|}{|D|})

    (2) 计算经特征(A)划分后的信息熵(H(D|A))

    (H(D|A) = sumlimits_{i=1}^n frac{|D_1|}{|D|}H(D_i))

    (3) 计算信息增益

    (g(D, A) = H(D) - H(D|A))

    • 例题:

    • 小结

    ID3决策树使用最大信息增益进行划分。

    一般用于分类。是多叉树。

    基于离散属性来进行分类。

    C4.5

    ID3中使用最大信息增益来进行划分节点的选择,但是这样会偏向于选择取值数较多的属性。所以引入“最大信息增益率”来选择最优化分属性。

    最大信息增益率计算公式:

    (Gain\_ratio(D, a) = frac{Gain(D, A)}{IV(a)})

    其中 (IV(a) = -sumlimits_{v=1}^Vfrac{|D^v|}{|D|}log_2frac{|D_v|}{|D|})称为属性(a)的固有值。属性(a)的可能取值越多(V越大),(IV(a))的取值通常越大。所以从信息增益率来看,希望(IV(a))越小越好,也就是倾向于选择取值数目较少的属性。ps: 可以认为和"信息增益(Gain(D, A))偏向于选取值数目较多的属性"中和了一下...

    • 小结

    C4.5是在ID3的基础(偏向于选择取值数目较多的特征)上进行改进。

    C4.5并不是直接选择增益率最大的候选划分属性,而是使用一个启发式算法:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

    要注意一下(IV(a))的计算,其中(D^v)指的是当前数据集中属性(a)取值为第(v)种值的样本的数目。不要和前面(H(D))中的(C_k)混淆了。

    C4.5不仅可以处理离散属性,还可以使用"二分法"对离散属性进行处理。(见西瓜书P83)

    C4.5是多叉树。

    CART

    CART(classification and regression tree),分类和回归树。是一种著名的决策树算法,分类和回归任务都能用。CART决策树是二叉树

    CART分类树

    • 用于解决分类问题
    • 使用GINI指数(基尼指数)选择最优特征的最优化分点
    • 每次都是二值划分(生成二叉树)

    CART回归树

    • 用于解决回归问题
    • 使用“平方误差最小”来选择最优特征的最优划分点
    • 使用当前节点样本的均值作为该节点的预测值

    CART分类树

    • 基尼指数

    分类问题中,假设有(K)个类,样本点属于第(k)类的概率的为(p_k),则概率分布的基尼指数定义为:(Gini(p) = sumlimits_{k=1}^Kp_k(1-p_k) = 1-sumlimits_{k=1}^Kp_k^2)

    对于给定的样本集合(D),其基尼指数为:
    (Gini(D) = 1-sumlimits_{k=1}^K(frac{|C_k|}{|D|})^2​)
    其中,(C_k)是D中属于第(k)类的样本子集,(K)是类的个数。

    如果样本集合(D)根据特征(A)是否取某一可能值(a)被分割成(D_1)(D_2)两个部分,则在特征(A)的条件下,集合(D)的基尼指数定义为
    (Gini(D, A) = frac{|D_1|}{|D|}Gini(D_1) + frac{|D_2|}{|D|}Gini(D_2))

    基尼指数(Gini(D))表示集合(D)的不确定性,基尼指数(Gini(D, A))表示经(A=a)分割后集合(D)的不确定性。

    基尼指数值越大,样本集合的不确定性越大,这一点与熵相似。

    • CART分类树生成算法

    算法停止的条件(3选1):

    1. 节点中的降本个数小于预定阈值;
    2. 样本集的基尼指数小于预定与之;
    3. 没有更多的特征可用于划分。
    • CART分类树例题

    CART回归树

    CART回归树,根据平方误差最小的原则,来选择最优特征及其划分点。

    算法如下:

    决策树的剪枝

    决策树是很容易过拟合的,可以通过剪枝来进行缓解。

    剪枝策略有2种:预剪枝后剪枝

    • 预剪枝

    在决策树生成过程中,对每个节点在划分前进行评估,若当前节点不能带来决策树泛化性能提升,则停止划分并将当前节点标记为叶节点。

    • 后剪枝

    先从训练集生成一棵完整的决策树,然后自底向上对非叶节点进行考察,若将该节点对应的字树替换为叶节点能够提升决策泛化性能,则将该字树替换为叶节点。

    思考:如何判断决策树泛化性能是否提升?

    答:可以使用留出法,预留一部分数据用作验证集以进行性能评估。

    例题可参见西瓜书P81-83

    • 后剪枝和预剪枝的比较

    预剪枝:可能减去了很多分支,最后留下的分支少。耗时短。繁泛化能力较弱。

    后剪枝:留下的分支较多。欠拟合风险小。泛化能力强。但耗时长。

    • CART剪枝

    蓝皮书上5.5划分出了一个独立的小节来讲解CART决策树,其中还有CART剪枝算法。

    算法两步走:(1) 从生成算法产生的决策树(T_0)底端开始不断剪枝,直到(T_0)的根节点,形成一个子树序列({T_0, T_1, T_2, ..., T_n});(2) 通过交叉验证法在独立的验证数据集上对子树序列进行测试,从种选择最优子树。

    具体见蓝皮书P72

    简单来说,这种剪枝算法并没有完全脱离训练集,尝试剪掉每一个节点(每次只减一个),在训练集上对每个节点计算一下指标:

    (alpha = frac{C(t) - C(T_t)}{|T_t|-1})

    取最小的(alpha)对应的节点,剪掉它。这时候生成了第一个子树。
    重复以上步骤,直到最后只剩下根节点作为最后一个子树。
    最后得到了一系列的子树,然后进行第二步:使用验证集对所有子树走一遍,取误差最小的那棵子树,就是我们最终需要的树。

  • 相关阅读:
    JAVA实现的异步redisclient
    权限表设计
    操作系统之存储管理(续)
    leetcode第一刷_Jump Game
    linux之stat函数解析
    重温微积分 —— 偏微分与链式法则
    重温微积分 —— 偏微分与链式法则
    所谓敏感(数字的敏感)
    所谓敏感(数字的敏感)
    推理集 —— 特殊的工具
  • 原文地址:https://www.cnblogs.com/Elaine-DWL/p/9718707.html
Copyright © 2020-2023  润新知