from math import log
import operator
def createDataSet():
dataSet = [[1, 1, 'yes'],
[1, 1, 'yes'],
[1, 0, 'no'],
[0, 1, 'no'],
[0, 1, 'no']] #创建数据集
labels = ['no surfacing','flippers'] #分类属性
return dataSet, labels
def calcShannonEnt(dataSet):
numEntries = len(dataSet) #求样本矩阵的长度
labelCounts = {}
for featVec in dataSet: #遍历dataSet中的每一行
currentLabel = featVec[-1] #每行中最后一个数表示数据的类标签
if currentLabel not in labelCounts.keys():
labelCounts[currentLabel] = 0 #如果标签数据中没有该标签,则添加该标签
labelCounts[currentLabel] += 1 #如果有,则标签数加1
shannonEnt = 0.0
for key in labelCounts: #遍历标签数组
prob = float(labelCounts[key])/numEntries #标签数除以样本矩阵的长度,即概率
shannonEnt -= prob * log(prob,2) #以2为底求对数
return shannonEnt
‘’‘
计算所有属性值得信息增益,并计算最佳划分方法
传入的参数,dataSet是样本矩阵,axis是第axis的位置,value是该位置的值
例:tree.splitDataSet(dataSet,1,1):求dataSet中第2个位置是1的数组
’‘’
def splitDataSet