决策树的学习和笔记

1.基本流程:

        分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点和有向边组成。结点有两种类型:内部结点和叶节点。内部结点表示一个特征或属性,叶节点表示一个类

        1.决策过程中提出的每个判定问题都是对某个属性的“测试”

        2.每个测试的结果或是导出最终结论,或者导出进一步的判定问题,其考虑范围是在上次决策结果的限定范围之内

        3.从根结点到每个叶结点的路径对应了一个判定测试序列

决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树

  1. 数据准备:首先,需要收集并准备用于训练的数据。这些数据应包含已知结果的样本,以及用于预测的特征。

  2. 特征选择:在构建决策树之前,需要选择最能有效区分不同类别的特征。通常使用信息增益、基尼指数或卡方检验等方法进行特征选择。

  3. 构建树结构:从根节点开始,根据选定的特征将数据集分割成子集。每个子集形成一个新的节点,并继续对子集进行分割,直到满足某个终止条件(如纯度达到一定阈值或达到预定深度)为止。分割的过程通常使用递归的方式进行。

  4. 决策规则生成:在构建完整的决策树后,可以通过遍历树的路径来生成决策规则。每个叶节点表示一个决策规则,根据该节点的属性值进行分类或回归预测。

  5. 树的修剪:构建的决策树可能存在过拟合问题,为了避免模型过于复杂导致泛化能力不佳,可以对决策树进行修剪。通过剪枝操作,去掉一些不必要的分支或叶节点,提高模型的泛化性能。

  6. 预测:使用构建好的决策树进行预测时,将输入样本从根节点开始,按照特征的取值逐步向下匹配,直到达到叶节点,得到最终的预测结果。

决策树基本流程的代码:

# 导入必要的库
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split

# 读取数据集
data = pd.read_csv('dataset.csv')

# 划分数据集
X = data.drop(columns=['label'])
y = data['label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建决策树模型
model = DecisionTreeClassifier()

# 训练模型
model.fit(X_train, y_train)

# 预测结果
y_pred = model.predict(X_test)

# 评估模型
accuracy = model.score(X_test, y_test)
print('Accuracy:', accuracy)

dataset.csv:

feature1,feature2,feature3,label
1.2,3.4,2.8,0
2.1,2.5,3.1,1
3.5,1.9,2.6,1
2.7,3.6,2.2,0
1.8,2.9,3.8,1
3.2,2.3,1.6,0
2.4,1.8,3.0,1
3.0,3.2,2.5,0
2.5,2.7,3.4,1

结果:

2.划分选择

        决策树学习的关键在于如何选择最优划分属性。一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高

        经典的属性划分方法:

        信息增益: ID 3

        增益率:C 4.5

        基尼指数:CART

一.“信息熵”是度量样本集合纯度最常用的一种指标,假定当前样本集合D中第k类样本所占的比例为 pk (K=1, 2, ..., |y|)                        ,则D的信息熵定义为

决策树的学习和笔记_第1张图片

 Ent(D)的值越小,则D的纯度越高

计算信息熵时约定:若p = 0,则plog2p=0 Ent(D)的最小值为0,最大值为log2|y|

  1. 计算初始数据集的纯度:首先,计算初始数据集的纯度,通常使用基尼指数(Gini Index)或信息增益(Information Gain)来衡量数据集的纯度。纯度越高,数据集中同类别样本的比例越高。

  2. 选择最佳的划分特征:根据选定的纯度衡量指标,计算每个特征的纯度增益或减少量。选择纯度增益最大或纯度减少最大的特征作为划分特征。例如,可以计算每个特征的基尼指数或信息增益,并选择具有最大值的特征。

  3. 根据划分特征将数据集分割成子集:使用选择的划分特征,将数据集拆分成多个子集。具体方法取决于特征的类型。对于连续型特征,可以选择一个阈值将数据集分割成两个子集;对于离散型特征,可以根据每个特征值将数据集分割成多个子集。

  4. 递归地重复步骤2和3:对于每个子集,递归地重复步骤2和3,选择最佳的划分特征,并将子集继续划分。递归的终止条件可以是达到预定深度、纯度达到一定阈值或没有更多特征可用。

  5. 构建决策树:通过递归的方式,构建完整的决策树。每个节点表示一个特征及其取值,每个分支表示不同特征值的路径,每个叶节点表示一个决策结果或类别。

3.剪枝处理:

通过修剪决策树的一些分支或叶节点,以避免过拟合现象的发生。决策树剪枝方法有预剪枝和后剪枝。

  1. 预剪枝:在构建决策树的过程中,每次划分前都先计算划分后验证集(或测试集)上的分类准确率,如果不足以达到预定的准确率阈值或当划分后验证集上的分类准确率下降时,就停止划分,将当前节点设为叶节点。这种方法可以有效地防止决策树过度拟合。

  2. 后剪枝:在构建完整的决策树后,自下而上地对决策树进行剪枝。具体做法是将每个非叶节点变为叶节点,并计算剪枝后验证集(或测试集)上的分类准确率。如果剪枝后的准确率比不剪枝时高,则剪去该分支。重复该过程,直到不能再剪为止。这种方法可以更好地利用训练集的信息,使得决策树更加简洁、泛化能力更强。

  1. 预剪枝例子: 假设我们有一个数据集,用于构建一个二分类的决策树模型来预测销售人员是否能够成功销售一种产品。我们有以下特征:
  • 年龄 (Age): 青年、中年、老年
  • 收入 (Income): 低、中等、高
  • 学历 (Education): 初中、高中、大学及以上

在预剪枝中,我们可以设定一个阈值,当分裂节点的准确率无法明显提升时停止分裂。例如,我们设定了一个阈值为0.9,即当某个节点的准确率达到90%以上时,停止分裂并将该节点设置为叶节点。

  1. 后剪枝例子: 假设我们使用上述数据集构建了一个决策树模型。在模型构建完成后,我们可以使用后剪枝方法对决策树进行剪枝。

首先,我们从决策树的叶节点开始逐个判断是否需要剪枝。对于每个叶节点,我们可以计算剪枝后验证集上的准确率。如果剪枝后的准确率比不剪枝时高,那么我们就剪去该叶节点,将其转换为一个新的叶节点,使用该叶节点所代表的类别进行预测。

例如,我们剪去一个叶节点后发现剪枝后的准确率提高了,那么我们将该叶节点剪枝,并用该叶节点代表的类别进行预测。

4.连续值处理

  1. 二分法(二元切分): 对于连续值特征,我们可以选择一个阈值将数据集划分为两个子集。通过尝试不同的阈值,我们可以计算每个划分的信息增益或基尼指数,并选择具有最大增益或最小基尼指数的划分作为最佳划分点。

例如,假设我们有一个身高特征,我们可以选择一个身高阈值,将数据集分为“高于阈值”和“低于等于阈值”的两个子集。然后,根据这个划分,我们可以计算每个子集的信息增益或基尼指数,并选择最佳划分点。

     2.多分法: 在连续值特征较多且取值范围广泛时,二分法可能不够有效。此时,我们可以使用多分法来处理连续值特征。多分法通过将连续值特征离散化为多个离散值区间,将连续值转换为有序的离散值。

有几种常见的离散化方法:

  • 等宽离散化:将连续值的取值范围划分为相等宽度的区间。
  • 等频离散化:将连续值的取值范围划分为包含相等数量样本的区间。
  • 基于聚类的离散化:使用聚类算法,将连续值划分为K个区间,每个区间代表一个离散值。

然后,我们可以将离散化后的特征用于决策树的构建。在划分节点时,我们将考虑每个离散值作为一个划分分支。

5.多变量决策树:

多变量决策树(Multivariate Decision Tree,MDT)是一种决策树扩展,能够处理多个特征之间的关联关系和交互作用。

相比于传统的单变量决策树,多变量决策树可以处理特征之间的非线性关系,并能够更好地进行特征选择。在多变量决策树中,每个节点不再只考虑一个特征,而是同时考虑多个特征。

常见的多变量决策树包括 CHAID(Chi-squared Automatic Interaction Detector)、CART(Classification and Regression Tree)和C4.5 等。

以CART为例,其构建方法如下:

  1. 选择一个特征集,从中选择一个最优特征,将样本划分成两个子集,每个子集对应一个新的节点。
  2. 对于每个子集,重复步骤1,直到满足停止条件。常用的停止条件包括树深度达到预设值、叶子节点内的样本数达到预设值或者每个节点的信息增益或基尼指数低于某个阈值等。

在选择最优特征时,CART使用基尼指数来度量节点的纯度。在每个节点上,我们计算每个候选特征的基尼指数,选择基尼指数最小的特征作为最优特征。

在多变量决策树中,特征之间可能存在相关性。因此,在计算基尼指数时,我们需要考虑多个特征的组合。常用的方法是使用决策树集成算法,例如随机森林或梯度提升树,来对特征进行组合和选择。

总之,多变量决策树能够更好地处理多个特征之间的关系,提高模型的准确率和泛化能力。

总结:

通过在课堂上找对象的例子,较为全面的认识了决策树算法。

决策树的优点包括易于理解、可视化和解释,能够处理各种类型和大小的数据集,以及能够自动选择重要特征等。但是,决策树也存在过拟合和泛化能力不足的问题。

决策树的学习过程主要包含以下步骤:

  1. 特征选择:选择最佳特征进行分割。
  2. 树的构建:根据特征选择指标划分数据集,并递归地构建决策树。在每个节点上,我们选择最佳特征并将数据集划分成子集,直到满足一定条件
  3. 树的剪枝:通过剪枝来避免过拟合。我们可以使用预剪枝或后剪枝方法

决策树还有一些变种和扩展,例如随机森林、梯度提升树和多变量决策树等。随机森林使用多个独立的决策树来进行预测,并通过随机化方式来减少过拟合。梯度提升树通过迭代地加入新的决策树,并使用梯度下降来优化损失函数。多变量决策树能够处理多个特征之间的关联关系和交互作用。

总的来说,决策树的学习还是相对容易理解的,在计算信息增益以及基尼指数等数据时需要计算准确,否则会带来错误结果

你可能感兴趣的:(决策树,学习,笔记)