Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)

简介: Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)

前言:

决策树是一种经典的机器学习算法,用于解决分类和回归问题。它的基本思想通过对数据集中的特征进行递归划分,构建一系列的决策规则,从而生成一个树状结构。在决策树中,每个内部节点表示对输入特征的一个测试,每个分支代表一个测试结果,而每个叶子节点表示一个类别或输出值。

决策树的发展历史可以追溯到20世纪50年代和60年代。最早的决策树算法是ID3(Iterative Dichotomiser 3),由Ross Quinlan于1986年提出。之后,C4.5算法和其改进版本C5.0也相继提出,扩展了ID3算法并加入了剪枝等优化方法。此外,还有 CART(Classification and Regression Trees)算法,由Leo Breiman等人于1984年提出,可用于分类和回归问题,并引入了基于基尼系数(Gini impurity)和均方误差(Mean Squared Error)的划分准则。

策树在机器学习领域得到了广泛的应用,具有许多优点,如易于理解、可解释性强、能够处理混合数据类型等。它适用于多种任务,包括分类、回归、特征选择等。此外,决策树还可以通过集成学习方法(如随机森林、梯度提升树)进一步提升性能,并解决决策树容易过拟合的问题。

总的来说,决策树是一种简单而有效的机器学习算法,为解决分类和回归问题提供了一种直观的方法。随着机器学习领域的发展,决策树算法也在不断地被改进和优化,为各种实际问题提供了强大的工具。

一、决策树思想

决策树的思想原理是通过对数据集中的特征进行递归划分,构建一系列的决策规则,从而生成一个树状结构。其基本思想可以总结如下:

  1. 选择最佳特征: 首先,从数据集中选择一个最佳的特征作为当前节点的划分标准。通常使用一些准则来评估特征的优劣,例如信息增益、基尼系数、均方误差等。
  2. 划分数据集:数据集根据选择的特征进行划分,生成多个子集,每个子集包含具有相同特征值的样本。
  3. 递归构建子树: 对每个子集递归地重复步骤1和步骤2,直到满足停止条件。停止条件可以是节点中样本的类别相同、达到最大深度、样本数量小于某个阈值等。
  4. 生成决策规则: 最终,每个叶子节点都表示一个类别或输出值,而每个内部节点都表示对输入特征的一个测试。通过将树的结构转化为一系列的if-then规则,可以解释数据的分类或预测过程。
  5. 剪枝优化(可选): 对生成的决策树进行剪枝优化,去除一些不必要的节点,防止过拟合。

通过这种方式,决策树可以根据输入特征对数据进行逐层的划分,构建出一个易于理解和解释的决策模型。决策树的基本思想是根据数据的特征值进行划分,通过划分后的数据集的纯度或者信息增益来选择最佳的划分特征,从而递归地构建出一个树状结构,实现对数据的分类或预测。

                                      开始
                                       |
                                       V
                             选择最佳特征作为根节点
                                       |
                                       V
              划分数据集,生成子集,选择最佳特征作为当前节点的划分标准
                     /              |              \
                    /               |               \
                   /                |                \
  子集1满足停止条件?           子集2满足停止条件?           子集3满足停止条件?
     /         |         \            /         |         \    
    /          |          \          /          |          \
   V           V           V        V           V           V
  生成叶子节点   递归构建子树    生成叶子节点   递归构建子树     生成叶子节点
     |               |               |               |               |
     V               V               V               V               V
    返回             返回             返回             返回             返回
     |               |               |               |               |
     V               V               V               V               V
                                      结束

二、经典决策树算法

经典的决策树算法包括ID3(Iterative Dichotomiser 3)、C4.5(Classification and Regression Trees)以及CART(Classification and Regression Trees)。这些算法在构建决策树时采用了不同的思想和策略,下面简要介绍它们的思想和实现步骤:

  1. ID3(Iterative Dichotomiser 3)
  • 思想: ID3算法是一种基于信息熵的决策树算法,它通过选择使得信息增益最大的特征来进行划分,以减少数据集的不确定性。
  • 实现步骤:
  1. 从所有特征中选择使得信息增益最大的特征作为当前节点的划分标准。
  2. 根据选定的特征进行划分,生成子集。
  3. 对每个子集递归地重复步骤1和步骤2,直到满足停止条件。
  4. 生成叶子节点,表示类别或输出值。
  5. 返回。
  1. C4.5(Classification and Regression Trees)
  • 思想: C4.5算法是ID3的改进版本,它在选择划分特征时采用信息增益比来解决ID3算法对取值数目较多特征的偏好。
  • 实现步骤:
  1. 从所有特征中选择使得信息增益比最大的特征作为当前节点的划分标准。
  2. 根据选定的特征进行划分,生成子集。
  3. 对每个子集递归地重复步骤1和步骤2,直到满足停止条件。
  4. 生成叶子节点,表示类别或输出值。
  5. 返回。
  1. CART(Classification and Regression Trees)
  • 思想: CART算法是一种同时适用于分类和回归问题的决策树算法,它通过选择使得基尼系数最小的特征来进行划分,以提高树的纯度。
  • 实现步骤:
  1. 从所有特征中选择使得基尼系数最小的特征作为当前节点的划分标准。
  2. 根据选定的特征进行划分,生成子集。
  3. 对每个子集递归地重复步骤1和步骤2,直到满足停止条件。
  4. 生成叶子节点,表示类别或输出值。
  5. 返回。

这些经典的决策树算法在实现时都采用了递归的思想,通过选择最佳的划分特征来构建树结构,直到满足停止条件为止。每个算法在选择划分特征时都采用了不同的指标,如信息增益、信息增益比、基尼系数等,以达到不同的优化目标。

三、算法应用案列

基于Python 和 Scikit-learn 库实现决策树算法的简单示例代码,用于解决分类问题:

首先我们将使用鸢尾花数据集,并尝试根据花萼和花瓣的长度和宽度来预测鸢尾花的品种。

第一步是加载了鸢尾花数据集,并选择花萼长度和花瓣长度作为特征。然后将数据分为训练集和测试集,并创建了一个决策树模型并在训练集上拟合了模型。最后,使用Matplotlib绘制了训练集和测试集的数据点,并在图上绘制了决策边界。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
 
# 加载鸢尾花数据集
iris = load_iris()
 
# 选择花萼长度和花瓣长度作为特征
X = iris.data[:, [0, 2]]
y = iris.target
 
# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.29, random_state=42)
 
# 创建决策树模型
model = DecisionTreeClassifier()
 
# 在训练集上拟合模型
model.fit(X_train, y_train)
 
# 在测试集上进行预测
y_pred = model.predict(X_test)
 
# 计算模型的准确率
accuracy = accuracy_score(y_test, y_pred)
print("模型的准确率:", accuracy)
 
# 打印分类报告
print("分类报告:")
print(classification_report(y_test, y_pred))
 
# 绘制数据变化图
plt.figure(figsize=(10, 6))
 
# 绘制训练集数据点
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap='viridis', label='Training Set')
 
# 绘制测试集数据点
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='viridis', marker='x', label='Test Set')
 
# 绘制决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),
                     np.arange(y_min, y_max, 0.01))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.3, cmap='viridis')
 
plt.xlabel('Sepal Length (cm)')
plt.ylabel('Petal Length (cm)')
plt.title('Decision Tree Classifier - Iris Dataset')
 
plt.legend()
plt.colorbar(label='Target Class')
 
plt.show()

执行结果:数据集划分29%测试集,71%训练集。精确率约为95%

四、总结

算法

  • 原理简单直观: 决策树基于对数据集中特征的递归划分,生成一系列的决策规则,形成树状结构,易于理解和解释。
  • 可解释性强: 决策树模型生成的规则可以直观地解释为基于哪些特征进行分类或预测,为决策过程提供了透明度。
  • 能够处理混合数据类型: 决策树算法能够处理包括连续型和离散型特征在内的多种数据类型。
  • 适用于多种任务: 决策树可用于分类和回归问题,并且能够进行特征选择和缺失值处理等任务。
  • 可扩展性好: 决策树可以与其他算法结合,如随机森林和梯度提升树等,以提高预测性能。

决策树算法应用:

  • 医疗诊断: 决策树可用于根据患者的症状和体征进行医学诊断,帮助医生做出治疗决策。
  • 金融风险评估: 决策树可用于根据借款人的信用记录和财务状况来评估贷款风险,并决定是否批准贷款。
  • 市场营销: 决策树可用于分析客户的行为和偏好,帮助企业制定个性化的营销策略。
  • 生态学研究: 决策树可用于分析生态系统中不同因素之间的关系,帮助科学家理解生态系统的结构和功能。

决策树算法优缺点:

优点:

  1. 简单直观,易于理解和解释。
  2. 可解释性强,生成的规则直观可见。
  3. 能够处理混合数据类型,包括连续型和离散型特征。
  4. 适用于多种任务,包括分类、回归、特征选择等。
  5. 可扩展性好,能够与其他算法结合提高预测性能。

缺点:

  1. 容易过拟合,特别是在处理复杂数据集时。
  2. 对于类别数量较多的特征,决策树倾向于选择类别数较多的特征进行划分。
  3. 不稳定性高,对输入数据的小变化可能会导致树结构的大变化。
  4. 在处理连续型数据时可能产生过于复杂的树结构,需要进行剪枝等操作来减少模型复杂度。


相关文章
|
1月前
|
机器学习/深度学习 算法 Python
探索机器学习中的决策树算法:从理论到实践
【10月更文挑战第5天】本文旨在通过浅显易懂的语言,带领读者了解并实现一个基础的决策树模型。我们将从决策树的基本概念出发,逐步深入其构建过程,包括特征选择、树的生成与剪枝等关键技术点,并以一个简单的例子演示如何用Python代码实现一个决策树分类器。文章不仅注重理论阐述,更侧重于实际操作,以期帮助初学者快速入门并在真实数据上应用这一算法。
|
13天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
1月前
|
机器学习/深度学习 存储 算法
基于机器学习的地震预测(Earthquake Prediction with Machine Learning)(下)
基于机器学习的地震预测(Earthquake Prediction with Machine Learning)
26 0
|
1月前
|
机器学习/深度学习 存储 数据可视化
基于机器学习的地震预测(Earthquake Prediction with Machine Learning)(上)
基于机器学习的地震预测(Earthquake Prediction with Machine Learning)
36 0
|
2月前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【9月更文挑战第12天】决策树算法作为机器学习领域的一颗明珠,凭借其直观易懂和强大的解释能力,在分类与回归任务中表现出色。相比传统统计方法,决策树通过简单的分支逻辑实现了数据的精准分类。本文将借助Python和scikit-learn库,以鸢尾花数据集为例,展示如何使用决策树进行分类,并探讨其优势与局限。通过构建一系列条件判断,决策树不仅模拟了人类决策过程,还确保了结果的可追溯性和可解释性。无论您是新手还是专家,都能轻松上手,享受机器学习的乐趣。
47 9
|
1月前
|
机器学习/深度学习 人工智能 算法
【机器学习】决策树算法
【机器学习】决策树算法
|
3月前
|
机器学习/深度学习 存储 Linux
【机器学习 Azure Machine Learning】使用VS Code登录到Linux VM上 (Remote-SSH), 及可直接通过VS Code编辑VM中的文件
【机器学习 Azure Machine Learning】使用VS Code登录到Linux VM上 (Remote-SSH), 及可直接通过VS Code编辑VM中的文件
|
3月前
|
机器学习/深度学习 Ubuntu Linux
【机器学习 Azure Machine Learning】使用Aure虚拟机搭建Jupyter notebook环境,为Machine Learning做准备(Ubuntu 18.04,Linux)
【机器学习 Azure Machine Learning】使用Aure虚拟机搭建Jupyter notebook环境,为Machine Learning做准备(Ubuntu 18.04,Linux)
|
3月前
|
机器学习/深度学习 算法 数据可视化
决策树算法介绍:原理与案例实现
决策树算法介绍:原理与案例实现
|
3月前
|
SQL 机器学习/深度学习 开发工具
【机器学习 Azure Machine Learning】Azure Machine Learning 访问SQL Server 无法写入问题 (使用微软Python AML Core SDK)
【机器学习 Azure Machine Learning】Azure Machine Learning 访问SQL Server 无法写入问题 (使用微软Python AML Core SDK)