Python大数据分析——决策树和随机森林

决策树

图中的决策树呈现自顶向下的生长过程,深色的椭圆表示树的根节点;浅色的椭圆表示树的中间节点;方框则表示树的叶节点。

对于所有的非叶节点来说,都是用来表示条件判断,而叶节点则存储最终的分类结果,例如中年分支下的叶节点(4,0)表示4位客户购买,0位客户不购买。
在这里插入图片描述

决策树节点字段的选择

信息熵

我们首先了解下信息熵

熵原本是物理学中的一个定义,后来香农将其引申到了信息论领域,用来表示信息量的大小。信息量越大(分类越不“纯净”),对应的熵值就越大,反之亦然。也就是信息量大,熵大,一个事件发生的概率小,反之亦然。信息熵的计算公式如下:
在这里插入图片描述
在实际应用中,会将概率p的值用经验概率替换,所以经验信息可以表示为:
在这里插入图片描述
举个例子:以产品是否被购买为例,假设数据集一共包含14个样本,其中购买的用户有9个,没有购买的用户有5个,所以对于是否购买这个事件来说,它的经验信息为:
在这里插入图片描述

条件熵

判断在某个条件下的信息熵为条件熵
在这里插入图片描述
在这里插入图片描述
比如:
在这里插入图片描述

信息增益

对于已知的事件A来说,事件D的信息增益就是D的信息熵与A事件下D的条件熵之差,事件A对事件D的影响越大,条件熵H(D|A)就会越小(在事件A的影响下,事件D被划分得越“纯净”),体现在信息增益上就是差值越大,进而说明事件D的信息熵下降得越多。
所以,在根节点或中间节点的变量选择过程中,就是挑选出各自变量下因变量的信息增益最大的。
在这里插入图片描述
其中:D是事件Y的所有可能

信息增益率

决策树中的ID3算法使用信息增益指标实现根节点或中间节点的字段选择,但是该指标存在一个非常明显的缺点,即信息增益会偏向于取值较多的字段。
为了克服信息增益指标的缺点,提出了信息增益率的概念,"它的思想很简单,就是在信息增益的基础上进行相应的惩罚。信息增益率的公式可以表示为:
在这里插入图片描述
其中,HA为事件A的信息熵。事件A的取值越多,GainA(D)可能越大,但同时HA也会越大,这样以商的形式就实现了GainA(D)的惩罚。

基尼指数

决策树中的C4.5算法使用信息增益率指标实现根节点或中间节点的字段选择,但该算法与ID3算法致,都只能针对离散型因变量进行分类,对于连续型的因变量就显得束手无策了。
为了能够让决策树预测连续型的因变量,Breiman等人在1984年提出了CART算法,该算法也称为分类回归树,它所使用的字段选择指标是基尼指数。
在这里插入图片描述

条件基尼指数

在这里插入图片描述

基尼指数增益

与信息增益类似,还需要考虑自变量对因变量的影响程度,即因变量的基尼指数下降速度的快慢,下降得越快,自变量对因变量的影响就越强。下降速度的快慢可用下方式子衡量:
在这里插入图片描述

决策树函数

DecisionTreeClassifier(criterion=‘gini’, splitter=‘best’,max_depth=None,min_samples split=2,min_samples_leaf=1,max_leaf_nodes=None,class_weight=None)
criterion: 用于指定选择节点字段的评价指标,对于分类决策树,默认为’gini’,表示采用基尼指数选择节点的最佳分割字段;对于回归决策树,默认为’mse’,表示使用均方误差选择节点的最佳分割字段
splitter: 用于指定节点中的分割点选择方法,默认为’best’,表示从所有的分割点中选择最佳分割点如果指定为’random’,则表示随机选择分割点
max_depth: 用于指定决策树的最大深度,默认为None,表示树的生长过程中对深度不做任何限制
min_samples split: 用于指定根节点或中间节点能够继续分割的最小样本量, 默认为2
min_samples leaf: 用于指定叶节点的最小样本量,默认为1
max_leaf nodes:用于指定最大的叶节点个数,默认为None,表示对叶节点个数不做任何限制
class_weight:用于指定因变量中类别之间的权重,默认为None,表示每个类别的权重都相等;如果,则表示类别权重与原始样本中类别的比例成反比;还可以通过字典传递类别之间的权重为balanced差异,其形式为{class label:weight}

随机森林

利用Bootstrap抽样法,从原始数据集中生成k个数据集,并且每个数据集都含有N个观测和P个自变量。
针对每一个数据集,构造一棵CART决策树,在构建子树的过程中,并没有将所有自变量用作节点字段的选择,而是随机选择p个字段。
让每一棵决策树尽可能地充分生长,使得树中的每个节点尽可能“纯净”,即随机森林中的每一棵子树都不需要剪枝。
针对k棵CART树的随机森林,对分类问题利用投票法,将最高得票的类别用于最终的判断结果;对回归问题利用均值法,将其用作预测样本的最终结果。
在这里插入图片描述
生成100个树,每个数据集为一个树

函数

RandomForestClassifier(n_estimators=10,criterion=‘gini’, max_depth=None,min_samples_split=2, min_samples_leaf=1,max_leaf_nodes=None, bootstrap=True, class_weight=None)
n_estimators: 用于指定随机森林所包含的决策树个数
criterion: 用于指定每棵决策树节点的分割字段所使用的度量标准,用于分类的随机森林,默认的criterion值为’gini’;用于回归的随机森林,默认的criterion值为’mse’
max_depth: 用于指定每棵决策树的最大深度,默认不限制树的生长深度
min _samples_split: 用于指定每棵决策树根节点或中间节点能够继续分割的最小样本量, 默认为2

相关推荐

  1. 决策随机森林算法 简介

    2024-07-10 02:50:01       51 阅读
  2. 随机森林决策区别

    2024-07-10 02:50:01       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 02:50:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 02:50:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 02:50:01       58 阅读
  4. Python语言-面向对象

    2024-07-10 02:50:01       69 阅读

热门阅读

  1. C++常用类

    2024-07-10 02:50:01       26 阅读
  2. springboot 与 ipv6

    2024-07-10 02:50:01       21 阅读
  3. UI还原度小技巧之缩放

    2024-07-10 02:50:01       27 阅读
  4. 腾讯centos mysql安装

    2024-07-10 02:50:01       21 阅读
  5. 这是你不知道的js函数this指向的十个惊人之处!

    2024-07-10 02:50:01       23 阅读
  6. ffmpeg转换MP4为gif命令

    2024-07-10 02:50:01       17 阅读
  7. bash shell 重定向输入和输出

    2024-07-10 02:50:01       25 阅读
  8. 将List切割为多个指定长度的多个List

    2024-07-10 02:50:01       24 阅读
  9. 基于 LSN 的 PostgreSQL 数据管理与恢复

    2024-07-10 02:50:01       24 阅读
  10. 加密货币安全升级:USDT地址监控机器人

    2024-07-10 02:50:01       24 阅读