用Python从零开始构造决策树

專 欄

作者:weapon,不会写程序的浴室麦霸不是好的神经科医生

起步

本章介绍如何不利用第三方库,仅用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 就可以了:

预测函数

提供一个预测函数:

测试

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

原文发布于微信公众号 - Python中文社区(python-china)

原文发表时间:2017-12-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏超智能体

YJango:TensorFlow高层API Custom Estimator建立CNN+RNN的演示

该文是YJango:TensorFlow中层API Datasets+TFRecord的数据导入的后续。

1.4K7
来自专栏贾志刚-OpenCV学堂

OpenCV中KMeans算法介绍与应用

一:KMeans算法介绍 ? KMeans算法MacQueen在1967年提出的,是最简单与最常见数据分类方法之一并且最为一种常见数据分析技术在机器学习、数据挖...

40210
来自专栏PaddlePaddle

【排序学习】基于Pairwise和Listwise的排序学习

导语 PaddlePaddle提供了丰富的运算单元,帮助大家以模块化的方式构建起千变万化的深度学习模型来解决不同的应用问题。这里,我们针对常见的机器学习任务,提...

2.8K8
来自专栏LhWorld哥陪你聊算法

【TensorFlow篇】--Tensorflow框架可视化之Tensorboard

TensorBoard是tensorFlow中的可视化界面,可以清楚的看到数据的流向以及各种参数的变化,本文基于一个案例讲解TensorBoard的用法。

1442
来自专栏Python中文社区

Python用Pillow(PIL)进行简单的图像操作

專 欄 ❈ sunhaiyu,Python中文社区专栏作者 专栏地址: http://www.jianshu.com/u/4943cb2c6ea4 ❈ Pyt...

39510
来自专栏人工智能头条

Keras/Python深度学习中的网格搜索超参数调优(上)

7466
来自专栏Deep Learning 笔记

图像识别(二) cifar10_input.py详解

tf.variable_scope和tf.name_scope的用法:https://blog.csdn.net/uestc_c2_403/article/de...

5746
来自专栏编程

新知识 用Python从零开始构造决策树

起步 本章介绍如何不利用第三方库,仅用python自带的标准库来构造一个决策树。 熵的计算公式: ? 对应的python代码: ? 条件熵的计算 根据计算方法:...

3608
来自专栏IT派

教程 | 如何使用纯NumPy代码从头实现简单的卷积神经网络

在某些情况下,使用 ML/DL 库中已经存在的模型可能会很便捷。但为了更好地控制和理解模型,你应该自己去实现它们。本文展示了如何仅使用 NumPy 库来实现 C...

1442
来自专栏磐创AI技术团队的专栏

十 | 门控循环神经网络LSTM与GRU(附python演练)

门控循环神经网络在简单循环神经网络的基础上对网络的结构做了调整,加入了门控机制,用来控制神经网络中信息的传递。门控机制可以用来控制记忆单元中的信息有多少需要保留...

1081

扫码关注云+社区

领取腾讯云代金券