文章目录

  • 1. 训练与可视化
  • 2. 分类预测
  • 3. 模型参数
  • 4. 回归
  • 5. 不稳定性

本文为《机器学习实战:基于Scikit-Learn和TensorFlow》的读书笔记。
中文翻译参考

《统计学习方法》决策树笔记

决策树可以分类,也可以回归,还有多输出任务
是随机森林的基础组成部分

1. 训练与可视化

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
iris = load_iris()
X = iris.data[:, 2:] # petal length and width
y = iris.target
tree_clf = DecisionTreeClassifier(max_depth=2)
tree_clf.fit(X, y)
from sklearn.tree import export_graphviz
export_graphviz(tree_clf,out_file="iris_tree.dot",feature_names=iris.feature_names[2:],class_names=iris.target_names,rounded=True,filled=True)

安装好Graphviz,在cmd下输入 dot -Tpng iris_tree.dot -o iris_tree.png # cmd,生成决策树可视化图片

2. 分类预测

决策树特性:不需要太多的数据预处理,尤其是不需特征缩放或归一化

tree_clf.predict_proba([[5,1.5]])
# array([[0.        , 0.90740741, 0.09259259]])
tree_clf.predict([[5,1.5]])
# array([1])
  • 预测时间复杂度:O(log⁡2m)O(\log_2m)O(log2​m),与特征数量无关,m为样本数
  • 训练时间复杂度:O(nmlog⁡m)O(nm\log m)O(nmlogm) ,n 为特征数量max_features

通常,算法使用 Gini 不纯度来进行检测,也可以设置为entropy

  • 基尼指数计算稍微快一点,SKlearn默认值
  • 基尼指数会趋于在树的分支中将最多的类隔离出来
  • 熵指数趋向于产生略微平衡一些的决策树模型

3. 模型参数

决策树不需要事先设置参数,不添加约束的决策树模型,能很好的拟合数据,容易过拟合

  • min_samples_split(节点在被分裂之前必须具有的最小样本数)
  • min_samples_leaf(叶节点必须具有的最小样本数)
  • min_weight_fraction_leaf(和min_samples_leaf相同,但表示为加权总数的一小部分实例)
  • max_leaf_nodes(叶节点的最大数量)
  • max_features(在每个节点被评估是否分裂的时候,具有的最大特征数量)
  • 增加min_* hyperparameters或者减少max_* hyperparameters会使模型正则化。

使用假设检验进行剪枝


上图左侧没有剪枝,模型过拟合了

4. 回归



同样需要设置合理的参数,左侧过拟合了

5. 不稳定性

  • 决策树 对旋转很敏感,可以使用 PCA 主成分分析,缓解

  • 决策树 对训练数据的微小变化非常敏感,随机森林可以通过多棵树的平均预测值限制这种不稳定性

[Hands On ML] 6. 决策树相关推荐

  1. 【ML】决策树(Decision tree)原理 + 实践 (基于sklearn)

    [ML]决策树(Decision tree)原理 + 实践 (基于sklearn) 原理介绍 简要介绍 原理 得分函数(信息熵) 实战 数据集 数据处理 训练 预测+评估 绘制决策树 原理介绍 简要介 ...

  2. ML《决策树(三)CART》

    上一篇我们学习的ID3和C4.5算法,今天我们来看看CART(classification and regression tree)算法. 从名字上也能看出来,它是分类和回归树. 本文参考以及采用了很 ...

  3. ML《决策树(二)C4.5》

    上一篇我们学习的ID3算法呢,有一些缺点. 1:它只能处理离散值. 2:容易过拟合,因为我们拿到了样本,总是希望最后得到的样本是非常纯的,所以我那个我那个造成了过拟合,训练样本拟合很好,泛化能力降低. ...

  4. ML《决策树(一)ID3》

    今天做个回顾和记录,简单做个学习,也是梳理下知识点,决策树的学习. 本文的学习,自己不想画图,因为觉得没有必要自己画图,所以文中一部分图片是截取其他人的分享,但是内容都会是自己写的. 当然了,这里是浅 ...

  5. 【ML】决策树--剪枝处理(预剪枝、后剪枝)

    1. 剪枝(pruning)处理 首先,我们先说一下剪枝的目的--防止"过拟合". 在决策树的学习过程中,为了保证正确性,会不断的进行划分,这样可能会导致对于训练样本能够达到一个很 ...

  6. 基于逻辑回归/决策树/随机森林/多层感知分类器/xgboost/朴素贝叶斯分类的资讯多分类性能对比

    在上一篇(https://blog.csdn.net/baymax_007/article/details/82748544)中,利用逻辑回归实现资讯多分类.本文在之前基础上,又引入决策树.随机森林. ...

  7. 写给人类的机器学习 2.3 监督学习 III

    2.3 监督学习 III 原文:Machine Learning for Humans, Part 2.3: Supervised Learning III 作者:Vishal Maini 译者:飞龙 ...

  8. Opencv学习笔记 - OpenCV 4机器学习算法简介

    在机器学习中,一些比较流行方法的包括:支持向量机(SVM).人工神经网络(ANN).聚类.k-最近邻.决策树和深度学习.OpenCV支持并实现几乎所有这些方法,并有详细的文档说明(包含在Main mo ...

  9. Spark Machine Learning(SparkML):机器学习(部分二)

    目录 6.分类和回归 6.1分类(Classification) 逻辑回归(LR) 决策树分类器(DTC) 随机森林分类器(RFC) 梯度提升树分类器(GBTC) 多层感知器分类器(MLPC) 线性支 ...

最新文章

  1. ffmpeg连接超时与解码超时
  2. XNA 游戏 运行时编辑器
  3. android软件开发基础课程(一)
  4. CodeForces - 1537E2 Erase and Extend (Hard Version)(扩展KMP-比较两个前缀无限循环后的字典序大小)
  5. mysql isnull
  6. ThinkPHP6项目基操(14.实战部分 中间件处理登录流程)
  7. 【java】java 关键字: final详解
  8. Go语言学习Day05
  9. 对vue饿了么项目重构之后的一些理解
  10. 再见,2016,你好,2017
  11. 潘多拉 搭建 php服务器,OpenWrt/LEDE/潘多拉固件4G网卡上网之【HiLink模式上网教程】...
  12. poj 2387 最短路 spfa 实现
  13. Ubuntu安装Google Chrome浏览器
  14. php中可以给class添加click,jQuery addClass()方法添加class
  15. 计算机x线平扫对人健康有影响吗,X线检查-医学影像频道-家庭医生在线 第16页...
  16. 剑指offer中使用辅助栈方法的题目的整理(待更)
  17. 微信小程序-百度AI语音识别——(一)
  18. 非匿名方式访问远程的com+
  19. 计算机科学技术考研内容,计算机科学与技术考研考哪些科目?
  20. 关于斐讯K2路由器 j.s9w.cc 劫持的问题。

热门文章

  1. float数据在计算机内存中的存储方法
  2. docker二进制安装mysql_Docker搭建MySQL读写分离主从模式 分布式数据库中间件Mycat分库分表应用...
  3. 火狐浏览器中打开java_将Firefox浏览器嵌入Java Swing中
  4. 字符串处理问题[2]:将一个数字型…
  5. Centos7:mysql5.6安装,配置及使用(RPM方式)
  6. 约瑟夫斯问题-java版数组解法和链表解法
  7. iOS 5.1.1 设备不能安装AdHoc问题版本号
  8. BP神经网络算法学习
  9. 【dll 返回字符串 】2
  10. NHibernate 异常及解决办法(长期添加中)