使用Python构建决策树

1、信息增益

    划分数据集的大原则是:将无序的数据变得更加有序。在划分数据集前后信息发生的变化称为信息增益,获得信息增益最高的特征就是最好的选择。集合信息的度量方式称为香农熵或者简称为熵。

    我们采用Python计算信息熵,创建名为trees.py的文件,此代码的功能是计算给定数据集的熵(D)。

from math import log
def calcShannonEnt(dataSet):  #定义计算香农熵的函数
	numEntries = len(dataSet) #计算数据集实例的总数
	labelCounts = {}  #创建一个字典,它的键值为最后一列的数值,即可能的分类
	for featVec in dataSet:
		currentLabel = featVec[-1]  #获取分类
		if currentLabel not in labelCounts.keys():
			labelCounts[currentLabel] = 0
		labelCounts[currentLabel] +=1  #将分类添加至values中并计算每个分类的个数
	shannonEnt = 0.0
	for key in labelCounts:   #计算香农熵
		prob = float(labelCounts[key])/numEntries
		shannonEnt -=prob * log(prob,2)
	return shannonEnt

以上程序的第一步①引入log函数用于计算

第二步定义计算熵的函数calcShannonEnt,其可对list数据集进行自动计算。

第三步我们首先计算实例总数D,通过len(dataSet)可以获取,注意len()函数能用于list而不能用于数组

第四步我们统计分类数k和每个分类的实例个数Ck,通过建立字典labelCounts,存储类别(key)和数目(values)。我们取最后一列的数据为label,通过for循环获取每一个list子集的类别数,然后通过dictionary[keys]来存储数目,如有此类别则加1,如没有则建立此类别,默认value为0.

第五步我们计算ShannonEnt。首先定义ShannonEnt为0,然后对每一个分类数计算熵,再相加得到最终的熵。



你可能感兴趣的:(使用Python构建决策树)