树形分类结构

如何选择划分位置(特征选择);划分次数(决策树深度)

baseline 递归划分步骤:

当前子块 如果(都同一类 or 属性都一样 or 集合不包含样本)return 停止划分。

需要划分则 选择特征后,信息增益如果不超过阈值,说明没必要划分,return 停止划分。

按特征划分为不同类,继续递归划分。

决策树代码实践

1. 特征选择

如何选择特征,使得分支后节点中的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高。

sklearn - DecisionTreeClassifier 对应参数:

1. 包括分裂策略:

        使用什么损失 criterion{“gini”, “entropy”, “log_loss”}, default=”gini”

        考虑部分特征 or 随机特征 or 全部特征;

2. 停止条件:

        树的最大深度;分裂需要的最小不纯度下降值;

        一个叶节点 / 分裂一个内部节点 必须拥有的最小样本数;

3. 后剪枝 ccp_alpha

1.1 信息增益

1.2 增益率

上面划分的问题:加入我把标号看做一个特征,按标号划分就把每个样本都分开了。

那上方的信息增益很大,但对我们实际问题的解决没有帮助。

信息增益准则对可取值数目较多的属性有所偏好,

为减少这种偏好可能带来的不利影响,我们引入了“增益率”。

其中分母是特征 a 无关样本类别,对特征 a 的取值数目进行惩罚。

如同类别“纯度”一样,可看做是 特征 a 的纯度。

1.3 基尼指数

直观来说,Gini(D) 反映了从数据集 D 中随机抽取两个样本,其类别标记 不一致的概率。

因此Gini(D)越小,则数据集 D 的纯度越高.

 替换信息熵。

对应 CART 分类与回归树:用基尼指数不断二分类,形成二叉树。

(做回归任务的话 把基尼指数换成方差 or 均方误差等指标)

在分类树中,叶节点输出的是多数类;在回归树中,叶节点输出所有样本目标值的平均值

学生 年级 项目经历 奖学金 会写代码 是否适合
小A 高年级 不会 不适合
小B 低年级 一般 中等 适合
小C 低年级 不会 不适合
小D 低年级 一般 适合
小E 低年级 一般 不会 不适合

看到最后一列,会写代码与适合都对应,即 gini = 0。所以现在该按 代码能力划分。

2. ✂️剪枝(Pruning)

目的:降低模型的过拟合(Overfitting) 风险,提高泛化能力。
方法:通过主动移除决策树中的某些分支或子树,简化模型结构。


特点 预剪枝 后剪枝
剪枝时机 建树过程中,划分前判断 建树完成后自底向上检查
判断依据 划分是否提高验证集精度 替换为叶节点是否提高精度
训练速度
过拟合控制 较强,可能欠拟合 较好,平衡拟合与泛化
适用场景 数据量大、要求训练效率 对模型精度要求高

3. 连续与缺失值

之前讨论离散特征的情形,但像年龄,含糖量等等连续值

可以进行选阈值二分划分,年龄 ≤ a 的为一类,年龄 > a 的为一类。

可以先排序,然后取相邻值的中间值作为候选分割点,再找最优划分点。


缺失值处理:如何选择属性?

对于属性A:只考虑在属性 A 中没有缺失值的样本子集,

由于只用了部分样本,乘上补偿系数(部分样本在总样本数的占比)

若选择的属性,样本在该属性缺失,如何划分样本?

按照有属性值的 左右子树比例,把属性值缺失的样本按照比例概率划分到左右子树。

4. 多变量决策树

如果只是单特征划分,每次划分都是平行于坐标轴的。

但现实中复杂情形,可能需要多个平行于轴的进行划分。

联系现实,特征之间相互作用影响标签,需要结合考虑。

非叶结点不再是仅对某个属性,而是对属性的线性组合进行测试:

每个非叶节点,对应空间中的一个分类边界 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐