想象一下,你是一群朋友中的“聚餐决策官”,要选一家大家都满意的餐厅。你手头有一张长长的候选清单,每个人都有自己的偏好:有人无辣不欢,有人只吃清淡,有人在意距离,有人盯着评分。你会怎么做?最聪明的办法不是挨个问“你满不满意”——而是先问一个最能把人迅速分成两拨的问题:“今晚吃辣还是不吃辣?”这一问,就像在人群里切了一刀,把选择范围一下子缩小了一半。 机器学习里的决策树算法,干的就是这件“切人”的活儿。它面对一堆带着标签的数据(比如“这桌客人会不会二次光顾”),通过不断提问、把数据一层层切分,最终长成一棵“问题树”——每个分支是一个判断条件,每片叶子是一个结论。而在漫长的算法演化中,有三位“领队”最出名:ID3、C4.5、CART。它们各有各的切人哲学:ID3只看“这一刀切下去信息增益有多大”,C4.5多了一手“连续数值”和“缺失值”的细腻处理,CART则坚持“只做二选一,用基尼系数说话”。这篇文章,就是带你把三位领队的看家本领都摸一遍,从此看到决策树,不再一头雾水。
对AI从业者而言,决策树是机器学习最基础、最可解释的模型之一。搞懂这三大算法的差异,你才能在实际项目中快速选定合适基线模型、正确做特征处理和剪枝调优,为后续学习随机森林、XGBoost等集成模型打下扎实地基。
可视化演示
动态演示ID3/C4.5/CART三的核心机制,通过采集/分析/决策/反馈四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
ID3/C4.5/CART三:决策树基 决策树基础与分裂准则概述 ID3算法:信息增益分裂准则 核心机制可视化 ID3/C4.5/CART三整体架构与关键组件
决策树基础
还记得“决策官”的任务吗?你手上有一群朋友的数据:口味、距离、预算、评分,以及他们最终是否满意。决策树的本质,就是把这些数据当作“选餐厅的记录”,然后总结出一套提问顺序:先问什么、再问什么、问到哪一步就能拍板。每一问都是一个“内部节点”,每个回答把我们引向一根分支,而走到头的“叶子”,就是最终结论——比如“这家店值得去”。
从技术上看,决策树是一种典型的监督学习模型:给出一批已经标好答案的样本(去/不去),算法自动学出这套提问顺序。它的结构是一棵倒立的树,根节点在最上方,往下不断分叉。每条从根到叶子的路径,都对应一条“若……则……”的判断规则。比如:“若口味=辣,且距离≤2公里,则去”。这种规则对人类特别友好,所以决策树也常被称为“白盒模型”。
而整棵树的生长,核心动作只有一个——特征选择:每一步都从众多特征(口味、距离、评分……)里挑一个来提问。挑得好不好,直接决定了树是枝繁叶茂还是歪瓜裂枣。于是,三位领队各自亮出了“挑特征”的秘方:ID3看信息增益,C4.5看增益率,CART看基尼系数。后面的故事,就围绕这三把尺子展开。
回到选餐厅的场景:一位优秀的决策官,绝不会一上来就问“要不要去'江湖烤鱼'?”——这个问题太细,一刀下去只能分出两个人。他要找的是“今晚想不想吃辣”这种能把人群切成整齐两半、每半内部都高度一致的问题。决策树算法的全部心思,也正是在找这样一把“最利落的刀”。
ID3算法原理
ID3(Iterative Dichotomiser 3)是决策树家族的开山鼻祖,由Quinlan在1986年提出。它的性格像一位“直球领队”:只关心一个问题——“这一刀切下去,人群变得有多整齐?”在信息论里,“人群乱不乱”有一个精确的度量,叫信息熵。熵越大,说明群体越混乱(有人爱吃辣、有人不吃、有人今天想吃明天不想);熵越小,说明群体越纯净(全都无辣不欢)。
信息熵的计算公式如下:设数据集 $D$ 有 $K$ 个类别,第 $k$ 类样本占比为 $p_k$,则
有了熵这把尺子,ID3的选特征策略就顺理成章了:对每个特征 $A$,先算出“按 $A$ 的不同取值切分后,各子集熵的加权和”(条件熵),再用原始熵减去它,得到信息增益:
ID3虽然开创了先河,但有两个明显的“性格缺陷”。第一,它只能处理离散特征——像“距离3.2公里”这种连续数值,它无从下刀。第二,它有个“偏心眼”:天然偏好取值特别多的特征。比如把“身份证号”当特征,每个样本一个值,切完每个子集都只剩一个人,熵直接降到0,信息增益爆表——但这显然不是好划分。此外,它也不处理缺失值,树长成后没有剪枝环节,容易在训练集上记性太好、到了新数据就犯糊涂。正是这些短板,催生了更成熟的C4.5。
回到选餐厅:ID3就像一个急性子领队,只会在“甜/咸/辣”这种现成的标签里找最锋利的刀。可一旦遇到“距离3.2公里”这种精确数字,他就傻眼了;而且他特别容易被“每人一个偏好”这种花哨问题迷惑,看起来划分很干净,其实毫无泛化能力。这位直球领队,该退场了。
- 切分前的熵$H(D)$ 是未切分时整个数据集的信息熵,代表“现在大家有多难统一意见”。
- 切分后的条件熵假设特征 $A$ 有 $n$ 个取值,每个取值对应一个子集 $D_i$。先算每个子集的熵,再按子集大小占整体比例加权求和。
- 做差值信息增益就是两者之差。ID3遍历所有特征,选择使 $g(D,A)$ 最大的特征作为当前节点的分裂特征,然后对每个取值生成一个分支,递归建树。
C4.5改进机制
C4.5是Quinlan在1993年对ID3的全面升级,相当于一位“细致领队”。它做对的第一件事,就是治好了ID3的“偏心眼”。
增益率登场。它在信息增益的基础上,除以一个“分裂信息”惩罚项——特征取值越多,这个惩罚越大:
C4.5的第二项绝活是连续值处理。面对“距离3.2公里”这种连续特征,它先把样本按该特征排序,然后取每对相邻值的中间点作为候选分裂阈值,再逐一计算增益率,选出最优阈值:
此外,C4.5还补上了缺失值处理和剪枝策略两块拼图。对于缺失值,它不再粗暴丢弃样本,而是把缺失样本按各分支的样本比例“加权”划入不同分支;对于剪枝,它用悲观估计或验证集来评估子树是否值得保留,把过于细枝末节的规则剪掉。可以说,C4.5几乎把决策树能用到的工程技巧都集齐了。
选餐厅时,这位细致领队会怎么做?当朋友说“距离3公里左右都行”,他不会纠结于这个模糊表述,而是把所有餐厅按距离排序,试遍“2.8公里”“3.1公里”等每个中点,找到最能把大家分成“乐意去/不乐意去”的临界距离。遇到有人没表态,他也不忽略,而是按现有意见比例把这人“拆成几份”参与统计。最后,他还会把一些过于苛刻的规则(比如“评分必须≥4.8且距离≤2.5公里且周二不打折”)修剪掉,让结论更普适。
- 排序把样本按特征 $A$ 的取值从小到大排成一列,$a^i$ 表示排序后第 $i$ 个样本的特征值。
- 相邻中点每两个相邻值之间取一个平均值,作为候选分裂点。这些中点把连续的数值轴切成一格格。
- 候选集合所有中点组成候选阈值集合 $T_A$。C4.5对每个阈值都做一次“大于/小于”的二分尝试,选出增益率最高者作为该特征的最佳分裂点。
CART算法特性
如果说C4.5是细致的升级版,那么CART(Classification And Regression Tree)就是彻底的“极简主义者”。它的信条只有一条:每次只做二选一,是还是否。因此,无论特征有多少个取值,CART永远只掰成两叉——左边一队,右边一队。
CART用来挑特征的尺子叫基尼系数。它衡量的是:从数据集中随机抽两个样本,它们的类别不一致的概率。基尼系数越小,说明子集越纯净:
CART的“极简主义”带来了两大红利。其一,二叉结构让每一层的复杂度大幅下降——如果某个离散特征有5个取值,ID3会一次性分成5叉,而CART会在5个取值中搜索最优组合,把它们聚成“左/右”两组,往往能发现更巧妙的切分。其二,CART不只是分类器,它还能做回归——当叶子节点的输出不再是类别而是连续数值时,CART用均方误差来评估分裂质量:
剪枝方面,CART使用的是代价复杂度剪枝(Cost-Complexity Pruning)。它给树的每个叶子节点标了价:叶子越多,代价越高:
回到选餐厅:CART是那位“决不妥协”的领队——他不搞多选,只说“这店行,或者不行”。朋友们既有打分(回归场景)也有结论(分类场景),他都能应对。而且他还有个绝活:如果发现某些规则太细碎(比如“周三晚上必须靠窗”),他会给每条规则标个“维护成本”,把这些华而不实的条款剪掉,只留下最能打的几条主干规则。
- 训练误差$C(T)$ 是树 $T$ 在训练集上的分类误差(或回归MSE),表示这棵树对已知数据拟合得有多好。
- 叶子数量$|T|$ 是树的叶子节点总数。叶子越多,说明规则越细碎,模型越复杂。
- 权衡系数$\alpha$ 是用户指定的惩罚系数,用来平衡拟合度与复杂度。CART先生成一棵完整树,再逐步剪掉“性价比低”的子树,最终选验证集上表现最好的那棵。
三算法对比
现在三位领队站成一排,我们来做个快速体检。第一位ID3:只看信息增益,只能处理离散特征,长出多叉树,不剪枝,是个“能吃但挑食”的急性子。第二位C4.5:改看增益率,能啃连续值,能处理缺失值,还会剪枝,是全能型选手,代价是计算量大。第三位CART:只看基尼系数,只长二叉树,分类回归通吃,配合代价复杂度剪枝,是现代工业界最常用的底座。
它们三者的核心差异,可以用一张“言行对照表”来记:ID3靠熵的减法选特征,C4.5靠熵的除法选特征,CART靠概率的平方选特征。信息增益偏爱取值多的特征,增益率给这种偏爱踩了刹车,基尼系数则是熵的一种轻量近似——它的计算只涉及平方运算,不涉及对数,在大规模数据上速度更快。
从特征类型看,ID3只能吃离散;C4.5和CART都能处理连续值,但手法不同——C4.5先离散化再二分,CART直接在原始数值上找切点。从树结构看,ID3和C4.5都是多叉树,CART是严格的二叉树。从应用场景看,ID3基本只用于教学和理解原理;C4.5适合中小规模、特征类型混杂、需要可解释规则的数据;CART则因其高效和稳健,成为随机森林、XGBoost、LightGBM等主流集成树的基学习器。
如果非要用一句话总结三人的分工:ID3是教科书里的“理想模型”,C4.5是工具箱里的“瑞士军刀”,CART是工业界的“标准砖块”。你要是做入门学习,从ID3入手理解熵;你要是处理一份不太干净的中小数据集,C4.5很顺手;你要是上生产环境、追求性能和扩展性,CART和它的集成后代是当之无愧的首选。
回到选餐厅:如果朋友少、口味标签清晰,ID3式的“一刀切”足够用;如果朋友的意见含含糊糊、还有各种连续条件,C4.5式的精细盘问更靠谱;如果这是一场上百人的大型团建,你需要快速把人群高效地分成几大阵营——那CART式的二分法配合后来的集成策略,才是真正的效率之王。
过拟合防控
决策树有一个著名的“职业病”——过拟合。它就像一位过分较真的记笔记狂:把训练数据里每一个巧合都当成规律记下来。比如,因为上次选“川菜馆+下雨天+周二”时朋友恰好都满意,它就固化了一条“下雨的周二必须吃川菜”的规则。这种规则在新数据面前毫无意义,只会在训练集上刷出漂亮的准确率。
防控手段主要分两大类:预剪枝和后剪枝。预剪枝是“边建边停”——在树生长的过程中,每准备分裂一个节点前,先问一句:“这一刀切下去,验证集上的表现真的变好了吗?”如果没变好,就强行停止,让这个节点直接当叶子。这种做法高效省时,但也有“近视”风险:可能当前这一步提升不明显,但再往下切两步就豁然开朗了。
后剪枝则是“先长再剪”——让树毫无约束地长到最大,然后用代价复杂度剪枝从下往上审视每个子树,把“收益不明显还净添乱”的枝叶剪掉。之前的公式 $C_\alpha(T) = C(T) + \alpha|T|$ 就是后剪枝的评分标准:叶子越多,惩罚越重。后剪枝通常比预剪枝更稳妥,因为它是“看过全局再动手”,但代价是训练时间更长。
除了剪枝,数据规模也是防过拟合的重要杠杆。树模型特别吃数据量——样本越多,树越不容易记住那些偶发噪声。实际工程中还有两手辅助:一是限制树的深度、叶子最小样本数等超参数;二是使用交叉验证来选择最优的 $\alpha$。综合运用这些手段,才能让树的泛化能力真正落地,而不是当“考试型选手”。
选餐厅也是这样:真正的决策高手不会把一次偶然的满意经历奉为金科玉律。他会在提出规则时问:“这条规律放到下次聚餐还成立吗?”如果只是巧合,就果断放弃。预剪枝相当于“边聊边收敛,感觉不对立刻打住”;后剪枝相当于“把全部想法说完,再回头删掉不靠谱的”。两者都需要一份“历史战绩”(验证集)来分辨,哪些是好经验,哪些只是运气。
算法选用策略
学了三种算法,到了项目里到底怎么选?别慌,记住一个朴素的决策顺序即可:先看数据,再看需求,最后看性能。
第一步,数据特点先行。如果数据全是离散特征、样本量小、只求快速理解原理,ID3就够了;如果特征既有离散又有连续、还夹杂缺失值,C4.5的家庭医生属性最合适;如果数据量大、特征维度高、且后续还要接随机森林等集成模型,无脑选CART。
第二步,业务需求把关。业务方要求“给我几条能讲给老板听的理由”?那就选可解释性强的ID3/C4.5,直接输出规则。业务方要的是预测准确性,且允许你搭建复杂模型?CART是更合适的地基。如果任务本身就是回归(预测房价、销量),ID3和C4.5直接出局,只有CART能扛起回归大旗。
第三步,性能权衡落地。C4.5对连续值要反复排序找切点,训练开销明显高于CART的基尼计算。在大规模数据集上,CART之所以更受欢迎,正是因为它“算得快、分得匀、配合剪枝还不容易过拟合”。现代工程里,C4.5更多作为学习案例出现,而CART则化身为sklearn中 DecisionTreeClassifier 的默认实现,成为千万AI工程师的日常伙伴。
最后送上一句实战心法:决策树本身往往是“基线模型”而非“终极模型”。拿到新数据,先跑一棵CART看效果,再往后接随机森林、梯度提升树。理解这三个算法的差异,你不仅学会了怎么选树,更为理解整个树模型家族铺平了道路——毕竟,集成模型的每一棵树,本质上都是CART或C4.5的孩子。
选餐厅的最终智慧就在于此:不同的聚会规模、不同性格的朋友、不同的决策成本,决定了你要用哪位领队的方法。人少口清,随手一刀;人多事杂,严谨二分。算法没有绝对高下,只有合不合适。读懂三兄弟的脾气,你就能在数据的世界里,永远选出那家“众人满意”的餐厅。
AI 应用场景
银行信贷审批中的CART风控模型
阶段:模型训练与部署
解决的问题:传统信贷审批依赖人工审核,效率低且标准不一致。CART决策树可根据申请人年龄、收入、负债率、历史还款记录等特征,自动生成可解释的“是/否放贷”规则,同时输出风险概率,审批过程透明可追溯。
具体案例:某消费金融公司用CART构建信用评分卡,以“收入≥8000元”和“历史逾期≤2次”作为首要分裂条件,模型AUC达到0.78。审批时间从3天缩短到10秒,同时合规部门可直接审阅树结构中的每一条风控规则,顺利通过监管审查。
电商促销人群圈选中的C4.5规则提取
阶段:特征工程与模型解释
解决的问题:电商运营想从海量用户中圈出“高响应人群”做促销,但运营人员不懂复杂模型。C4.5支持混合特征(用户等级离散值、近30天消费连续值)和缺失值(新注册用户无历史数据),输出的if-then规则可直接翻译成运营话术。
具体案例:某美妆电商用C4.5分析历史促销数据,自动提炼出“会员等级≥3且近30天消费≥200元 → 促销响应概率高”等12条规则。运营团队基于这些规则做定向推送,活动转化率提升22%,且每条规则都能在晨会上用大白话讲清楚。
医疗辅助诊断中的缺失值容忍
阶段:数据预处理与模型推理
解决的问题:临床病历常常不完整——急诊病历可能缺身高体重,门诊病历可能缺某项化验结果。C4.5对缺失值不丢弃而是按权重划分,能最大程度利用现有信息做初步分诊判断,同时输出可解释的推理路径,辅助医生决策。
具体案例:某三甲医院急诊科用C4.5构建胸痛分诊模型,输入为患者年龄、胸痛类型、心电图结果(部分可能缺失),输出“高危/中危/低危”建议。模型对缺失值容忍度高,分诊准确率达到87%,最重要的是医生能查看推理路径,快速判断模型是否可靠。
Python 演示
import mathfrom collections import Counter def entropy(labels): total = len(labels) if total == 0: return 0.0 counter = Counter(labels) result = 0.0 for count in counter.values(): p = count / total result -= p * math.log2(p) return result def gini(labels): total = len(labels) if total == 0: return 0.0 counter = Counter(labels) impurity = 1.0 for count in counter.values(): p = count / total impurity -= p * p return impurity def evaluate(data, feature_idx): base_entropy = entropy([row[-1] for row in data]) groups = {} for row in data: key = row[feature_idx] groups.setdefault(key, []).append(row[-1]) cond_entropy = 0.0 split_info = 0.0 gini_sum = 0.0 for sub_labels in groups.values(): w = len(sub_labels) / len(data) cond_entropy += w * entropy(sub_labels) split_info -= w * math.log2(w) gini_sum += w * gini(sub_labels) info_gain = base_entropy - cond_entropy gain_ratio = info_gain / split_info if split_info > 0 else 0.0 return info_gain, gain_ratio, gini_sum if __name__ == "__main__": data = [ ["晴", "热", "高", "否"], ["晴", "热", "高", "否"], ["阴", "热", "高", "是"], ["雨", "温", "高", "是"], ["雨", "凉", "中", "是"], ["雨", "凉", "中", "否"], ["阴", "凉", "中", "是"], ["晴", "温", "高", "否"], ["晴", "凉", "中", "是"], ["雨", "温", "中", "是"], ["晴", "温", "中", "是"], ["阴", "温", "高", "是"], ["阴", "热", "中", "是"], ["雨", "温", "高", "否"] ] feature_names = ["天气", "温度", "湿度"] print("特征\t信息增益\t增益率\t基尼指数") for i in range(3): g, r, gi = evaluate(data, i) print(f"{feature_names[i]}\t{g:.3f}\t\t{r:.3f}\t\t{gi:.3f}")
def entropy(labels):定义信息熵函数,把熵作为“混乱度”的度量尺。它是ID3计算信息增益的基础。def gini(labels):定义基尼系数函数,这是CART用来挑选分裂特征的核心指标。groups.setdefault(key, []).append(row[-1])把样本按特征取值分组,row[-1]是标签列。这一步模拟了“按某个问题把人群切开”的动作。cond_entropy += w * entropy(sub_labels)计算条件熵:每个小组熵的加权和,代表切分后剩余的平均混乱度。split_info -= w * math.log2(w)计算分裂信息,即把特征取值分布当作“小数据集”再算一遍熵,用于C4.5惩罚取值过多的特征。info_gain = base_entropy - cond_entropy信息增益 = 切之前的熵 − 切之后的熵,差值越大代表这个特征越有区分力。gain_ratio = info_gain / split_info if split_info > 0 else 0.0增益率 = 信息增益 ÷ 分裂信息,这是C4.5的核心分裂准则。for i in range(3):遍历三个特征,输出它们各自的三种准则得分,方便你横向比较。
常见误区
误区很多人觉得“C4.5是ID3的升级版,准确率肯定更高,所以无脑用C4.5就行”。
正解这个理解有偏差。增益率的主要目的是解决ID3“偏好取值多特征”的结构性缺陷,而不是直接提升准确率。C4.5在连续值、缺失值场景下确实更鲁棒,但在纯离散、无缺失的小数据集上,两者准确率可能非常接近甚至相同。而且C4.5计算开销更大,训练更慢。
为何常见:人们的直觉是“改进版=更好”,忽略了算法的改进往往针对特定痛点,而非全面碾压。
误区初学者常把CART看作C4.5的“二分裂版”,觉得没有本质区别。
正解二者的度量准则完全不同——C4.5用信息论里的熵(涉及对数运算),CART用概率论里的基尼系数(涉及平方运算)。基尼系数计算更快,效果与熵近似。更关键的是,CART支持回归任务,而ID3和C4.5只能做分类。此外CART用代价复杂度剪枝,C4.5用悲观剪枝,剪枝策略也不同。
为何常见:两者都叫“决策树改进版”,从外观上看都是树形结构,容易让人以为只是细节差异。
误区看到剪枝把树的某些分支砍掉,初学者担心“这是在丢掉信息,模型会变笨”。
正解剪枝在训练集上确实可能降低准确率,但决策树的目标是泛化到新数据。不剪枝的树会把噪声当规律,训练集得分高、测试集表现差。剪枝牺牲一点训练集拟合度,换来的是更强的泛化能力。后剪枝在验证集上评估后再动手,通常能同时提升测试集准确率和模型可解释性。
为何常见:人的直觉惯性是“信息越多越好”,但对噪声过多的“信息”,丢掉反而是最优策略。
误区用过线性模型的人习惯先做标准化,以为决策树也吃这一套,否则数值大的特征会“占便宜”。
正解决策树是基于排序的模型,只关心特征值之间的相对大小关系。比如C4.5对连续值排序后取相邻中点,CART遍历阈值切分,它们都不受量纲影响。年龄用“岁”还是“天”表示,切分点会等比缩放,树的结构完全不变。因此决策树不需要标准化,这也省去了不少预处理工作。
为何常见:把逻辑回归、SVM等基于距离的模型的经验,错误地迁移到了树模型上。
面试题
Q1. ID3算法的分裂准则是什么?
- A.信息增益最大化← 正确答案
- B.增益率最大化
- C.基尼系数最小化
- D.均方误差最小化
答案:A。ID3的核心是计算信息增益,即分裂前后信息熵的差值,选特征使信息增益最大。增益率是C4.5的准则,基尼系数是CART的准则,均方误差是回归树的评估方式。可以类比为:选餐厅时ID3只找“切完最整齐”的那个提问。
Q2. 关于C4.5相对ID3的改进,下列说法错误的是?
- A.支持连续值特征
- B.引入增益率准则
- C.能够处理缺失值
- D.改为生成二叉树← 正确答案
答案:D。C4.5仍然生成多叉树,二叉树是CART的结构特征。C4.5的改进包括连续值排序取中点分裂、用增益率抑制多取值特征的偏好、用加权方式处理缺失值。就像细致领队多了几样本事,但“一刀切多片”的习惯没变。
Q3. CART算法与ID3/C4.5最核心的结构差异是什么?
- A.只能输出数值结果
- B.只能生成二叉树← 正确答案
- C.不需要特征选择
- D.无需递归分裂
答案:B。CART每次分裂只把数据分成左右两支,最终形成严格的二叉树;ID3和C4.5按特征取值数量生成多叉树。CART也能做分类,所以A错误;CART同样需要特征选择和递归分裂,C、D错误。这就像CART领队只问“是还是否”,绝不搞多选。
Q4. 基尼系数为0表示当前数据集处于什么状态?
- A.样本包含多个类别
- B.样本完全属于一类← 正确答案
- C.样本特征均为离散
- D.样本数量恰好为零
答案:B。基尼系数 = 1 − 各类别占比平方和。当所有样本同属一类时,平方和为1,基尼为0,说明数据“纯净无杂质”。类比选餐厅,就是所有人都已达成一致,不需要再提问了。
Q5. 关于C4.5的增益率,下列说法正确的有哪些?
- A.分母是分裂信息量← 正确答案
- B.能惩罚取值过多的特征← 正确答案
- C.数值一定大于信息增益
- D.无需先计算信息增益
答案:AB。增益率 = 信息增益 ÷ 分裂信息量。分裂信息随特征取值增多而变大,起到惩罚作用,A、B正确。增益率是信息增益除以一个正数,所以通常小于信息增益,C错误。C4.5实际使用中要先算出信息增益,再筛出高于平均水平的特征进行二次挑选,D错误。
Q6. C4.5处理连续值特征的经典方法是什么?
- A.随机选取一个数值
- B.取所有值的平均值
- C.排序后取相邻中点← 正确答案
- D.直接丢弃连续特征
答案:C。C4.5先把样本按连续特征排序,然后取每对相邻值的中点作为候选阈值,枚举比较增益率后选出最优切点。随机选取、平均值都不科学,丢弃则是ID3的无奈之举。这就像在距离轴上试遍每个“临界点”,找到最能分清人群的位置。
Q7. 关于决策树剪枝,下列说法正确的有哪些?
- A.预剪枝在生长过程中提前停止← 正确答案
- B.后剪枝先生成完整树再修剪← 正确答案
- C.预剪枝的效果必然优于后剪枝
- D.后剪枝不需要验证集参与
答案:AB。预剪枝边建树边评估,效果不好就停止分裂;后剪枝先让树长满,再自底向上剪掉低收益分支。通常后剪枝因掌握全局信息而效果更稳,C错误。剪枝决策往往依赖验证集评估泛化表现,D错误。类比选餐厅:预剪枝是边聊边打住,后剪枝是把话说完再删掉荒唐的。
Q8. 决策树模型属于以下哪种学习范式?
- A.监督学习算法← 正确答案
- B.无监督学习算法
- C.强化学习算法
- D.自监督学习算法
答案:A。决策树训练时使用带标签的数据(如“去/不去”),通过拟合输入特征与标签的映射关系来建模,属于监督学习。无监督学习没有标签,强化学习靠奖励信号试错,自监督学习利用数据自身结构构造标签,均不符合。就像聚餐记录里既要有“吃了什么”也得有“满不满意”才能学出规律。
Q9. CART分类树选择分裂特征的依据是什么?
- A.信息增益率最大
- B.基尼指数最小化← 正确答案
- C.信息熵值最大化
- D.方差缩减最大化
答案:B。CART分类树遍历所有特征和取值组合,选择使分裂后子集基尼指数加权和最小的切分。增益率是C4.5的准则,最大化和方差缩减也不是CART分类树的指标。基尼系数小说明子集纯度高,就像一刀下去,两边的人心意都更整齐。
Q10. 关于C4.5的缺失值处理机制,下列说法正确的有哪些?
- A.按概率权重分配到各分支← 正确答案
- B.缺失样本直接在数据中删除
- C.对所有缺失值统一填充众数
- D.计算分裂信息时需修正权重← 正确答案
答案:AD。C4.5对缺失样本不丢弃,而是根据各分支已有样本的比例,把缺失样本“加权”分入不同分支参与统计,同时计算信息增益和分裂信息时都按权重修正,A、D正确。直接删除样本和填充众数都不是C4.5算法的设计,B、C是其它的预处理策略。这就像统计聚餐意见时,没表态的朋友按现有比例拆分计入各选项。