决策树可以从数据集合中提取出一系列规则,从而分类样本。它的优势是理解数据蕴含信息。
思想:利用信息增益(information gain)【度量数据集信息的方式—香农熵(entropy)】计算得出最好的划分数据集的特征,用递归的方式不断找下一个最好的划分特征,直到遍历完所有的属性(特征),或剩下实例的类别都相同时。返回的是用嵌套字典表示的树结构(嵌套就是递归实现的)。
局限:ID3无法直接处理数值型数据,一般应用对象是标称型数据。
import operator
import numpy as np
'''
ID3决策树预测隐形眼镜类型
'''
#----------------------------- build the tree --------------------------
# 多数表决法, 对统计个数排序
def majorityCnt(classList):
classCount = {}
for v in classList:
classCount[v] = classCount.get(v,0)+1
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]
# 计算香农熵
def calcShannonEnt(data):
numExm = len(data)
labelCounts = {}
for featVec in data:
curLabel &#