机器学习——决策树(笔记)

目录

一、认识决策树

1. 介绍

2. 决策树生成过程

二、sklearn中的决策树

1. tree.DecisionTreeClassifier(分类树)

(1)模型基本参数

(2)模型属性

(3)接口

2. tree.DecisionTreeRegressor(回归树)

3. tree.export_graphviz(将生成的决策树导出为DOT格式,画图专用)

4. 其他(补充)

三、决策树的优缺点

1. 优点

2. 缺点


一、认识决策树

1. 介绍

        决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列 有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。决策树算法容易理解,适用各种数据,在解决各种问题时都有良好表现,尤其是以树模型为核心的各种集成算法,在各个行业和领域都有广泛的应用。

2. 决策树生成过程

        上面这组数据集为 一系列已知物种以及所属类别的数据。我们现在的目标是,将动物们分为哺乳类和非哺乳类。根据已经收集到的数据,决策树算法 可以算出了下面的 这棵决策树:

        假如我们现在发现了一种 新物种 A,它是冷血动物,体表带鳞片,并且不是胎生,我们就可以通过这棵决策树来判断它的 所属类别

涉及关键概念:节点

   ① 根节点:没有进边,有出边。包含最初的,针对特征的提问。

   ② 中间节点:既有进边也有出边,进边只有一条,出边可以有很多条。都是针对特征的提问。

   ③ 叶子节点:有进边,没有出边,每个叶子节点都是一个类别标签。

   ④ 子节点和父节点:在两个相连的节点中,更接近根节点的是父节点,另一个是子节点。

二、sklearn中的决策树

        涉及模块:sklearn.tree

1. tree.DecisionTreeClassifier(分类树)

(1)模型基本参数

(2)模型属性

(3)接口

2. tree.DecisionTreeRegressor(回归树)

重要参数criterion

        回归树 衡量分枝质量的 指标,支持的标准有三种:

    ① 输入“mse”使用均方误差mean squared error(MSE),父节点和叶子节点之间的 均方误差的差额 将被用来作为 特征选择的标准,这种方法通过使用 叶子节点的均值来 最小化 L2损失。

     ② 输入“friedman_mse”,使用费尔德曼均方误差,这种指标使用弗里德曼针对潜在分枝中的问题改进后的均方误差。

     ③ 输入“mae”使用绝对平均误差MAE (mean absolute error),这种指标使用叶节点的中值来 最小化 L1损失。

3. tree.export_graphviz(将生成的决策树导出为DOT格式,画图专用)

4. 其他(补充)

        ① 信息熵的计算比基尼系数缓慢一些,因为基尼系数的计算不涉及对数。另外,因为信息熵对不纯度更加敏感,所以信息熵作为指标时,决策树的生长会更加“精细”,因此对于高维数据或者噪音很多的数据,信息熵很容易过拟合,基尼系数在这种情况下效果往往比较好。

        ② random_state用来设置分枝中的随机模式的参数,默认None,在高维度时随机性会表现更明显,低维度的数据(比如鸢尾花数据集),随机性几乎不会显现。输入任意整数,会一直长出同一棵树,让模型稳定下来。

        ③ splitter也是用来控制决策树中的随机选项的,有两种输入值,输入“best”,决策树在分枝时虽然随机,但是还是会优先选择更重要的特征进行分枝(重要性可以通过属性feature_importances_查看),输入“random”,决策树在分枝时会更加随机,树会因为含有更多的不必要信息而更深更大,并因这些不必要信息而降低对训练集的拟合。

        ④ 在不加限制的情况下,一棵决策树会生长到衡量不纯度的指标最优,或者没有更多的特征可用为止,这样的决策树往往会过拟合。为了让决策树有更好的泛化性,需要要对决策树进行剪枝。剪枝策略对决策树的影响巨大,正确的剪枝策略是优化决策树算法的核心

三、决策树的优缺点

1. 优点

    ① 易于 理解和解释,因为树木可以画出来被看见。

    ② 需要 很少的 数据准备。其他很多算法 通常都需要 数据规范化,需要 创建虚拟变量并删除空值 等。但 sklearn中的决策树模块 不支持对缺失值的处理

    ③ 使用 树的成本(比如说,在预测数据的时候)是用于 训练树的数据点的 数量的 对数,相比于 其他算法,这是一个 很低的成本。

    ④ 能够同时 处理数字 和 分类 数据,既可以做 回归又可以 做分类。其他技术通常专门用于分析仅具有 一种变量类型的 数据集。

    ⑤ 能够处理 多输出问题,即含有 多个标签的问题(注意与一个标签中含有多种标签分类的问题区别开)

    ⑥ 是一个 白盒模型,结果很容易 能够被解释。如果 在模型中可以观察 到给定的情况,则可以通过布尔逻辑 轻松解释 条件。相反,在 黑盒模型中(例如,在人工神经网络中),结果可能更难以解释。

    ⑦ 可以 使用统计测试验证 模型,这让 我们可以 考虑模型的 可靠性。即使 其假设 在某种程度上 违反了生成数据的 真实模型,也能够表现良好。

2. 缺点

    ① 决策树学习者 可能创建 过于复杂的树,这些 树不能很好地 推广数据。这称为过度拟合。修剪,设置叶节点所需的最小样本数或设置树的最大深度等机制是 避免此问题所必需的。

    ② 决策树 可能不稳定,数据中 微小的变化 可能导致 生成完全 不同的树,这个问题需要通过 集成算法来解 决。

    ③ 决策树的 学习是 基于贪婪算法,它靠 优化局部最优(每个节点的最优)来 试图达到整体的最优,但这种 做法 不能保证返回 全局最优决策树。这个问题 也可以 由集成算法 来解决,在随机森林中,特征和样本会 在分枝过程中 被随机采样。

    ④ 有些概念 很难学习,因为决策树 不容易表达它们,例如 XOR,奇偶校验 或多路复用器问题。

    ⑤ 如果标签中的 某些类占 主导地位,决策树学习者 会创建偏向 主导类的树。因此,建议在 拟合决策树 之前 平衡数据集

相关推荐

  1. 机器学习-决策

    2024-07-12 08:18:04       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 08:18:04       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 08:18:04       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 08:18:04       57 阅读
  4. Python语言-面向对象

    2024-07-12 08:18:04       68 阅读

热门阅读

  1. Android上如何使用perfetto分析systrace

    2024-07-12 08:18:04       28 阅读
  2. Git温习

    2024-07-12 08:18:04       29 阅读
  3. 深入了解WebKit:简介及工作流程详解

    2024-07-12 08:18:04       29 阅读
  4. 学习看论文入门记录

    2024-07-12 08:18:04       121 阅读
  5. DP学习——建造者模式

    2024-07-12 08:18:04       25 阅读
  6. 基于深度学习的视频修复

    2024-07-12 08:18:04       25 阅读
  7. element如何实现自定义表头?

    2024-07-12 08:18:04       22 阅读
  8. 测试驱动开发的艺术:Xcode中实现TDD的全面指南

    2024-07-12 08:18:04       24 阅读
  9. 构建Memcached帝国:分布式部署策略与实践指南

    2024-07-12 08:18:04       27 阅读
  10. 数据库中的数据视图(View):深入理解与应用

    2024-07-12 08:18:04       30 阅读
  11. 技术难点思考SpringBoot如何集成Jmeter开发

    2024-07-12 08:18:04       22 阅读
  12. 读取和显示一系列二维码图像中的二维码数据

    2024-07-12 08:18:04       32 阅读