机器学习-决策树

​一、基础认知​

​1.1 什么是决策树?​

  • ​本质​:模拟人类决策过程的树形结构

  • ​组成​

  • ​实例​ :相亲决策流程

    复制代码
    年龄 > 30? → 是 → 拒绝
            ↓ 否
    收入 > 50万? → 是 → 接受
            ↓ 否
    公务员? → 是 → 接受
            ↓ 否 → 拒绝

​1.2 核心概念对比​

​概念​ ​ID3决策树​ ​C4.5决策树​ ​CART决策树​
​分裂依据​ 信息增益最大 信息增益率最大 基尼指数最小
​树结构​ 多叉树 多叉树 二叉树
​支持任务​ 分类 分类 分类+回归
​缺陷​ 偏向多值特征 计算复杂度高 只能二叉树分裂

​二、核心数学原理(附图解)​

​2.1 信息熵:混乱度度量​

  • ​公式​

  • ​实例​

    复制代码
    数据集A:[A,B,C,D] → 熵 = -4×(1/4)×log₂(1/4) = 2.0
    数据集B:[A,A,A,B] → 熵 = -[(3/4)log₂(3/4)+(1/4)log₂(1/4)] ≈ 0.81

    ​结论​​:数据越纯净,熵值越小

​2.2 信息增益(ID3核心)​

  • ​计算流程​

    复制代码
    1. 计算父节点熵值 H(D)
    2. 按特征分裂后计算子节点加权熵 ∑(子样本数/总样本数)×H(子)
    3. 信息增益 = H(D) - 子节点加权熵
  • ​实例演算​ (7人拖欠贷款数据集):

    特征\结果 拖欠(Yes) 不拖欠(No) 计算
    ​有房​ 0 3 熵=0
    ​无房​ 3 4 熵≈0.985
    ​信息增益​​ = 0.985 - (3/10)×0 + (7/10)×0.985 ≈ 0.69

​2.3 信息增益率(C4.5核心)​

  • ​公式​

  • ​修正原理​

    复制代码
    特征"邮编"有1000个取值 → 固有值很大 → 增益率变小 
    特征"性别"有2个取值 → 固有值小 → 增益率保留

​2.4 基尼指数(CART核心)​

  • ​公式​

  • ​物理意义​:随机抽两个样本,类别不一致的概率

  • ​实例​

    复制代码
    数据集[3个A,7个B]: 
    Gini = 1 - [(3/10)² + (7/10)²] = 0.42

​三、实战案例详解​

​3.1 泰坦尼克生存预测(分类树)​

python 复制代码
import pandas as pd
from sklearn.tree import DecisionTreeClassifier

# 数据预处理
titanic = pd.read_csv('titanic.csv')
titanic['Age'].fillna(titanic['Age'].mean(), inplace=True)  # 年龄缺失值填充
X = pd.get_dummies(titanic[['Pclass', 'Age', 'Sex']])       # 独热编码
y = titanic['Survived']

# 模型训练与评估
model = DecisionTreeClassifier(criterion='gini', max_depth=3) 
model.fit(X_train, y_train)
print(f"准确率: {model.score(X_test, y_test):.2%}")

# 决策树可视化
from sklearn.tree import plot_tree
plot_tree(model, feature_names=X.columns, class_names=['Died','Survived'])

​关键输出​​:

复制代码
              precision    recall  f1-score   support
        Died       0.83      0.91      0.87       105
    Survived       0.82      0.68      0.74        69
    accuracy                           0.83       174

​3.2 房价预测(回归树)​

python 复制代码
from sklearn.tree import DecisionTreeRegressor

# 生成波形数据
X = np.sort(5 * np.random.rand(80, 1), axis=0)
y = np.sin(X).ravel() + np.random.normal(0, 0.1, X.shape[0])

# 不同深度树对比
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_1.fit(X, y)
regr_2.fit(X, y)

# 可视化预测曲线
plt.plot(X_test, regr_1.predict(X_test), label="深度=2")
plt.plot(X_test, regr_2.predict(X_test), label="深度=5")

​结论​​:树深度越大,拟合能力越强(过拟合风险越高)


​四、剪枝技术解析​

​4.1 为什么要剪枝?​

  • ​过拟合现象​:训练准确率99% → 测试准确率70%
  • ​根本原因​:树过于复杂,学习了噪声数据

​4.2 剪枝方法对比​

​类型​ ​操作时机​ ​优点​ ​缺点​
预剪枝 树生成过程中 训练快,减少计算资源 可能欠拟合(早停问题)
后剪枝 生成完整树后 保留更多有效分支 计算开销大

​4.3 剪枝效果演示​

python 复制代码
# 未剪枝 vs 预剪枝对比
full_tree = DecisionTreeClassifier()  # 无限制
pruned_tree = DecisionTreeClassifier(max_depth=3, min_samples_leaf=5) 

full_tree.fit(X_train, y_train)
pruned_tree.fit(X_train, y_train)

print(f"未剪枝测试集准确率: {full_tree.score(X_test, y_test):.2%}")
print(f"预剪枝测试集准确率: {pruned_tree.score(X_test, y_test):.2%}")

​典型输出​​:

复制代码
未剪枝测试集准确率:76.34% 
预剪枝测试集准确率:82.15%  # 剪枝后泛化能力提升

​五、高频面试题解析​
  1. ​信息增益 vs 信息增益率​

    信息增益偏向多值特征(如"ID"字段),增益率通过除以特征固有值修正此问题

  2. ​CART为何用基尼指数?​

    基尼指数计算只需加减乘(熵需要log运算),在大数据场景效率更高

  3. ​如何处理连续特征?​

    复制代码
    步骤:
    1. 排序特征值:[10, 20, 30, 40]
    2. 计算候选切分点:(10+20)/2=15, (20+30)/2=25...
    3. 选择最优切分点(基尼指数最小)
  4. ​决策树优缺点​

    ​优点​ ​:可解释性强、无需特征缩放、支持混合数据类型

    ​缺点​​:容易过拟合、对样本敏感、忽略特征间相关性


​六、学习资源推荐​
  1. ​实践平台​:Kaggle Titanic竞赛(决策树基线模型)
  2. ​可视化工具​
  3. ​进阶方向​
    • 集成学习:随机森林、GBDT
    • 特征重要性分析:model.feature_importances_
相关推荐
弓.长.1 分钟前
Transformer位置编码演进:从绝对位置到RoPE的数学本质
人工智能·深度学习·transformer
Aloudata2 分钟前
根据业务角色创建 AI 数据分析助手,满足集团型企业多部门个性化需求
人工智能·数据挖掘·数据分析·chatbi·data agent
视觉&物联智能2 分钟前
【杂谈】-自动化优先于人工智能:为智能系统筑牢安全根基
人工智能·安全·ai·自动化·aigc·agi·deepseek
张一爻3 分钟前
BERT + CRF实现的中文 NER模型训练
人工智能·python·bert
诸葛务农4 分钟前
神经网络信息编码技术:与人脑信息处理的差距及超越的替在优势和可能(上)
人工智能·深度学习·神经网络
oscar9995 分钟前
神经网络前向传播:AI的“消化系统”全解析
人工智能·深度学习·神经网络
元智启5 分钟前
企业AI智能体:架构升级与生态跃迁,2025进入“智能体驱动”新阶段
人工智能·架构
合方圆~小文7 分钟前
双目摄像头在不同距离精度差异
数据库·人工智能·模块测试
lxmyzzs8 分钟前
【硬核部署】在 RK3588上部署毫秒级音频分类算法
人工智能·分类·音视频
阿杰学AI11 分钟前
AI核心知识66——大语言模型之Machine Learning (简洁且通俗易懂版)
人工智能·ai·语言模型·自然语言处理·aigc·ml·机械学习