决策树(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社区 其它相关文章!