关于决策树算法,你需要知道的一切

97 阅读6分钟

目录

阅读时间: 5 分钟

在这篇博客中,我们将讨论决策树算法,这是一种有监督的算法,也可以用来解决回归和分类问题。

一般来说,分类算法是一个对输入特征进行权衡的函数,从而使输出将一个类别分为正值,另一个为负值。

决策树算法简介

决策树是对一个决策的所有可能解决方案的图形表示。

使用决策树的目的是创建一个训练模型,通过学习从训练数据中推断出的简单决策规则,可以用来预测目标变量的类别或价值。

它是一个树状结构的分类器,其中 内部节点代表数据集的特征,分支代表决策规则,每个叶子节点代表结果。

让我们用一个场景来理解这一点。因此,假设一个人计划在周末外出。

Decsion Tree RepresentationDecsion Tree Representation

决策树的表示方法

重要的术语。

Decision Tree ExplanationDecision Tree Explanation

  1. **根节点。**代表整个人口或样本或数据集,进一步分为两个或多个同质集。
  2. 决策 节点。一个子节点分裂成更多的子节点。
  3. **叶子/终端节点。**最终的输出节点。树不能被进一步分离。
  4. 分割。它 是将一个节点分成两个或多个子节点的过程。
  5. 修剪。 删除决策节点的子节点/不需要的节点的过程。你可以说是分裂的相反过程。
  6. 分支/子树。整 个树的分支被称为分支或子树。
  7. 父节点和子节点。 一个被分成子节点的节点被称为子节点的父节点
    ,而子节点是父节点的子节点。

构建决策树分类器

在建立决策树分类器之前,首先让我们了解它是如何工作的。

  1. 从根节点(即S)开始建树,它包含完整的数据集。
  2. 使用属性选择措施(ASM)找到数据集中的最佳属性
  3. 将S划分为包含最佳属性的可能值的子集。
  4. 生成决策树节点,其中包含最佳属性。
  5. 使用在步骤3中创建的数据集的子集,递归地制作新的决策树。
    继续这个过程,直到达到无法进一步分类节点的阶段,并称最后的节点为叶子节点。

属性选择措施

如果数据集由N个属性组成,那么决定将哪个属性放在根部或树的不同层次作为内部节点是一个复杂的步骤。随机选择任何一个节点作为根节点都会导致糟糕的结果和低精确度,并且不能解决问题。

因此,这里的一个大问题是如何为根节点和子节点选择最佳属性?

这个问题的答案是属性选择措施,即ASM。

使用ASM,我们为树的节点选择最佳属性。ASM有多种技术,如熵、信息增益、吉尼指数、增益比、方差减少和Chi-Square。在这些技术中,有两种是流行的ASM技术,它们是。

  • 信息增益
  • 基尼指数

信息增益

通过转换数据集,减少熵或惊喜。
用于训练决策树。

构建一棵决策树就是要找到一个能返回最高信息增益和最小熵的属性。

信息增益 = 熵(父)- [平均熵(子)]。

吉尼指数

一个确定决策树的分裂程度的函数。基本上,它可以帮助我们确定哪种分裂器是最好的,以便我们可以建立一个纯粹的决策树。
吉尼杂质的范围值从0到0.5.18

与高基尼指数相比,低基尼指数的属性应该被优先考虑。

基尼指数= 1- ∑jPj2

现在,让我们建立我们的决策树。

加载数据集........

我们正在使用汽车评估数据集来建立我们的决策树分类模型,它将预测汽车的安全性。

你可以从这里下载这些数据。

让我们把数据集加载到pandas数据框中。

data = 'car_evaluation.csv'

df = pd.read_csv(data, header=None)

df.head()

Viewing datasetViewing dataset

在加载数据集后,我们将做一些数据预处理,比如改变列名。

Metadata of DatasetMetadata of Dataset

分割数据

现在我们将定义我们的目标变量并分割我们的数据集。

我们的目标变量将是**"类",**因此我们定义我们的特征向量。

X = df.drop(['class'], axis=1)

y = df['class']

现在,让我们把数据集分成8:2,即80%用于训练,20%用于测试。

训练和测试数据的形状将是。

Shape of splitted dataShape of splitted data

训练决策树分类器模型

我们将训练我们的分类器模型的两个ASM(即,属性选择测量)。

在训练之前,我们将对训练数据集的分类变量进行编码。

带有ASM吉尼指数的决策树分类器

让我们用基尼指数的标准来建立和训练我们的分类器模型。

# import DecisionTreeClassifier

from sklearn.tree import DecisionTreeClassifier

gini_classifier = DecisionTreeClassifier(criterion='gini', max_depth=3,

random_state=0)

# fit the model

gini_classifier.fit(X_train, y_train)

好了,让我们检查一下训练后的模型在训练和测试数据上的准确性。

Accuracy of trained classifier model on gini indexAccuracy of trained classifier model on gini index

Decision tree visualisation of trained classifier model on gini indexDecision tree visualisation of trained classifier model on gini index

使用ASM熵的决策树分类器

让我们用熵的标准来建立和训练我们的分类器模型。

entropy_classifier = DecisionTreeClassifier(criterion='entropy', max_depth=3, 

random_state=0)

# fit the model

entropy_classifier.fit(X_train, y_train)

训练后的模型在训练和测试数据上的准确性。

Accuracy of classification model on entropyAccuracy of classification model on entropy

Decision tree visualisation of trained classifier model on entropyDecision tree visualisation of trained classifier model on entropy

基于上述分析,我们可以得出结论,我们的分类模型准确性非常好。
我们训练的分类模型在预测类标签方面非常好。

我们还可以得到模型的分类报告来评估它。

它将告诉我们数值的基本分布,以及关于我们的分类器所犯的错误类型。

Classification reportClassification report

总结

因此,在这篇博客中,我们已经了解了CART算法,即决策树算法。我们还了解了该算法是如何工作的,什么是属性选择措施,ASM在建立决策树分类器中扮演什么角色。然后,我们建立了自己的分类模型,用两个ASM来预测汽车的安全性,我们得到了很好的准确率,并且还准备了模型的分类报告。

参考文献

分享Knol。

相关的