news 2026/2/25 4:53:24

决策树与回归树简介:原理、实现与应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
决策树与回归树简介:原理、实现与应用

文章目录

    • 一、决策树基本概念
    • 二、决策树分类算法
      • 1. ID3算法
      • 2. C4.5算法
      • 3. CART决策树
    • 三、决策树回归模型
      • 1. 回归树特点
      • 2. 回归树计算示例
    • 四、Scikit-learn中的决策树实现
      • 1. 分类决策树参数
      • 2. 回归决策树参数
    • 五、Python实现示例
      • 1. 分类决策树实现
    • 六、决策树剪枝
      • 1. 剪枝的目的
      • 2. 剪枝方法
      • 3. 预剪枝策略
    • 七、模型评估指标
      • 1. AUC-ROC曲线
      • 2. AUC的优点

一、决策树基本概念

决策树是一种有监督学习算法,通过对训练样本的学习建立分类或回归规则,并依据这些规则对新样本进行预测。它的核心思想是将数据从根节点逐步划分到叶子节点,形成一个树状结构。

决策树的组成

  • 根节点:第一个节点,包含所有数据
  • 非叶子节点(中间节点):进行数据划分的节点
  • 叶子节点:最终结果节点,不再继续划分

二、决策树分类算法

决策树主要有三种分类标准:

1. ID3算法

使用信息增益作为分裂标准,基于熵值衡量节点的不确定性。

熵值计算公式
H ( U ) = − ∑ i = 1 n p i log ⁡ 2 p i H(U) = -\sum_{i=1}^n p_i \log_2 p_iH(U)=i=1npilog2pi

熵值越小,节点越"纯",包含的类别越单一。

2. C4.5算法

使用信息增益率作为分裂标准,解决了ID3算法倾向于选择取值较多的特征的问题。

3. CART决策树

使用基尼系数作为分裂标准,可以用于分类和回归问题。

基尼系数计算公式(二分类)
G i n i ( p ) = 2 p ( 1 − p ) Gini(p) = 2p(1-p)Gini(p)=2p(1p)

三、决策树回归模型

1. 回归树特点

  • 解决回归问题的决策树模型
  • 必须是二叉树结构
  • 节点分裂依据是使均方误差(MSE)最小化

2. 回归树计算示例

以简单数据集为例:

x12345678910
y5.565.75.916.46.87.058.98.799.05

通过计算不同切分点的损失函数,找到最优切分点,逐步构建回归树。

损失函数
L ( j , s ) = ∑ x i ∈ R 1 ( j , s ) ( y i − c ^ 1 ) 2 + ∑ x i ∈ R 2 ( j , s ) ( y i − c ^ 2 ) 2 L(j, s) = \sum_{x_i \in R_1(j, s)} (y_i - \hat{c}_1)^2 + \sum_{x_i \in R_2(j, s)} (y_i - \hat{c}_2)^2L(j,s)=xiR1(j,s)(yic^1)2+xiR2(j,s)(yic^2)2

其中c ^ 1 \hat{c}_1c^1c ^ 2 \hat{c}_2c^2分别是两个区域的样本均值。

四、Scikit-learn中的决策树实现

1. 分类决策树参数

fromsklearn.treeimportDecisionTreeClassifier

主要参数说明

  • criterion: 分裂标准,‘gini’(基尼系数)或 ‘entropy’(信息熵)
  • max_depth: 树的最大深度,防止过拟合
  • min_samples_split: 分裂内部节点所需的最小样本数
  • min_samples_leaf: 叶子节点最少样本数
  • max_leaf_nodes: 最大叶子节点数
  • random_state: 随机种子,保证结果可重复

2. 回归决策树参数

fromsklearn.treeimportDecisionTreeRegressor

主要参数说明:

  • criterion: 分裂标准,‘mse’(均方误差)或 ‘mae’(平均绝对误差)
  • 其他参数与分类树类似

五、Python实现示例

1. 分类决策树实现

importpandasaspdfromsklearnimporttreefromsklearn.model_selectionimporttrain_test_splitfromsklearnimportmetricsimportmatplotlib.pyplotaspltfromsklearn.metricsimportconfusion_matrix# 可视化混淆矩阵函数defcm_plot(y,yp):cm=confusion_matrix(y,yp)plt.matshow(cm,cmap=plt.cm.Blues)plt.colorbar()forxinrange(len(cm)):fory_inrange(len(cm)):plt.annotate(cm[x,y_],xy=(y_,x),horizontalalignment='center',verticalalignment='center')plt.ylabel('True label')plt.xlabel('Predicted label')returnplt# 导入数据datas=pd.read_excel("电信客户流失数据.xlsx")# 划分特征和标签data=datas.iloc[:,:-1]target=datas.iloc[:,-1]# 划分训练集和测试集data_train,data_test,target_train,target_test=\ train_test_split(data,target,test_size=0.2,random_state=42)# 创建决策树分类器dtr=tree.DecisionTreeClassifier(criterion='gini',max_depth=5,random_state=60)# 训练模型dtr.fit(data_train,target_train)# 训练集预测train_predicted=dtr.predict(data_train)# 评估训练集print(metrics.classification_report(target_train,train_predicted))cm_plot(target_train,train_predicted).show()# 测试集预测test_predicted=dtr.predict(data_test)# 评估测试集print(metrics.classification_report(target_test,test_predicted))cm_plot(target_test,test_predicted).show()# 模型评分score=dtr.score(data_test,target_test)print(f"模型准确率:{score}")


六、决策树剪枝

1. 剪枝的目的

防止过拟合,提高模型泛化能力。

2. 剪枝方法

  • 预剪枝:在树构建过程中提前停止生长
    • 限制树的深度
    • 限制叶子节点的个数
    • 限制叶子节点的样本数
  • 后剪枝:先构建完整的树,然后自底向上进行剪枝

3. 预剪枝策略

  1. 限制树的深度(max_depth)
  2. 限制叶子节点的个数(max_leaf_nodes)
  3. 限制分裂节点的最小样本数(min_samples_split)
  4. 限制叶子节点的最小样本数(min_samples_leaf)

七、模型评估指标

1. AUC-ROC曲线

  • AUC:曲线下面积,衡量模型对正负样本的区分能力
  • ROC:接收者操作特征曲线,显示不同阈值下真正例率和假正例率的关系

2. AUC的优点

  • 考虑了分类器对正例和负例的分类能力
  • 在样本不平衡的情况下依然有效
  • 不受样本不平衡问题影响,是相对稳健的评价指标
# AUC值计算y_pred_proba=dtr.predict_proba(data_test)a=y_pred_proba[:,1]auc_result=metrics.roc_auc_score(target_test,a)print(f"AUC值:{auc_result}")# 绘制ROC曲线fromsklearn.metricsimportroc_curve fpr,tpr,thresholds=roc_curve(target_test,a)plt.figure()plt.plot(fpr,tpr,color='darkorange',lw=2,label=f'ROC curve (area={auc_result:.2f})')plt.plot([0,1],[0,1],color='navy',lw=2,linestyle='--')plt.xlim([0.0,1.0])plt.ylim([0.0,1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('Receiver Operating Characteristic')plt.legend()plt.show()

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/24 18:57:31

sql server自动备份

1.在管理中点击维护计划向导 2.填写任务名称,点击更改 3.选择需要的备份时间,点击确定 4.勾选备份完整数据库 5.点击下一步 6.选择指定数据库 7.选择备份路径 8.选择完成后点击下一步 9.选择清除任务 10.点击下一步 11.点击完成 12.点击执行任务测试是否…

作者头像 李华
网站建设 2026/2/16 5:51:20

vue和springboot框架开发的救援物资管理系统_55j08br6

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 同行可拿货,招校园代理 vuespringboot_55j08br6 框架开发的救援物资管理系统…

作者头像 李华
网站建设 2026/2/16 17:56:49

制药行业质量与效率双提升:精益六西格玛的应用路径与价值分析

在全球制药行业面临成本压力持续增大、质量监管日趋严格、研发周期长且市场竞争激烈的背景下,制药企业迫切需要系统性的管理方法来提升运营效率和质量控制水平。本报告旨在深入分析精益六西格玛方法论在制药行业的应用价值,探讨其如何帮助企业实现质量与…

作者头像 李华
网站建设 2026/2/20 16:18:33

vue和springboot框架开发的老人健康信息管理系统_42q6c587

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 同行可拿货,招校园代理 vuespringboot_42q6c587 框架开发的老人健康信息管理…

作者头像 李华
网站建设 2026/2/21 16:28:43

学习笔记:Kotlin Flow 操作符

Kotlin Flow 操作符 以下文章来源于RockByte ,作者RockByte. 十分钟速览 Kotlin Flow 操作符 一对一转换 map 将 Flow 中发出的每个元素转换为新元素,实现一对一映射。 fun main() runBlocking {flowOf("Kotlin", "Flow").ma…

作者头像 李华
网站建设 2026/2/20 23:32:20

2025年战略规划在商业组织治理现代化中的角色

本文将深入探讨2025年战略规划在商业组织治理现代化中的重要性。首先,战略规划为企业提供了清晰的愿景和行动方向,使得组织能够在动态市场中高效运作。同时,文中将分析市场变化带来的挑战,以及如何通过创新的治理方式来应对这些变…

作者头像 李华