使用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,然后对每一个分类数计算熵,再相加得到最终的熵。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值