感觉不太好理解,所以把决策树的创建分了三个部分,这是第二个部分,后一篇会写具体绘制树形图
from math import log
import operator
"""计算香农熵"""
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
shannonEnt = 0.0
for key in labelCounts: # 遍历每种可能标签
prob = float(labelCounts[key]) / numEntries # 每种的概率
shannonEnt -= prob * log(prob, 2) # 香农熵计算公式
return shannonEnt
"""去掉某特征对应的数据列"""
def splitDataSet(dataSet, axis, value): # 参数为全部数据,想要操作的列,想要删除的值(将所有数据中中,取该列为这个值得行,并且去掉该列)
retDataSet = []
for featVec in dataSet: # 遍历每一行
i