机器学习笔记四-决策树

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

决策树的基本概念

  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()

总结

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

相关推荐
十三画者12 分钟前
【工具】IntelliGenes使用多基因组图谱进行生物标志物发现和预测分析的新型机器学习管道
人工智能·python·机器学习·数据挖掘·数据分析
OpenLoong 开源社区2 小时前
技术视界|构建理想仿真平台,加速机器人智能化落地
人工智能·机器学习·机器人·开源·人形机器人
坐山龟2 小时前
PostgreSQL16 的双向逻辑复制
数据库·笔记·postgresql
chantAria3 小时前
Ubuntu 一站式初始化笔记
笔记·ubuntu·eureka
Stara05113 小时前
计算机视觉领域开源数据集资源整理
深度学习·机器学习·计算机视觉·自然语言处理
BuluAI算力云4 小时前
谷歌Gemma-3开源炸场!单卡性能碾压Llama3,AI大模型新标杆诞生?
机器学习
nenchoumi31194 小时前
AutoGen学习笔记系列(十七)Examples - Literature Review
人工智能·笔记·python·学习·语言模型
阿陈陈陈6 小时前
【Node.js入门笔记4---fs 目录操作】
笔记·node.js
Archie_IT6 小时前
双链笔记新选择!使用Docker私有化部署Logseq知识库远程团队协作
笔记·docker·容器
天行者@6 小时前
卷积神经网络(笔记03)
人工智能·笔记·深度学习·神经网络·机器学习·cnn·卷积神经网络