news 2026/4/28 16:34:27

人工智能之核心基础 机器学习 第四章 决策树与集成学习基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
人工智能之核心基础 机器学习 第四章 决策树与集成学习基础

人工智能之核心基础 机器学习

第四章 决策树与集成学习基础


文章目录

  • 人工智能之核心基础 机器学习
    • 4.1 决策树原理
      • 🌳 什么是决策树?
      • 🔑 核心组成部分
      • 🔍 如何选择“问什么问题”?——特征选择标准
        • 1️⃣ 信息增益(ID3算法)
        • 2️⃣ 信息增益比(C4.5算法)
        • 3️⃣ Gini系数(CART算法,最常用)
      • ✂️ 剪枝策略:防止过拟合
        • ▶ 预剪枝(Pre-pruning)
        • ▶ 后剪枝(Post-pruning)
      • 🧪 决策树代码实现
    • 4.2 集成学习思想
      • 🤝 什么是集成学习?
      • ✅ 为什么有效?
    • 4.3 随机森林(Random Forest)
      • 🌲 原理:Bagging + 随机特征
        • 两大随机性:
      • ✅ 优点 vs ❌ 缺点
      • 🧪 随机森林代码
    • 4.4 梯度提升树入门(XGBoost / LightGBM)
      • 🚀 原理:Boosting —— 串行纠错
      • 🔥 XGBoost vs LightGBM
      • 🧪 XGBoost 快速上手
    • 4.5 实战案例
      • 案例1:客户流失预测(电信行业)
      • 案例2:商品图像分类(简化版)
    • 🎯 本章总结
  • 资料关注

4.1 决策树原理

🌳 什么是决策树?

决策树就像“20个问题”游戏——通过一系列是/否问题,一步步缩小范围,最终做出判断。

核心思想:用树形结构对数据进行分而治之的划分。

🔑 核心组成部分

节点类型作用举例
根节点(Root)整棵树的起点,第一个判断条件“月消费是否 > 500元?”
内部节点(Internal)中间判断节点“是否经常投诉?”
叶节点(Leaf)最终预测结果“会流失” / “不会流失”

图:一个简单的客户流失预测决策树


🔍 如何选择“问什么问题”?——特征选择标准

目标:每次划分都让子集更“纯净”(同一类样本尽量聚在一起)。

1️⃣ 信息增益(ID3算法)
  • 基于信息熵(Entropy):衡量混乱程度
  • 信息增益 = 划分前熵 - 划分后加权平均熵
  • 选信息增益最大的特征

⚠️ 缺点:偏向取值多的特征(如“用户ID”永远能完美划分,但无意义)

2️⃣ 信息增益比(C4.5算法)
  • 对信息增益做归一化,避免偏向多值特征
  • 更公平地比较不同特征
3️⃣ Gini系数(CART算法,最常用)
  • 衡量“不纯度”:Gini越小,越纯净
  • 公式:$ \text{Gini}(D) = 1 - \sum_{k=1}^K p_k^2 $
  • 选Gini下降最多的划分

💡通俗理解

  • 熵/Gini 高 → 混乱(比如一半人流失、一半人不流失)
  • 熵/Gini 低 → 纯净(比如90%都流失)
    我们希望每次提问后,两组人都变得更“整齐”

✂️ 剪枝策略:防止过拟合

决策树容易“学得太细”,把噪声也当规律 →过拟合

▶ 预剪枝(Pre-pruning)
  • 建树过程中提前停止
  • 停止条件:
    • 树深度达到上限
    • 节点样本数太少
    • 信息增益/Gini下降小于阈值

✅ 优点:训练快
❌ 缺点:可能“早停”,错过更好划分

▶ 后剪枝(Post-pruning)
  • 先建完整树,再自底向上合并叶子
  • 如果合并后验证集误差不增加,则剪掉分支

✅ 优点:泛化更好
❌ 缺点:训练慢

📌 Scikit-learn 默认使用预剪枝(通过max_depth,min_samples_split等参数控制)


🧪 决策树代码实现

fromsklearn.treeimportDecisionTreeClassifier,plot_treefromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportaccuracy_score,classification_reportimportmatplotlib.pyplotasplt# 示例:鸢尾花分类fromsklearn.datasetsimportload_iris X,y=load_iris(return_X_y=True)X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)# 创建决策树(使用Gini)clf=DecisionTreeClassifier(criterion='gini',# 或 'entropy'max_depth=3,# 预剪枝:最大深度min_samples_split=10,# 内部节点至少10个样本才分裂random_state=42)clf.fit(X_train,y_train)# 预测与评估y_pred=clf.predict(X_test)print("准确率:",accuracy_score(y_test,y_pred))print(classification_report(y_test,y_pred))# 可视化树(简单版)plt.figure(figsize=(12,8))plot_tree(clf,feature_names=load_iris().feature_names,class_names=load_iris().target_names,filled=True)plt.show()

4.2 集成学习思想

🤝 什么是集成学习?

“三个臭皮匠,顶个诸葛亮”

集成学习:组合多个弱学习器(表现略好于随机猜测),形成一个强学习器

✅ 为什么有效?

问题类型单一模型缺陷集成如何解决
高方差(过拟合)对训练数据太敏感多模型平均 → 降低方差
高偏差(欠拟合)模型太简单提升法(Boosting)逐步修正错误
泛化能力差容易受噪声影响多样性 → 更稳健

📌关键:每个弱学习器要有一定准确性+多样性(不能都犯同样错误)


4.3 随机森林(Random Forest)

🌲 原理:Bagging + 随机特征

随机森林 =多棵决策树投票

两大随机性:
  1. 样本随机(Bootstrap采样)

    • 每棵树从原始数据中有放回地抽取n nn个样本(约63%不重复)
    • 不同树看到不同数据 → 增加多样性
  2. 特征随机

    • 每次分裂时,只从部分特征中选最佳划分(默认总特征数 \sqrt{\text{总特征数}}总特征数
    • 防止单一强特征主导所有树

✅ 最终预测:分类用多数投票,回归用平均值


✅ 优点 vs ❌ 缺点

优点缺点
几乎不用调参模型不可解释(黑盒)
抗过拟合能力强训练内存和时间开销大
能处理高维数据对噪声和异常值敏感(但比单棵树好)
自动评估特征重要性无法外推(如预测超出训练范围的值)

🧪 随机森林代码

fromsklearn.ensembleimportRandomForestClassifierfromsklearn.datasetsimportmake_classification# 生成模拟数据(客户流失)X,y=make_classification(n_samples=1000,n_features=10,n_informative=5,n_redundant=2,n_clusters_per_class=1,random_state=42)X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=42)# 随机森林rf=RandomForestClassifier(n_estimators=100,# 树的数量max_depth=5,random_state=42,oob_score=True# 使用袋外样本评估)rf.fit(X_train,y_train)print("测试集准确率:",rf.score(X_test,y_test))print("袋外误差估计:",1-rf.oob_score_)# 查看特征重要性importances=rf.feature_importances_print("前5重要特征:",importances.argsort()[-5:][::-1])

4.4 梯度提升树入门(XGBoost / LightGBM)

🚀 原理:Boosting —— 串行纠错

  • Boosting:一棵树接一棵树训练,每棵专注于纠正前一棵的错误
  • 梯度提升:用梯度下降思想优化损失函数

💡 想象老师教学生:
第1次考试错题 → 第2次重点讲这些题 → 第3次再考… 直到全对!

🔥 XGBoost vs LightGBM

特性XGBoostLightGBM
分裂方式Level-wise(按层)Leaf-wise(按叶,更快)
处理大特征较慢支持类别特征直方图优化
内存占用中等更低
精度极高略快,精度相当

共同优势

  • 自带正则化(防过拟合)
  • 支持缺失值
  • 提供特征重要性
  • Kaggle竞赛常胜将军!

🧪 XGBoost 快速上手

fromxgboostimportXGBClassifierfromsklearn.metricsimportroc_auc_score# 使用上面的客户流失数据xgb=XGBClassifier(n_estimators=100,max_depth=4,learning_rate=0.1,random_state=42)xgb.fit(X_train,y_train)y_pred_proba=xgb.predict_proba(X_test)[:,1]print("AUC:",roc_auc_score(y_test,y_pred_proba))

💡实操要点

  • 调参重点:n_estimators,max_depth,learning_rate
  • early_stopping_rounds防止过拟合
  • 分类不平衡时设scale_pos_weight

4.5 实战案例

案例1:客户流失预测(电信行业)

目标:预测用户是否会取消服务
特征:月费、通话时长、客服投诉次数、合约类型等
模型选择

  • 决策树:可解释性强,业务人员易理解
  • 随机森林/XGBoost:精度更高,用于最终部署
# 特征重要性分析(业务价值!)feat_names=['monthly_charges','tenure','complaints','contract_type']importances=rf.feature_importances_ plt.barh(feat_names,importances)plt.title("客户流失关键因素")plt.show()

案例2:商品图像分类(简化版)

目标:区分T恤、裤子、鞋子(Fashion-MNIST)
方法

  • 将图像像素展平为特征向量
  • 用随机森林/XGBoost分类(虽不如CNN,但可作为基线)
fromtensorflow.keras.datasetsimportfashion_mnist(X_train_img,y_train),(X_test_img,y_test)=fashion_mnist.load_data()X_train_flat=X_train_img.reshape(X_train_img.shape[0],-1)/255.0X_test_flat=X_test_img.reshape(X_test_img.shape[0],-1)/255.0rf=RandomForestClassifier(n_estimators=50,max_depth=10,random_state=42)rf.fit(X_train_flat[:5000],y_train[:5000])# 用部分数据加速print("准确率:",rf.score(X_test_flat[:1000],y_test[:1000]))

🎯 本章总结

模型核心思想适用场景关键优势
决策树if-else规则链需要可解释性直观、无需特征缩放
随机森林多棵树投票(Bagging)通用分类/回归稳定、抗过拟合
XGBoost/LightGBM串行纠错(Boosting)竞赛/高精度需求精度高、支持多种任务

💡建议

  1. 先用决策树理解逻辑
  2. 再用随机森林获得稳定性能
  3. 追求极致精度时尝试XGBoost/LightGBM

资料关注

公众号:咚咚王
gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 15:35:18

【嵌入式AI开发者必看】:TinyML模型从Python到C转换时如何保持高精度

第一章:TinyML模型精度保持的核心挑战在资源极度受限的嵌入式设备上部署机器学习模型时,TinyML面临的关键难题之一是如何在显著压缩模型规模的同时维持其预测精度。这一挑战源于硬件限制与算法性能之间的根本性矛盾。模型压缩带来的精度损失 为适应微控制…

作者头像 李华
网站建设 2026/4/27 7:34:01

为什么你的昇腾程序总崩溃?C语言调试工具使用误区大盘点

第一章:昇腾程序崩溃的根源剖析昇腾(Ascend)AI处理器在高性能计算场景中广泛应用,但程序运行过程中偶发的崩溃问题严重影响系统稳定性。深入分析其崩溃根源,有助于提升应用鲁棒性与开发效率。驱动与固件兼容性问题 不匹…

作者头像 李华
网站建设 2026/4/25 10:17:24

YOLOFuse项目采用Vue驱动官网页面?当前状态说明

YOLOFuse:多模态目标检测的轻量化实践与工程启示 在夜间监控系统中,摄像头常常因光照不足而“失明”;在森林防火巡检任务里,浓烟遮蔽了可见光图像的关键细节。这些现实场景暴露出传统单模态目标检测技术的根本局限——它太依赖清…

作者头像 李华
网站建设 2026/4/26 13:00:07

YOLOFuse养老院跌倒检测预警机制

YOLOFuse养老院跌倒检测预警机制 在老龄化社会加速到来的今天,养老机构的安全管理正面临前所未有的挑战。一位老人在夜间独自跌倒后未能及时被发现——这样的新闻屡见不鲜。传统监控系统在黑暗、烟雾或遮挡环境下“看得见却识不准”,甚至完全失效&#x…

作者头像 李华
网站建设 2026/4/27 21:36:12

YOLOFuse结果可视化:如何查看并导出预测后的检测框图像

YOLOFuse结果可视化:如何查看并导出预测后的检测框图像 在夜间监控、边境安防或森林火灾预警等场景中,传统的可见光摄像头常常“看不清”——光线不足、烟雾弥漫、目标伪装严重,导致小目标漏检频发。而红外成像虽能感知热源,却缺…

作者头像 李华
网站建设 2026/4/27 6:12:21

YOLOFuse OEM定制服务开放:品牌贴牌合作

YOLOFuse OEM定制服务开放:品牌贴牌合作 在智能安防、自动驾驶和工业检测加速演进的今天,单一可见光摄像头已难以应对复杂多变的现实场景。夜晚的昏暗、浓雾中的遮蔽、伪装下的目标……这些挑战不断暴露出传统目标检测系统的短板。尤其是在低光照或恶劣…

作者头像 李华