机器学习笔记(2): 决策树

记录机器学习的学习过程

作者:LYGreen
分类:人工智能
创建时间: 2/15/2026, 7:31:12 AM
更新时间: 2/15/2026, 7:31:12 AM

决策树

决策树(Decision Tree) 是一种模仿人类决策过程的算法。从顶部的“根节点”开始,根据数据的特征不断进行“是非题”式的判断,最后在“叶子节点”得到结论。

结构

决策树由 3 个部分组成:

  • 根节点 (Root Node): 包含全部样本的起点,是第一个分裂的特征。
  • 内部节点 (Internal Nodes): 表示一个特征或属性的测试(例如:“温度是否高于 30°C?”)。
  • 叶子节点 (Leaf Nodes): 最终的输出结果(类别或数值),不再进一步分裂。

构建

构建决策树的核心是 选择最优特征进行划分 。常用指标有:

  • 信息增益 (Information Gain): 基于熵(Entropy)。熵越高越混乱,算法的目标是降低熵。
  • 基尼系数 (Gini Impurity): 衡量随机抽取两个样本类别不一致的概率。基尼系数越小,样本纯度越高(常用于 CART 算法)。
  • 均方误差 (MSE): 常用于回归树,旨在减少预测值与真实值之间的偏差。

在决策树和信息论的语境下,熵(Entropy) 是衡量系统“混乱程度”或“不确定性”的度量单位。 简单来说:熵越高,信息越杂乱;熵越低,信息越纯净。

优缺点

优点:

  • 可视化强:与神经网络相比,可以一眼看出模型是怎么做决定的。
  • 无需复杂处理: 对缺失值不太敏感,不需要像线性回归那样进行数据标准化。
  • 非线性建模: 能捕捉特征之间复杂的非线性关系。

缺点:

  • 过拟合:会尝试记住每一个细节,如果数太深,在面对新数据的时候表现会很差
  • 对噪声敏感:对噪声数据较为敏感,可能导致模型性能下降。
  • 不稳定:数据的小变化可能导致生成完全不同的树。

示例

安装依赖库:

pip install scikit-learn

加载数据集(scikit-learn自带了鸢尾花数据集):

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
import pandas as pd

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 打印数据
df = pd.DataFrame(X, columns=iris.feature_names) # 鸢尾花的物理维度
df['target'] = y # 0, 1, 2 代表 3 个品种
print(df.head()) # 打印前五个数据

训练:

# 创建决策树分类器
clf = DecisionTreeClassifier()

# 训练模型
clf.fit(X_train, y_train)

预测与评估:

# 对测试集进行预测
y_pred = clf.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2f}")

输出结果:

模型准确率: 1.00

资源

菜鸟教程:决策树
kaggle