当前位置: 首页 > news >正文

【机器学习笔记 Ⅱ】11 决策树模型

决策树模型(Decision Tree)详解

决策树是一种树形结构的监督学习模型,通过一系列规则对数据进行分类或回归。其核心思想是模仿人类决策过程,通过不断提问(基于特征划分)逐步逼近答案。


1. 核心概念
  • 节点类型
    • 根节点:起始问题(最佳特征划分点)。
    • 内部节点:中间决策步骤(特征判断)。
    • 叶节点:最终预测结果(类别或数值)。
  • 分支:对应特征的取值或条件判断(如“年龄≥30?”)。

2. 构建决策树的关键步骤
(1) 特征选择

选择最优特征进行划分,常用准则:

  • 分类任务

  • 回归任务

    • 均方误差(MSE)最小化:选择使子节点方差下降最多的特征。
(2) 划分停止条件
  • 当前节点样本属于同一类别。
  • 样本数少于预设阈值(如min_samples_split=5)。
  • 树的深度达到最大值(max_depth)。
(3) 剪枝(防止过拟合)
  • 预剪枝:在划分前评估,若划分不能提升性能则停止。
  • 后剪枝:先生成完整树,再自底向上剪枝(如CCP方法)。

3. 决策树示例

问题:预测是否批准贷款。
特征:年龄、收入、信用评分。
树结构

  1. 根节点:信用评分 ≥ 650?
    • 是 → 叶节点:批准。
    • 否 → 内部节点:收入 ≥ 50k?
      • 是 → 叶节点:批准。
      • 否 → 叶节点:拒绝。

4. 代码实现
(1) Scikit-learn分类树
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris# 加载数据
data = load_iris()
X, y = data.data, data.target# 训练模型
clf = DecisionTreeClassifier(criterion='gini', max_depth=3)
clf.fit(X, y)# 可视化树
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 8))
plot_tree(clf, filled=True, feature_names=data.feature_names, class_names=data.target_names)
plt.show()

决策树可视化

(2) Scikit-learn回归树
from sklearn.tree import DecisionTreeRegressor
from sklearn.datasets import fetch_california_housingdata = fetch_california_housing()
X, y = data.data, data.targetreg = DecisionTreeRegressor(max_depth=2)
reg.fit(X, y)

5. 优缺点对比
优点缺点
1. 可解释性强:规则直观易懂。1. 容易过拟合:需剪枝或限制深度。
2. 无需特征缩放:对数据分布不敏感。2. 不稳定:数据微小变化可能导致树结构剧变。
3. 处理混合类型数据:数值和类别特征均可。3. 偏向多值特征:信息增益可能偏好取值多的特征。

6. 进阶应用
(1) 集成方法
  • 随机森林(Random Forest):多棵决策树投票,降低方差。
  • 梯度提升树(GBDT/XGBoost):逐步修正前序树的误差。
(2) 多输出任务
  • 支持同时预测多个目标(如分类+回归)。
(3) 解释工具
  • SHAP值:量化特征对单样本预测的影响。
    import shap
    explainer = shap.TreeExplainer(clf)
    shap_values = explainer.shap_values(X)
    shap.summary_plot(shap_values, X, feature_names=data.feature_names)
    

7. 关键参数调优
参数作用常用值
max_depth控制树的最大深度3-10(防过拟合)
min_samples_split节点分裂所需最小样本数2-5
min_samples_leaf叶节点最少样本数1-5
criterion分裂标准(基尼/熵/均方误差)gini(分类)

8. 总结
  • 决策树本质:通过递归划分特征空间实现预测。
  • 适用场景
    • 需要可解释性的业务(如金融风控、医疗诊断)。
    • 小规模数据集或特征含义明确的任务。
  • 升级方向:集成学习(如随机森林、XGBoost)提升性能。
http://www.dtcms.com/a/268649.html

相关文章:

  • Spring Boot 操作 Redis 时 KeySerializer 和 HashKeySerializer 有什么区别?
  • day16——Java集合进阶(Collection、List、Set)
  • Kafka消息积压的原因分析与解决方案
  • 网络安全之重放攻击:原理、危害与防御之道
  • windows grpcurl
  • 用安卓手机给苹果手机设置使用时长限制,怎样将苹果手机的某些APP设置为禁用?有三种方法
  • 软件工程功能点估算基础
  • QML Row与Column布局
  • YOLOv11 架构优化:提升目标检测性能
  • 国内免代理免费使用Gemini大模型实战
  • Vue的生命周期(Vue2)
  • Maven继承:多模块项目高效管理秘笈
  • 微软重磅开源Magentic-UI!
  • 【Rust CLI项目】Rust CLI命令行处理csv文件项目实战
  • AI Tool Calling 实战——让 LLM 控制 Java 工具
  • java-Milvus 连接池(多key)与自定义端点监听设计
  • C++开源项目—2048.cpp
  • 部署MongoDB
  • 接口漏洞怎么抓?Fiddler 中文版 + Postman + Wireshark 实战指南
  • 记录一个关于Maven配置TSF的报错问题
  • 基于 Three.js 开发三维引擎-02动态圆柱墙体实现
  • Python中50个常用的内置函数(2/2)
  • 剑指offer第2版:动态规划+记忆化搜索
  • 回溯题解——子集【LeetCode】输入的视角(选或不选)
  • YOLOv11模型轻量化挑战:边缘计算设备部署优化方案
  • FastAPI依赖注入:构建高可维护API的核心理念与实战
  • Modbus_TCP 客户端低版本指令(归档)
  • Hadoop 分布式存储与计算框架详解
  • Web后端开发-请求响应
  • NLP:文本特征处理和回译数据增强法