1、香农熵
https://www.cnblogs.com/muchen/p/6141978.html
这是决策树的一些详细讲解,带代码。
计算香农熵的代码
# ==============================================
# 输入:
# dataSet: 数据集文件名(含路径)
# 输出:
# shannonEnt: 输入数据集的香农熵
# ==============================================
import math
def calcShannonEnt(dataSet):
'计算香农熵'
# 数据集个数
numEntries = len(dataSet)
# 标签集合
labelCounts = {}
for featVec in dataSet: # 行遍历数据集
# 当前标签
currentLabel = featVec[-1]
# 加入标签集合,将属于yes的归为一类,将属于no的归为一类。
# 所以字典中有两个key,一个yes,一个no
if currentLabel not in labelCounts.keys():
#这个方式直接添加yes到字典中,设yes的vaule值为0.
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1
print(labelCounts)
# 计算当前数据集的香农熵并返回
shannonEnt = 0.0
for key in labelCounts:
prob = float(labelCounts[key]) / numEntries
shannonEnt -= prob * math.log(prob, 2)
return shannonEnt
# ==============================================
# 输入:
# 空
# 输出:
# dataSet: 测试数据集列表
# ==============================================
def createDataSet():
'创建测试数据集'
dataSet = [[1, 1, 'yes'],
[1, 1, 'yes'],
[1, 0, 'no'],
[0, 1, 'no'],
[0, 1, 'no']]
return dataSet
def test():
'测试'
# 创建测试数据集
myDat = createDataSet()
# 求出其熵并打印
print(calcShannonEnt(myDat))
test();
运算结果,归类的值和熵的结果。