2022吴恩达机器学习课程学习笔记(第二课第四周)
1-1 决策树模型
用猫分类问题来介绍决策树模型。这是一个二元分类问题,每个特征的值只能取两个离散值。
以下是决策树模型。
- 根节点:树中最顶层的节点。
- 决策节点:图中的椭圆节点。
- 叶子节点:图中的矩形节点。
要根据决策树作出分类,首先从根节点开始,根据决策节点的值选择向左或者向右,最终做出分类。
1-2 学习过程
在构建决策树的过程中,我们需要做出几个关键决定。
- 选择在每个节点上使用哪些特征进行拆分。原则就是最大化纯度(使每个节点中尽量都是cat或者not cat)。
- 何时停止拆分。
- 节点只剩一个类别。
- 树的深度达到最大深度(预先设置的参数),确保我们的决策树不会变得太大或太笨重,一定程度上防止过拟合。
- 纯度的提升小于一个阈值(改善太小)。
- 样本的数量小于一个阈值
2-1 纯度
熵是衡量一组数据纯度(是否不纯)的指标。
定义 p1 是样本中猫的比例,则熵和 p1 的函数图像如下:
当两种类别的样本越接近50-50的组合,不纯度越高,则熵越高。
熵函数的实际方程如下:
计算熵时采用的是以 2 为底而不是以 e 为底的对数,是为了让曲线的峰值等于 1,便于解释曲线的意义(杂质含量)。
2-2 选择拆分信息增益
构建决策树时,在一个节点使用什么特征进行拆分取决于选择什么特征可以最大程度地减少熵。
熵的减少成为信息增益,下面来看看如何计算信息增益。
我们分别计算左右分支的熵之后,会发现每种分法有两个熵值,那么如何进行比较呢?如果一个高熵的节点上有很多样本,往往比一个高熵的节点上只有少数样本更糟糕,因为前者是一个很大的含有很多杂志的数据集,为了确保进入较多样本数的分支的杂质更低,所以通常计算一个以上的加权平均,然后使用根节点的熵减去这个加权平均,即求出了熵的减少,即信息增益。
决定何时不进行拆分的标准之一就是如果熵减少的太小,增益太小,而拆分还会增加过拟合的风险,就停止拆分。
2-3 整合
信息增益告诉我们如何选择一个特征来划分一个结点,以下是建立决策树的流程。
- 从根节点的所有示例开始
- 计算所有可能的特征的信息增益,并选择信息增益最高的特征。
- 根据所选特征拆分数据集,并创建树的左右分支。
- 继续重复拆分过程,直到满足停止条件:
- 当节点100%属于一个类别,即0熵。
- 当分割节点时,将导致树超过最大深度。
- 从附加分割中获得的信息增益小于阈值。
- 当节点中的示例数低于阈值时。
决策树是递归划分的。
关于如何选择树的最大深度,可以使用一些开源库中的参数,也可以使用交叉验证方法选择最佳参数。
2-4 独热编码One-hot
在之前的样例中,每个特征只有两个离散的取值,那么当取值大于两个时,我们怎么构建决策树呢?此时就需要使用 One-hot 编码。
当耳型特征有三个离散取值时,我们把它拆开,创建三个新的特征,每个特征只能取0-1两个可选值中的一个,三个特征中只有一个能取 1,因此叫做One-hot独热编码。
构建的决策树形状如下:
进一步,如果一个分类特征可以取 k 个值,那么我们将创建 k 个二进制特征来代替它。
这样每个特征就只能取两个离散的值,回到了之前的情况。
如上,我们构建了5个特征的列表,前三个是来自脸型的独热编码,将它输入到新的神经网络或逻辑回归模型,并尝试训练猫分类器。
One-hot 编码不仅仅适用于决策树,它也适用于神经网络,线性回归和逻辑回归(使用 0、1 对特征进行编码,作为输入)。
2-5 连续值特征
当我们面临一个具有连续值的特征时,通常对其拆分的方式是设置一个阈值,根据是否小于等于阈值进行拆分。
比如新增了一个特征-体重,是一组连续型的数值。选择不同的阈值并计算计算增益,选择带来的信息增益最大的那个阈值。
选择阈值时,一种常见的方法是,根据特征值大小对所有样例排序,取排序表中每两个连续点的中点值作为一种阈值选择,也就是说,当有 10 个样例时,会测试 9 个不同的阈值。
2-6 回归树
本节将决策树推广到回归树,以便预测一个数字。
举例介绍回归树——预测动物体重。
根据耳朵形状、面部形状、胡须来预测体重,因此是个回归问题。
为回归问题建立好的决策树如下图:
当预测一个新的样例时,从根节点开始根据样例特征进行决策,直至根节点,然后输出该叶节点动物的体重的平均值。
选择特征划分样例时,不同于尽量减少熵的方法,回归问题中是尽量减少方差。
方差的减少=根结点方差-加权平均方差
3-1 使用多个决策树
使用单个决策树的缺点之一是该决策对数据中的微小变化高度敏感。
比如我们更改训练集中的一个样本,这可能会导致算法产生完全不同的分裂,产生完全不同的树,这导致算法不那么健壮。
而使算法不那么敏感或者更健壮的解决方案是构建很多决策树,我们称之为树集合。
当构建多个合理的决策树时,也就是树集合,对一个新的样例分别作出判断,然后投票决定最终结果。
3-2 有放回抽样
有放回抽样是构建树集合的关键技术。
原始训练集中有 10 个动物,我们做 10 次有放回抽样,得到一个新的训练集,这与原始的训练集不同,并且有些样本可能是重复的,这没有关系。
3-3 随机森林
随机森林比单个决策树具有更好的效果。
如何生成随机森林:
- 使用有放回抽样方法得到新的训练集。
- 训练决策树。
- 重复以上步骤,共训练B棵决策树。
至于重复多少次,建议选择64-228中的数值,比如100。 - 给出新样例,让100棵树分别作出预测并投票。
事实证明,B设置的更大,不会对算法有坏处,但若超过了某个数值,会导致收益递减,若远大于100,算法不会获得更好的效果,而是会影响效率(可以想象很多树具有相同的结构)。
对该算法进行一点更改,优化每个结点的特征选择,使集合中的树与彼此变得不同,就变成了随机森林算法。
在每个节点上,当选择用于拆分的特征时,如果n个特征可用,则选择一个随机子集 K<n个特征,并允许算法仅从该特征子集中进行选择,往往用于具有较多特征的较大问题。
当n很大时,通常令K=
n
\sqrt{n}
n。
3-4 XGBoost
XGBoost是一种增强决策树算法,运行速度快,开源易于使用,且非常成功的赢得了很多机器学习比赛,并成功应用于很多商业应用中。
对生成树集合的算法进行了改进,除了第一次取样以外,与其以相等(1/m)的概率从所有示例中选择实例,不如优先选择以前训练过的树错误分类的示例,也被称为刻意练习,思想是将注意力集中在容易出错的小部分。
但是怎么提高预测错误实例的概率是一个非常复杂的问题,XGBoost是一种普遍的方法。
XGBoost 优点如下:
- 开源。
- 快速高效实现
- 具有默认分裂准则和正确选择何时停止分裂
- 内置正则化以防止过度拟合
- 竞赛中机器学习的高度竞争算法(如:Kaggle竞赛)
实际上,XGBoost为不同的训练实例分配了不同的选择方法,所以不需要生成和多组训练示例,这使它比随机采样更加高效。
使用XGBoost步骤:
- 导入库。
- 将模型初始化为XGBoost分类器/回归器。
- 训练模型。
- 预测。
3-5 何时使用决策树
选择何时使用决策树和神经网络:
决策树适合处理结构化数据(表格数据),并且训练速度快,小型决策树具有可解释性(人可以读懂它的原理);
神经网络
- 适合处理任何类型数据,如图像,视频,音频,文本等非结构化数据或混合数据。
- 但其速度比较慢,大型的网络需要更长的时间来训练。
- 通常和迁移学习一起应用。
- 当需要多个模型联合使用时,可以构建更强大的机器学习系统,使用神经网络也更容易一些(可以将其并联在一起同时训练,而决策树一次只能训练一棵树)。