从零开始用例子解释决策树。

从零开始用例子解释决策树。

决策树 是数据科学领域中流行使用的模型之一。决策树也称为管理工具,管理人员必须根据理性决策做出决策。它是一种用于分类和回归问题的监督机器学习算法。

大多数情况下,决策树用于分类问题,例如二元分类( 例子- 贷款申请人是否违约 )。它也可以用于多类分类。

决策树算法是其中的一部分 监督学习 取因变量和自变量,试图找出自变量和因变量之间的关系,并将其表示为树形结构。

在决策树中,使用类似树结构的流程图,它显示基于拆分的预测,它从根节点开始,到叶节点结束。

让我们通过拆分节点来了解决策树是如何工作的,假设我们得到了一个关于汽车的数据,我们的目标是找出模式存在于 马力、重量和车型 .我们的目标变量将是 车型 具有二进制值 大号小号 .( 图-A )

现在,决策树所做的是它获取我们的数据集并在这个数据集上应用函数,给出为( 重量 >2000 ),在此基础上,我们的表将与数据分叉为 2 个不同的表,其中第一个表的权重超过 2000,另一个表的权重小于 2000。

我们的目标是拥有 叶节点 我们的 车型 变得完全 **** 同质的,要达到那个级别,这棵树会进一步分布我们的数据 马力 之后我们可以在下表中看到我们的数据进一步不需要拆分,因为它是完全同质的。因此,我们的决策树以同样的方式工作。

Figure-A

如果允许决策树增长到最大深度,决策树通常会遇到过度拟合的问题。

当我们将决策树增长到其深度时,我们得到 低偏差和高方差 ,我们可以说我们的模型将在训练数据集上表现完美,但是它的效率落在测试数据集上。

防止决策树也称为 贪心模型 从过拟合开始,我们应用正则化,这是一种控制其过拟合行为的方法。

在决策树中,目标列的杂质/纯度表示的损失函数。损失函数有助于减少目标柱的杂质,即通过增加目标柱的同质性。

要了解损失函数,我们需要了解它如何估算目标列的纯度/杂质。有两种测量杂质的方法。

  1. 熵:- 熵是从物理学中借来的,在决策树中,熵主要用于选择最佳拆分器,它可以帮助我们衡量拆分的纯度。一个 纯分裂 意味着要么你应该得到 是的 或者 不。

熵的公式如下:-

这里,p+是正类的概率

p– 是负类的概率

S 是训练样例的子集

决策树如何使用熵?

假设我们有 运输方式 在我们必须通过以下方式交付客户包裹的数据中 普通空气 或者 Express Air,在下面的树中,我们可以看到我们已经进行了拆分以制作决策树。

我们在这里看到拆分不是纯的,因为我们的决策树中仍然有一些负类。

Figure-2

始终牢记熵越高,纯度越低,杂质越高。 记笔记 ,机器学习的目标是降低数据集中的不确定性或杂质。为此,一个名为 信息增益(Info Gain) 在上面的图 2 中告诉我们在分割特征后父熵减少了多少。

笔记-:

有关更多数学概念,请访问 😕/towardsdatascience.com/entropy-how-decision-trees-make-decisions-2946b9c18c8

  1. 基尼指数:- Gini 还用于衡量我们拆分的不纯度,选择要拆分的特征我们需要知道我们拆分的纯或不纯程度。 它是通过从 1 中减去每个类别的概率平方和来计算的。它由给定的公式表示。

纯粹的分裂意味着要么你得到 是的 或者

Figure 3

我们通常使用基尼指数,因为它在计算上是有效的,并且执行时间更短,因为没有像它们的熵那样的对数,因此我们的数据集的杂质可以很容易地通过基尼指数来理解。

什么时候停止分裂?

您一定在想,我们什么时候停止生长树,通常在现实世界中,我们拥有足够大的数据,这将导致大量分裂并最终导致过度拟合。这意味着树将在训练数据集和测试数据集上提供非常好的准确性。

为了克服这个问题,我在这里引入了一个新术语,称为 ** 超参数调整也称为正则化**

正则化参数包括:-

1.max_depth — 它是从根到叶的路径的最大长度(就决策点的数量而言)。叶节点不会进一步分裂。它可能导致一棵树的叶子节点在树的一侧包含许多观察值,而在另一侧,包含更少观察值的节点被进一步分裂。

2.min_sample_split — 当节点中的观察数低于此值时,停止进一步分裂节点的限制。

3.min_sample_leaf — 叶节点必须具有的最小样本数。当叶子包含的观察值太少时,进一步分裂将导致过度拟合(数据中的噪声建模)。

4.min_weight_fraction_leaf — 与 min_sample_leaf 相同,但以加权实例总数的分数表示。

5.max_leaf_nodes — 树中叶节点的最大数量。

6.max_feature_size — 为分割每个节点而评估的最大特征数。

现在让我们在 Python 上工作,看看决策树的实际实现。在这里向您展示,我正在使用 Credit Card Defaulter 数据集。

有关数据集,请访问:- https://www.kaggle.com/umangsaluja/credit-card-defaulters

导入所需的库。

 %matplotlib 内联  
 将 numpy 导入为 np  
 将熊猫导入为 pd  
 # 计算准确度度量和混淆矩阵  
 从 sklearn 导入指标 从 sklearn.tree 导入 DecisionTreeClassifier  
 从 sklearn.feature_extraction.text 导入 CountVectorizer  
 导入 pydotplus  
 从 IPython.display 导入图像  
 从 sklearn.metrics 导入分类报告

加载数据集并检查前五个观察值。

**# 读取数据集  
** credit_df = pd.read_csv("credit.csv")  
 credit_df.head()  
 **输出:-**

**# 数据信息  
** credit_df.info()  
 **# 许多列是对象类型,即字符串。这些需要转换为序数类型。**

Figure 4

执行 EDA 步骤后,我们将目标列(“默认”)捕获到单独的向量中,用于训练集和测试集。

**# 将目标列(“默认”)捕获为训练集和测试集的单独向量** X = credit_df.drop("默认" , axis=1) y = credit_df.pop("默认")

使用 (“test_train_split”) 我们将数据拆分为 70:30 以进行训练和测试。

**# 将数据拆分为独立属性的训练集和测试集**  
 从 sklearn.model_selection 导入 train_test_split xtrain, xtest, ytrain, ytest = train_test_split(X, y, test_size=.30, random_state=1)

我们的下一步是申请 决策树算法。

**# 调用决策树分类器函数。使用“熵”方法查找拆分列。其他选项  
 # 可以是基尼指数。将树的深度限制为 5(没有特别的理由选择这个)  
**                                    
 dt_model = DecisionTreeClassifier(标准 = '熵')  
 DT=dt_model.fit(xtrain, ytrain) **输出:-  
 决策树分类器(标准='熵')**

让我们构建树。

 标签 = xtrain.columns **# 以 DOT 格式导出决策树  
 # 传递 'decision_tree' 以将其导出到 Graphviz  
 # 将列名传递给'feature_names'  
 # 将所需的类标签传递给 'class_names'**  
 dot_data = tree.export_graphviz(DT, feature_names = 标签, class_names = ["0","1"]) **# 在 'dot_data' 中使用 DOT 格式绘制决策树**  
 图 = pydotplus.graph_from_dot_data(dot_data) **# 显示决策树**  
 图片(graph.create_png()) **输出:-**

Figure 5, Full Grown Decision Tree.

 y_predict = DT.predict(xtrain)  
 打印(dt_model.score(xtrain,ytrain))  
 打印(dt_model.score(xtest,ytest)) **输出:-  
 1.0 # 训练  
 0.6533333333333333#测试**

在这里,我们可以看到成熟的树容易过拟合。过拟合是指模型完全拟合训练数据但未能泛化测试未见数据的情况 .当模型记住了训练数据的噪声并且未能捕捉到重要的模式时,就会出现过拟合情况。

如果您喜欢这篇文章,请确保拍手直到您的手开始疼痛 😃。保重,保持健康,保持安全并继续学习。

谢谢。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/30476/03261210

posted @ 2022-09-12 10:03  哈哈哈来了啊啊啊  阅读(121)  评论(0编辑  收藏  举报