从零开始用Python构造决策树(附公式、代码)
来源: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构造决策树(附公式、代码)相关推荐
- python利用公式计算_从零开始用Python构造决策树(附公式、代码)
来源:Python中文社区 作者:weapon 本文长度为700字,建议阅读5分钟 本文介绍如何不利用第三方库,仅用python自带的标准库来构造一个决策树. 起步 熵的计算: 根据计算公式: 对应的 ...
- 只需十四步:从零开始掌握 Python 机器学习(附资源)
分享一篇来自机器之心的文章.关于机器学习的起步,讲的还是很清楚的.原文链接在:只需十四步:从零开始掌握Python机器学习(附资源) Python 可以说是现在最流行的机器学习语言,而且你也能在网上找 ...
- 从零开始掌握Python机器学习(附资源)
从零开始掌握Python机器学习(附资源) 机器之心 2017-03-14 14:29 选自kdnuggets 作者:Matthew Mayo Python 可以说是现在最流行的机器学习语言,而且你也 ...
- Python——KNN实战(附详细代码与注解)
估计各位绅士都看过我之前的KNN算法博文(嘿嘿≧◔◡◔≦,假装大家都看过),应广大博客朋友们的要求,本次博主来开车讲解如何做一个KNN分类器实现将iris数据集进行分类.关于KNN的相关知识请看机器学 ...
- 单人扑克游戏:地城恶棍的Python实现(附实现代码)
基于Numpy的单人扑克游戏:地城恶棍 [!] 本项目为原创内容,若有错误之处还需批评指正 由于篇幅过长,本文全代码文件位于另一个博客中:传送门 文章目录 基于Numpy的单人扑克游戏:地城恶棍 1. ...
- 学生公寓管理系统-python+Django+Mysql(附视图代码)
一.系统开发平台............................................................................................ ...
- 原创 | 常见损失函数和评价指标总结(附公式代码)
作者:董文辉 本文长度为4500字,建议阅读10+分钟 本文为你总结常见损失函数和评价指标. 目录 一.损失函数 1.1 回归问题 1.2 分类问题 二.评价指标 2.1 回归问题 2.2 分类问题 ...
- python基础代码事例-数据科学Python基础(附示例代码和练习题目)
翻译 | AI科技大本营 参与 | 王珂凝 审校 | reason_W [AI科技大本营导读]Python的强大和灵活相信已经毋庸置疑了.那么数据科学中,我们又需要掌握哪些基础知识点才能满足使用需求呢 ...
- 外星人入侵游戏--python实战 (附完整代码)
https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 一.前提准备 ...
最新文章
- Laravel中构造方法中不能写return!!!
- 全面解析python类的绑定方法与非绑定方法(转载+自己的消化与理解)
- 通过EmbeddedServletContainerCustomizer接口调优Tomcat
- 数据结构排序系列详解之六 树形选择排序
- android系统面试问答_Android面试问答
- Django视图与模板+vs2019
- pycharm导入opencv库失败解决方法
- 怎么在html中加横条,如何在HTML中插入一行?html横线标签hr全新讲解
- 解决跨域form表单post提交时Forbidden的问题。
- python string 编解码(encode b64encode)
- 斐讯盒子T1_【YYF固件】无语音实用版刷机固件及教程分享
- windows10操作系统开启以及关闭测试模式
- 指针式万用表测量电容
- JZOJ1728. Antimonotonicity
- 波兰计算机留学,波兰(Rzeczpospolita Polska)留学申请全面解析
- U3D教程多摄像机协同运行
- android堆内存解析,heapsnap HeapSnap 是一款针对 Android 进程堆内存进行追踪、定位,以便查出泄露位置的工具 @codeKK c开源站...
- 关于QA QE QC 测试职位的区别
- 人工智能实战2019 第0次作业 焦宇恒
- 如何成为一名出色SEO从业人员