Python高级--决策树

3)分裂属性
构造决策树的关键步骤是分裂属性 。所谓分裂属性就是在某个节点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂子集尽可能地“纯” 。尽可能“纯”就是尽量让一个分裂子集中待分类项属于同一类别 。分裂属性分为三种不同的情况:
1、属性是离散值且不要求生成二叉决策树 。此时用属性的每一个划分作为一个分支 。2、属性是离散值且要求生成二叉决策树 。此时使用属性划分的一个子集进行测试,按照“属于此子集”和“不属于此子集”分成两个分支 。3、属性是连续值 。此时确定一个值作为分裂点split_point,按照>split_point和<=split_point生成两个分支 。
构造决策树的关键性内容是进行属性选择度量,属性选择度量是一种选择分裂准则,它决定了拓扑结构及分裂点的选择 。
属性选择度量算法有很多,一般使用自顶向下递归分治法,并采用不回溯的贪心策略 。这里介绍常用的ID3算法 。
4) ID3算法
划分数据集的大原则是:将无序的数据变得更加有序 。
我们可以使用多种方法划分数据集,但是每种方法都有各自的优缺点 。组织杂乱无章数据的一种方法就是使用信息论度量信息,信息论是量化处理信息的分支科学 。我们可以在划分数据之前使用信息论量化度量信息的内容 。
在划分数据集之前之后信息发生的变化称为信息增益,知道如何计算信息增益,我们就可以计算每个特征值划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择 。
在可以评测哪种数据划分方式是最好的数据划分之前,我们必须学习如何计算信息增益 。集合信息的度量方式称为香农熵或者简称为熵,这个名字来源于信息论之父克劳德?香农 。
5)熵
熵定义为信息的期望值,在明晰这个概念之前,我们必须知道信息的定义 。如果待分类的事务可能划分在多个分类之中,则符号x的信息定义为:
其中p(x)是选择该分类的概率
为了计算熵,我们需要计算所有类别所有可能值包含的信息期望值,通过下面的公式得到:
其中n是分类的数目 。
6)决策树中的信息增益
在决策树当中,设D为用类别对训练元组进行的划分,则D的熵()表示为
其中pi表示第i个类别在整个训练元组中出现的概率,可以用属于此类别元素的数量除以训练元组元素总数量作为估计 。熵的实际意义表示是D中元组的类标号所需要的平均信息量 。
现在我们假设将训练元组D按属性A进行划分,则A对D划分的期望信息为:
而信息增益即为两者的差值:
ID3算法就是在每次需要分裂时,计算每个属性的增益率,然后选择增益率最大的属性进行分裂 。
三、信息熵的简单计算
情况说明,但某人爬山爬了一半的时候发生了一下几种情况:
我们来简单计算一下 这三种情况的信息熵
情况一:
-(0.5*math.log2(0.5)+0.5*math.log2(0.5)) 1
这样的熵值为1,说明情况最不稳定
情况二:
-(1*math.log2(1))1
这样的熵值为0,说明情况最稳定的情况
情况三:
-(0.999*math.log2(0.999)+0.001*math.log2(0.001))0.011407757737461138
这样的熵值,我们基本可以认为登山者是要下山了 。
四、信息增益的简单计算 1)基于ID3算法
ID3算法就是在每次需要分裂时,计算每个属性的增益率,然后选择增益率最大的属性进行分裂