来源:Python中文社区

作者:weapon

本文长度为700字,建议阅读5分钟

本文介绍如何不利用第三方库,仅用python自带的标准库来构造一个决策树。

起步

熵的计算:

根据计算公式:

对应的 python 代码:

条件熵的计算:

根据计算方法:

对应的 python 代码:

其中参数 future_list 是某一特征向量组成的列表,result_list 是 label 列表。

信息增益:

根据信息增益的计算方法:

对应的python代码:

定义决策树的节点

作为树的节点,要有左子树和右子树是必不可少的,除此之外还需要其他信息:

树的节点会有两种状态,叶子节点中 results 属性将保持当前的分类结果。非叶子节点中, col 保存着该节点计算的特征索引,根据这个索引来创建左右子树。

has_calc_index 属性表示在到达此节点时,已经计算过的特征索引。特征索引的数据集上表现是列的形式,如数据集(不包含结果集):

有三条数据,三个特征,那么第一个特征对应了第一列 [1, 0, 0] ,它的索引是 0 。

递归的停止条件


本章将构造出完整的决策树,所以递归的停止条件是所有待分析的训练集都属于同一类:

从训练集中筛选最佳的特征:

因此计算节点就是调用 best_index = choose_best_future(node.data_set, node.labels, node.has_calc_index) 来获取最佳的信息增益的特征索引。

构造决策树

决策树中需要一个属性来指向树的根节点,以及特征数量。不需要保存训练集和结果集,因为这部分信息是保存在树的节点中的。

创建决策树:

这里需要递归来创建决策树:

根据信息增益的特征索引将训练集再划分为左右两个子树。

训练函数

也就是要有一个 fit 函数:

清理训练集

训练后,树节点中数据集和结果集等就没必要的,该模型只要 col 和 result 就可以了:

预测函数

提供一个预测函数:

测试

数据集使用前面《应用篇》中的向量化的训练集:

编辑:黄继彦

校对:朱江华峰

为保证发文质量、树立口碑,数据派现设立“错别字基金”,鼓励读者积极纠错

若您在阅读文章过程中发现任何错误,请在文末留言,或到后台反馈,经小编确认后,数据派将向检举读者发8.8元红包

同一位读者指出同一篇文章多处错误,奖金不变。不同读者指出同一处错误,奖励第一位读者。

感谢一直以来您的关注和支持,希望您能够监督数据派产出更加高质的内容。

从零开始用Python构造决策树(附公式、代码)相关推荐

  1. python利用公式计算_从零开始用Python构造决策树(附公式、代码)

    来源:Python中文社区 作者:weapon 本文长度为700字,建议阅读5分钟 本文介绍如何不利用第三方库,仅用python自带的标准库来构造一个决策树. 起步 熵的计算: 根据计算公式: 对应的 ...

  2. 只需十四步:从零开始掌握 Python 机器学习(附资源)

    分享一篇来自机器之心的文章.关于机器学习的起步,讲的还是很清楚的.原文链接在:只需十四步:从零开始掌握Python机器学习(附资源) Python 可以说是现在最流行的机器学习语言,而且你也能在网上找 ...

  3. 从零开始掌握Python机器学习(附资源)

    从零开始掌握Python机器学习(附资源) 机器之心 2017-03-14 14:29 选自kdnuggets 作者:Matthew Mayo Python 可以说是现在最流行的机器学习语言,而且你也 ...

  4. Python——KNN实战(附详细代码与注解)

    估计各位绅士都看过我之前的KNN算法博文(嘿嘿≧◔◡◔≦,假装大家都看过),应广大博客朋友们的要求,本次博主来开车讲解如何做一个KNN分类器实现将iris数据集进行分类.关于KNN的相关知识请看机器学 ...

  5. 单人扑克游戏:地城恶棍的Python实现(附实现代码)

    基于Numpy的单人扑克游戏:地城恶棍 [!] 本项目为原创内容,若有错误之处还需批评指正 由于篇幅过长,本文全代码文件位于另一个博客中:传送门 文章目录 基于Numpy的单人扑克游戏:地城恶棍 1. ...

  6. 学生公寓管理系统-python+Django+Mysql(附视图代码)

    一.系统开发平台............................................................................................ ...

  7. 原创 | 常见损失函数和评价指标总结(附公式代码)

    作者:董文辉 本文长度为4500字,建议阅读10+分钟 本文为你总结常见损失函数和评价指标. 目录 一.损失函数 1.1 回归问题 1.2 分类问题 二.评价指标 2.1 回归问题 2.2 分类问题 ...

  8. python基础代码事例-数据科学Python基础(附示例代码和练习题目)

    翻译 | AI科技大本营 参与 | 王珂凝 审校 | reason_W [AI科技大本营导读]Python的强大和灵活相信已经毋庸置疑了.那么数据科学中,我们又需要掌握哪些基础知识点才能满足使用需求呢 ...

  9. 外星人入侵游戏--python实战 (附完整代码)

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 一.前提准备 ...

最新文章

  1. Laravel中构造方法中不能写return!!!
  2. 全面解析python类的绑定方法与非绑定方法(转载+自己的消化与理解)
  3. 通过EmbeddedServletContainerCustomizer接口调优Tomcat
  4. 数据结构排序系列详解之六 树形选择排序
  5. android系统面试问答_Android面试问答
  6. Django视图与模板+vs2019
  7. pycharm导入opencv库失败解决方法
  8. 怎么在html中加横条,如何在HTML中插入一行?html横线标签hr全新讲解
  9. 解决跨域form表单post提交时Forbidden的问题。
  10. python string 编解码(encode b64encode)
  11. 斐讯盒子T1_【YYF固件】无语音实用版刷机固件及教程分享
  12. windows10操作系统开启以及关闭测试模式
  13. 指针式万用表测量电容
  14. JZOJ1728. Antimonotonicity
  15. 波兰计算机留学,波兰(Rzeczpospolita Polska)留学申请全面解析
  16. U3D教程多摄像机协同运行
  17. android堆内存解析,heapsnap HeapSnap 是一款针对 Android 进程堆内存进行追踪、定位,以便查出泄露位置的工具 @codeKK c开源站...
  18. 关于QA QE QC 测试职位的区别
  19. 人工智能实战2019 第0次作业 焦宇恒
  20. 如何成为一名出色SEO从业人员

热门文章

  1. 数字货币普涨 比特币现金算力暴涨21.45%
  2. 全站HTTPS简单实践
  3. mysql prepare原理
  4. C# EF 基础操作
  5. Android Studio编译卡死
  6. Visual Studio2015如何连接到windows azure(国内版本)
  7. 第一次亲密接触vim编辑器
  8. IronRuby - 如何在VS2010下调试IronRuby代码
  9. Petshop3.0学习笔记(二)Global.asax文档分析
  10. yolo-mask的损失函数l包含三部分_损失函数总结-应用和trick