机器学习-决策树

​一、基础认知​

​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_
相关推荐
奇舞精选3 小时前
超越Siri的耳朵:ASR与Whisper零代码部署实战指南
前端·人工智能·aigc
说私域3 小时前
兴趣电商内容数据洞察未来市场走向研究——基于开源AI智能名片链动2+1模式S2B2C商城小程序的实践
人工智能·小程序
纪东东4 小时前
机器学习——使用K近邻算法实现一个识别手写数字系统
人工智能·机器学习·近邻算法
视觉语言导航4 小时前
南科大适应、协同与规划的完美融合!P³:迈向多功能的具身智能体
人工智能·具身智能
THMAIL4 小时前
机器学习从入门到精通 - 数据预处理实战秘籍:清洗、转换与特征工程入门
人工智能·python·算法·机器学习·数据挖掘·逻辑回归
Moutai码农4 小时前
1.5、机器学习-回归算法
人工智能·机器学习·回归
非门由也5 小时前
《sklearn机器学习——绘制分数以评估模型》验证曲线、学习曲线
人工智能·机器学习·sklearn
THMAIL5 小时前
深度学习从入门到精通 - AutoML与神经网络搜索(NAS):自动化模型设计未来
人工智能·python·深度学习·神经网络·算法·机器学习·逻辑回归
wei_shuo5 小时前
使用 Auto-Keras 进行自动化机器学习
机器学习·自动化·keras