决策树算法

决策树系列三——基尼指数,减枝和

心不动则不痛 提交于 2019-12-03 15:40:02
- - coding: utf-8 - - """ Created on Tue Aug 14 17:36:57 2018 @author: weixw """ import numpy as np 定义树结构,采用的二叉树,左子树:条件为true,右子树:条件为false leftBranch:左子树结点 rightBranch:右子树结点 col:信息增益最大时对应的列索引 value:最优列索引下,划分数据类型的值 results:分类结果 summary:信息增益最大时样本信息 data:信息增益最大时数据集 class Tree: def init (self, leftBranch=None, rightBranch=None, col=-1, value=None, results=None, summary=None, data=None): self.leftBranch = leftBranch self.rightBranch = rightBranch self.col = col self.value = value self.results = results self.summary = summary self.data = data def __str__(self): print(u"列号:%d" % self.col) print(u"列划分值

决策树

匿名 (未验证) 提交于 2019-12-02 23:42:01
一、随机森林RF与GBDT的区别 二者的共同点 ・ 都是由多棵树组成; ・ 最终的结果都由多棵树共同决定; ・ 生成样本集的时候都使用了boostrap; 二者的不同点 ・ 组成RF的可以是分类树也可以是回归树,但组成GBDT的只能是回归树; ・ RF可以并行,GBDT只能串行; ・ 对于输出结果,RF使用多数表决或简单平均,GBDT使用结果累加或加权平均RF对异常值不敏感,GBDT对异常值敏感(一个注重方差一个注重偏差) 方差和偏差的平衡技术 ・ RF注重减小模型方差来提高性能,GBDT通过减小模型偏差来提高性能RF不需要数据预处理,GBDT需要进行特征归一化(由于权重的问题)(待复查) 二、GBDT vs XGBOOST 二者的共同点 ・ XGBOOST作为GBDT应用层面的算法,基本构建在GB的思想上,在此就不讨论共同点了(太多了) ・ 但我们要知道一点:GBDT系算法在到XGBOOST为止,在生成决策树的时候是要求先对特征进行排序,再选出最显著的特征作为叶子结点进行分类的,这种特征选择方法为精确遍历,这一点在lightGRM上得到了改进。 二者的不同点(XGBOOST的改进) ・ 在优化上,GBDT只用了一阶泰勒展开,XGBOOST用了二阶泰勒展开・ ・ XGBOOST在损失函数中加入了正则项来控制过拟合:内含叶子结点个数、L2范式来代替剪枝 ・

决策树

女生的网名这么多〃 提交于 2019-12-01 14:13:46
1.CART简介 CART是一棵二叉树,每一次分裂会产生两个子节点。CART树分为分类树和回归树。 分类树主要针对目标标量为分类变量,比如预测一个动物是否是哺乳动物。 回归树针对目标变量为连续值的情况,比如预测一个动物的年龄。 如果是分类树,将选择能够最小化分裂后节点GINI值的分裂属性; 如果是回归树,选择能够最小化两个节点样本方差的分裂属性。CART跟其他决策树算法一样,需要进行剪枝,才能防止算法过拟合从而保证算法的泛化性能。 2.CART分类树 2.1算法详解 CART分类树预测分类离散型数据,采用基尼指数选择最优特征,同时决定该特征的最优二值切分点。分类过程中,假设有K个类,样本点属于第k个类的概率为Pk,则概率分布的基尼指数定义为 根据基尼指数定义,可以得到样本集合D的基尼指数,其中Ck表示数据集D中属于第k类的样本子集。 如果数据集D根据特征A在某一取值a上进行分割,得到D1,D2两部分后,那么在特征A下集合D的基尼系数如下所示。其中基尼系数Gini(D)表示集合D的不确定性,基尼系数Gini(D,A)表示A=a分割后集合D的不确定性。基尼指数越大,样本集合的不确定性越大。 对于属性A,分别计算任意属性值将数据集划分为两部分之后的Gain_Gini,选取其中的最小值,作为属性A得到的最优二分方案。然后对于训练集S,计算所有属性的最优二分方案,选取其中的最小值