从零开始用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 就可以了:

预测函数

提供一个预测函数:

测试

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

原文发布时间为:2017-12-18

本文作者:weapon

时间: 2024-07-29 08:46:27

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

【年终分享】彩票数据预测算法(一):离散型马尔可夫链模型实现【附C#代码】

原文:[年终分享]彩票数据预测算法(一):离散型马尔可夫链模型实现[附C#代码] 前言:彩票是一个坑,千万不要往里面跳.任何预测彩票的方法都不可能100%,都只能说比你盲目去买要多那么一些机会而已. 已经3个月没写博客了,因为业余时间一直在研究彩票,发现还是有很多乐趣,偶尔买买,娱乐一下.本文的目的是向大家分享一个经典的数学预测算法的思路以及代码.对于这个马尔可夫链模型,我本人以前也只是听说过,研究不深,如有错误,还请赐教,互相学习. 1.马尔可夫链预测模型介绍[1] 马尔可夫链是一个能够用数学

Python模拟百度登录实例代码

本来写这个玩意儿是想用来自动登录百度,然后根据贴吧内的的排名抓取会员头像的,比如生成一个贴吧千人头像图或万人头像图.也算是练练手.完成后才发现抓那个贴吧排名完全不需要登录-也好,以后用来做自动一键签到(经常忘打卡),抢二楼什么的,也不错~~如今在博客上发个文章用不了多长时间就被抄走了,感觉自己能做的也只有在此鄙视一下它们.废话太多,容易招人恨,以下是代码: #-*- coding:gbk -*- # # 模拟百度登录 for Python2.7 # 其中显示验证码部分 需要使用PIL库 # 需要

Python实现高效求解素数代码实例

  这篇文章主要介绍了Python实现高效求解素数代码实例,本文直接给出代码实例,需要的朋友可以参考下 素数是编程中经常需要用到的. 作为学习Python的示例,下面是一个高效求解一个范围内的素数的程序,不需要使用除法或者求模运算. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #coding:utf-8 #设置python文件的编码为utf-8,这样就可以写入中文注释

Linux下用Python脚本监控目录变化代码分享

  这篇文章主要介绍了Linux下用Python脚本监控目录变化代码分享,本文直接给出实现代码,需要的朋友可以参考下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #!/usr/bin/env python #coding=utf-8   import os from pyinotify import WatchManager, Notifier, ProcessEven

python代码-新人求教,关于Python运用simpleguitk写打砖块游戏代码

问题描述 新人求教,关于Python运用simpleguitk写打砖块游戏代码 小弟刚学Python想自己编写一个,如何编写砖块代码和小球碰撞砖块的代码,不胜感激 解决方案 Python+pyGame 打砖块游戏 解决方案二: 你是刚学python就要编一个游戏程序了吗? 还是为了编这个游戏得用到python呢?

攻击场景还原:本地ROOT Moto G4 & G5设备(附利用代码)

本文讲的是攻击场景还原:本地ROOT Moto G4 & G5设备(附利用代码),在之前的文章中,我们曾提到CVE-2016-10277可能会影响其他摩托罗拉设备.而在Twitter上收到一些相关的报告之后,我们购买了摩托罗拉的几台设备,并且更新到最新的可用版本以进行此次的测试. Moto G4 athene XT1622,运行的系统:NPJS25.93-14.4,bootloader moto-msm8952-B1.05. Moto G5 cedric XT1676,运行的系统:NPP25.1

python简单读写文件问题代码纠错

问题描述 python简单读写文件问题代码纠错 def write(self,fname): import os ls = os.linesep while True: if os.path.exists(fname): print "ERROR:'%s'already exists"%fname break else: break all=[] print"nEnter lines('.'by itself to quit).n" while True: entr

python解析xml模块封装代码_python

有如下的xml文件: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8" ?>  <root>  <childs>  <child name='first' >1</child>  <child value="2">2</child>  </childs>  </root> 下面介绍python解

如何通过js实现图片预览功能【附实例代码】_javascript技巧

实现代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Co