机器学习笔记四-决策树

决策树是一种用于分类和回归任务的树形模型。它通过一系列的条件判断将数据划分到不同的分支,最终在叶子节点输出预测结果。决策树直观且易于理解,常用于解释性要求较高的应用场景。

决策树的基本概念

  1. 节点:

    • 根节点: 决策树的起点,包含整个数据集。
    • 内部节点: 包含一个条件测试,用于划分数据。
    • 叶子节点: 最终的输出节点,表示分类标签或回归值。
  2. 分裂:

    • 决策树根据特征的不同值将数据集划分为两个或多个子集。分裂的目标是使得子集中的数据尽可能"纯净"(即属于同一类或回归值相近)。
  3. 树的深度:

    • 树的深度是从根节点到叶子节点的最长路径。较深的树可能会更好地拟合训练数据,但也更容易过拟合。

决策树的构建

  1. 选择特征:

    • 在构建决策树时,每一步都需要选择一个最优特征来分割数据。常用的选择标准有 信息增益 、基尼系数 和 方差减少。
  2. 划分标准:

    • 信息增益(基于熵):在分类问题中,信息增益是通过衡量数据集划分前后的熵(不确定性)变化来决定最佳特征。信息增益越大,说明该特征对数据集的划分效果越好。
    • 基尼系数:用于分类问题,基尼系数反映了数据集的纯度。基尼系数越低,说明节点中的样本越倾向于属于同一类。
    • 方差减少:在回归问题中,方差减少衡量的是数据集划分前后的方差变化。
  3. 停止条件:

    • 决策树的构建通常会设置一些停止条件,如达到最大深度、最小叶子节点数量、信息增益或基尼系数不再显著减少等,以防止树过于复杂。

优缺点

优点:

  • 易于理解和解释: 决策树模型的结构直观且易于解释,可以通过路径轻松理解决策过程。
  • 无需数据预处理: 决策树对数据的尺度不敏感,不需要标准化或归一化。
  • 处理缺失值: 决策树能够处理数据集中的缺失值。
  • 适用于分类和回归: 决策树可以用于处理分类和回归任务。

缺点:

  • 容易过拟合: 如果不加限制,决策树容易生成过于复杂的树,从而过拟合训练数据。
  • 对噪声敏感: 数据中的噪声可能导致决策树生成不合理的划分,影响模型的泛化能力。
  • 决策边界不平滑: 决策树生成的决策边界是轴对齐的,通常不像其他算法(如SVM、逻辑回归)那样平滑。

决策树的优化

  1. 剪枝:

    • 预剪枝: 在构建决策树时提前停止分裂,比如设定最大深度或最小样本数量。
    • 后剪枝: 在构建完整决策树后,从叶子节点向上合并节点,删除不必要的分支以减少模型复杂度。
  2. 集成学习:

    • 随机森林: 通过构建多棵决策树并将它们的预测结果进行投票或平均来提高模型的准确性和稳定性。
    • 梯度提升树(GBDT): 通过逐步构建多个决策树,每棵树都修正前一棵树的错误,最终组合得到一个强预测模型。

示例代码(使用 sklearn):

python 复制代码
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
import matplotlib.pyplot as plt

# 加载示例数据集
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['target'] = iris.target

# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(df.iloc[:, :-1], df['target'], test_size=0.3, random_state=42)

# 初始化并训练决策树模型
model = DecisionTreeClassifier(criterion='gini', max_depth=3)
model.fit(X_train, y_train)

# 预测和评估
y_pred = model.predict(X_test)
accuracy = (y_pred == y_test).mean()
print(f"Accuracy: {accuracy:.2f}")

# 可视化决策树
plt.figure(figsize=(10, 8))
tree.plot_tree(model, feature_names=iris.feature_names, class_names=iris.target_names, filled=True)
plt.show()

总结

决策树是一种强大且易于理解的模型,适用于各种分类和回归任务。然而,决策树也有过拟合和对噪声敏感的缺点,因此在实际应用中通常会与其他模型结合使用(如随机森林、梯度提升树),以提高模型的鲁棒性和准确性。

相关推荐
凉、介几秒前
深入理解 ARMv7-M|处理器模式与寄存器
笔记·学习·嵌入式·arm
AMASENSYS艾马斯11 分钟前
低压变频器输入输出电抗器选型指南
驱动开发·单片机·机器学习·硬件工程·精益工程
蒸蒸yyyyzwd13 分钟前
三个场景题-秋招学习笔记 day86
笔记·八股
沉淀的.晴天2 小时前
ESP32S3笔记
笔记
ss2732 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 28 PostgreSQL MVCC机制介绍
数据库·笔记·postgresql
lll23526917796 小时前
2026行业语音转写工具专业术语转写功能横向分析
笔记·智能手机
奇树谦10 小时前
朴素贝叶斯(Naive Bayes)详解
机器学习·1024程序员节
古希腊掌管代码的神THU11 小时前
为什么DPO中chosen/rejected概率同时下降?
人工智能·深度学习·机器学习·自然语言处理·面试
2601_9679801114 小时前
Python开发的顶级开源项目全景图:2025-2026年生态概览
python·机器学习·开源项目·数据科学·生态概览
解决小子15 小时前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统