CART生成 CART假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支.这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布. CART算法由以下两步组成: 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大: 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时损失函数最小作为剪枝的标准. CART决策树的生成就是…
sklearn.tree.DecisionTreeClassifier 基于 scikit-learn 的决策树分类模型 DecisionTreeClassifier 进行的分类运算 http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier class sklearn.tree.DecisionTreeC…
摘要:本部分对决策树几种算法的原理及算法过程进行简要介绍,然后编写程序实现决策树算法,再根据Python自带机器学习包实现决策树算法,最后从决策树引申至集成学习相关内容. 1.决策树 决策树作为一种常见的有监督学习算法,在机器学习领域通常有着不错的表现,决策树在生活中决策去做某件事时,会根据自己的经验考虑到多种因素,那么在程序逻辑中使用if~else的堆叠,决定最终结果的过程其实就算是决策树的一种体现,如下图(举个不太恰当的例子).学术一点来说,决策树就是根据以往发生的事的概率,来评估风险,作出…
上一节对XGBoost算法的原理和过程进行了描述,XGBoost在算法优化方面主要在原损失函数中加入了正则项,同时将损失函数的二阶泰勒展开近似展开代替残差(事实上在GBDT中叶子结点的最优值求解也是使用的二阶泰勒展开(详细上面Tips有讲解),但XGBoost在求解决策树和最优值都用到了),同时在求解过程中将两步优化(求解最优决策树和叶子节点最优输出值)合并成为一步.本节主要对XGBoot进行实现并调参. XGBoost框架及参数 XGBoost原生框架与sklearn风格框架 XGBoost有…
摘要:上一节对决策树的基本原理进行了梳理,本节主要根据其原理做一个逻辑的实现,然后调用sklearn的包实现决策树分类. 这里主要是对分类树的决策进行实现,算法采用ID3,即以信息增益作为划分标准进行. 首先计算数据集的信息熵,代码如下: 1 import math 2 import numpy as np 3 4 5 def calcShannonEnt(data): 6 num = len(data) 7 # 保存每个类别的数目 8 labelCounts = {} 9 # 每一个样本 10…
本打算将GBDT和XGBoost放在一起,但由于涉及内容较多,且两个都是比较重要的算法,这里主要先看GBDT算法,XGBoost是GBDT算法的优化和变种,等熟悉GBDT后再去理解XGBoost就会容易的多 GBDT算法原理 GBDT(Gradient Boosting Decision Tree)算法 前面说到,提升树是每次训练将上一次训练的残差作为本次训练的样本,找出最优的决策树的过程,然后将所有模型进行叠加的过程.同样,GBDT也是一种前向加法算法模型,不同于提升树的是,GBDT每次将残差…
XGBoost是陈天奇等人开发的一个开源项目,前文提到XGBoost是GBDT的一种提升和变异形式,其本质上还是一个GBDT,但力争将GBDT的性能发挥到极致,因此这里的X指代的"Extreme"的意思.XGBoost通过在算法和工程上进行了改进,使其在性能和精度上都得到了很大的提升,也成为了Kaggle比赛和工程应用的大热门.XGBoost是大规模并行的BoostingTree的工具,比通常的工具包快10倍以上,是目前最好的开源BoostingTree的工具包,在工业界规模方面,XG…
代码及数据:https://github.com/zle1992/MachineLearningInAction 决策树 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据. 缺点:可能会产生过度匹配问题. 适用数据类型:数值型和标称型. 创建分支的伪代码函数createBranch()如下所示:检测数据集中的每个子项是否属于同一分类:if so return 类标签; Else 寻找划分数据集的最好特征 划分数据集 创建分支节点 for 每个划分的子集 调用函…
错误原因:pickle模块存储的是二进制字节码,需要以二进制的方式进行读写 1. 报错一:TypeError: write() argument must be str, not bytes 将决策树写入磁盘的代码如下: def storeTree(inputTree, filename): import pickle fw = open(filename, 'w') pickle.dump(inputTree, fw) fw.close() 改正后代码: fw = open(filename,…
前面介绍了决策树的相关原理和实现,其实集成学习并非是由决策树演变而来,之所以从决策树引申至集成学习是因为常见的一些集成学习算法与决策树有关比如随机森林.GBDT以及GBDT的升华版Xgboost都是以决策树为基础的集成学习方法,故将二者放在一起进行讨论.本节主要介绍关于集成学习的基本原理,后面会介绍一些典型的集成学习算法及应用. 集成学习从字面上就是集成很多分类器进行学习的过程,通过将一系列弱分类器的模型做一些简单的线性组合,最终形成了一个较强的分类器.因此集成学习的一般思路有以下三种: 通过组…