目录
一.决策树的基本概念
1.分类树
决策树中的分类树是一种树形结构的预测模型,由根节点、内部节点、叶子节点和分支组成。每个内部节点代表一个特征的判断条件,分支代表判断结果(如 “是” 或 “否”),叶子节点则代表最终的预测结果。
举个生活中的例子:当我们决定是否外出野餐时,可能会依次考虑 “天气是否晴朗”“温度是否适宜”“是否有大风” 等因素,每一步判断都会缩小决策范围,这就是分类树的工作逻辑。在机器学习中,这个过程被量化为对特征的逐步筛选和划分。
- 分类树通过训练样本建立分类规则,属于有监督学习(需包含标签Y)。
- 树结构包含根节点、非叶子节点(中间节点)和叶子节点(最终分类结果)。
- 分类树优势:判断速度快,通过逐步特征判断(如优先判断“是否有xxx”)而非一次性计算所有特征。
2.回归树
- 回归树是决策树的一种分支,用于回归分析,输出具体数值。
- 回归树必须是二叉树结构,每个节点分裂为两个分支。
- 构建过程:
- 数据按特征值排序,计算相邻值的中点作为候选切分点。
- 对每个切分点计算损失值(MSE,均方误差,公式:对切分后的两部分数据,分别计算其均值,再累加各数据点与均值的平方差),选择损失最小的点作为最优切分点。注意:有多个特征时,对每个特征独立计算最优切分点及损失值,选择全局损失最小的特征作为当前分裂依据。
- 递归分裂,直到满足停止条件(如叶子节点样本数限制)。
- 局限性:回归树预测结果为分段常数(如X<3.5时输出5.72),精度可能不足,后续可通过随机森林提升
二.决策树的核心原理
1.熵和信息增益(分类树)
- 熵(Entropy):衡量数据混乱程度,计算公式为
-Σ(p_i * log₂p_i)
,其中p_i
为某类别的概率。熵值越低,数据越纯净。 - 信息增益:特征对分类结果的影响程度,计算方式为
标签熵 - 特征条件熵
。信息增益越大,特征越重要。
2.节点划分的依据
决策树的核心在于如何选择最优特征进行节点划分,目标是让划分后的子节点 “纯度更高”—— 即子节点中的样本尽可能属于同一类别(分类问题)或取值更集中(回归问题)。常用的划分标准有以下几种:
①用于分类的决策树
from sklearn.tree import DecisionTreeClassifier
1.信息增益(ID3 算法):
基于信息熵的下降程度判断特征重要性。信息熵是衡量样本集合不确定性的指标,熵值越高,样本越混乱。信息增益 = 父节点熵 - 子节点熵的加权和,增益越大,划分效果越好。
- 步骤:
- 计算标签Y的熵。
- 计算各特征(如天气)对标签的条件熵及信息增益。
- 选择信息增益最大的特征作为根节点,递归划分子集(如单独处理“sunny”分支的数据)。
- 局限性:ID3算法仅支持离散特征,后续改进为C4.5和CART算法。
2.信息增益比(C4.5 算法):
解决信息增益对多取值特征的偏好问题,通过除以特征自身的熵值进行归一化。
- 在ID3基础上引入信息增益率(信息增益/特征自身熵)。
- 特征自身熵计算示例:天气的熵为1.577。
- 信息增益率=信息增益/特征自身熵,选择最大者作为根节点。
- 与ID3核心区别:多一步计算特征自身熵,其他步骤相同。
3.基尼指数(CART 算法):
衡量样本集合的不纯度,值越小表示纯度越高。CART 树(分类与回归树)采用基尼指数作为划分标准,且只能生成二叉树。
- 使用基尼指数(非熵)衡量分裂依据,选择基尼指数最小的特征。
- 计算方法:对每个特征(如年龄、工作、房子、信贷),计算子节点的基尼系数并加权求和。
- 示例:年龄的基尼指数为0.44,房子的基尼指数最小(0.27),故选为根节点。
- 特点:适用于二分类,计算较繁琐但结果明确。
②用于回归的决策树
from sklearn.tree import DecisionTreeRegressor
- 均方误差(回归树):对于回归问题,通过计算划分前后的均方误差下降量选择最优特征,误差减少越多,划分越有效。
3.决策树过拟合与减枝
决策树的构建是一个 “自上而下、递归划分” 的过程:从根节点开始,每次选择最优特征划分样本,直到子节点中的样本全属于同一类别(分类)或无法进一步降低误差(回归),此时节点成为叶子节点。
但完全生长的决策树容易出现过拟合(对训练数据过度拟合,泛化能力差)。因此需要剪枝优化,常用方法包括:
- 预剪枝:提前限制条件(如树深度(max_depth)≤3、叶子节点数(max_leaf_nodes)≤15、叶子样本数(min_samples_leaf)≥4)。
- 后剪枝:先让树完全生长,再通过代价复杂度剪枝(ccp_alpha参数)等方法移除 “性价比低” 的分支,简化树结构。
剪枝必要性:通过限制树复杂度(深度、节点数、样本数)平衡准确性与泛化性。
剪枝目的:防止过拟合,避免决策树过于庞大复杂,导致测试集性能下降
三.决策树参数详解
1.分类树
DecisionTreeClassifier类参数源码如下
- 分裂标准选择:
criterion
:可选基尼系数(Gini)或熵(entropy,对应C4.5算法)。
- 分裂策略:
splitter
:best
(选择最优特征分裂)或random
(随机分裂),默认best
。
- 特征数量控制:
max_features
:分裂时考虑的特征数量,通常默认全部特征。
- 树结构限制:
max_depth
:树的最大深度(关键参数,需调试)。min_samples_split
:内部节点(非叶子节点)的最小样本数。min_samples_leaf
:叶子节点的最小样本数(低于阈值则停止分裂)。
- 其他参数:
random_state
:随机种子(仅在随机分裂时有用)。- 权重相关参数(如
min_weight_fraction_leaf
)通常无需调整。
注意:
- 数据量少或特征少时,可忽略部分参数(如
max_depth
)。 - 大数据场景(如28万条数据)需重点调参(如深度限制)。
- 特征重要性不足时,应通过特征选择/提取处理,而非减少
max_features
。
2.回归树
DecisionTreeRegressor类参数源码如下
- 分裂依据:默认MSE(均方误差)。
- 其他参数:
splitter
:选择best
(最优分裂)或random
(随机分裂)。max_depth
:树的最大深度。min_samples_split
:内部节点最小样本数。min_samples_leaf
:叶子节点最小样本数。
四.决策树的构建步骤(以分类树为例)
- 数据准备:收集带标签的样本数据,确保特征可量化(文本特征需转换为数值型)。
- 计算纯度指标:对每个特征计算信息增益、基尼指数等指标,选择最优特征作为根节点。
- 划分样本集:根据最优特征的取值将样本划分为子节点,递归处理每个子节点。
- 停止划分:当子节点纯度达到阈值、样本数不足或树深度达到上限时,停止划分并标记为叶子节点。
- 剪枝优化:通过预剪枝或后剪枝调整树结构,平衡拟合能力与泛化能力。
五.关键参数调优
决策树的性能很大程度上依赖参数设置,以下是scikit-learn中DecisionTreeClassifier的核心参数:
- criterion:划分标准,可选'entropy'(信息增益)或'gini'(基尼指数)。
- max_depth:树的最大深度,限制树的复杂度,防止过拟合。
- min_samples_split:节点分裂所需的最小样本数,过小易过拟合。
- min_samples_leaf:叶子节点所需的最小样本数,确保叶子节点有足够代表性。
- min_impurity_decrease:节点划分所需的最小不纯度下降量,低于此值则停止划分。
- ccp_alpha:代价复杂度剪枝参数,值越大剪枝越彻底,平衡复杂度与误差。
调参建议:遍历参数组合,结合交叉验证选择最优参数。