机器学习实战 决策树代码 计算香农熵 Error return arrays must be of ArrayType

时间:2022-05-19 19:58:23
from math import log
import xlrd
***# from numpy import ****
import operator

def calcShannonEnt(dataSet):#calculata shannonEnt
    numEntries = len(dataSet)
    labelCounts = {}
    for featVec in dataSet:#将当前键值加入字典并记录类别出现的次数
        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#使用所有类标签的发生频率计算类别出现的概率
        tmp = prob*log(prob,2)
        shannonEnt -= tmp#得到香农熵
    return shannonEnt

代码在运行时会出现TypeError: return arrays must be of ArrayType的错误,因为log的第二个参数不是base而是out array。如果你只是想执行普通的log操作,可以选择使用numpy.math.log(1.1, 2)或者使用python自带的math模块的log函数,而不是导入numpy中所有的函数TT