一般流程
1.收集数据: | 可以使用任何方法。 |
2.准备数据: | 树构造算法只适用于标称型数据,因此数值型数据必须离散化。 |
3.分析数据: | 可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期。 |
4.训练算法 | 构造树的数据结构 |
5.测试算法 | 使用经验树计算错误率 |
6.使用算法 | 此步骤可以适用于任何监督学习算法,而使用决策树可以更好地理解数据的内在含义。 |
划分数据集的大原则是:将无序的数据变得更加有序。
代码实现
from math import log
def calShannoEnt(dataSet):
numEntries=len(dataSet)
labelCounts={}
for featVec in dataSet:
currentLabel=featVec[-1]
if currentLabel not in labelCounts.keys():
labelCounts[currentLabel]=0
labelCounts[currentLabel]+=1
shannoEnt=0.0
for key in labelCounts:
prob=float(labelCounts[key])/numEntries
shannoEnt-=prob* log(prob,2)
return shannoEnt
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
import trees
dataSet,labels=trees.createDataSet()
print trees.calShannoEnt(dataSet)
dataSet[0][-1]='maybe'
print trees.calShannoEnt(dataSet)