50、使用scikit-learn实现决策树模型【用Python进行AI数据分析进阶教程】

用Python进行AI数据分析进阶教程50:

使用scikit-learn实现决策树模型


关键词:决策树、scikit-learn、分类模型、回归模型、模型评估

摘要:本文介绍了如何使用 Python 的 scikit-learn 库实现决策树模型,涵盖分类和回归两种主要场景。在分类部分,重点讲解了数据准备、模型创建、训练、预测与评估,并指出过拟合、数据质量和特征选择等注意事项,提供了基于鸢尾花数据集的示例代码。对于回归模型,同样阐述了建模流程,并以模拟数据演示了 DecisionTreeRegressor 的应用。文章强调了剪枝、数据预处理的重要性,并展示了关键指标(如准确率和均方误差)在模型评估中的作用。整体内容系统清晰,适合初学者掌握决策树的实战技巧。

👉 欢迎订阅🔗
《用Python进行AI数据分析进阶教程》专栏
《AI大模型应用实践进阶教程》专栏
《Python编程知识集锦》专栏
《字节跳动旗下AI制作抖音视频》专栏
《智能辅助驾驶》专栏
《工具软件及IT技术集锦》专栏


在 Python 中,scikit-learn(简称sklearn)是一个强大的机器学习库,提供了简单高效的数据挖掘和数据分析工具,其中就包含决策树模型的实现。下面将详细讲解如何使用scikit-learn实现决策树模型,包括分类和回归两种场景。

一、决策树分类模型

1、关键点

  • 数据准备将数据集划分为特征矩阵X和标签向量y,并将其分为训练集和测试集。
  • 模型创建使用DecisionTreeClassifier类创建决策树分类器,并可以设置一些参数,如max_depth(树的最大深度)、min_samples_split(节点划分所需的最小样本数)等。
  • 模型训练使用训练集数据对决策树模型进行训练。
  • 模型预测使用训练好的模型对测试集数据进行预测。
  • 模型评估使用评估指标(如准确率、召回率等)评估模型的性能。

2、注意点

  • 过拟合问题决策树容易过拟合,可通过设置合适的参数(如max_depthmin_samples_split等)进行预剪枝,或者使用后剪枝方法(如代价复杂度剪枝)。
  • 数据质量决策树对数据中的缺失值和异常值比较敏感,需要进行数据预处理。
  • 特征选择特征的选择会影响决策树的性能,可以使用特征选择方法(如信息增益、基尼系数等)选择重要的特征。

3、示例代码

Python脚本

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
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data  # 特征矩阵
y = iris.target  # 标签向量
# 划分训练集和测试集
X_train, X_test, y_train, y_test = (train_test_split(X, y, 
                                    test_size=0.3, random_state=42))
# 创建决策树分类器
clf = DecisionTreeClassifier(max_depth=3, min_samples_split=5)
# 训练模型
clf.fit(X_train, y_train)
# 预测测试集
y_pred = clf.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")

重点语句解读

  • iris = load_iris():使用load_iris函数加载鸢尾花数据集。
  • X = iris.data 和 y = iris.target:分别提取特征矩阵X和标签向量y
  • X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42):使用train_test_split函数将数据集划分为训练集和测试集,test_size=0.3表示测试集占总数据集的 30%,random_state=42用于保证每次划分的结果一致。
  • clf = DecisionTreeClassifier(max_depth=3, min_samples_split=5):创建决策树分类器,max_depth=3表示树的最大深度为 3,min_samples_split=5表示节点划分所需的最小样本数为 5。
  • clf.fit(X_train, y_train):使用训练集数据对决策树模型进行训练。
  • y_pred = clf.predict(X_test):使用训练好的模型对测试集数据进行预测。
  • accuracy = accuracy_score(y_test, y_pred):使用accuracy_score函数计算预测结果的准确率。

二、决策树回归模型

1、关键点

  • 数据准备同样需要将数据集划分为特征矩阵X和目标值向量y,并分为训练集和测试集。
  • 模型创建使用DecisionTreeRegressor类创建决策树回归器,并可以设置一些参数,如max_depthmin_samples_split等。
  • 模型训练使用训练集数据对决策树回归模型进行训练。
  • 模型预测使用训练好的模型对测试集数据进行预测。
  • 模型评估使用评估指标(如均方误差、决定系数等)评估模型的性能。

2、注意点

  • 过拟合问题与分类模型类似,决策树回归模型也容易过拟合,需要进行剪枝处理。
  • 数据分布决策树回归模型对数据的分布比较敏感,需要进行数据预处理(如标准化、归一化等)。

3、示例代码

Python脚本

# 从 sklearn 库的 datasets 模块导入 load_boston 函数,
# 不过该函数在 sklearn 1.2 及以后版本已移除
# 这里导入只是注释提及,实际未使用,仅作历史参考
# 从 sklearn 库的 model_selection 模块导入 train_test_split 函数
# 该函数用于将数据集划分为训练集和测试集
from sklearn.model_selection import train_test_split
# 从 sklearn 库的 tree 模块导入 DecisionTreeRegressor 类
# 该类用于创建决策树回归模型
from sklearn.tree import DecisionTreeRegressor
# 从 sklearn 库的 metrics 模块导入 mean_squared_error 函数
# 该函数用于计算均方误差,衡量回归模型的预测误差
from sklearn.metrics import mean_squared_error

# 注释说明:波士顿房价数据集在 sklearn 1.2 及以后版本中已移除,
# 这里假设使用其他回归数据集替代
# 下面的代码是模拟生成一个自定义的回归数据集,
# 实际使用时需替换为合适的数据集加载方式
import numpy as np
# 使用 np.random.rand 函数生成一个形状为 (100, 5) 的二维数组 X
# 表示有 100 个样本,每个样本有 5 个特征
X = np.random.rand(100, 5)
# 使用 np.random.rand 函数生成一个长度为 100 的一维数组 y
# 表示 100 个样本对应的目标值
y = np.random.rand(100)

# 使用 train_test_split 函数将特征矩阵 X 和目标值向量 y 划分为训练集和测试集
# test_size=0.3 表示测试集占总数据集的 30%
# random_state=42 是随机数种子,保证每次划分的结果一致,方便结果复现
X_train, X_test, y_train, y_test = (train_test_split(X, y,
                                   test_size=0.3, random_state=42))

# 创建一个 DecisionTreeRegressor 类的实例 regressor,即决策树回归器
# max_depth=3 表示决策树的最大深度为 3,防止树生长过深导致过拟合
# min_samples_split=5 表示一个节点要进行划分时,
# 至少需要包含 5 个样本,同样是为了防止过拟合
regressor = DecisionTreeRegressor(max_depth=3, min_samples_split=5)

# 调用决策树回归器的 fit 方法,使用训练集数据 X_train 和对应的目标值 y_train 
# 对模型进行训练.训练过程就是让决策树学习特征和目标值之间的关系,构建决策树结构
regressor.fit(X_train, y_train)

# 调用训练好的决策树回归器的 predict 方法,使用测试集数据 X_test 进行预测
# 预测结果存储在变量 y_pred 中
y_pred = regressor.predict(X_test)

# 调用 mean_squared_error 函数,
# 计算测试集真实目标值 y_test 和预测目标值 y_pred 之间的均方误差
# 均方误差反映了预测值与真实值之间的平均误差程度,值越小说明模型预测效果越好
mse = mean_squared_error(y_test, y_pred)

# 使用 f-string 格式化输出均方误差
# 打印出训练好的决策树回归模型在测试集上的均方误差
print(f"Mean Squared Error: {mse}")

输出 / 打印结果及注释

代码的输出结果会类似如下形式:

plaintext

Mean Squared Error: 0.0823456789  # 这里的数值是随机示例,实际每次运行会不同

  • Mean Squared Error:表示决策树回归模型在测试集上的均方误差。均方误差衡量了模型预测值与真实值之间的平均误差程度。这个值越小,说明模型的预测效果越好。由于代码中使用的是随机生成的数据集,每次运行代码时,数据集的具体数值会不同,因此均方误差的结果也会有所波动。

重点语句解读

  • 数据加载部分(这里是模拟)使用np.random.rand函数生成模拟的特征矩阵X和目标值向量y。在实际应用中,需要根据具体情况加载合适的回归数据集。
  • X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42):将数据集划分为训练集和测试集,与分类模型中的划分方法相同。
  • regressor = DecisionTreeRegressor(max_depth=3, min_samples_split=5):创建决策树回归器,设置max_depthmin_samples_split参数。
  • regressor.fit(X_train, y_train):使用训练集数据对决策树回归模型进行训练。
  • y_pred = regressor.predict(X_test):使用训练好的模型对测试集数据进行预测。
  • mse = mean_squared_error(y_test, y_pred):使用mean_squared_error函数计算预测结果的均方误差,均方误差越小,说明模型的预测效果越好。

通过以上步骤,我们可以使用scikit-learn实现决策树分类和回归模型,并对模型的性能进行评估。在实际应用中,需要根据具体问题选择合适的模型和参数,并进行必要的数据预处理和模型调优。

——The END——


🔗 欢迎订阅专栏

序号专栏名称说明
1用Python进行AI数据分析进阶教程《用Python进行AI数据分析进阶教程》专栏
2AI大模型应用实践进阶教程《AI大模型应用实践进阶教程》专栏
3Python编程知识集锦《Python编程知识集锦》专栏
4字节跳动旗下AI制作抖音视频《字节跳动旗下AI制作抖音视频》专栏
5智能辅助驾驶《智能辅助驾驶》专栏
6工具软件及IT技术集锦《工具软件及IT技术集锦》专栏

👉 关注我 @理工男大辉郎 获取实时更新

欢迎关注、收藏或转发。
敬请关注 我的
微信搜索公众号:cnFuJH
CSDN博客:理工男大辉郎
抖音号:31580422589

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

理工男大辉郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值