决策树学习1--熵的计算及python实现代码

决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。

决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。

今天是第一个内容:

特征选择:

首先提出熵的概念:熵是表示随机变量不确定性的度量。

计算方法:

X:表示当前的数据集合。

x:表示当前数据集合中的第k类,也就是我们目标变量的类型。

熵越大,证明越不稳定。 

我们用信息熵来衡量一个分支的纯度,那哪个特征是最优的特征呢?在决策树学习中应用信息增益准则来选择最优特征。信息增益定义如下:

对训练集D,计算每个特征的信息增益熵,并比较大小,选择最大的特征。

信息增益熵计算的代码:

数据使用的是《统计学习方法》上的例题:

import pandas as pd
import math
from math import log

datasets = [['青年', '否', '否', '一般', '否'],
               ['青年', '否', '否', '好', '否'],
               ['青年', '是', '否', '好', '是'],
               ['青年', '是', '是', '一般', '是'],
               ['青年', '否', '否', '一般', '否'],
               ['中年', '否', '否', '一般', '否'],
               ['中年', '否', '否', '好', '否'],
               ['中年', '是', '是', '好', '是'],
               ['中年', '否', '是', '非常好', '是'],
               ['中年', '否', '是', '非常好', '是'],
               ['老年', '否', '是', '非常好', '是'],
               ['老年', '否', '是', '好', '是'],
               ['老年', '是', '否', '好', '是'],
               ['老年', '是', '否', '非常好', '是'],
               ['老年', '否', '否', '一般', '否'],
               ]
labels = [u'年龄', u'有工作', u'有自己的房子', u'信贷情况', u'类别']
t1 = pd.DataFrame(datasets, columns=labels)
#计算熵
def ent(t1):
    p = t1.columns.values[-1]
    label = set(t1.loc[:,p])
    re = -sum(len(t1[t1[p] == x]) / len(t1) * log(len(t1[t1[p] == x]) / len(t1) , 2) for x in label)
    return round(re , 3)
#计算分量熵
def ent_class(t1):
    p = t1.columns.values[-1]
    label = set(t1.loc[:,p])
    len_to = len(t1)
    col = t1.columns.values[:-1]
    re = {}
    for i in col:
        val = set(t1.loc[:,i].values)
        r = sum(len(t1[t1[i] == j]) / len_to * ent(t1[t1[i] == j]) for j in val)
        re[i] = round(r , 3)
    return re
def ent_plus(t1):
    dic = ent_class(t1)
    all = ent(t1)
    for i in dic:    
        print(i + "-info-gain- " + str(round(all - dic[i],3)))

决策树学习1--熵的计算及python实现代码_第1张图片

选择信息增益熵最大的“有自己的房子”作为第一个特征。

你可能感兴趣的:(机器学习)