如果您刚刚开始学习机器学习,您很可能已经听说过决策树。虽然您目前可能还不了解它的工作原理,但请记住,您肯定以某种形式使用过它。长期以来,决策树一直是全球一些热门服务的后端支撑。虽然现在有更好的替代方案,但决策树在机器学习领域仍然占有重要地位。
简单介绍一下,决策树是一种用于分类和回归任务的监督式机器学习算法。决策树分析涉及不同的选择及其可能的结果,这有助于根据特定标准轻松做出决策,我们将在本博客的后面部分进行讨论。
在本文中,我们将介绍机器学习中的决策树、决策树算法的工作原理、其优缺点以及应用。
什么是决策树?
决策树是一种非参数机器学习算法,这意味着它不对输入特征和目标变量之间的关系做出任何假设。决策树可用于分类和回归问题。决策树类似于流程图,具有分层树结构,包含:
- 根节点
- 分支
- 内部节点
- 叶节点
决策树的类型
决策树有两种不同的类型:分类树和回归树。它们有时也被称为 CART(分类树和回归树)。本节我们将简要介绍这两种树。
- 分类树:分类树预测分类结果。这意味着它将数据分类。然后,树会猜测新样本属于哪个类别。例如,分类树可以根据发件人、主题和内容的特征输出电子邮件是“Spam”还是“Not Spam”。
- 回归树:当目标变量为连续变量时,使用回归树。这意味着预测的是数值而不是分类值。这是通过对叶子节点的值取平均值来实现的。例如,回归树可以预测房屋的最高价格;其特征可以是房屋大小、面积、卧室数量和位置。
该算法通常利用“基尼不纯度”或“熵”来确定节点分裂的理想属性。基尼不纯度衡量的是随机选择的属性被错误分类的频率。该值越低,该属性的分割效果越好。熵是衡量数据集无序性或随机性的指标,因此,属性的熵值越低,树的分割效果就越理想,并且分割结果也越可预测。
同样,在实践中,我们会选择使用 DecisionTreeClassifier 或 DecisionTreeRegressor 进行分类和回归,从而选择合适的类型:
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor # Example classifier (e.g., predict emails are spam or not) clf = DecisionTreeClassifier(max_depth=3, random_state=42) # Example regressor (e.g., predict house prices) reg = DecisionTreeRegressor(max_depth=3)
决策树中的信息增益和基尼系数
到目前为止,我们已经讨论了决策树的基本原理和工作原理。现在,让我们讨论一下决策树的选择指标,这些指标最终有助于选择理想的节点进行拆分。为此,我们将在下面讨论两种常用的方法:
1. 信息增益
信息增益是衡量特定属性在降低数据集熵方面的有效性的指标。这有助于选择最具信息量的特征来拆分数据,从而构建更准确、更高效的模型。
假设 S 是一组实例,A 是一个属性。Sv 是 S 的子集,V 表示该属性的单个值。A 可以从集合 (A) 中取一个值,而集合 (A) 是该属性所有可能值的集合。
熵:在决策树中,熵是衡量数据集无序性或随机性的指标。当类别分布均匀时,熵最大;当类别分布更均匀时,熵减小。因此,熵值较低的节点表示该节点内的类别大多相似或纯净。
其中,P(c) 是集合 S 中类别的概率,C 是所有类别的集合。
示例:如果我们想根据天气状况(天气状况和温度)来决定是否打网球。
天气状况有 3 个值:晴天、阴天、下雨;温度有 3 个值:炎热、温和、寒冷;打网球的结果有两个值:是或否。
Outlook | 打网球 | 计数 |
---|---|---|
晴天 | No | 3 |
晴天 | Yes | 2 |
阴天 | Yes | 4 |
下雨 | No | 1 |
下雨 | Yes | 4 |
计算信息增益
现在,我们将计算基于“展望”进行拆分时的信息增益。
步骤 1:整个数据集 S 的熵
因此,S 中的实例总数为 14,其分布为:
- 是:9
- 否:5
S 的熵为:熵(S) = -(9/14 log2(9/14) + 5/14 log2(5/14) = 0.94
步骤 2:基于 Outlook 分布的子集熵
现在,让我们根据 Outlook 分布将数据点划分为子集,因此:
- 晴天(5 条记录:2 条是,3 条否):熵(晴天)= -(⅖ log2(⅖)+ ⅗ log2(⅗)) = 0.97
- 阴天(4 条记录:4 条是,0 条否):熵(阴天) = 0(因为它是一个纯属性,所有值都相同)
- 下雨(5 条记录:4 条是, 1 否):熵(雨) = -(⅘ log2(⅘)+ ⅕ log2(⅕)) = 0.72
步骤 3:计算信息增益
现在我们根据展望计算信息增益:
增益(晴天,展望) = 熵(晴天) – (5/14 * 熵(晴天) + 4/14 * 熵(阴天) + 5/14 * 熵(雨)) 增益(晴天,展望) = 0.94 – (5/14 * 0.97 + 4/14 * 0 + 5/14 * 0.72) = 0.94 – 0.603 = 0.337
因此,展望属性的信息增益为 0.337。
此处的展望属性表明它在推导解决方案方面有一定的有效性。但是,对于正确的结果仍然存在一些不确定性。
2. 基尼系数
与信息增益类似,基尼系数用于确定数据分割的最佳特征,但其运作方式不同。基尼系数是一种度量指标,用于衡量随机选择的元素被错误识别或不纯(数据子集中类别的混合程度)的频率。因此,属性的基尼系数值越高,被选中进行数据分割的可能性就越小。因此,在此类决策树中,基尼系数值较高的属性更受青睐。
其中:
m 是数据集中的类别数,P(i) 是数据集 S 中类别 i 的概率。
例如,如果我们有一个包含“是”和“否”类别的二分类问题,那么每个类别的概率就是每个类别中实例的比例。基尼系数的范围从 0(代表完全纯净)到 0.5(代表二分类的最大不纯度)。
因此,Gini=0 表示子集内所有实例都属于同一类;Gini=0.5 表示实例在所有类中所占比例相等。
示例:如果我们想根据天气状况(天气状况和温度)来决定是否打网球。
天气状况有 3 个值:晴天、阴天、下雨;温度有 3 个值:炎热、温和、寒冷;打网球的结果有两个值:是或否。
Outlook | 打网球 | 计数 |
Sunny | No | 3 |
Sunny | Yes | 2 |
Overcast | Yes | 4 |
Rain | No | 1 |
Rain | Yes | 4 |
计算基尼系数
现在,我们将计算基于“展望”划分的基尼系数。
步骤 1:计算整个数据集 S 的基尼系数
因此,S 中的实例总数为 14,其分布为:
- 是:9
- 否:5
S 的基尼系数为:
P(是) = 9/14,P(否) = 5.14;Gain(S) = 1-((9/14)^2 + (5/14)^2);Gain(S) = 1-(0.404_0.183) = 1- 0.587 = 0.413
步骤 2:基于 Outlook 的各子集的基尼系数
现在,让我们根据 Outlook 分布将数据点划分为子集,因此:
Sunny(5 条记录:2 条是,3 条否):P(是)=⅖,P(否) = ⅗;Gini(Sunny) = 1-((⅖)^2 +(⅗)^2) = 0.48
阴天(4 条记录:4 个是,0 个否):
由于此子集中的所有实例均为“是”,因此基尼系数为:
Gini(阴天)= 1-(4/4)^2 +(0/4)^2)= 1-1= 0 雨天(5 条记录:4 个是,1 个否):P(是)=⅘,P(否)=⅕ 基尼(雨天)= 1-((⅘ )^2 +⅕ )^2) = 0.32
阴天(4 条记录:4 个是,0 个否):
由于此子集中的所有实例均为“是”,因此基尼系数为:Gini(阴天)= 1-(4/4)^2 +(0/4)^2)= 1-1= 0
雨天(5 条记录:4 个是,1 个否):P(是)=⅘, P(No)=⅕ Gini(Rain) = 1-((⅘ )^2 +⅕ )^2) = 0.32
步骤 3:分割后的加权基尼系数
现在,我们根据 Outlook 值计算分割后的加权基尼系数。这将是分割后整个数据集的基尼系数。
加权基尼系数(S,Outlook)= 5/14 * 基尼系数(晴天)+ 4/14 * 基尼系数(阴天)+ 5/14 * 基尼系数(雨天)加权基尼系数(S,Outlook)= 5/14 * 0.48+ 4/14 * 0 + 5/14 * 0.32 = 0.286
步骤 4:基尼增益
基尼增益将计算为拆分后基尼系数的降低量。因此:
基尼增益(S,Outlook)= 基尼系数(S)- 加权基尼系数(S,Outlook)基尼增益(S,Outlook)= 0.413 – 0.286 = 0.127
因此,“Outlook”属性的基尼增益为 0.127。这意味着,使用“Outlook”作为拆分节点,可以将数据集的不纯度降低 0.127。这表明了该方法的有效性。这个特征在数据分类中的作用。
决策树是如何工作的?
如上所述,决策树是一种监督式机器学习算法,可用于回归和分类任务。决策树首先使用拆分标准之一——信息增益或基尼系数——选择根节点。因此,构建决策树涉及递归拆分训练数据,直到每个分支中结果区分的概率达到最大。决策树算法从根节点自上而下进行。其工作原理如下:
- 从包含所有训练样本的根节点开始。
- 选择最佳属性来拆分数据。最佳拆分特征是提供最多纯子节点(即数据点属于同一类)的特征。这可以通过信息增益或基尼系数来衡量。
- 根据所选的具有最大信息增益或最小基尼系数的特征将数据拆分成小的子集,并进一步创建纯子节点,直到最终结果同质或属于同一类。
- 最后一步是,当满足条件(称为存储条件)时,停止树的进一步生长。发生这种情况的条件是:
-
- 节点中的所有数据都属于同一类或为纯节点。
- 不再进行进一步的拆分。
- 达到树的最大深度。
- 最小数量的节点成为叶节点,并被标记为特定区域或属性的预测类/值。
-
递归划分
这种自上而下的过程称为递归划分。它也被称为贪婪算法,因为在每一步中,算法都会根据当前数据选择最佳划分。这种方法虽然高效,但并不能确保树的广义最优性。
例如,设想一棵用于咖啡决策的决策树。根节点询问“现在几点?”;如果是早上,它会询问“累吗?”;如果是,它会引导到“喝咖啡”,否则会引导到“不喝咖啡”。下午也有一个类似的分支。这说明了决策树如何进行连续决策,直到得出最终答案。
在本例中,决策树从根节点“现在几点?”开始。根据这个问题的答案,下一个节点将是“你累了吗?”。最后,叶子节点给出最终的类别或决策“喝咖啡”或“不喝咖啡”。
现在,随着树的增长,每次拆分都旨在创建一个纯子节点。如果分裂过早停止(由于深度限制或样本量较小),则叶子节点可能不纯,包含混合类别;那么它的预测可能是该叶子节点中占多数的类别。
如果树变得非常大,我们必须添加深度限制或修剪(即删除不重要的分支),以防止过度拟合并控制树的大小。
决策树的优缺点
决策树具有许多优势,使其成为机器学习中的热门选择,尽管它存在缺陷。在本节中,我们将讨论决策树的一些主要优缺点:
优点
- 易于理解和解释:决策树非常直观,可以以流程图的形式可视化。一旦树构建或完成,人们可以很容易地看到哪个特征导致了哪个预测。这使得模型更加透明。
- 同时处理数值和分类数据:决策树默认同时处理分类和数值数据。它们不需要任何编码技术,这使得它们更加灵活,这意味着我们无需进行大量的数据预处理即可输入混合数据类型。
- 捕获数据中的非线性关系:决策树也被称为能够分析和理解数据中复杂的隐藏模式,因此它们可以捕获输入特征和目标变量之间的非线性关系。
- 快速且可扩展:决策树在训练时花费的时间很少,并且由于它们是非参数的,因此可以以合理的效率处理数据集。
- 最少的数据准备:决策树不需要特征缩放,因为它们根据实际类别进行拆分,这意味着不需要在外部进行此类操作;大多数缩放都在内部处理。
缺点
- 过拟合:随着树的深度增加,决策树很容易在训练数据上过拟合。这意味着最终模型由于在测试集或未见过的真实数据上缺乏泛化能力,将无法获得良好的性能。
- 不稳定性:决策树的效率取决于它选择哪个节点来分割数据以找到纯节点。但训练集的细微变化或选择节点时的错误决策都可能导致树的结果截然不同。因此,决策树的结果不稳定。
- 随着树的深度增加,复杂性也会增加:具有多层级的深层决策树也需要更多的内存和时间来评估,以及如上所述的过拟合问题。
决策树的应用
决策树因其可解释性和灵活性,在机器学习和数据科学领域的实践中广受欢迎。以下是一些实际示例:
- 推荐系统:决策树可以通过分析用户的行为及其活动和内容偏好,为电商或媒体网站上的用户提供推荐。基于树中的所有模式和分割,系统会推荐用户可能感兴趣的特定产品或内容。例如,对于在线零售商,决策树可用于根据用户的在线活动对其产品类别进行分类。
- 欺诈检测:决策树通常用于金融欺诈检测,以对可疑交易进行分类。在这种情况下,决策树可以根据交易金额、交易地点、交易频率、性格特征等进行分割,以确定活动是否为欺诈行为。
- 市场营销和客户细分:公司的市场营销团队可以使用决策树对客户进行细分或组织。在这种情况下,决策树可用于根据数据中的历史模式来判断客户是可能对营销活动做出反应还是更有可能流失。
这些示例展示了决策树的广泛用例,它们可用于从推荐算法到市场营销再到工程等领域的分类和回归任务。
评论留言