发布时间:2026/8/5 8:22:06
速通机器学习 08 | 决策树 一、决策树基础概念1. 定义决策树属于有监督学习算法通过学习训练样本生成分层分类规则依靠这套规则对新样本完成预测。核心逻辑所有样本数据从根节点逐层向下判断最终落到叶子节点输出预测结果。学习决策树的目的主要是为随机森林打基础。决策树理解了随机森林就不难。树结构分为 3 类节点根节点整棵树第一个判断节点非叶子节点中间节点中间分层判断条件叶子节点无后续分支输出最终结果2. 构建决策树三大核心问题如何选定根节点、中间节点与叶子节点每个节点依据什么条件进行样本分裂节点分裂效果好坏的评判标准是什么二、三大经典决策树分类算法业界主流三种决策树算法区分核心在于样本分裂评判标准ID3 算法以信息熵为衡量指标C4.5 算法以信息增益率为衡量指标CART 算法以基尼系数为衡量指标sklearn 分类树默认使用2.1 ID3 算法信息熵1熵的含义熵代表数据集内部的混乱、不确定程度熵值越大样本类别越混杂熵值越小样本纯度越高。2熵计算公式数据集中第i类样本所占比例3实例对比集合 A集合 B对比可见集合 B 样本更混乱。2.2 C4.5 算法分裂评判标准信息增益率弥补 ID3 偏向取值多特征的缺陷。2.3 CART 算法sklearn 默认分裂评判标准基尼系数基尼值越接近 0样本纯度越高基尼值越大样本混杂度越高。sklearn 中DecisionTreeClassifier为二叉 CART 树。如何手动构建决策树可以查看开头文件。速通机器学习08-决策树资源-CSDN下载速通机器学习08-决策树资源-CSDN下载三、决策树剪枝1. 剪枝目的决策树无限制生长会过度学习训练集噪声引发过拟合剪枝删减多余分支降低模型复杂度提升泛化能力。2. 两种剪枝方式1预剪枝Sklearn 唯一原生支持建树过程中提前终止节点分裂从源头限制树规模训练速度更快。代码核心控制参数本次实战全部用到max_depth整棵树最大深度min_samples_split节点允许分裂的最少样本数少于则不分裂min_samples_leaf叶子节点最小样本数量设置基尼系数阈值分裂收益不足则停止划分2后剪枝先训练生成一棵完整无限制的大树再从底层叶子向上回溯修剪通过验证集判断若剪掉子树后模型效果不变或提升则删除该分支。优势拟合效果优于预剪枝缺点训练耗时高sklearn 无原生接口。3、核心调用代码导入决策树工具库from sklearn import tree分类决策树模型初始化调用dtr tree.DecisionTreeClassifier(criterion, max_depth, min_samples_split, min_samples_leaf)参数详解criterion节点分裂评判标准默认gini基尼系数CART算法可选entropy信息熵ID3算法用于衡量样本混乱度、筛选最优分裂特征。max_depth决策树最大深度核心预剪枝参数。限制树的生长层数数值越小模型越简单可直接限制复杂分支有效抑制过拟合。min_samples_split内部节点最小分裂样本数。当节点样本数量小于该值时停止分裂避免生成过多细碎分支。min_samples_leaf叶子节点最小样本数。分支分裂后生成的叶子节点样本数量不得小于该值杜绝单点样本分支提升模型泛化性。random_state随机种子固定模型训练随机逻辑保证每次运行训练结果一致便于参数对比、实验复现。以上参数均为核心配置模型会自动预剪枝本章K折超参数调优的核心遍历对象通过组合调参可精准平衡模型拟合能力与泛化能力。四、实战电信客户流失分类K 折交叉验证选最优预剪枝参数电信客户流失数据已经在文章开头给出。业务流程说明分层划分训练集、测试集测试集全程隔离不参与调参不做下采样直接使用原始不平衡训练数据训练5 折分层 K 折交叉验证遍历预剪枝超参数以召回率筛选最优组合最优参数训练模型分别评估训练集、测试集输出分类报告、混淆矩阵、可视化决策树完整可运行代码import pandas as pd from sklearn.model_selection import train_test_split, cross_val_score, StratifiedKFold from sklearn import tree from sklearn.metrics import classification_report, confusion_matrix import matplotlib.pyplot as plt from sklearn.tree import plot_tree 绘制混淆矩阵函数 def cm_plot(y, yp): cm confusion_matrix(y, yp) plt.matshow(cm, cmapplt.cm.Blues) plt.colorbar() for x in range(len(cm)): for y in range(len(cm)): plt.annotate(cm[x, y], xy(y, x), horizontalalignmentcenter, verticalalignmentcenter) plt.ylabel(True label) plt.xlabel(Predicted label) return plt 1.读取数据集 datas pd.read_excel(rD:\pythoncode2\bigdata_ai40\data\电信客户流失数据2.xlsx) 2.分层划分训练集、测试集先不拆分特征标签 data_train, data_test train_test_split(datas, test_size0.2, random_state42, stratifydatas.iloc[:, -1]) 移除下采样代码直接拆分训练集特征与标签 target_train data_train.iloc[:, -1] data_train data_train.iloc[:, :-1] target_test data_test.iloc[:, -1] data_test data_test.iloc[:, :-1] 3.构建5折分层交叉验证适配不平衡数据保证每折类别比例一致 skf StratifiedKFold(n_splits5, shuffleTrue, random_state42) 4.预剪枝超参数候选范围 tree_depth [1, 2, 3, 4] # max_depth 树最大深度 tree_min_leaf [1, 2, 3, 4, 5, 6, 7, 8] # min_samples_leaf 叶子最小样本 tree_min_samples [2, 3, 4, 5, 6] # min_samples_split 节点分裂最小样本 best_zuhe [0, 0, 0] best_recall 0 三重循环遍历所有参数组合K折验证取平均召回率 for l in tree_min_samples: for i in tree_depth: for j in tree_min_leaf: dtr tree.DecisionTreeClassifier( criteriongini, max_depthi, min_samples_leafj, min_samples_splitl, random_state42 ) # 交叉验证评估指标为召回率recall score cross_val_score(dtr, data_train, target_train, cvskf, scoringrecall) score_mean sum(score) / len(score) print(f深度{i},叶子最小{j},分裂最小{l}平均召回率{score_mean:.4f}) # 更新最优参数 if score_mean best_recall: best_recall score_mean best_zuhe[0] i best_zuhe[1] j best_zuhe[2] l print(*60) print(f交叉验证最优预剪枝参数组合\n树最大深度:{best_zuhe[0]}叶子最小样本:{best_zuhe[1]}节点分裂最小样本:{best_zuhe[2]}) print(f最优平均召回率{best_recall:.4f}) 5.使用最优预剪枝参数训练最终决策树模型 tr tree.DecisionTreeClassifier( criteriongini, max_depthbest_zuhe[0], min_samples_leafbest_zuhe[1], min_samples_splitbest_zuhe[2], random_state42 ) tr.fit(data_train, target_train) 6.训练集评估 train_pred tr.predict(data_train) print(\n【训练集分类评估报告】) print(classification_report(target_train, train_pred)) cm_plot(target_train, train_pred).show() 7.隔离测试集最终评估全程未参与调参模拟真实线上数据 te_pred tr.predict(data_test) print(\n【测试集最终分类评估报告】) print(classification_report(target_test, te_pred)) cm_plot(target_test, te_pred).show() 8.可视化决策树限制显示深度方便查看 plt.figure(figsize(16, 9)) plot_tree(tr, filledTrue, max_depth3) plt.show()代码分步讲解原始不平衡数据直接训练不做样本采样保留数据集真实分布分层划分保证训练、测试集流失客户占比和原数据一致。分层 K 折 StratifiedKFold普通 K 折会破坏类别比例分层 K 折保证每一折中流失、未流失客户比例和原始训练集一致交叉验证指标更可靠。三重循环遍历预剪枝超参数max_depth、min_samples_leaf、min_samples_split均为预剪枝控制参数以召回率为标准筛选最优组合防止过拟合同时保证流失客户不漏检。数据隔离规范测试集自始至终不参与交叉验证调参仅在参数确定后做一次最终验收杜绝数据泄露。决策树特性无需标准化特征不受数值量纲影响训练完成后可直接绘图每条判断规则可解释业务可读性强。五、核心注意点分类树DecisionTreeClassifier默认基尼系数回归树DecisionTreeRegressor默认 MSE 均方误差sklearn 仅支持预剪枝通过树深度、叶子样本数等参数实现无原生后剪枝 API不平衡数据集建议搭配分层划分stratify与StratifiedKFold保证类别均衡调参仅能使用训练集测试集仅做最终效果验证禁止参与交叉验证K 折交叉验证通用不止适用于决策树线性模型、集成模型均可使用不使用下采样时模型容易偏向多数类业务上可通过调整评估指标、损失函数优化本章简短总结决策树由根节点、中间节点、叶子节点构成ID3、C4.5、CART 分别依靠信息熵、信息增益率、基尼系数划分样本。为解决过拟合引入剪枝策略实操中依靠max_depth等参数实现预剪枝结合分层 K 折交叉验证筛选最优超参数。本章实战基于原始不平衡电信流失数据集移除下采样操作完整演示分层划分、参数寻优、模型评估全流程决策树可解释性优秀但单树稳定性弱下一章将学习集成学习随机森林优化该缺陷。

相关新闻

2026/8/5 8:22:06

计算机保研面试策略:从基础到工程再到交叉学科的靶向准备

1. 从“海投”到“精准定位”:我的保研面试策略复盘 又到了一年一度的保研季,最近后台和私信里收到不少学弟学妹的咨询,核心问题都差不多:“学长,我手里有几个夏令营/预推免的面试通知,该怎么准备&#xff…

2026/8/5 8:17:05

微信ClawBot技术解析:开源AI模型与微信生态的平民化AI代理实践

1. 从一只龙虾到14亿入口:ClawBot现象的本质是什么?最近,一个叫“微信ClawBot”的东西在圈子里火得不行。你可能没听过这个名字,但你大概率在微信群里见过它的“亲戚”——那些能陪你聊天、帮你查天气、甚至能写段子的机器人。Cla…

2026/8/5 8:17:05

相机标定核心:内参、外参与畸变系数的原理与OpenCV实战

1. 项目概述:从“拍个照”到“看懂世界”的数学语言我们每天都在用手机、相机拍照,记录生活,分享瞬间。但你是否想过,当你按下快门,相机是如何将三维的现实世界,准确地“翻译”成一张二维照片的&#xff1f…

2026/8/5 9:27:08

Unity安卓TTS集成实战:解决RT-Voice打包后无声问题

1. 项目概述与问题定位 最近在做一个Unity的AR项目,里面用到了语音播报功能,我选择了社区里口碑还不错的RT-Voice插件。在Unity编辑器里测试一切正常,语音清晰流畅,可一旦打包成安卓APK,安装到真机上就彻底哑火了&…

2026/8/5 9:27:08

追觅H60 Ultra高温蒸汽洗地机深度评测:380℃蒸汽+双机械臂清洁力实测

这次我们来看一款在高温蒸汽洗地机品类中备受关注的产品——追觅探索家H60 Ultra。它的核心卖点非常直接:380℃高温蒸汽和90℃热水吸拖,配合双机械臂实现深度清洁,并且主打“自动清洗”功能。对于追求极致清洁效果、希望解放双手的用户来说&a…

2026/8/5 9:27:08

【Linux】传输层协议UDP

目录再谈端口号一、传输层协议UDP1.1 UDP协议端格式1.2 如何理解封装过程?1.3 收到数据如何读取报文到应用层?1.4 其它关于UDP二、守护进程化2.1 进程组、作业、会话概念2.2 网络服务守护进程化2.3 其它问题 - 地址复用个人主页:矢望 个人专栏…

2026/8/5 9:22:08

欧盟AI法案第50条正式生效:全球人工智能透明度监管迈入新纪元

当生成式人工智能以惊人的速度重塑内容生产格局,虚假图像、合成语音与深度伪造视频正在以前所未有的规模冲击信息生态。面对这场技术狂欢背后的信任危机,欧盟选择了一条截然不同的路径——不是放任创新野蛮生长,而是用一部具有里程碑意义的法…

2026/8/5 3:13:11

如何用免费工具突破游戏窗口限制:SRWE完整使用指南

如何用免费工具突破游戏窗口限制:SRWE完整使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否遇到过这样的困扰?想为心爱的游戏截图,却发现游戏不支持自定义分辨率…

2026/8/5 0:01:34

三升四,比成绩下滑更可怕的,是孩子开始「认命」

分水岭上,最难的不是翻过去,是孩子不想翻了。八月初了。这两个字,对三升四的家长来说,比任何闹钟都让人清醒。最近的家长群里,气氛明显不一样了。一升二的在关心兴趣班,二升三的在讨论要不要提前学英语。而…

2026/8/5 0:01:34

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:01:34

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/3 22:40:58

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/3 13:26:41

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/3 16:43:13

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…