用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_depth、min_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_depth、min_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_depth和min_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数据分析进阶教程》专栏 |
2 | AI大模型应用实践进阶教程 | 《AI大模型应用实践进阶教程》专栏 |
3 | Python编程知识集锦 | 《Python编程知识集锦》专栏 |
4 | 字节跳动旗下AI制作抖音视频 | 《字节跳动旗下AI制作抖音视频》专栏 |
5 | 智能辅助驾驶 | 《智能辅助驾驶》专栏 |
6 | 工具软件及IT技术集锦 | 《工具软件及IT技术集锦》专栏 |
👉 关注我 @理工男大辉郎 获取实时更新
欢迎关注、收藏或转发。
敬请关注 我的
微信搜索公众号:cnFuJH
CSDN博客:理工男大辉郎
抖音号:31580422589