创建一个投票表决器得到出现次数位的分类名称:
def majorityCnt(classList): #类似一个投票表决代码 得到出现次数最多的分类名称也就是键值
classCount = {}
for vote in classList:
if vote[-1] not in classCount.keys():
classCount[vote[-1]] = 0
classCount[vote[-1]] += 1
#上面代码是计算出得到classList中每个键值出现的次数
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) #进行字典排序
return sortedClassCount[0][0] #返回出现最多的分类名称 注意这里输出最大值的结果是按照ASCII吗排序靠前的就先输出了。 即使有两个出现次数一样多的也是按照谁排在前面就输出他
工作原理:得到原始数据集,然后基于最好的属性值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。在第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个节点上,我们可以再次划分数据。因此可以采用递归构建决策树。 递归构建决策树: 递归结束的条件:程序遍历完所有划分数据集的属性,或者每个分支下的所有实例都具有相同的分支。 代码中的结束递归条件:
- 所有标签类型相同,则直接返回该类标签。
- 使用完了所有的特征值,仍然不能将数据集划分成仅包含唯一类别的分组。
这里递归调用的函数许多是在上面文章中使用过的,因此如果有在该文章中没有的则请翻看之前的文章,谢谢! 通过递归创建决策树:
1 | #创建树的函数代码 |
使用以及结果:
1 | import trees |
自己画的图:对应上面的结果(每个键值都是一个结点对应的值都是判断是数据): 以上就是决策树构建的全部过程,注意的是这里得到决策树是字典类型,接下来的博文会通过使用matplotlib库来绘制决策树。 End!