在学习决策树算法时首先须要知道一些基本概念:python
这个是熵和信息增益的基础概念,是对一个抽象事物的命名,不管用不用‘信息’来命名这种抽象事物,或者用其余名称来命名这种抽象事物,这种抽象事物是客观存在的。若是带分类的事物集合能够划分为多个类别当中,则某个类(xi)的信息(量)定义以下:算法
I(x)用来表示随机变量的信息,p(xi)指是当xi发生时的几率。当事件xi发生的几率p(xi)很小,可是它却发生了,那这个信息量至关大,好比买彩票中奖了,那么这个信息量确定是很大的。相反,对于大几率事件,人们习觉得常,那么这个事件的信息量就很小。这就体如今上述公式中。工具
“信息熵”是度量样本纯度最经常使用的一种指标。所谓样本纯度,相反而言之就是凌乱程度。如一个数据集U中的样本都属于同一类,那么这时样本纯度最高而凌乱程度最低。信息熵定义为:学习
其中D表示样本集合,|y|样本中类别的数目, pk表示第k种分类占集合的比例。Ent(D)的值越小,D的纯度越高。优化
信息增益 指的是,使用某一个属性a进行划分后,所带来的纯度提升的大小。通常而言,信息增益越大,意味着使用属性a来进行划分所得到的“纯度提高”越大。信息增益定义以下: 插件
即blog
信息增益 = 根节点的信息熵 - 全部分支节点的信息熵的加权和排序
其中,权值为划分后属性a=ak节点中样本的数量与划分前节点中的样本数量的比值,即几率。几率确保了权重的和为1.事件
上图描述的是,使用属性a对样本集合D进行划分,由于a有V个取值,所以决策树会有V个分支。划分后每个节点中样本的数量为属性a=ak的样本的数量。ip
问:如何理解:信息增益越大,意味着使用属性a来进行划分所得到的“纯度提高”越大?
答:由于Ent(D)的值越小,D的纯度越高。而划分后,全部的分支节点的Ent(Dk)的和就是划分后的信息熵,公式体现了先后的差距,若是差距越大,那么就说明划分后全部的分支节点的信息熵越小,纯度提高越大。
背景:当样本集中的某一属性取值使得全部样本被分到不一样类别,此时分支的纯度达到最高,无需再继续划分。然而这样的决策树不具有泛化能力。事实上,信息增益准则对可取值较多的属性有所偏好。
为了减小这种偏好可能带来的影响,所以使用增益率代替信息增益准则选择划分属性。
即增益率(Gain_ratio(D,a))=信息增益Gain(D,a)/属性固有值(IV(a))。
属性A的可能取值越大,固有值IV(a)一般越大。
信息增益率偏向于可能取值减小的属性。所以C4.5算法不直接使用信息增益率来选择划分属性。
基尼值 Gini(D) 反映了从数据集中随机抽取两个样本,其类别标记不一致的几率。当数据集的纯度越高,每次抽到不一样类别标记的几率越小。打个比方,在一个袋子里装100个乒乓球,其中有99个白球,1个黄球,那么当咱们随机抽取两个球的时候,很大几率是抽到两个白球。
因此数据集D的纯度能够用基尼值来度量,其定义以下:
基尼值越小,数据集D纯度越高。
基尼指数是针对于属性定义的,其反映的是,使用属性a进行划分后,全部分支中(使用基尼值度量的)纯度的加权和。
属性a的基尼指数定义以下:
咱们在属性集合A中选择划分属性的时候,就选择使得划分后基尼指数最小的属性做为最优划分属性。CART就是用基尼指数来选择划分属性的。
决策树是在已知各类状况发生几率((各个样本数据出现中,不一样特征出现的几率))的基础上,经过构建决策树来进行分析的一种方式。经常使用算法有ID三、C4.五、CART
构建决策树的关键步骤是分裂属性,指在某个节点按照一类特征属性的不一样划分构建不一样的分支,使每一个分支中的数据类别尽量的纯。
决策树是一种贪心算法策略,只考虑当前数据特征的最好分割方式,不能回溯操做(只能从上往下分割)
步骤:
1.将全部的特征当作一个一个的节点
2.遍历全部特征,遍历到其中某一个特征时:遍历当前特征的全部分割方式,找到最好的分割点,将数据划分为不一样的子节点,计算划分后子节点的纯度信息
3.在遍历的全部特征中,比较寻找最优的特征以及最优特征的最优划分方式,纯度越高,则对当前数据集进行分割操做
4.对新的子节点继续执行2-3步,直到每一个最终的子节点都足够纯
决策树算法构建的中止条件:
1.(会致使过拟合)当子节点中只有一种类型的时候中止构建
2.(比较经常使用)当前节点种样本数小于某个值,同时迭代次数达到指定值,中止构建,此时使用该节点中出现最多的类别样本数据做为对应值
1.ID3算法: 内部使用信息熵以及’信息增益‘来进行构建,每次迭代选择信息增益最大的特征属性做为分割属性。只支持离散的特征属性
优势:决策树构建速度快,实现简单
缺点:算法依赖样本中出现次数较多的特征属性,可是出现次数最多的属性并不必定最优
2.C4.5算法:使用’信息增益率‘来构建,在树的构建过程当中会进行剪枝操做的优化,可以自动完成对连续属性的离散化处理。选择信息增益率大的属性进行分割
优势:准确率较高,实现简单
缺点:对数据集须要进行屡次顺序扫描和排序,效率较低。
3.CART算法:使用'基尼系数'做为数据纯度的量化指标来构建,选择‘GINI增益率’来分割,越大的即做为当前数据集的分割属性.可用于分类和回归。(二叉树构建)
三种算法主要区别:CART构建的必定是二叉树,ID3,C4.5构建的不必定是二叉树
1.分类树是基于几率来构建的,采用信息增益、信息增益率、基尼系数来做为树的评价指标。
2.回归数是基于平均值来构建的,采用均方差做为树的评价指标。
1.决策树欠拟合:没有将不一样的数据类别划分开,缘由:决策树深度太浅致使。
解决方案:1.增长树的深度。2.使用集成算法,Boosting算法(GBDT)
2.决策树过拟合:学习能力太强,将噪音数据特征也学习到数据分割中了,缘由:决策树深度太深致使
解决方案:1.剪枝(调整API中的参数)2.使用集成算法:Bagging算法(随机森林)
1.前置剪枝:是指在决策树生成过程当中,对每一个节点在划分前先进行估计,若当前的节点划分不能带来决策树泛化的提高,则中止划分并将当前节点标记为叶子节点。(深度浅,容易欠拟合) 2.后置剪枝:是指先从训练数据集中生成一课完整的决策树,而后自底向上对非叶子节点进行考察,若将该节点对应的子树替换为叶子结点可以带来决策树泛化能力的提高,则将该节点替换为叶子节点。 7.决策树可视化工具安装: graphviz服务安装: 1.下载安装包(msi安装包): http://www.graphviz.org/; 2.执行下载好的安装包(双击msi安装包); 3.将graphviz的根目录下的bin文件夹路径添加到PATH环境变量中 4.安装python的graphviz插件: pip install graphviz 5.安装python的pydotplus插件: pip install pydotplus