python机器学习决策树详细介绍

决策树(decision trees ,dts)是一种无监督的学习方法,用于分类和回归。

优点:计算复杂度不高,输出结果易于理解,对中间值缺失不敏感,可以处理不相关的特征数据缺点:可能会产生过度匹配的问题适用数据类型:数值型和标称型  source code下载  https://www.manning.com/books/machine-learning-in-action

运行demo    

关键算法

if so return 类标签;

else

  寻找划分数据集的最好特征   划分数据集   创建分支节点   for 每个分支节点     调用函数createbranch并增加返回结果到分支节点中 return 分支节点

对应代码

def createtree(dataset,labels):   classlist = [example[-1] for example in dataset] 不是dataset[-1] {dataset倒数第一元素} ,而这时里,dataset每一个元素里的倒数第一元素   if classlist.count(classlist[0]) == len(classlist): 如果返回分类list count类型一样,则返回该类型!在子节点 是否可分类 如是一类型 返回 否则 递归往下分类     return classlist[0]#stop splitting when all of the classes are equal   if len(dataset[0]) == 1: #stop splitting when there are no more features in dataset 如果只有一个元素     return majoritycnt(classlist)   bestfeat = choosebestfeaturetosplit(dataset)      选择最好的特征索引   bestfeatlabel = labels[bestfeat]      而得到这个label flippers 还是 no surfaces 呢   mytree = {bestfeatlabel:{}}      然后创建该最好的分类 的子树   del(labels[bestfeat])    删除了该最好分类   featvalues = [example[bestfeat] for example in dataset]   uniquevals = set(featvalues)     set是归类,看只有多少种类   for value in uniquevals:     sublabels = labels[:] #copy all of labels, so trees don’t mess up existing labels     mytree[bestfeatlabel][value] = createtree(splitdataset(dataset, bestfeat, value),sublabels)   return mytree

在划分数据集之前之后信息发生的变化称为信息增益,划分数据集的最大原则是将无序的数据变得更加有序。 这里理解成切饼原理:

0.5509775004326937 = += prob * calcshannonent(subdataset) 分开的子集后,的概率*香农滴,得到的和,原来的整体的香浓滴比

# 数据越接近,香浓熵值越少,越接近0 ,越不同,越多分逻辑,香浓熵就越大
# 只计算 其dataset的featvec[-1] 结果标签
def calcshannonent(dataset):

0.4199730940219749 infogain = baseentropy – newentropy

总结:  

  一开始,看代码看不懂,不明白到底是要做什么!分类,我们的目标是把一堆数据分类,以label来标签上。像k邻近 classify([0, 0], group, labels, 3) 意思是,把新数据[0,0] 按k=3的邻近算法在 group,labels数据里的分类! group与label对应!

后面看到了

        

最后,再用一段话来讲讲决策树:

  决策树本质上:是加快效率!用‘最大最优’划分 第一个否定标签,而肯定标签要继续划分!而否定,直接返回叶结点答案!而对应的其它维度就不继续判断!

理论上,即使不用决策树算法,就盲目穷举,就是每次都把数据所有维度轮一次!而有最后个标签答案!维度数*数据个数!为复杂度! 这是对记忆的匹配回答!合适专家系统! 预测未出现的情况能力差!但数据量大,速度快,也能有智能的感觉! 因为是对过去经验的重演! 然而它是死的?不,它不是死的!穷举是死的,但决策树是动态的! 学习的!变化树!至少它的建成是动态的!当数据不完全时,它也可能是不完全的!当一个判断可以解决就用一个判断,不能就再需要一个!维度增加!

以上就是python机器学习决策树详细介绍的详细内容,更多请关注 第一php社区 其它相关文章!

Posted in 未分类

发表评论