决策树

决策树

决策树 + 集成学习一般对应用于 金融领域,适合处理结构化数据: 金融风控、用户评分、风险用户的识别等。

决策树能解决分类回归问题(分类树 回归树) , 模型复杂度大,容易过拟合 。

决策树:是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果,本质是一颗由多个判断节点组成的树。决策树分为内部节点和叶子节点。

构建一棵决策树: 寻找对目标值影响最重要的特征和特征的划分方式: 1. 信息增益 (信息熵)2. 信息增益率3. 基尼值增益 (基尼值)。以上都是基于概率的计算。

决策树原理

熵Entropy: “混乱”程度的量度, 系统越有序,熵值越低;系统越混乱或者分散,熵值越高
\begin{array}{l}{\operatorname{Ent}(A)=-\sum_{k=1}^{n} p_{k} \log _{2} p_{k}}\\{=-p_{1} \log _{2} p_{1}-p_{2} \log _{2} p_{2}-\ldots-p_{n} \log _{2} p_{n}}\end{array}

1. 信息增益

信息增益:以某特征划分数据集前后的熵的差值。熵可以表示样本集合的不确定性,熵越大,样本的不确定性就越大。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合D划分效果的好坏。

信息增益 = 熵(划分前) – 熵(划分后)

熵(划分后) = 熵1xp1 + 熵2xp2 + …

差值越大, 划分选取的特征越好

信息增益倾向于选择分类数量多的特征

2. 信息增益率

增益率:增益比率度量是用前面的增益度量Gain(S,A)和所分离信息度量SplitInformation(如上例的性别,活跃度等)的比值来共同定义的。
\text {GainRatio}\left(S_{A,} A\right)=\frac{\operatorname{Gain}\left(S_{A,} A\right)}{\text {Splithformation}\left(S_{A}, A\right)}

\text {Splithformation}\left(S_{A}, A\right)=-\sum_{m \in M} \frac{\left|S_{A m}\right|}{\left|S_{A}\right|} \log \frac{\left|S_{\ln }\right|}{\left|S_{A}\right|}

前两个可以使用多叉树, 一般使用二叉树

3. 基尼值和基尼指数

基尼值Gini(D):从数据集D中随机抽取两个样本,其类别标记不一致的概率。故,Gini(D)值越小,数据集D的纯度越高。
\operatorname{Gini}(D)=\sum_{k=1}^{|y|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}}=1-\sum_{k=1}^{|y|} p_{k}^{2}
基尼值增益 = 基尼值(划分前) – 基尼值(划分后)(基尼指数)

二叉树划分, 基尼值增益越大, 划分效果越好

决策树的变量可以有两种

  1. 数字型(Numeric):变量类型是整数或浮点数,如前面例子中的“年收入”。用“>=”,“>”,“<”或“<=”作为分割条件(排序后,利用已有的分割情况,可以优化分割算法的时间复杂度)。
  2. 名称型(Nominal):类似编程语言中的枚举类型,变量只能从有限的选项中选取,比如前面例子中的“婚姻情况”,只能是“单身”,“已婚”或“离婚”,使用“=”来分割。

决策树分类

  • ID3决策树 信息增益
  • C4.5决策树 信息增益率
  • CART决策树 基尼值增益(或者基尼指数)

cart剪枝

决策树复杂度大, 容易过拟合, 使用剪枝处理

  1. 预剪枝: 创建决策树的时候进行剪枝

    (1)每一个结点所包含的最小样本数目,例如10,则该结点总样本数小于10时,则不再分;

    (2)指定树的高度或者深度,例如树的最大深度为4;

    (3)指定结点的熵(或基尼值)小于某个值,不再划分。随着树的增长, 在训练样集上的精度是单调上升的, 然而在独立的测试样例上测出的精度先上升后下降

  2. 后剪枝: 创建好决策树之后再剪枝

    后剪枝,在已生成过拟合决策树上进行剪枝,可以得到简化版的剪枝决策树。

决策树算法api

class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None)

  • criterion
    • 特征选择标准
    • “gini”或者”entropy”,前者代表基尼系数,后者代表信息增益。一默认”gini”,即CART算法。
  • min_samples_split
    • 内部节点再划分所需最小样本数
    • 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。我之前的一个项目例子,有大概10万样本,建立决策树时,我选择了min_samples_split=10。可以作为参考。
  • min_samples_leaf
    • 叶子节点最少样本数
    • 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。之前的10万样本项目使用min_samples_leaf的值为5,仅供参考。
  • max_depth
    • 决策树最大深度
    • 决策树的最大深度,默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间
  • random_state
    • 随机数种子

决策树可视化

sklearn.tree.export_graphviz() 该函数能够导出DOT格式

  • tree.export_graphviz(estimator,out_file=’tree.dot’,feature_names=[‘’,’’]) # 模型 文件路径
  • http://webgraphviz.com/ 可视化查看文件

决策树总结

  • 优点:
    • 简单的理解和解释,树木可视化。
  • 缺点:
    • 决策树学习者可以创建不能很好地推广数据的过于复杂的树,容易发生过拟合。
  • 改进:
    • 减枝cart算法
    • 随机森林(集成学习的一种)

tips:企业重要决策,由于决策树很好的分析能力,在决策过程应用较多, 可以选择特征

发表评论

邮箱地址不会被公开。 必填项已用*标注