首页 > 代码库 > 《机器学习实战》菜鸟学习笔记(三)决策树

《机器学习实战》菜鸟学习笔记(三)决策树

老规矩,Talk is cheap, show me your code.

#-*-coding:utf-8-*-from math import logdef calcShannonEnt(datsSet):    #长度    numEntries = len(dataSet)    #字典统计    labelCounts = {}    #遍历特征    for featVec in dataSet:        #最后一维特征(分类)        currentLabel = featVec[-1]        #如果不在字典中,则添加进字典        #可以写成labelCounts[labelCount] = labelCounts.get(currentLabel,0) + 1        if currentLabel not in labelCounts.key():            labelCounts[currentLabel] = 0        labelCounts[currentLabel] += 1    #信息增益    shannonEnt = 0.0    #对于每一个分类    for key in labelCounts:        #概率,也就是这个分类出现的次数除以总共的分类数量        prob = float(labelCounts[key])/numEntries        #计算熵 概率*以二为底概率的对数        shannonEnt -= prob * log(prob,2)    return shannonEnt

这段代码很简单,可能对于最后几句话理解起来有些困难。那我们一起来分析一下。

什么是信息增益和熵呢?学过信息论的同学肯定知道,那么对于没有学过的同学呢?不要着急,我们一起来看看。

首先 信息增益和熵是一回事,就是一个事情两个名字而已。那么什么是熵呢?

熵就是信息的期望值,在信息世界,熵越高,则能传输越多的信息,熵越低,则意味着传输的信息越少。ok,那么什么是信息呢?是如何用数学语言描述呢?信息的定义就是:

-ln(p)

很简单是不,那么我们应该怎么理解呢?首先p代表某个分类出现的概率。比如,均匀色子出现6的概率为1/6,硬币正面朝上的概率为1/2。那么又为什么取对数呢?

 

《机器学习实战》菜鸟学习笔记(三)决策树