3_1决策树(Decision_Tree_ID3)——calcShannonEnt_3_1

来源:互联网 发布:淘宝erp系统 编辑:程序博客网 时间:2024/06/04 19:17

声明:《机器学习实战》代码详细注释和重构,以及相关的函数、模块和算法的解释;本文为博主原创文章,未经博主允许不得转载。

  1. 计算给定数据集的香农熵(程序清单3-1)
    *#代码:Peter Gong_shuai
    *#中文注释:Gong_shuai
    *#代码重构:Gong_shuai
    *#函数注解:Gong_shuai
    *#相关的函数、模块和算法的解释:Gong_shuai
    *#环境:Python2.7、Sublime Text3、mac

  2. 代码

#coding=utf-8#计算给定数据集的香农熵(程序清单3-1)#源代码:Peter  Gong_shuai#中文注释:Gong_shuai#代码重构:Gong_shuai#函数注解:Gong_shuai#环境:python2.7from numpy import *import operatorfrom os import listdirfrom math import logdef createDataSet():    #简单鉴定数据集    dataSet = [[1, 1, 'yes'],               [1, 1, 'yes'],               [1, 0, 'no'],               [0, 1, 'no'],               [0, 1, 'no']]    labels = ['no surfacing','flippers']    #change to discrete values    return dataSet, labelsdef calcShannonEnt(dataSet):    #计算给定数据集的香农熵    numEntries = len(dataSet)    #计算数据集中的实例总数    labelCounts = {}  #创建数据字典,其键值是最后一列的数值    for featVec in dataSet: #the the number of unique elements and their occurance。          currentLabel = featVec[-1]        if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0    #如果当前键值不存在,则扩展字典并将当前键值加入字典,        labelCounts[currentLabel] += 1                                              #每一个键值都记录了当前类别的次数    #使用所有类标签发生的频率计算类别出现的概率,计算香农熵    shannonEnt = 0.0    for key in labelCounts:        prob = float(labelCounts[key])/numEntries        shannonEnt -= prob * log(prob,2) #log base 2    return shannonEnt# reload(trees)myDat,labels = createDataSet()print(myDat)print(calcShannonEnt(myDat))
  1. 运行结果
[[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, 'no']]0.970950594455[Finished in 0.3s]
0 0
原创粉丝点击