四、构造决策树
上一节讲到如何通过计算信息增益来进行特征选择。http://blog.youkuaiyun.com/xiaocong1990/article/details/54646345
那么现在将根据特征选择来构造决策树。
以下表数据为例,学习一个货款申请的决策树
def majorClass(classList):
"""
返回实例中最多的类
:param classList: 类列表
:return: 实例中最多的类
"""
classCount={}
for vote in classList:
if vote not in classCount.keys():
classCount[vote]=0
classCount[vote]+=1
sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)
return sortedClassCount[0][0]
def createTree(dataSet,labels):
"""
创建树
:param dataSet: 数据集
:param labels: 特征标签
:return: 树
"""
classList=[example[-1] for example in dataSet]
if classList.count(classList[0])==len(classList): #如果所有实例属于同一个类,返回该类
return classList[0]
if len(dataSet[0])==1: #如果没有特征可以划分,返回实例数中最多的类
return majorClass(classList)
bestFeat=chooseBestFeatureToSplit(dataSet)
bestFeatLabel=labels[bestFeat]
myTree={bestFeatLabel:{}}
del(labels[bestFeat])
featValues=set([example[bestFeat] for example in dataSet])
for value in featValues:
subLabels=labels[:]
myTree[bestFeatLabel][value]=createTree(splitDataSet(dataSet,bestFeat,value),subLabels)
return myTree
生成的决策树如下图