决策树(Decision Tree)是一种经典的监督学习算法,广泛应用于分类和回归任务,它通过树状结构1直观地表示决策规则,具有出色的可解释性。决策树的数学核心围绕特征选择的量化指标(衡量数据纯度)和树结构的优化目标展开,不同任务(分类/回归)对应不同数学模型,以下是核心数学原理的拆解。
一、分类树的核心数学:基于“纯度”的特征选择
分类树的目标是通过特征划分,让每个子集的“类别集中度”(纯度)最高,核心数学工具是信息熵、信息增益、基尼系数,均用于量化“数据不确定性”。
1. 基础概念:数据集与类别分布
设训练集为
D
D
D,包含
N
N
N 个样本,类别总数为
K
K
K,第
k
k
k 类样本的数量为
N
k
N_k
Nk(满足
∑
k
=
1
K
N
k
=
N
\sum_{k=1}^K N_k = N
∑k=1KNk=N)。
第
k
k
k 类样本在数据集
D
D
D 中的概率(频率) 定义为:
p
k
=
N
k
N
(
k
=
1
,
2
,
.
.
.
,
K
)
p_k = \frac{N_k}{N} \quad (k=1,2,...,K)
pk=NNk(k=1,2,...,K)
所有类别的概率构成分布
P
=
{
p
1
,
p
2
,
.
.
.
,
p
K
}
P = \{p_1, p_2, ..., p_K\}
P={p1,p2,...,pK},“纯度”本质是对该分布“集中程度”的数学度量。
2. 指标1:信息熵(Entropy)—— 衡量不确定性
信息熵源于信息论,用于量化数据集的“不确定性”:熵值越低,数据类别越集中(纯度越高);熵值最高为 log 2 K \log_2 K log2K(所有类别等概率,完全混乱),最低为 0 0 0(所有样本同类别,完全确定)。
数据集 D D D 的信息熵公式: H ( D ) = − ∑ k = 1 K p k log 2 p k H(D) = -\sum_{k=1}^K p_k \log_2 p_k H(D)=−∑k=1Kpklog2pk
- 若 p k = 0 p_k = 0 pk=0(某类别无样本),规定 0 ⋅ log 2 0 = 0 0 \cdot \log_2 0 = 0 0⋅log20=0(避免对数无意义);
- 对数底数通常取 2 2 2(单位为“比特”),也可取 e e e(单位为“纳特”),不影响相对大小比较。
示例:若数据集 ( D ) 含 10 个样本(6 个正类、4 个负类),则:
H
(
D
)
=
−
(
0.6
log
2
0.6
+
0.4
log
2
0.4
)
≈
0.971
H(D) = -\left( 0.6\log_2 0.6 + 0.4\log_2 0.4 \right) \approx 0.971
H(D)=−(0.6log20.6+0.4log20.4)≈0.971
3. 指标2:信息增益(Information Gain)—— 特征划分的“收益”
信息增益衡量“用某特征划分数据集后,不确定性减少的程度”,是 ID3 算法的核心。
设特征
A
A
A 有
V
V
V 个取值
{
a
1
,
a
2
,
.
.
.
,
a
V
}
\{a_1, a_2, ..., a_V\}
{a1,a2,...,aV},用
A
A
A 划分
D
D
D 后得到
V
V
V 个子集
{
D
1
,
D
2
,
.
.
.
,
D
V
}
\{D_1, D_2, ..., D_V\}
{D1,D2,...,DV},其中
D
v
D_v
Dv 含
N
v
N_v
Nv 个样本(
∑
v
=
1
V
N
v
=
N
\sum_{v=1}^V N_v = N
∑v=1VNv=N)。
步骤1:计算子集的加权熵(条件熵)
划分后的“条件熵”(加权平均每个子集的熵)反映划分后的总不确定性:
H
(
D
∣
A
)
=
∑
v
=
1
V
N
v
N
⋅
H
(
D
v
)
H(D|A) = \sum_{v=1}^V \frac{N_v}{N} \cdot H(D_v)
H(D∣A)=∑v=1VNNv⋅H(Dv)
其中
H
(
D
v
)
=
−
∑
k
=
1
K
N
v
k
N
v
log
2
N
v
k
N
v
H(D_v) = -\sum_{k=1}^K \frac{N_{vk}}{N_v} \log_2 \frac{N_{vk}}{N_v}
H(Dv)=−∑k=1KNvNvklog2NvNvk ,
N
v
k
N_{vk}
Nvk 是子集
D
v
D_v
Dv 中第
k
k
k 类样本的数量。
步骤2:计算信息增益
信息增益是一种衡量某个特征在对数据集进行划分时带来的信息量减少的指标,常用于决策树算法中来选择分裂点。信息增益 = 划分前的熵 - 划分后的条件熵,增益越大,说明该特征划分的“纯度提升效果”越好,其计算公式为: G a i n ( D , A ) = H ( D ) − H ( D ∣ A ) Gain(D, A) = H(D) - H(D|A) Gain(D,A)=H(D)−H(D∣A)
- 划分前的熵:熵用于衡量数据集的不确定性或混乱程度,划分前的熵是对整个数据集混乱程度的度量。熵的值越大,表示数据集的不确定性越大;熵的值越小,表示数据集更加纯净。
- 划分后的条件熵:条件熵是在给定某个特征的情况下,对于分类结果的不确定性的度量,是划分后各子集熵的加权平均。条件熵较小,说明在给定该特征的情况下,样本的分类结果越趋向于一致,即样本的混乱程度越低。
- 信息增益:它衡量了采用某个特征划分数据后,不确定性减少的程度。信息增益越大,说明使用该特征进行划分可以获得更多的信息,能更好地区分不同的类别,也就越适合作为当前分裂特征。
4. 指标3:信息增益比(Gain Ratio)—— 修正“偏向多取值特征”
信息增益存在缺陷:若特征
A
A
A 的取值数
V
V
V 越多(如“用户ID”这类唯一值特征),条件熵
H
(
D
∣
A
)
H(D|A)
H(D∣A) 会趋近于
0
0
0,导致增益虚高。
C4.5 算法用信息增益比修正,引入“特征固有值”(Intrinsic Value)衡量特征取值的分散程度:
步骤1:计算特征固有值
特征固有值(也常称信息价值,
I
n
f
o
r
m
a
t
i
o
n
V
a
l
u
e
,
I
V
Information Value,IV
InformationValue,IV),用于评估特征对分类等任务的价值 ,在信用风险评估、机器学习特征筛选等场景中常用,公式通过对特征不同取值占比的对数运算求和再取负,衡量特征包含信息的丰富程度,
I
V
IV
IV值越大,一般认为特征对目标变量的区分能力越强 。
I
V
(
A
)
=
−
∑
v
=
1
V
N
v
N
log
2
N
v
N
IV(A) = -\sum_{v=1}^V \frac{N_v}{N} \log_2 \frac{N_v}{N}
IV(A)=−∑v=1VNNvlog2NNv
- 特征取值越分散(如“用户ID”), I V ( A ) IV(A) IV(A) 越大;取值越集中, I V ( A ) IV(A) IV(A) 越小。
步骤2:计算信息增益比
G
a
i
n
_
r
a
t
i
o
(
D
,
A
)
=
G
a
i
n
(
D
,
A
)
I
V
(
A
)
Gain\_ratio(D, A) = \frac{Gain(D, A)}{IV(A)}
Gain_ratio(D,A)=IV(A)Gain(D,A)
通过除以
I
V
(
A
)
IV(A)
IV(A),抵消多取值特征的优势,更公平地选择特征。
5. 指标4:基尼系数(Gini Index)—— 衡量“类别混杂度”
基尼系数是 CART 分类树的核心指标,从“随机抽样的类别差异概率”角度量化纯度:系数越小,样本类别越集中(纯度越高),范围为 [ 0 , 0.5 ] [0, 0.5] [0,0.5](当 K = 2 K=2 K=2 时,最大为 0.5 0.5 0.5; K > 2 K>2 K>2 时最大为 1 − 1 / K 1-1/K 1−1/K)。
数据集 D D D 的基尼系数公式: G i n i ( D ) = 1 − ∑ k = 1 K p k 2 Gini(D) = 1 - \sum_{k=1}^K p_k^2 Gini(D)=1−∑k=1Kpk2
- 物理意义:随机从 D D D 中选 2 个样本,类别不同的概率(概率越低,纯度越高)。
用特征
A
A
A 划分后,子集的加权基尼系数(CART 分类树的划分损失):
G
i
n
i
(
D
,
A
)
=
∑
v
=
1
V
N
v
N
⋅
G
i
n
i
(
D
v
)
Gini(D, A) = \sum_{v=1}^V \frac{N_v}{N} \cdot Gini(D_v)
Gini(D,A)=∑v=1VNNv⋅Gini(Dv)
CART 选择使
G
i
n
i
(
D
,
A
)
Gini(D, A)
Gini(D,A) 最小的特征进行划分。
二、示例讲解
示例:假设场景是 用“天气”特征划分“是否出门”的数据集
具体如下:
原始数据集 D D D(10 个样本 )
样本编号 | 天气(特征 A A A ,取值:晴、阴、雨,即 V = 3 V = 3 V=3 ) | 是否出门(类别, K = 2 K = 2 K=2 :出门、不出门 ) |
---|---|---|
1 | 晴 | 出门 |
2 | 晴 | 出门 |
3 | 晴 | 不出门 |
4 | 阴 | 出门 |
5 | 阴 | 不出门 |
6 | 阴 | 不出门 |
7 | 雨 | 不出门 |
8 | 雨 | 不出门 |
9 | 雨 | 不出门 |
10 | 雨 | 出门 |
1.加权熵(条件熵)计算
步骤1:按特征 A A A(天气)划分数据集,得到子集 D v D_v Dv
-
D
1
D_1
D1(天气 = 晴 ):样本 1、2、3 → 共 3 个样本(
N
1
=
3
N_1 = 3
N1=3 )
类别分布:出门 2 个、不出门 1 个 → N 11 = 2 N_{11}=2 N11=2(出门), N 12 = 1 N_{12}=1 N12=1(不出门) -
D
2
D_2
D2(天气 = 阴 ):样本 4、5、6 → 共 3 个样本(
N
2
=
3
N_2 = 3
N2=3 )
类别分布:出门 1 个、不出门 2 个 → N 21 = 1 N_{21}=1 N21=1(出门), N 22 = 2 N_{22}=2 N22=2(不出门) -
D
3
D_3
D3(天气 = 雨 ):样本 7、8、9、10 → 共 4 个样本(
N
3
=
4
N_3 = 4
N3=4 )
类别分布:出门 1 个、不出门 3 个 → N 31 = 1 N_{31}=1 N31=1(出门), N 32 = 3 N_{32}=3 N32=3(不出门)
步骤2:计算每个子集 D v D_v Dv 的熵 H ( D v ) H(D_v) H(Dv)
根据公式 H ( D v ) = − ∑ k = 1 K N v k N v log 2 N v k N v H(D_v)=-\sum_{k = 1}^{K}\frac{N_{vk}}{N_v}\log_2\frac{N_{vk}}{N_v} H(Dv)=−∑k=1KNvNvklog2NvNvk ,分别算 D 1 D_1 D1、 D 2 D_2 D2、 D 3 D_3 D3 的熵:
① 计算 H ( D 1 ) H(D_1) H(D1)(天气 = 晴, N 1 = 3 N_1 = 3 N1=3 )
H ( D 1 ) = − ( 2 3 log 2 2 3 + 1 3 log 2 1 3 ) ≈ 0.88 H(D_1)=-\left( \frac{2}{3}\log_2\frac{2}{3} + \frac{1}{3}\log_2\frac{1}{3} \right)\approx 0.88 H(D1)=−(32log232+31log231)≈0.88
② 计算 H ( D 2 ) H(D_2) H(D2)(天气 = 阴, N 2 = 3 N_2 = 3 N2=3 )
H ( D 2 ) = − ( 1 3 log 2 1 3 + 2 3 log 2 2 3 ) ≈ 0.88 H(D_2)=-\left( \frac{1}{3}\log_2\frac{1}{3} + \frac{2}{3}\log_2\frac{2}{3} \right)\approx 0.88 H(D2)=−(31log231+32log232)≈0.88
③ 计算 H ( D 3 ) H(D_3) H(D3)(天气 = 雨, N 3 = 4 N_3 = 4 N3=4 )
H ( D 3 ) = − ( 1 4 log 2 1 4 + 3 4 log 2 3 4 ) ≈ 0.811 H(D_3)=-\left( \frac{1}{4}\log_2\frac{1}{4} + \frac{3}{4}\log_2\frac{3}{4} \right)\approx 0.811 H(D3)=−(41log241+43log243)≈0.811
步骤3:计算条件熵 H ( D ∣ A ) H(D|A) H(D∣A)
根据公式 H ( D ∣ A ) = ∑ v = 1 V N v N ⋅ H ( D v ) H(D|A)=\sum_{v = 1}^{V}\frac{N_v}{N}·H(D_v) H(D∣A)=∑v=1VNNv⋅H(Dv) ,这里 N = 10 N = 10 N=10(总样本数), V = 3 V = 3 V=3(天气的 3 种取值 ):
H ( D ∣ A ) = 3 10 × H ( D 1 ) + 3 10 × H ( D 2 ) + 4 10 × H ( D 3 ) H(D|A)=\frac{3}{10}×H(D_1) + \frac{3}{10}×H(D_2) + \frac{4}{10}×H(D_3) H(D∣A)=103×H(D1)+103×H(D2)+104×H(D3)
代入前面算的熵:
H
(
D
∣
A
)
≈
3
10
×
0.88
+
3
10
×
0.88
+
4
10
×
0.811
=
0.8524
H(D|A)\approx \frac{3}{10}×0.88 + \frac{3}{10}×0.88 + \frac{4}{10}×0.811 = 0.8524
H(D∣A)≈103×0.88+103×0.88+104×0.811=0.8524
最终结果
条件熵 H ( D ∣ A ) = 0.8524 H(D|A) =0.8524 H(D∣A)=0.8524,它反映了用“天气”划分后,“是否出门”的总不确定性~
2.信息增益计算
步骤1. 先算数据集 D D D 的经验熵 H ( D ) H(D) H(D)
原始数据集 D D D 共 10 10 10 个样本,“是否出门”类别:
- 出门:样本 1、2、4、10 → 4 4 4 个
- 不出门:样本 3、5、6、7、8、9 → 6 6 6 个
根据熵公式 H ( D ) = − ∑ k = 1 K N k N log 2 N k N H(D)=-\sum_{k = 1}^{K}\frac{N_k}{N}\log_2\frac{N_k}{N} H(D)=−∑k=1KNNklog2NNk( K = 2 K = 2 K=2 类别,出门/不出门 ):
H ( D ) = − ( 4 10 log 2 4 10 + 6 10 log 2 6 10 ) = 0.971 H(D)=-\left( \frac{4}{10}\log_2\frac{4}{10} + \frac{6}{10}\log_2\frac{6}{10} \right) = 0.971 H(D)=−(104log2104+106log2106)=0.971
步骤2. 再算条件熵 H ( D ∣ A ) H(D|A) H(D∣A)(前面算过≈ 0.8524 0.8524 0.8524 )
通过按“天气”划分后的子集熵加权求和,得到条件熵衡量“用天气划分后,不确定性的剩余程度”。
步骤3. 计算信息增益 G a i n ( D , A ) Gain(D, A) Gain(D,A)
信息增益公式: G a i n ( D , A ) = H ( D ) − H ( D ∣ A ) Gain(D, A) = H(D) - H(D|A) Gain(D,A)=H(D)−H(D∣A)
代入数值: G a i n ( D , A ) ≈ 0.971 − 0.8524 = 0.1186 Gain(D, A) \approx 0.971 - 0.8524 = 0.1186 Gain(D,A)≈0.971−0.8524=0.1186
它衡量了“用天气特征划分数据集后,不确定性减少的程度”,数值越大,说明该特征对分类结果的区分价值越高~
这样就完整用“天气”划分“是否出门”的小场景,演示了信息增益的计算逻辑:用原始数据集的熵,减去按特征划分后的条件熵,得到特征带来的“不确定性下降值”,也就是信息增益啦!
我们继续使用“天气”特征(A)和“是否出门”目标变量的例子,计算特征固有值(IV) 和信息增益比(Information Gain Ratio)。
3. 特征固有值计算(IV,Information Value)
特征固有值(IV)的公式为: I V ( A ) = − ∑ n = 1 V N n N log 2 N n N IV(A) = -\sum_{n=1}^{V} \frac{N_n}{N} \log_2 \frac{N_n}{N} IV(A)=−∑n=1VNNnlog2NNn
代入数据计算:
I V ( A ) = 3 10 log 2 3 10 + 3 10 log 2 3 10 + 4 10 log 2 4 10 ≈ 1.571 IV(A) = \frac{3}{10}\log_2\frac{3}{10} + \frac{3}{10}\log_2\frac{3}{10} + \frac{4}{10}\log_2\frac{4}{10}\approx 1.571 IV(A)=103log2103+103log2103+104log2104≈1.571
结论:特征“天气”的固有值 I V ( A ) ≈ 1.57 IV(A) \approx 1.57 IV(A)≈1.57,反映了该特征自身取值分布的信息量。
4. 信息增益比计算(Gain Ratio)
信息增益比是信息增益与特征固有值(IV)的比值,公式为:
G
a
i
n
_
r
a
t
i
o
(
D
,
A
)
=
G
a
i
n
(
D
,
A
)
I
V
(
A
)
Gain\_ratio(D, A) = \frac{Gain(D, A)}{IV(A)}
Gain_ratio(D,A)=IV(A)Gain(D,A)
代入数据计算:
G
a
i
n
_
r
a
t
i
o
(
D
,
A
)
≈
0.1186
1.571
≈
0.0755
Gain\_ratio(D, A) \approx \frac{0.1186}{1.571} \approx 0.0755
Gain_ratio(D,A)≈1.5710.1186≈0.0755
结论:特征“天气”的信息增益比约为
0.076
0.076
0.076,它通过归一化信息增益,减少了对取值较多特征的偏好(解决信息增益的固有偏差)。
我们继续使用“天气(特征A)划分是否出门(目标)”的例子,计算数据集整体基尼系数(Gini(D)) 和按天气划分后的加权基尼系数(Gini(D|A)),核心公式为:
- 基尼系数: Gini ( D ) = 1 − ∑ k = 1 K ( N k N ) 2 \text{Gini}(D) = 1 - \sum_{k=1}^{K} \left( \frac{N_k}{N} \right)^2 Gini(D)=1−∑k=1K(NNk)2( K K K为类别数, N k N_k Nk为第 k k k类样本数)
- 加权基尼系数: Gini ( D ∣ A ) = ∑ v = 1 V N v N ⋅ Gini ( D v ) \text{Gini}(D|A) = \sum_{v=1}^{V} \frac{N_v}{N} \cdot \text{Gini}(D_v) Gini(D∣A)=∑v=1VNNv⋅Gini(Dv)( V V V为特征取值数, N v N_v Nv为第 v v v个子集样本数)
5. 数据集整体基尼系数计算(Gini(D))
代入公式:
G
i
n
i
(
D
)
=
1
−
[
(
4
10
)
2
+
(
6
10
)
2
]
=
0.48
{Gini}(D) = 1 - \left[ \left( \frac{4}{10} \right)^2 + \left( \frac{6}{10} \right)^2 \right] = 0.48
Gini(D)=1−[(104)2+(106)2]=0.48
结论:整体数据集的基尼系数 Gini ( D ) = 0.48 \text{Gini}(D) = 0.48 Gini(D)=0.48,反映原始数据分类的不确定性(值越小,纯度越高)。
6. 按天气划分后的加权基尼系数计算(Gini(D|A))
步骤1:计算每个子集的基尼系数
-
G i n i ( D 1 ) {Gini}(D_1) Gini(D1)(晴, N 1 = 3 N_1=3 N1=3):
Gini ( D 1 ) = 1 − [ ( 2 3 ) 2 + ( 1 3 ) 2 ] = 1 − ( 4 9 + 1 9 ) = 1 − 5 9 ≈ 0.444 \text{Gini}(D_1) = 1 - \left[ \left( \frac{2}{3} \right)^2 + \left( \frac{1}{3} \right)^2 \right] = 1 - \left( \frac{4}{9} + \frac{1}{9} \right) = 1 - \frac{5}{9} \approx 0.444 Gini(D1)=1−[(32)2+(31)2]=1−(94+91)=1−95≈0.444 -
G i n i ( D 2 ) {Gini}(D_2) Gini(D2)(阴, N 2 = 3 N_2=3 N2=3):
Gini ( D 2 ) = 1 − [ ( 1 3 ) 2 + ( 2 3 ) 2 ] = 1 − 5 9 ≈ 0.444 \text{Gini}(D_2) = 1 - \left[ \left( \frac{1}{3} \right)^2 + \left( \frac{2}{3} \right)^2 \right] = 1 - \frac{5}{9} \approx 0.444 Gini(D2)=1−[(31)2+(32)2]=1−95≈0.444 -
G i n i ( D 3 ) {Gini}(D_3) Gini(D3)(雨, N 3 = 4 N_3=4 N3=4):
Gini ( D 3 ) = 1 − [ ( 1 4 ) 2 + ( 3 4 ) 2 ] = 1 − ( 1 16 + 9 16 ) = 1 − 10 16 = 0.375 \text{Gini}(D_3) = 1 - \left[ \left( \frac{1}{4} \right)^2 + \left( \frac{3}{4} \right)^2 \right] = 1 - \left( \frac{1}{16} + \frac{9}{16} \right) = 1 - \frac{10}{16} = 0.375 Gini(D3)=1−[(41)2+(43)2]=1−(161+169)=1−1610=0.375
步骤2:计算加权基尼系数
G i n i ( D ) = 3 10 × 0.444 + 3 10 × 0.444 + 4 10 × 0.375 ≈ 0.416 Gini(D) = \frac{3}{10} \times 0.444 + \frac{3}{10} \times 0.444 + \frac{4}{10} \times 0.375 \approx 0.416 Gini(D)=103×0.444+103×0.444+104×0.375≈0.416
结论:按天气划分后的加权基尼系数 G i n i ( D ∣ A ) ≈ 0.416 {Gini}(D|A) \approx 0.416 Gini(D∣A)≈0.416,反映划分后数据分类的平均不确定性(比原始 0.48 0.48 0.48小,说明划分提升了数据纯度)。
三、回归树的核心数学:基于“误差”的特征选择
回归树的目标是预测连续值(如房价、销量),核心数学工具是均方误差(MSE),通过最小化“预测值与真实值的偏差”选择特征。
1. 基础目标:最小化误差
回归树中,每个叶节点的预测值为该子集所有样本真实值的均值(使误差最小的最优解)。设子集 D v D_v Dv 的真实值为 { y 1 , y 2 , . . . , y N v } \{y_1, y_2, ..., y_{N_v}\} {y1,y2,...,yNv},则叶节点预测值: y ^ v = 1 N v ∑ i ∈ D v y i \hat{y}_v = \frac{1}{N_v} \sum_{i \in D_v} y_i y^v=Nv1∑i∈Dvyi
2. 指标:均方误差(MSE)—— 衡量回归误差
MSE 量化“预测值与真实值的平均平方偏差”,MSE 越小,子集的数值越集中(回归效果越好),是 CART 回归树的核心划分指标。
数据集
D
D
D 的 MSE(未划分时):
M
S
E
(
D
)
=
1
N
∑
i
=
1
N
(
y
i
−
y
^
)
2
MSE(D) = \frac{1}{N} \sum_{i=1}^N (y_i - \hat{y})^2
MSE(D)=N1∑i=1N(yi−y^)2
其中
y
^
=
1
N
∑
i
=
1
N
y
i
\hat{y} = \frac{1}{N} \sum_{i=1}^N y_i
y^=N1∑i=1Nyi 是
D
D
D 的整体均值。
用特征
A
A
A(连续特征需先离散化为“≤阈值”和“>阈值”)划分后,加权 MSE(划分损失):
M
S
E
(
D
,
A
)
=
∑
v
=
1
2
N
v
N
⋅
M
S
E
(
D
v
)
MSE(D, A) = \sum_{v=1}^2 \frac{N_v}{N} \cdot MSE(D_v)
MSE(D,A)=∑v=12NNv⋅MSE(Dv)
CART 回归树选择使 ( MSE(D, A) ) 最小的特征(及对应阈值)进行划分。
四、剪枝的数学:控制过拟合的“正则化”
决策树易因“过度划分”导致过拟合(训练误差小、测试误差大),剪枝通过权衡“训练误差”和“树复杂度” 优化模型,核心是“损失函数最小化”。预剪枝和后剪枝是两种核心剪枝策略,它们的核心原理和操作逻辑存在显著差异:
1.预剪枝(Pre-pruning)的原理
预剪枝的核心原理是在决策树构建过程中提前终止分支生长,通过设定严格的停止条件,避免模型学习到训练数据中的噪声或细节,从而简化树结构。
具体逻辑如下:
- 边构建边判断:在每次节点分裂前(如计算信息增益后),先评估当前分裂是否“值得”进行。
- 基于预设规则停止分裂:如果分裂后不能显著提升模型性能(或可能导致过拟合),则将当前节点标记为叶节点,不再继续分裂。
- 常见判断依据:
- 分裂后信息增益(或其他指标)小于某个阈值,认为该分裂对分类精度提升有限。
- 当前节点包含的样本数量过少(如少于5个),继续分裂可能导致过拟合。
- 树的深度达到预设最大值,避免树结构过于复杂。
- 当前节点样本已足够“纯”(如90%样本属于同一类),无需进一步分裂。
本质上,预剪枝通过主动限制树的生长,在源头减少过拟合风险,但可能因“过早停止”错失有价值的分支,导致欠拟合。
2.后剪枝(Post-pruning)的原理
后剪枝的核心原理是先构建完整的决策树(允许过拟合),再通过删除冗余分支简化模型,保留对泛化能力更有价值的结构。
具体逻辑如下:
- 先建完整树:不受限制地生成一棵尽可能拟合训练数据的决策树(可能包含大量冗余分支)。
- 从叶节点回溯评估:自底向上检查每个非叶节点对应的子树,判断是否可以将子树替换为一个叶节点(即“剪枝”)。
- 基于泛化能力判断剪枝必要性:
- 用验证集评估剪枝前后的模型性能(如错误率),若剪枝后性能不变或更优,则保留剪枝。
- 或通过统计方法(如假设检验)估计剪枝后错误率的置信区间,若剪枝更稳健则执行。
- 迭代优化:重复上述过程,直到没有可优化的分支为止。
本质上,后剪枝通过先容错再修正的思路,在充分学习数据特征后再剔除冗余信息,既能保留关键模式,又能避免过拟合,通常泛化效果更优,但计算成本更高。
3.核心差异总结
维度 | 预剪枝原理 | 后剪枝原理 |
---|---|---|
操作逻辑 | 阻止不必要的分支生长(防患于未然) | 删除已生成的冗余分支(修正过度生长) |
依赖条件 | 依赖预设阈值(如信息增益、深度) | 依赖验证集评估或统计检验 |
核心目标 | 以效率优先,避免生成复杂树 | 以精度优先,在完整树基础上优化 |
预剪枝像是“在种树时控制高度”,后剪枝像是“先让树长到最大,再修剪多余枝叶”,两者最终目的都是得到泛化能力更强的决策树。
3.数学逻辑
以 CART 树的后剪枝为例,定义剪枝损失函数: C α ( T ) = C ( T ) + α ⋅ ∣ T ∣ C_\alpha(T) = C(T) + \alpha \cdot |T| Cα(T)=C(T)+α⋅∣T∣
- C ( T ) C(T) C(T):树 T T T 的训练误差(分类树用加权基尼系数 ∑ N v N G i n i ( D v ) \sum \frac{N_v}{N}Gini(D_v) ∑NNvGini(Dv),回归树用加权 MSE ∑ N v N M S E ( D v ) \sum \frac{N_v}{N}MSE(D_v) ∑NNvMSE(Dv));
- ∣ T ∣ |T| ∣T∣:树 T T T 的叶节点数量(衡量树复杂度,叶节点越多,复杂度越高);
- α ≥ 0 \alpha \geq 0 α≥0:正则化参数(控制复杂度的权重, α = 0 \alpha=0 α=0 对应完整树, α → ∞ \alpha \to \infty α→∞ 对应仅根节点的树)。
剪枝过程:从完整树开始,逐步删除分支,计算每个候选树的 C α ( T ) C_\alpha(T) Cα(T),选择 C α ( T ) C_\alpha(T) Cα(T) 最小的树作为最终模型。
五、核心数学逻辑总结
任务类型 | 核心目标 | 数学指标(特征选择) | 叶节点输出 |
---|---|---|---|
分类树 | 最小化数据不确定性(最大化纯度) | 信息熵、信息增益、信息增益比、基尼系数 | 子集类别众数 |
回归树 | 最小化预测值与真实值的偏差 | 均方误差(MSE) | 子集真实值均值 |
剪枝 | 平衡训练误差与树复杂度 | 带正则项的损失函数 C α ( T ) C_\alpha(T) Cα(T) | - |
树状结构是一种层次化的非线性数据结构,数据元素之间存在着“一对多”的树形关系。以下是关于树状结构的详细介绍
1.相关术语:
结点:表示树中的数据元素,由数据项和数据元素之间的关系组成。
结点的度:结点所拥有的子树的个数。
树的度:树中各结点度的最大值。
叶子结点:度为0的结点,也叫终端结点。
分支结点:度不为0的结点,也叫非终端结点或内部结点。
孩子:结点子树的根。
双亲:结点的上层结点叫该结点的双亲。
祖先:从根到该结点所经分支上的所有结点。
子孙:以某结点为根的子树中的任一结点。
结点的层次:从根结点到树中某结点所经路径上的分支数称为该结点的层次。根结点的层次规定为1,其余结点的层次等于其双亲结点的层次加1。
堂兄弟:同一层的双亲不同的结点。
树的深度:树中结点的最大层次数。
无序树:树中任意一个结点的各孩子结点之间的次序构成无关紧要的树。
有序树:树中任意一个结点的各孩子结点有严格排列次序的树。
森林:m(m≥0)棵树的集合。### 特点
2.层次分明:具有清晰的层次结构,根节点位于顶层,往下依次是子节点、孙节点等,能直观地展示数据之间的层级关系。
一对多关系:除根节点外,每个节点都有且只有一个父节点,但可以有多个子节点,这种关系使得数据的组织具有明确的从属关系。
无环性:从一个节点出发,除非往返,否则不能回到起点,保证了数据结构的稳定性和可预测性。
常见类型
二叉树:树的任意节点至多包含两棵子树,包括满二叉树、完全二叉树等特殊形式,常用于搜索、排序等算法。
B树:一种平衡的m路搜索树,所有叶子结点都位于同一层,常用于数据库索引等,能够保证数据有序,在查找、插入、删除等操作时性能都能保持在 O ( l o g n ) O(logn) O(logn)。
B+树:B树的一种变形形式,叶子结点存储关键字以及相应记录的地址,叶子结点以上各层作为索引使用,更适合文件索引系统。
字典树:又称单词查找树,Trie树,是一种哈希树的变种,用于高效存储和查找字符串集合。 ↩︎