机器学习(三) 决策树

作者: 晓迦 | 来源:发表于2019-05-11 11:11 被阅读0次

    决策树是最经典的机器学习模型之一。它的预测效果容易理解,易于向业务部门解释,可以做分类问题和回归问题。
    本篇文章主要做以下几个方面的归纳总结:

    • 3.1 决策树的算法原理
    • 3.2 怎样进行特征选择
    • 3.3 决策树的创建过程
    • 3.4 决策树的剪枝处理
    • 3.5 sklearn调用以及相关参数解释

    3.1 决策树的算法原理

    算法思想:从决策到决策树

    3.1.1 决策

    什么是决策?
    我们在生活中经常会依靠各种信息做出各种决策,比如说选择大学,选择专业,找工作,找对象。
    以找工作为例,假如我们要对“我们是否要找一份数据分析相关的工作?”这样的问题进行决策时,通常会进行一系列的判断或者“子决策”:我们先看”这份工作是自己喜欢的吗?”,如果是自己喜欢的,则我们再看“它的待遇好吗?”,如果待遇不错,我们再判断“它是否有前景呢?”,最后我们得出最终结论:我们要从事一份数据分析相关的工作。

    决策的过程为我们理解决策树的建立提供了很大的帮助。计算机是通过数据来对事情做出预测,下面给一个更加直观的例子如图:



    通过给出10组数据来构建决策树判断是否能偿还贷款债务。
    依据决策画出决策树如下:


    3.1.2 决策树

    对于是否有能力偿还贷款债,我们根据年收入、房产信息、婚姻情况来判断他是否有能力偿还贷款。
    分别对年收入、房产信息、婚姻情况三个特征进行测试,并根据测试结果决定行为的类别。每选择一个特征进行测试,数据集就被划分成多个子数据集。接着继续在子数据集上选择特征,并进行数据集划分,直到创建一个完整的决策树。
    问题来了,在决策树的创建过程中,要先对哪个特征进行分裂?怎样进行特征的选择呢?

    3.2 怎样进行特征选择

    遍历所有的特征,分别计算,使用这个特征划分数据集前后信息熵的变化值,然后选择信息熵变化幅度最大的那个特征,来优化作为数据集划分的依据。即选择信息增益最大的特征作为分裂节点。
    特征选择标准除了信息增益,还有增益率基尼不纯度

    3.2.1 信息增益

    信息熵主要解决的是信息量化的问题。一条信息的信息量和它的不确定性有直接的关系。一个问题不确定性越大,要搞清楚这个问题,需要了解的信息量就越多,其信息熵就越大。
    信息熵计算公式:


    信息增益:
    信息增益指的是当按照这个特征划分之后,信息熵下降的量。在特征选择的过程中,选信息增益最大的特征。

    ID3算法使用信息增益作为特征选择指标的决策树构建算法。

    3.2.2 增益率

    由于权重的存在,信息增益准则对包含数目较多的属性有偏好。为了减少这种不“客观”的判定,选择增益率来作为划分指标。


    C4.5算法是使用增益率作为特征选择指标的决策树构建算法。
    3.2.2 基尼不纯度

    信息熵是衡量信息不确定性的指标,也是衡量信息纯度的指标。除此之外,基尼不纯度也是衡量信息不纯度的指标,其计算公式如下:


    CART算法是使用基尼不纯度来作为特征选择指标的决策树构建算法。

    3.3 决策树的创建过程

    • 计算数据集划分前的信息熵
    • 遍历所有未作为划分条件的特征,分别计算根据每个特征划分数据集后的信息熵。
    • 选择信息增益最大的特征,并使用这个特征作为数据划分节点来划分数据。
    • 递归地处理被划分后的所有子数据集,从未被选择的特征里继续选择最优数据划分特征来划分子数据集。
      递归过程结束的条件:
    • 所有的特征都使用完了
    • 划分后的信息增益足够小了

    3.4 决策树的剪枝过程

    使用决策树模型拟合数据时,容易造成过拟合。解决过拟合的方法是对决策树进行剪枝处理。决策树的剪枝有两种思路:预剪枝和后剪枝。

    3.4.1 预剪枝

    预剪枝是在构造决策树的同时进行剪枝。在决策树的构建过程中,如果无法进一步降低信息熵的情况下,就会停止创建分支。为了避免过拟合,可以设置一个阈值,即使还可以继续降低信息熵,但如果信息熵的减少量低于这个阈值,也停止创建分支。
    其他的预剪枝算法:如限制叶子节点的样本个数等。

    3.4.1 后剪枝

    后减枝是指决策树构造完成之后进行剪枝。剪枝的过程是对拥有同样父节点的一组节点进行检查,判断如果将其合并,信息熵的增加量是否小于某一阈值。如果小于阈值,则这一组节点可以合并一个节点。

    3.5 sklearn调用以及相关参数解释

    scikit-learn 使用 sklearn.tree.DecisionTreeClassifier类实现决策树分类算法。其中几个典型的参数类型解释如下:

    • criterion: 特征选择算法。
    • splitter: 创建决策树分支的选项,一种是选择最优的分支创建原则,另外一种是从排名靠前的特征中,随机选择一个特征来创建分支,这个方法和正则项的效果类似,可以避免过拟合的问题。
    • max_depth: 指定决策树的最大深度。通过指定该参数,用来解决模型的过拟合问题。
    • min_samples_split: 这个参数指定能创建分支的数据集大小。默认为2,如果一个节点的样本个数小于这个数值,则不再创建分支。
    • min_samples_leaf: 创建分支后的节点样本数量必须大于等于这个数值。
    • max_samples_nodes: 限制最大的样本节点个数。
    • min_impurity_split: 可以使用该参数来指定信息增益的阈值。

    总结

    决策树的建立过程就是信息熵减少的过程。
    怎样来选择要划分的特征?决策树的停止指标?为了避免过拟合,采取了哪些剪枝方法?调用sklearn时,需要调整的参数有哪些?参数的含义?
    弄懂上面这些,应该达到了一个调参侠的入门标准吧。

    文章参考:机器学习(6)——决策树
    《scikit-learn 机器学习》

    相关文章

      网友评论

        本文标题:机器学习(三) 决策树

        本文链接:https://www.haomeiwen.com/subject/fpmtaqtx.html