ID3算法
输入: 训练数据集 D D D, 特征集 A A A, 阈值 ε \varepsilon ε;
输出: 决策树 T T T.
(1) 若 D D D 中所有实例属于同一类 C k C_k Ck, 则 T T T 为单结点树, 并将类 C k C_k Ck 作为该结 点的类标记, 返回 T T T;
(2) 若 A = ∅ A=\varnothing A=∅, 则 T T T 为单结点树, 并将 D D D 中实例数最大的类 C k C_k Ck 作为该结点的 类标记, 返回 T T T;
(3)否则, 计算 A A A 中各特征对 D D D 的信息增益, 选择信息增益最大 的特征 A g A_g Ag;
(4) 如果 A g A_g Ag 的信息增益小于阈值 ε \varepsilon ε, 则置 T T T 为单结点树, 并将 D D D 中实例数最 大的类 C k C_k Ck 作为该结点的类标记, 返回 T T T;
(5) 否则, 对 A g A_g Ag 的每一可能值 a i a_i ai, 依 A g = a i A_g=a_i Ag=ai 将 D D D 分割为若干非空子集 D i D_i Di, 将 D i D_i Di 中实例数最大的类作为标记, 构建子结点, 由结点及其子结点构成树 T T T, 返回 T T T;
(6) 对第 i i i 个子结点, 以 D i D_i Di 为训练集, 以 A − { A g } A-\left\{A_g\right\} A−{Ag} 为特征集, 递归地调用 步 (1) ~步 (5), 得到子树 T i T_i Ti, 返回 T i T_i Ti.
♣ \clubsuit ♣ 最小二乘回归树生成算法
输入: 训练数据集 D D D
输出: 回归树 f ( x ) f(x) f(x).
(1) 选择最优切分变量 j j j 与切分点 s s s
min j , s [ min c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min c 2 ∑ x ϵ ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min _{j, s}\left[\min _{c_1} \sum_{x_i \in R_1(j, s)}\left(y_i-c_1\right)^2+\min _{c_2} \sum_{x_\epsilon \in R_2(j, s)}\left(y_i-c_2\right)^2\right] j,smin c1minxi∈R1(j,s)∑(yi−c1)2+c2minxϵ∈R2(j,s)∑(yi−c2)2
遍历变量 j j j, 对固定的切分变量 j j j 扫描切分点 s s s, 选择使上式达到最小值的对 ( j , s ) (j, s) (j,s).
(2)用选定的对 ( j , s ) (j, s) (j,s) 划分区域并决定相应的输出值(该区域样本标签平均值)
R 1 ( j , s ) = { x ∣ x ( j ) ⩽ s } , R 2 ( j , s ) = { x ∣ x ( j ) > s } c ^ m = 1 N m ∑ x 1 ∈ R m ( j , s ) y i , x ∈ R m , m = 1 , 2 \begin{gathered} R_1(j, s)=\left\{x \mid x^{(j)} \leqslant s\right\}, \quad R_2(j, s)=\left\{x \mid x^{(j)}>s\right\} \\ \hat{c}_m=\frac{1}{N_m} \sum_{x_1 \in R_m(j, s)} y_i, \quad x \in R_m, \quad m=1,2 \end{gathered} R1(j,s)={x∣x(j)⩽s},R2(j,s)={x∣x(j)>s}c^m=Nm1x1∈Rm(j,s)∑yi,x∈Rm,m=1,2
(3)继续对两个子区域调用步骤 (1), (2), 直至满足停止条件
(4)将输入空间划分为 M M M 个区域 R 1 , R 2 , ⋯ , R M R_1, R_2, \cdots, R_M R1,R2,⋯,RM, 生成决策树
f ( x ) = ∑ m = 1 M c ^ m I ( x ∈ R m ) f(x)=\sum_{m=1}^M \hat{c}_m I\left(x \in R_m\right) f(x)=m=1∑Mc^mI(x∈Rm)
定义 (基尼指数) :分类问题中, 假设有 K K K 个类, 样本点属于第 k k k 类的概 率为 p k p_k pk, 则概率分布的基尼指数定义为
Gini ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 \operatorname{Gini}(p)=\sum_{k=1}^K p_k\left(1-p_k\right)=1-\sum_{k=1}^K p_k^2 Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于给定的样本集合 D D D, 其基尼指数为
Gini ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 \operatorname{Gini}(D)=1-\sum_{k=1}^K\left(\frac{\left|C_k\right|}{|D|}\right)^2 Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
这里, C k C_k Ck 是 D D D 中属于第 k k k 类的样本子集, K K K 是类的个数
如果样本集合 D D D 根据特征 A A A 是否取某一可能值 a a a 被分割成 D 1 D_1 D1 和 D 2 D_2 D2 两部分, 即
D 1 = { ( x , y ) ∈ D ∣ A ( x ) = a } , D 2 = D − D 1 D_1=\{(x, y) \in D \mid A(x)=a\}, \quad D_2=D-D_1 D1={(x,y)∈D∣A(x)=a},D2=D−D1
则在特征 A A A 的条件下, 集合 D D D 的基尼指数定义为
Gini ( D , A ) = ∣ D 1 ∣ ∣ D ∣ Gini ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ Gini ( D 2 ) \operatorname{Gini}(D, A)=\frac{\left|D_1\right|}{|D|} \operatorname{Gini}\left(D_1\right)+\frac{\left|D_2\right|}{|D|} \operatorname{Gini}\left(D_2\right) Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
基尼指数 Gini ( D ) \operatorname{Gini}(D) Gini(D) 表示集合 D D D 的不确定性, 基尼指数 Gini ( D , A ) \operatorname{Gini}(D, A) Gini(D,A) 表示经 A = a A=a A=a 分割后集合 D D D 的不确定性. 基尼指数值越大, 样本集合的不确定性也就越大, 这一点与熵相似.
在终止条件被满足, 划分停止之后, 下一步是剪枝: