决策树算法梳理

学习内容:

1. 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)

2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景

3. 回归树原理

4. 决策树防止过拟合手段

5. 模型评估

6. sklearn参数详解,Python绘制决策树

1. 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)

2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景

3. 回归树原理

4. 决策树防止过拟合手段

5. 模型评估

6. sklearn参数详解,Python绘制决策树


 

 

 1. 信息论基础

  信息熵:信息熵是度量样本的集合纯度最常用的一种指标。在信息论和概率统计中,熵是表示随机变量不确定性的度量。公式为:$Ent(D) = - \sum\limits_{k=1}^{|y|}p_{k}log_{2}p_{k} $,Ent(D)越小,则D的纯度越高。

  联合熵:两个随机变量X,Y的联合分布,可以形成联合熵Joint Entropy,用H(X,Y)表示。

  条件熵:设有随机变量(X, Y),其联合概率分布为$P ( X = x_i , Y = y_i ) = p_ij ,   i = 1 , 2 ,  ... n ; j = 1 , 2, ... , m $

  条件熵H(Y|X) 表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定条件下随机变量Y的条件熵H(Y|X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望$$H(Y|X ) = \sum\limits_{i=1}^np_{i}H(Y|X=x_{i}) $$

  这里,$p_{i} = P(X=x_{i}),i = 1,2,...,n $

  信息增益:考虑到不同的分支所包含的样本数不同,给分支节点赋予权重$|D^v|/|D| $,即样本数越多的分支节点影响越大,于是计算出用属性$\alpha $对样本集$D $进行划分所获得的信息增益。$$ Gain(D,\alpha) = Ent(D) - \sum\limits_{v=1}^V\frac{|D_{v}|}{|D|}Ent(D_{v}) $$

  基尼不纯度:从一个数据集中随机选取子项,度量其被错误的划分到其他组里的概率。$$I_G(f) = \sum\limits_{i=1}^mf_i(1-f_i) = \sum\limits_{i=1}^m(f_i - f_i^2) = \sum\limits_{i=1}^mf_i - \sum\limits_{i=1}^mf_i^2 = 1 - \sum\limits_{i=1}^mf_i^2 $$

2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景

  • ID3算法

 

  ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。

  具体方法是:从根节点(root node)开始,对结点计算所有可能的特征信息增益,选择信息增益最大的特征作为结点特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息均很小或没有特征可以选择为止。

 

  • C4.5算法

  C4.5算法与ID3算法相似,C4.5算法对ID3算法进行了改进。C4.5在生成过程中,用信息增益比来选择特征。

  • CART分类树

  CART是在给定输入随机变量$X $条件下输出随机变量$Y $的条件概率分布的学习方法。

  CART算法由一下两步组成:

    1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;

    2)决策树剪枝:用验证数据集对已生成的树进行剪枝病选择最优子树,这时用损失函数最小作为剪枝的标准。

  • 应用场景

  银行贷款申请、房产开发商房子的选址。

3. 回归树原理

  决策树的生成就是递归地构建二叉决策树的过程,对于回归树用平方误差最小化准则。

4.决策树防止过拟合手段

  剪枝是决策树学习算法对付过拟合的主要手段。决策树剪枝的基本策略有“预剪枝”和“后剪枝”。

  预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶节点。

  后剪枝是指先从训练集生成一颗完整的决策树,然后自底向上地对非结点进行考察,若讲该结点对应的子树替换成叶节点能带来决策树泛化性能的提升,则将该子树替换成叶节点。

5. 模型评估

  自助法(bootstrap):

  训练集是对于原数据集的有放回抽样,如果原始数据集$N$, 可以证明,大小为$N$的自助样本大约包含原数据63.2%记录。当$N$充分大的时候,$1 - (1 - \frac{1}{N})^N$概率逼近$1 - e^{-1} = 0.632 $。抽样$b$次,产生$b$个bootstrap样本,则总准确率为($acc_s$为包含所有样本的准确率):$$ acc_{boot}=\frac{1}{b}\sum_{i=1}^{b}(0.632\times\varepsilon _{i}+0.368\times acc_{s})$$

  准确度的区间估计:

  将分类问题看做二项分布,则有:

  令 $X $为模型正确分类,$p$ 为准确率,$X $服从均值 $Np$、方差 $Np(1-p)$的二项分布。$acc=\frac{X}{N}$为均值 $p$,方差 $\frac{p(1-p)}{N}$ 的二项分布。$acc$ 的置信区间:

  $$ P\left(-Z_{\frac{\alpha }{2}} \leq \frac{acc-p}{\sqrt{p(1-p)/N}} \leq Z_{1-\frac{\alpha}{2}}\right)=1-\alpha$$ $$ P\in\frac{2\times N \times acc +Z_{\frac{\alpha}{2}}^{2}\pm Z_{\frac{\alpha}{2}}\sqrt{Z_{\frac{\alpha}{2}}^{2}+4\times N \times acc-4\times N \times acc^{2}}}{2(N+Z_{\frac{\alpha}{2}}^{2})}$$

6. sklearn参数详解,Python绘制决策树

  class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)

  参数详解:

  criterion=’gini’, string, optional (default=”gini”),衡量分支好坏的标准

  splitter=’best’, string, optional (default=”best”),选择分支的策略

  max_depth=None, int or None, optional (default=None),树的最大深度

  min_samples_split=2, int, float, optional (default=2),分支时最小样本数

  min_samples_leaf=1, int, float, optional (default=1),叶子最少样本

  min_weight_fraction_leaf=0.0, float, optional (default=0.),叶子结点的最小权重

  max_features=None, int, float, string or None, optional (default=None),生成树时考虑的最多特征点数

  random_state=None,  int, RandomState instance or None, optional (default=None),打乱样本时所用的随机种子

  max_leaf_nodes=None,  int or None, optional (default=None),生成树时采用的最大叶子结点

  min_impurity_decrease=0.0, float, optional (default=0.),当产生分支时,增加的纯度

  min_impurity_split=None,  float, (default=1e-7),树停止生长的阈值

  class_weight=None,  dict, list of dicts, “balanced” or None, default=None,分支权重预设定

  presort=False,bool, optional (default=False),提前对数据排序,加快树的生成

 

 

 

posted @ 2019-03-04 18:44  burton_shi  阅读(609)  评论(0编辑  收藏  举报