文档介绍:武汉理工大学理学院数学系课程上机实验报告
课程名称:数据挖掘
班级
信计1201
日期
成绩评定
姓名
张徐军(26)
李雪梅(35)
张晓婷(33)
实验室
数学207
老师签名
实验名称
决性都划分下,看哪个好。这里使用到了一个set来选取列表中唯一的元素。
defchooseBestFeatureToSplit(dataSet):numFeatures=len(dataSet[0])-1#因为数据集的最后一项是标签
baseEntropy=calcShannonEnt(dataSet)bestInfoGain=;bestFeature=-1
foriinrange(numFeatures):#iterateoverallthefeatures
featList=[example[i]forexampleindataSet]#createalistofalltheexamplesofthisfeature
uniqueVals=set(featList)#getasetofuniquevalues
newEntropy=
forvalueinuniqueVals:
subDataSet=splitDataSet(dataSet,i,value)prob=len(subDataSet)/float(len(dataSet))newEntropy+=prob*calcShannonEnt(subDataSet)
infoGain=baseEntropy-newEntropy#calculatetheinfogain;iereductioninentropy
if(infoGain>bestInfoGain):#comparethistothebestgainsofar
bestInfoGain=infoGain#ifbetterthancurrentbest,settobest
bestFeature=i
returnbestFeature#returnsaninteger
#因为我们递归构建决策树是根据属性的消耗进行计算的,所以可能会存在最后属性用完了,但是分类还是没有完,这是就会采用多数表决的方式计算节点分类。
defmajorityCnt(classList):
classCount={}
forvoteinclassList:
():classCount[vote]=0
classCount[vote]+=1
sortedClassCount=sorted((),key=(l),reverse=True)returnsortedClassCount[0][0]
#基于递归构建决策树。这里的label更多是对于分类特征的名字,为了更好理解。
defcreateTree(dataSet,labels):
classList=[example[-1]forexampleindataSet]
(classList[O])==len(classList):
returnclassLis