机器学习笔记四-决策树

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

决策树的基本概念

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

总结

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

相关推荐
啊我不会诶37 分钟前
倍增法和ST算法 个人学习笔记&代码
笔记·学习·算法
逼子格1 小时前
振荡电路Multisim电路仿真实验汇总——硬件工程师笔记
笔记·嵌入式硬件·硬件工程·硬件工程师·硬件工程师真题·multisim电路仿真·震荡电流
一条破秋裤1 小时前
一份多光谱数据分析
笔记·数据挖掘·数据分析
zstar-_1 小时前
【算法笔记】6.LeetCode-Hot100-链表专项
笔记·算法·leetcode
程序员Xu2 小时前
【OD机试题解法笔记】连续出牌数量
笔记·算法·深度优先
九章云极AladdinEdu3 小时前
华为昇腾NPU与NVIDIA CUDA生态兼容层开发实录:手写算子自动转换工具链(AST级代码迁移方案)
人工智能·深度学习·opencv·机器学习·华为·数据挖掘·gpu算力
彤银浦3 小时前
Web学习笔记2
笔记·学习
feifeikon3 小时前
SFT与Lora
人工智能·深度学习·机器学习
长风破浪会有时呀3 小时前
Git 学习笔记
笔记·git·学习
马特说3 小时前
金融时间序列机器学习训练前的数据格式验证系统设计与实现
python·机器学习·金融