【人工智能-初级】第6章 决策树和随机森林:浅显易懂的介绍及Python实践

news/2024/10/21 21:36:14/

文章目录

一、决策树简介

决策树(Decision Tree)是一种树状结构的监督学习算法,可以用于分类和回归任务。它通过递归地将数据划分成不同的子集,直至每个子集只包含一个类别(对于分类问题)或达到某种特定的条件(对于回归问题)。

决策树非常直观,类似于人们在做决定时的思维过程。例如,在判断是否买房时,可能会依次考虑预算、房屋位置和是否满足个人需求等因素。决策树的结构由节点(node)和边(branch)组成,节点表示数据特征,边表示根据特征划分的数据路径。

二、决策树的构建原理

决策树的构建过程主要包括以下几步:

  1. 选择特征进行分裂:在每个节点,选择一个特征对数据进行划分,使得划分后的子集之间的纯度(或均匀度)尽可能高。
  2. 分裂节点:根据选择的特征将数据划分为两个或多个子集。
  3. 停止条件:递归地对每个子集构建子节点,直至满足停止条件(如树的最大深度,或节点中的样本数小于某个阈值)。

在选择特征进行分裂时,通常会使用一些标准来衡量子集的纯度,包括:

  • 基尼不纯度(Gini Impurity):用于衡量节点中样本的混杂程度,值越小表示节点越纯。
    G = 1 − ∑ i = 1 k p i 2 G = 1 - \sum_{i=1}^{k} p_i^2 G=1i=1kpi2
    其中,p_i 表示第 i 类样本的比例。

  • 信息增益(Information Gain):用于衡量使用某个特征划分后的不确定性减少的程度。
    I G = H ( D ) − ∑ i = 1 m ∣ D i ∣ ∣ D ∣ H ( D i ) IG = H(D) - \sum_{i=1}^{m} \frac{|D_i|}{|D|} H(D_i) IG=H(D)i=1mDDiH(Di)
    其中,H(D) 表示数据集 D 的熵,|D_i| 表示划分后的子集 D_i 的大小。

2.1 决策树的优缺点

优点
  1. 易于理解决策树的结构简单直观,可以将复杂的决策过程可视化。
  2. 适应性强决策树能够处理数值型和类别型特征,并且对数据的预处理要求较低。
  3. 能够处理多类别问题决策树可以自然地处理多类别的分类问题。
缺点
  1. 容易过拟合:当决策树的深度过大时,模型容易学习到数据中的噪声,导致过拟合。
  2. 对小数据变化敏感:由于决策树的每一次划分都会影响后续的结构,数据的轻微变化可能会导致决策树的结构发生较大变化。

三、随机森林简介

随机森林(Random Forest)是一种集成学习方法,通过结合多个决策树的预测结果来提高分类或回归的性能。它通过随机采样和特征选择来生成多个相互独立的决策树,并将这些决策树的输出通过投票(分类任务)或平均(回归任务)来得到最终的预测结果。

3.1 随机森林的构建过程

  1. 随机采样:从原始数据集中有放回地随机抽取样本,生成多个训练数据集,这一过程称为 Bagging(Bootstrap Aggregating)
  2. 特征选择:在构建每棵决策树时,随机选择部分特征用于分裂节点,以保证每棵树的多样性。
  3. 集成决策:对于分类任务,通过投票的方式决定最终分类结果;对于回归任务,通过取平均值来得到最终预测结果。

3.2 随机森林的优缺点

优点
  1. 高准确率:由于随机森林结合了多个决策树,能够显著提高模型的准确率和鲁棒性。
  2. 防止过拟合随机森林通过随机采样和特征选择,减少了单棵决策树可能出现的过拟合问题。
  3. 特征重要性随机森林可以评估每个特征对分类结果的重要性,从而帮助理解数据。
缺点
  1. 计算复杂度高:构建和集成多个决策树需要较高的计算资源和时间。
  2. 不可解释性:相比单棵决策树随机森林的结构更复杂,不容易进行可视化和解释。

四、Python实现决策树随机森林

接下来我们通过Python来实现决策树随机森林,使用 scikit-learn 库来帮助我们完成这一任务。

4.1 导入必要的库

首先,我们需要导入一些必要的库:

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, plot_tree
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
  • numpy:用于数值计算。
  • matplotlib:用于数据可视化。
  • sklearn.datasets:用于加载 Iris 数据集,这是一个经典的多分类数据集。
  • train_test_split:用于将数据集拆分为训练集和测试集。
  • DecisionTreeClassifier:用于创建决策树分类器。
  • RandomForestClassifier:用于创建随机森林分类器。
  • accuracy_score, confusion_matrix, classification_report:用于评估模型的性能。

4.2 加载数据集并进行预处理

我们使用 Iris 数据集,这是一个常用的多分类数据集,包含三类花(山鸢尾、变色鸢尾、维吉尼亚鸢尾),每类有50个样本。

# 加载Iris数据集
data = load_iris()
X = data.data
y = data.target# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • load_iris():加载Iris数据集,X 是特征矩阵,y 是标签。
  • train_test_split:将数据集拆分为训练集和测试集,20%的数据用于测试。

4.3 创建决策树模型并进行训练

我们创建一个决策树分类器,并用训练集进行模型训练。

# 创建决策树分类器
dt = DecisionTreeClassifier(criterion='gini', max_depth=3, random_state=42)# 训练模型
dt.fit(X_train, y_train)
  • DecisionTreeClassifier(criterion=‘gini’, max_depth=3):创建决策树分类器,使用基尼不纯度作为分裂标准,最大深度为3。
  • dt.fit(X_train, y_train):用训练数据拟合决策树模型。

4.4 可视化决策树

为了更好地理解决策树的结构,我们可以使用 plot_tree 方法对其进行可视化。

# 可视化决策树
plt.figure(figsize=(12, 8))
plot_tree(dt, filled=True, feature_names=data.feature_names, class_names=data.target_names)
plt.show()

通过上述代码,我们可以看到决策树的结构,包括每个节点的特征、基尼不纯度、样本数量以及类别分布。

4.5 创建随机森林模型并进行训练

接下来,我们创建一个随机森林分类器,并用训练集进行模型训练。

# 创建随机森林分类器
rf = RandomForestClassifier(n_estimators=100, criterion='gini', random_state=42)# 训练模型
rf.fit(X_train, y_train)
  • RandomForestClassifier(n_estimators=100, criterion=‘gini’):创建随机森林分类器,包含100棵决策树,使用基尼不纯度作为分裂标准。
  • rf.fit(X_train, y_train):用训练数据拟合随机森林模型。

4.6 模型预测与评估

使用测试集对决策树随机森林模型分别进行预测,并评估其性能。

# 决策树预测
y_pred_dt = dt.predict(X_test)
accuracy_dt = accuracy_score(y_test, y_pred_dt)
print(f"决策树模型的准确率: {accuracy_dt * 100:.2f}%")# 随机森林预测
y_pred_rf = rf.predict(X_test)
accuracy_rf = accuracy_score(y_test, y_pred_rf)
print(f"随机森林模型的准确率: {accuracy_rf * 100:.2f}%")
  • dt.predict(X_test)rf.predict(X_test):分别对测试集进行预测。
  • accuracy_score:计算预测的准确率。

我们可以看到随机森林模型的准确率通常比单棵决策树要高,这是因为随机森林通过集成多个决策树的预测结果来提高模型的泛化能力。

五、总结

决策树是一种简单直观的监督学习算法,可以用于分类和回归任务。它通过递归地将数据划分成不同的子集,直至达到某种特定的条件。随机森林则是通过结合多个决策树来提高模型的性能,是一种强大的集成学习方法。

5.1 学习要点

  1. 决策树原理决策树通过递归划分数据来建立分类或回归模型,使用基尼不纯度或信息增益来衡量划分的好坏。
  2. 随机森林原理随机森林结合了多个决策树,通过随机采样和特征选择来提高模型的准确率和鲁棒性。
  3. Python实现:可以使用 scikit-learn 库中的 DecisionTreeClassifierRandomForestClassifier 轻松实现决策树随机森林

5.2 练习题

  1. 使用决策树Iris 数据集进行回归任务,观察模型的表现。
  2. 使用 sklearn.datasets 模块中的 load_wine 数据集,构建一个随机森林分类模型,预测葡萄酒的类别。
  3. 尝试调整决策树随机森林的参数,如树的最大深度、估计器数量等,观察模型的性能变化。

希望本文能帮助您更好地理解决策树随机森林的基本概念和实现方法。下一篇文章将为您介绍K-Means聚类及其Python实现。如果有任何问题,欢迎在评论中讨论!


http://www.ppmy.cn/news/1540905.html

相关文章

电子商务网站维护技巧:保持WordPress、主题和插件的更新

在这个快节奏的数字时代,维护一个电子商务网站的首要任务之一是保持WordPress、主题和插件的最新状态。过时的软件不仅可能导致功能故障,还可能带来安全风险。本文将深入探讨如何有效地更新和维护您的WordPress网站,以确保其安全性和性能。 …

Dockerfile 中 Expose 命令的作用

Dockerfile 中 Expose 命令的作用 格式是&#xff1a;EXPOSE <端口1> [<端口2>...] 例如&#xff1a; EXPOSE 8080 8081 8082 特别注意&#xff1a; EXPOSE 指令是声明容器运行时提供服务的端口&#xff0c;请注意这只是一个声明&#xff0c;并没有实际作用&am…

中阳金融市场中的风险管理与投资优化策略

在全球经济波动性不断加剧的背景下&#xff0c;金融市场的复杂性与不确定性显著增加。作为国际金融市场中的重要组成部分&#xff0c;中阳金融市场吸引了大量投资者的关注。面对风险与机遇并存的市场环境&#xff0c;如何合理制定风险管理与投资优化策略&#xff0c;成为投资者…

PP-ChatOCRv3—文档场景信息抽取v3产线使用教程

文档场景信息抽取v3产线使用教程 1. 文档场景信息抽取v3产线介绍 文档场景信息抽取v3&#xff08;PP-ChatOCRv3&#xff09;是飞桨特色的文档和图像智能分析解决方案&#xff0c;结合了 LLM 和 OCR 技术&#xff0c;一站式解决版面分析、生僻字、多页 pdf、表格、印章识别等常…

简单易用的分类任务开源项目 :classification

项目地址&#xff1a;https://gitcode.net/EricLee/classification 物体识别分类&#xff0c;pytorch 目前数据集 包括 1&#xff09;Stanford Dogs 数据集 &#xff0c; 2&#xff09;14类静态手势自建数据集&#xff0c; 3&#xff09;imagenet 1000类数据集 classifica…

从传统到智能,从被动监控到主动预警,解锁视频安防平台EasyCVR视频监控智能化升级的关键密钥

视频监控技术从传统监控到智能化升级的过程是一个技术革新和应用场景拓展的过程。智能视频监控系统通过集成AI和机器学习算法&#xff0c;能够实现行为分析、人脸识别和异常事件检测等功能&#xff0c;提升了监控的准确性和响应速度。这些系统不仅用于传统的安全防护&#xff0…

RabbitMQ 中的交换机学习

RabbitMQ 中的交换机学习 一、直接交换机&#xff08;Direct Exchange&#xff09; 1. 介绍 Direct 交换机将消息路由到绑定了指定 Routing Key 的队列中。每条消息都有一个 Routing Key&#xff0c;当队列绑定到 Direct 交换机时&#xff0c;它需要一个指定的 Routing Key。…

Cocos Creator导出obj文件用于后端寻路

Cocos Creator 3.8.0 用这个扩展插件 【杨宗宝】两年前写的网格工具&#xff0c;今天将它开源了。 - Creator 3.x - Cocos中文社区carlosyzy_extensions_mesh: Cocos Creator 3.x mesh插件&#xff0c;负责网格数据的导出。合并&#xff0c;拆封等一系列操作 (gitee.com) 下…