决策树模型算法研究与案例分析 (4)

其中多数表决方法决定叶子节点的分类实现如下:

'''多数表决方法决定叶子节点的分类:选择出现次数最多的一个结果''' def majorityCnt(classList): # -----------多数表决实现的方式一-------------- # classCount = {} # 标签字典,用于统计类别频率 # for vote in classList: # classList标签的列表集合 # if vote not in classCount.keys(): # classCount[vote] = 0 # classCount[vote] += 1 # # 取出结果(yes/no),即出现次数最多的结果 # sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) # print('sortedClassCount:', sortedClassCount) # return sortedClassCount[0][0] # -----------多数表决实现的方式二----------------- major_label = Counter(classList).most_common(1)[0] print('sortedClassCount:', major_label[0]) return major_label[0]

调用方法:

# 6创建决策树 createTree(dataset, label)

运行结果:

{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}}

结果分析:
此时,每次生成决策树数据都需要大量的计算,并且耗时,最好是每次直接调用生成结果。这里就需要使用Python模块pickle序列化对象,其存储决策树读取决策树代码实现如下:

'''使用pickle模块存储决策树''' def storeTree(inputTree, filename): import pickle # -------------- 第一种方法 -------------- fw = open(filename, 'wb') pickle.dump(inputTree, fw) fw.close() # -------------- 第二种方法 -------------- with open(filename, 'wb') as fw: pickle.dump(inputTree, fw) def grabTree(filename): import pickle fr = open(filename,'rb') return pickle.load(fr) 测试算法:使用决策树执行分类

用决策树进行鱼类属于分类实现如下:

'''用决策树分类函数''' def classify(inputTree, featLabels, testVec): firstStr = list(inputTree.keys())[0] # 获取tree的根节点对于的key值 secondDict = inputTree[firstStr] # 通过key得到根节点对应的value # 判断根节点名称获取根节点在label中的先后顺序,这样就知道输入的testVec怎么开始对照树来做分类 featIndex = featLabels.index(firstStr) for key in secondDict.keys(): if testVec[featIndex] == key: if type(secondDict[key]).__name__ == 'dict': classLabel = classify(secondDict[key], featLabels, testVec) else: classLabel = secondDict[key] print(classLabel) return classLabel

调用方法:

# 7 用决策树分类函数 myTree = treePlotter.retrieveTree(0) # print(myTree) classify(myTree,label,[1,0])

运行结果:

分类结果:no surfacing 决策树分类器实现

使用算法此步骤可以适用于任何监督学习任务,而使用决策树可以更好地理解数据的内在含义。

'''决策树判断是否是鱼''' def fishTest(): # 1.创建数据和结果标签 myDat, labels = createDataSet() # 计算label分类标签的香农熵 calcShannonEnt(myDat) # 求第0列 为 1/0的列的数据集【排除第0列】 print('1---', splitDataSet(myDat, 0, 1)) print('0---', splitDataSet(myDat, 0, 0)) # 计算最好的信息增益的列 print(chooseBestFeatureToSplit(myDat)) import copy myTree = createTree(myDat, copy.deepcopy(labels)) print(myTree) # [1, 1]表示要取的分支上的节点位置,对应的结果值 print(classify(myTree, labels, [1, 1])) # 画图可视化展现 treePlotter.createPlot(myTree)

调用决策树分类方法:

# 9 决策树判断是否是鱼 fishTest()

运行结果如下:

1--- [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no']] 0--- [[0, 1, 'no'], [0, 1, 'no']] {'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}} yes

可视化结果


决策树模型算法研究与案例分析

决策树实际应用:预测隐形眼镜的测试代码 项目概述

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyysjy.html