数据集须要知足必定的请求:
- 数据必须是一种有列表元素构成的列表。(二维数组)
- 所有列表元素必须有雷同长度。
- 最后一列必须是当前实例的标签。
递归构建决定计划树

多半表决算法
如不雅数据集已经处理了所有属性,然则类标签依然不是独一的,此时须要决定若何定义该叶子节点,在这种情况下,我们平日会采取多半表决决定该叶子节点。
为了计算熵,须要计算所有类别所有可能值包含的信息期望值总和,公式为:
- import operator
- def majorityCnt(classList):
- # 排序掏出种类最多的
- 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):
- # 掏出结不雅
- classList = [example[-1] for example in dataSet]
- # 如不雅结不雅里的第一个元素所代表的数据个数等于结不雅本身,解释没有其他分类了
- if classList.count(classList[0]) == len(classList):
- return classList[0]
- # 如不雅没有更多半据了,跨越一个才有分类的意义
- if len(dataSet[0]) == 1:
- # 多半表决,返回出现次数最多的
- return majorityCnt(classList)
- # 选出最合实用于切分类型的下标
- bestFeat = chooseBestFeatureToSplit(dataSet)
- # 根据下标掏出标签
- bestFeatLabel = labels[bestFeat]
- # 构建树
- myTree = {bestFeatLabel:{}}
推荐阅读
前几天我们正在运营的一款产品产生了崩溃,我花了两天测验测验用 gdb 分析了 coredump ,固然最后照样没能找到 bug ,但照样认为应当做一些总结。产品是基于 skynet 开辟的,因为汗青原因>>>详细阅读
本文标题:机器学习决策树算法学习笔记
地址:http://www.17bianji.com/lsqh/35136.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示