AI 机器学习算法之决策树详解
决策树是一种直观易懂的监督学习算法,适用于分类和回归任务。其构建核心是基于信息增益、信息增益率或基尼指数递归划分数据,使子集尽可能纯净。本文通过天气预测实例详细演示了决策树的构建过程,并分析了其优缺点:优点是直观、通用且训练快,缺点是易过拟合和对数据敏感。改进方法包括剪枝和集成学习(如随机森林)。决策树因其透明性和广泛适用性,成为机器学习领域的重要工具。
在人工智能和机器学习领域,决策树(Decision Tree)作为一种基础且强大的算法,因其直观的决策逻辑、易于理解的模型结构以及广泛的应用场景,备受研究者和从业者青睐。本文将深入剖析决策树算法,结合详细的图解与实例,带你揭开其神秘面纱。
一、决策树基础概念
决策树是一种树状结构的非参数监督学习算法,它可以用于分类和回归任务。其结构类似于流程图,由节点和边组成。节点分为三种类型:根节点、内部节点和叶节点。根节点是决策树的起始点,包含所有训练数据;内部节点表示对某个特征的测试,根据测试结果将数据划分到不同的分支;叶节点则代表最终的决策结果,即分类任务中的类别标签或回归任务中的预测值 。
例如,在判断一个水果是苹果还是橙子的简单决策树中,根节点包含所有水果样本,内部节点可能是对 “颜色” 这一特征的测试,若颜色为红色,则沿着一个分支继续判断,若为橙色,则沿着另一个分支判断,最终叶节点给出是苹果还是橙子的结论。
二、决策树的构建原理
决策树的构建过程本质上是一个递归地将数据集划分为子集的过程,核心目标是使得划分后的子集尽可能 “纯净”,即子集中的数据尽量属于同一类别(分类任务)或具有相似的值(回归任务)。而判断划分是否 “纯净”,则需要借助一些度量指标,常见的有信息增益、信息增益率和基尼指数。
(一)信息增益(ID3 算法)
信息增益基于信息论中的熵(Entropy)概念。熵用于度量随机变量的不确定性,熵值越大,不确定性越高。对于数据集 D,其熵的计算公式为:
(H(D) = -\sum_{i=1}^{|y|}p_i \log_2 p_i)
其中,(|y|) 是数据集中类别的数量,(p_i) 是类别 (i) 的样本在数据集 D 中所占的比例。
假设我们有一个包含 10 个水果样本的数据集,其中 5 个苹果,5 个橙子,此时该数据集的熵为:
(H(D) = -(\frac{5}{10}\log_2\frac{5}{10} + \frac{5}{10}\log_2\frac{5}{10}) = 1)
当我们基于某个特征(如颜色)对数据集进行划分后,计算划分后子集的加权熵:
(H(D|A) = \sum_{j=1}^{|A|}\frac{|D_j|}{|D|}H(D_j))
其中,(|A|) 是特征 A 的取值个数,(D_j) 是特征 A 取值为 (j) 的子集,(|D_j|) 是子集 (D_j) 的样本数量。
信息增益((Gain(D, A)))就是划分前数据集的熵减去划分后子集的加权熵:
(Gain(D, A) = H(D) - H(D|A))
信息增益越大,说明基于该特征划分数据集后,数据的不确定性减少得越多,该特征也就越适合用于划分。
以下是一个基于信息增益构建决策树的简单图解:
在这个例子中,首先基于 “颜色” 特征进行划分,计算出颜色特征的信息增益最大,然后在每个子集中再基于其他特征(如大小、形状)继续划分,直到满足停止条件(如子集足够纯净、达到最大深度等)。
(二)信息增益率(C4.5 算法)
信息增益倾向于选择取值较多的特征,但取值多的特征不一定是最有价值的。信息增益率通过引入分裂信息(Split Information)对信息增益进行修正,分裂信息计算公式为:
(SplitInfo(D, A) = -\sum_{j=1}^{|A|}\frac{|D_j|}{|D|}\log_2\frac{|D_j|}{|D|})
信息增益率((GainRatio(D, A)))的计算公式为:
(GainRatio(D, A) = \frac{Gain(D, A)}{SplitInfo(D, A)})
C4.5 算法使用信息增益率来选择特征,避免了信息增益对取值多的特征的偏好。
(三)基尼指数(CART 算法)
基尼指数用于度量数据集的不纯度,对于数据集 D,基尼指数的计算公式为:
(Gini(D) = 1 - \sum_{i=1}{|y|}p_i2)
当基于特征 A 划分数据集后,计算划分后子集的加权基尼指数:
(GiniIndex(D, A) = \sum_{j=1}^{|A|}\frac{|D_j|}{|D|}Gini(D_j))
CART(Classification and Regression Tree)算法选择基尼指数最小的特征作为划分特征,因为基尼指数越小,数据集越纯净。
三、决策树实例:预测天气是否适合打网球
我们以一个经典的天气数据集为例,展示决策树的构建过程和预测应用。以下是天气数据集:
天气 | 温度 | 湿度 | 风力 | 适合打网球 |
---|---|---|---|---|
晴 | 热 | 高 | 弱 | 否 |
晴 | 热 | 高 | 强 | 否 |
阴 | 热 | 高 | 弱 | 是 |
雨 | 适中 | 高 | 弱 | 是 |
雨 | 冷 | 正常 | 弱 | 是 |
雨 | 冷 | 正常 | 强 | 否 |
阴 | 冷 | 正常 | 强 | 是 |
晴 | 适中 | 高 | 弱 | 否 |
晴 | 冷 | 正常 | 弱 | 是 |
雨 | 适中 | 正常 | 弱 | 是 |
晴 | 适中 | 正常 | 强 | 是 |
阴 | 适中 | 高 | 强 | 是 |
阴 | 热 | 正常 | 弱 | 是 |
雨 | 适中 | 高 | 强 | 否 |
(一)计算根节点的熵
数据集中总共有 14 个样本,其中 “是” 的样本有 9 个,“否” 的样本有 5 个。根节点的熵为:
(H(D) = -(\frac{9}{14}\log_2\frac{9}{14} + \frac{5}{14}\log_2\frac{5}{14}) \approx 0.940)
(二)基于不同特征计算信息增益
- 基于 “天气” 特征划分:
-
晴:5 个样本,其中 “是” 2 个,“否” 3 个,熵为 (H(D_{晴}) = -(\frac{2}{5}\log_2\frac{2}{5} + \frac{3}{5}\log_2\frac{3}{5}) \approx 0.971)
-
阴:4 个样本,均为 “是”,熵为 (H(D_{阴}) = 0)
-
雨:5 个样本,其中 “是” 3 个,“否” 2 个,熵为 (H(D_{雨}) = -(\frac{3}{5}\log_2\frac{3}{5} + \frac{2}{5}\log_2\frac{2}{5}) \approx 0.971)
-
加权熵 (H(D|天气) = \frac{5}{14} \times 0.971 + \frac{4}{14} \times 0 + \frac{5}{14} \times 0.971 \approx 0.694)
-
信息增益 (Gain(D, 天气) = 0.940 - 0.694 = 0.246)
- 同理,计算基于 “温度”“湿度”“风力” 特征的信息增益,发现 “天气” 特征的信息增益最大,所以选择 “天气” 作为根节点的划分特征。
(三)继续构建子树
在 “天气” 特征划分后的子集中,重复上述计算信息增益的过程,选择信息增益最大的特征继续划分,直到满足停止条件。最终构建的决策树如下:
(四)预测新样本
假设有一个新的样本:天气 = 晴,温度 = 适中,湿度 = 高,风力 = 弱。根据构建好的决策树,从根节点开始,因为天气 = 晴,进入 “晴” 分支,又因为湿度 = 高,所以预测结果为 “否”,即不适合打网球。
四、决策树的优缺点及改进方法
(一)优点
-
直观易懂:决策树的结构类似于流程图,决策过程清晰明了,易于理解和解释,即使是非专业人员也能轻松看懂。
-
适用范围广:可用于分类和回归任务,对数据的分布没有严格要求,能够处理数值型和类别型数据。
-
训练速度快:在处理小规模数据集时,决策树的训练速度较快,能够快速生成模型。
(二)缺点
-
容易过拟合:决策树在训练过程中可能会过度拟合训练数据,导致在测试数据上的泛化能力较差。
-
对数据敏感:数据中的微小变化可能会导致决策树结构发生较大改变,影响模型的稳定性。
(三)改进方法
-
剪枝(Pruning):通过删除决策树中一些不重要的分支,防止过拟合。剪枝分为预剪枝和后剪枝,预剪枝在构建决策树的过程中提前停止划分,后剪枝是在决策树构建完成后,根据一定的规则删除分支。
-
随机森林(Random Forest):通过构建多个决策树,并将它们的预测结果进行综合(如投票、平均),提高模型的泛化能力和稳定性。随机森林是一种集成学习方法,能够有效解决决策树的过拟合问题。
更多推荐
所有评论(0)