2026/5/24 13:13:33
网站建设
项目流程
网站备案 信息安全管理协议,jarvis wordpress,广告公司网站建设的定位,百度sem推广具体做什么个人首页#xff1a; 永远都不秃头的程序员(互关)C语言专栏:从零开始学习C语言C专栏:C的学习之路K-Means专栏:K-Means深度探索系列本章所属专栏:决策树深度探索系列 文章目录 回顾与升级#xff1a;决策树的“思考”方式核心决策流程#xff1a;一步步拆解1. 学习阶段#…个人首页 永远都不秃头的程序员(互关)C语言专栏:从零开始学习C语言C专栏:C的学习之路K-Means专栏:K-Means深度探索系列本章所属专栏:决策树深度探索系列文章目录回顾与升级决策树的“思考”方式核心决策流程一步步拆解1. 学习阶段如何“学会”做决策2. 预测阶段如何“运用”所学知识模型解读读懂这棵“智慧之树”实践环节用 Scikit-learn 构建与可视化你的决策树代码解读结语与展望回顾与升级决策树的“思考”方式你有没有发现人类在做决策时也常常遵循一种分层、有条件的逻辑“如果今天不下雨并且我心情好那就去爬山如果下雨我就在家看书。”这不就是典型的决策树思维吗决策树算法正是受到了这种人类决策模式的启发。它不是简单地给出一个答案而是通过一系列**“是/否”或“选择项”的问题**逐步缩小范围最终达到一个明确的结论。这让它成为一种非常直观且易于解释的机器学习模型。让我们再次快速回顾一下决策树的“解剖结构”根节点 (Root Node)决策树的起点代表了整个数据集。从这里开始算法会提出第一个最重要的“问题”。内部节点 (Internal Node)代表一个特征上的测试或判断。比如“天气是晴朗吗”或“温度高于25度吗”。每个内部节点会根据测试结果引出不同的分支。分支 (Branch)代表测试结果的一个可能选项。比如如果“天气是晴朗吗”这个问题的答案是“是”就走一个分支如果答案是“否”就走另一个分支。叶节点 (Leaf Node)决策树的终点代表了最终的分类结果或预测值。当走到叶节点时表示我们已经找到了答案。这种层次化的结构使得决策树的每一个决策路径都清晰可见极大地提升了模型的可解释性。核心决策流程一步步拆解决策树的“思考”过程可以分为两个核心阶段学习阶段训练和预测阶段。1. 学习阶段如何“学会”做决策在学习阶段决策树通过分析训练数据自动构建出它的树形结构。这个过程通常是递归进行的从根节点开始算法会检查所有可用的特征。选择最佳划分特征在每个节点算法会评估哪个特征能最有效地将当前数据集分成更“纯净”的子集。在上一部分我们了解到这是通过计算信息增益来实现的也可以是Gini不纯度等其他指标。选择带来最大信息增益的特征作为当前节点的划分标准。创建分支根据最佳特征的不同取值为每个取值创建一个子节点和对应的分支。递归构建子树对于每个子节点算法会用其对应的子数据集重复上述步骤。这个过程会一直持续下去直到满足以下任一停止条件当前节点的数据集已经足够纯净例如所有样本都属于同一类别。没有更多特征可用于划分。达到了预设的最大深度max_depth限制。节点中的样本数量少于预设的最小样本数min_samples_leaf。通过这种递归的“提问-分支”过程决策树将复杂的数据集一步步分解成越来越纯净的小块直到每个叶节点都代表一个清晰的分类结论。2. 预测阶段如何“运用”所学知识一旦决策树训练完成它就成了一个可以用来预测新样本的模型。预测过程非常直接就像沿着一条预设的路径前进从根节点开始将待预测的新样本输入到决策树的根节点。根据特征值选择分支根据样本在当前节点所测试特征上的取值沿着对应的分支向下移动。重复直到叶节点在新到达的节点上再次根据样本的特征值选择分支持续这个过程直到最终到达一个叶节点。给出预测结果叶节点所代表的类别在分类任务中就是决策树对这个新样本的预测结果。是不是很像我们日常生活中做选择的过程每一步都基于一个明确的条件判断最终导向一个清晰的结论。模型解读读懂这棵“智慧之树”决策树最令人称赞的优点之一就是其卓越的可解释性。我们不仅知道它做出了什么预测还能清晰地看到它是“为什么”做出这个预测的。可视化决策路径通过绘制决策树我们可以直观地看到每个内部节点测试了哪个特征每个分支代表了什么条件以及最终到达的叶节点代表了什么分类结果。这使得决策流程一目了然。特征重要性 (Feature Importance)决策树模型可以很容易地告诉我们哪些特征在决策过程中起到了关键作用。特征重要性得分越高说明该特征在树的构造过程中被用来进行划分的次数越多或者说它带来了更大的信息增益因此对最终决策的影响越大。这对于理解数据、进行特征工程非常有帮助。超参数的影响max_depth(最大深度)限制了树的层数。深度越大模型越复杂越容易过拟合。min_samples_leaf(叶节点最小样本数)限制了叶节点必须包含的最少样本数。这有助于防止树分支太细避免模型过于关注训练数据中的噪声。这些超参数的调整直接影响树的结构和泛化能力是模型解读和优化的重要部分。实践环节用 Scikit-learn 构建与可视化你的决策树现在让我们利用强大的scikit-learn库来快速构建一个决策树分类器并重点关注如何可视化和解读它。我们将使用经典的鸢尾花Iris数据集这是一个多分类问题非常适合展示决策树的直观性。importpandasaspdfromsklearn.datasetsimportload_irisfromsklearn.treeimportDecisionTreeClassifier,plot_treefromsklearn.model_selectionimporttrain_test_splitfromsklearnimportmetricsimportmatplotlib.pyplotaspltimportnumpyasnp# 1. 加载数据集irisload_iris()Xiris.data# 特征数据yiris.target# 目标变量 (类别)# 将特征名和类别名转换为列表方便后续可视化feature_nameslist(iris.feature_names)target_nameslist(iris.target_names)print( 数据加载成功特征,feature_names)print(类别,target_names)# 2. 划分训练集和测试集X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.3,random_state42)print(\n 数据已划分为训练集和测试集。)print(f训练集样本数:{len(X_train)}, 测试集样本数:{len(X_test)})# 3. 构建决策树模型# max_depth 可以控制树的深度防止过拟合# random_state 用于确保结果可复现dt_classifierDecisionTreeClassifier(max_depth3,random_state42)print(\n 开始训练决策树模型...)dt_classifier.fit(X_train,y_train)print( 模型训练完成)# 4. 模型预测与评估y_preddt_classifier.predict(X_test)accuracymetrics.accuracy_score(y_test,y_pred)print(f\n 模型在测试集上的准确率:{accuracy:.2f})# 5. 可视化决策树 (模型解读的核心)plt.figure(figsize(15,10))plot_tree(dt_classifier,feature_namesfeature_names,class_namestarget_names,# 使用真实的类别名称filledTrue,# 节点填充颜色roundedTrue,# 节点边框圆角proportionFalse,# 显示样本数量而不是比例fontsize10)plt.title(Decision Tree Classifier (max_depth3),fontsize16)plt.show()# 6. 获取特征重要性 (Feature Importance)print(\n 特征重要性)fori,importanceinenumerate(dt_classifier.feature_importances_):print(f{feature_names[i]}:{importance:.4f})# 可以绘制柱状图更直观地展示plt.figure(figsize(8,5))plt.barh(feature_names,dt_classifier.feature_importances_)plt.xlabel(Feature Importance)plt.title(Feature Importance for Iris Dataset)plt.show()print(\n 尝试调整max_depth参数例如max_depth5或不设置重新运行代码观察树结构和准确率的变化)代码解读数据准备我们使用了load_iris()函数加载了著名的鸢尾花数据集。这个数据集包含4个特征花萼长度、花萼宽度、花瓣长度、花瓣宽度和3个类别Setosa、Versicolor、Virginica。训练/测试集划分将数据集分成训练集和测试集是机器学习的标准做法用于评估模型的泛化能力。构建和训练模型DecisionTreeClassifier(max_depth3, random_state42)实例化了一个决策树分类器。max_depth3限制了树的最大深度这是一种防止过拟合的有效方法。random_state确保了每次运行代码时结果的一致性。预测与评估模型训练后我们用它对测试集进行预测并计算准确率来评估模型性能。可视化决策树这是本节的重点plot_tree()函数能够将训练好的决策树以图形化的方式呈现出来。每个节点包含了giniGini不纯度另一个划分标准、samples当前节点包含的样本数、value每个类别的样本分布、class该节点下样本最多的类别。分支条件feature threshold表示了当前节点根据哪个特征的哪个阈值进行划分。通过这个图你可以清晰地追踪任何一个样本从根节点到叶节点的决策路径完美诠释了“像人类一样决策”特征重要性dt_classifier.feature_importances_属性直接给出了每个特征对模型决策的重要性得分。分数越高该特征在区分不同类别上越关键。通过可视化我们能一眼看出哪些特征是鸢尾花分类的关键。通过这个实践你是不是觉得决策树不再神秘而是变得触手可及甚至能和它“对话”了呢结语与展望决策树的探索之旅才刚刚开始在即将推出的深度探索系列中我们将深入探讨以下进阶主题连续型特征处理解析数值型数据的最佳划分方法决策树剪枝技术优化模型复杂度显著提升泛化性能集成学习应用揭秘随机森林、GBDT、XGBoost等集成算法的强大威力