分类决策树
在学习分类决策树之前,我们先换个角度来观察我们的世界,我们原本的世界一切都是有自己的固定含义的,对吧,树就是树,花就是花。现在我们将所有的这些概念都扔掉!没错,就是扔掉。将一切的东西开始分解,分解成一个个特征。就像氧气,它的组成是O2,于是它的特征就是O(O原子)和2(2个)。在不知道这两个特征之前,关于氧气的一切都是混乱的,不确定的,也就是熵是最大的,当我们知道了氧气是由氧原子组成,这是关于氧气的概念的熵开始减小,当我们知道是由两个氧原子组成的时候,氧气的概念的熵为0,也就是稳定。于是氧气的概念得以确定,就是O2。用这个方法来看待我们存在的世界,一切的开始都是由熵组成,都是具有不确定性的,当一定的特征聚集在一起的时候,熵也就开始减小,于是也就得出了准确的具有确定性的信息(个人的理解,希望可以帮助到大家)
相关概念知识:
-
信息熵:
假设在一个随机变量X之中,X的每个特征值Vi对应一个概率Pi,于是随机变量X 的信息熵计算公式如下
-
条件熵:
随机变量X给定条件下随机变量Y的条件熵表示为H(Y|X),表示在已知随机变量X的情况下随机变量Y的不确定性,公式如下(X发生的情况下Y发生的概率的熵–个人理解):
案例:
我们以案例驱动的方式来解释决策树是如何构建出来的,其过程分为两步,特征选择以及决策树的生成。
首先我们给定一张数据表,数据表中记录的是一些贷款信息,如下图所示:
我们的任务就是构建一颗决策树来进行判断是否同意某个人的贷款申请。
我们用随机变量来表示类别(0表示否,1表示是), 表示年龄(0表示青年,1表示中年,2表示老年),是否有工作(0表示否,1表示是),表示是否有房子(0表示否,1表示是),表示信贷情况(0表示一般,1表示好,2表示非常好)后面代码表示与这里一致
根节点包含的样本:所有样本
根节点信息熵:
根节点各个特征的条件熵:
计算信息增益:
因此可以确定,当分支特征为R(即是否有房子)时带来的信息增益最大,因此根节点的分支特征选择为是否有房子,分为左右两支,左子节点中的数据集为没有房子的样本,右子节点的数据集为有房子,之后以此类推便构建出了决策树模型。
(案例来源链接:https://blog.csdn.net/yy2050645/article/details/81212681)
代码实战!!!
加载数据
from math import log
def creatDataSet():
# 数据集
dataSet=[[0, 0, 0, 0, 'no'],
[0, 0, 0, 1, 'no'],
[0, 1, 0, 1, 'yes'],
[0, 1, 1, 0, 'yes'],
[0, 0, 0, 0, 'no'],
[1, 0<