根节点、父节点、子节点和叶子节点。子节点有父节点根据某一规则分裂而来,然后子节点作为新的的父节点继续分裂,直到不能分裂为止。
决策树学习的算法通常是一个递归地选择最优特征, 并根据该特征对训练数据进行分割, 使得各个子数据集有一个最好的分类的过程.
在决策树算法中,ID3基于信息增益作为属性选择的度量, C4.5基于信息增益作为属性选择的度量, CART基于基尼指数作为属性选择的度量
优点:
缺点:
若一个事件A有K种结果,每个结果的概率为 P i P_i Pi,则使劲按发生后的信息量I为:
I = − ∑ i = 1 k p i l o g 2 p i I=-\sum_{i=1}^{k}{p_ilog_2p_i} I=−i=1∑kpilog2pi
这个是根据全概率公式 P = ∑ i = 1 k P ( A i ) P ( B ∣ A i ) P=\sum_{i=1}^{k}{P(A_i)P(B|A_i)} P=∑i=1kP(Ai)P(B∣Ai)以及信息量的定义 I = l o g 2 m I=log_2m I=log2m(其中m为事件的可能结果数)所给出的
给定包含关于某个目标概念的正反例样集S,那么S相对布尔型分类的熵为:
E n t r o p y ( S ) = − ( p ⊕ ∗ l o g 2 p ⊕ ) − ( p ⊖ ∗ l o g 2 p ⊖ ) Entropy(S)=-(p_\oplus*log_2p_\oplus)-(p_\ominus*log_2p_\ominus) Entropy(S)=−(p⊕∗log2p⊕)−(p⊖∗log2p⊖)
其中 p ⊕ p_\oplus p⊕代表正例, p ⊖ p_\ominus p⊖代表反例。
熵可以度量不确定性,假设S是一个有限值的离散随机变量,概率分布为: P ( X = x i ) = p i , i = 1 , 2 , . . . , n P(X=x_i)=p_i,i=1,2,...,n P(X=xi)=pi,i=1,2,...,n
则X的熵定义为: H ( X ) = − ∑ i = 1 n p i l o g p i H(X)=-\sum^{n}_{i=1}{p_ilogp_i} H(X)=−i=1∑npilogpi
上边的布尔型分类只有两个结果所以是两个。
假设随机变量 ( X , Y ) (X,Y) (X,Y),其联合分布概率为 P ( X = x i , Y = y i ) = P i j , i = 1 , 2 , . . . , n ; j = 1 , 2 , . . . , m P(X=x_i,Y=y_i)=P_{ij},i=1,2,...,n;j=1,2,...,m P(X=xi,Y=yi)=Pij,i=1,2,...,n;j=1,2,...,m则条件熵 H ( X ∣ Y ) H(X|Y) H(X∣Y)表示在一直随机变量X的条件下随机变量Y的不确定性,其定义为X在给定条件下Y的条件概率分布的熵对X的数学期望。????????
H ( X ∣ Y ) = ∑ i − 1 n p i H ( Y ∣ X = X i ) H(X|Y)=\sum_{i-1}^{n}{p_iH(Y|X=X_i)} H(X∣Y)=i−1∑npiH(Y∣X=Xi)
信息增益表示得知特征X的信息二十的特征Y的信息的不确定性减少的程度。
假设特征A对训练集的信息增益为 g ( D , A ) g(D,A) g(D,A),其定义为集合D的熵与特征A给定条件下的D的条件熵 H ( D ∣ A ) H(D|A) H(D∣A)之差:
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
特征A对训练集D的信息增益比 g R ( D , A ) g_R(D,A) gR(D,A)定义为其信息增益 g ( D , A ) g(D,A) g(D,A)与训练集D关于特征A的值的熵 H A ( D ) H_A(D) HA(D)之比:
g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A)=\frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A)
其中 H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ , n H_A(D)=-\sum_{i=1}^{n}{\frac{|D_i|}{|D|}log_2{\frac{|D_i|}{|D|}}},n HA(D)=−∑i=1n∣D∣∣Di∣log2∣D∣∣Di∣,n是特征A取值的个数
分类树采用基尼指数来选择最优的切分特征,而且每次都是二分。
基尼指数是一个类似与熵的概念,对于一个有 K K K 种状态对应的概率为 $p_1,p_2,…,p_K 的 随 机 变 量 X , 其 的随机变量 X ,其 的随机变量X,其Gini$定义如下:
G i n i ( X ) = ∑ i = 1 k ( 1 − p i ) = 1 − ∑ p i 2 Gini(X)=\sum_{i=1}^{k}{(1-p_i)}=1-\sum p_i^2 Gini(X)=i=1∑k(1−pi)=1−∑pi2
根据公式可得到伯努利分布 X ∼ B e r n o u l l i ( p ) X∼Bernoulli(p) X∼Bernoulli(p)的基尼系数为:
G i n i ( X ) = ∑ i = 1 k p i ( 1 − p i ) = 2 p ( 1 − p ) Gini(X)=\sum_{i=1}^{k}{p_i(1-p_i)}=2p(1-p) Gini(X)=i=1∑kpi(1−pi)=2p(1−p)
对于训练数据集合 D ,假设共有 K 个类别, C k C_k Ck 代表第 k 类的样本子集, ∣ C k ∣ |C_k| ∣Ck∣ 为$ C_k$ 的大小, ∣ D ∣ |D| ∣D∣ 为$ D$ 的大小,则集合 D的基尼系数为:
G i n i ( D ) = ∑ ∣ C i ∣ ∣ D ∣ ( 1 − ∣ C i ∣ ∣ D ∣ ) = 1 − ∑ ( ∣ C i ∣ ∣ D ∣ ) 2 Gini(D)=\sum{\frac{|C_i|}{|D|}(1-\frac{|C_i|}{|D|})}=1-\sum{(\frac{|C_i|}{|D|})^2} Gini(D)=∑∣D∣∣Ci∣(1−∣D∣∣Ci∣)=1−∑(∣D∣∣Ci∣)2
类似于信息增益,假设现在用特征 A 对数据进行分割,若特征 A 为离散特征,则根据 A 的某一可能取值 a 将 D 分为 D1 与 D2:
D 1 = { D ∣ A = a } D 2 = { D ∣ A ≠ a } D_1=\{D|A=a\} D_2=\{D|A≠a\} D1={D∣A=a}D2={D∣A̸=a}
得到类似于条件熵的一个量$ Gini(D,A) $,即在已知特征 A 的条件下集合 D 的基尼指数:
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A)=\frac{|D_1|}{|D|}Gini(D)+\frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=∣D∣∣D1∣Gini(D)+∣D∣∣D2∣Gini(D2)
G i n i ( D , A ) Gini(D,A) Gini(D,A) 取值越大,样本的不确定性也越大,这一点与熵类似,所以选择特征 A 的标准是 G i n i ( D , A ) Gini(D,A) Gini(D,A) 的取值越小越好。接下来以离散特征为例,给出分类树算法:
输入:训练集D
输出分类树T
根据《统计学习方法》中的介绍。
回归树使用平方误差最小化准则来构建回归树。
回归树的生成:
给定一个数据集 D = { ( X i , y i ) } D=\{(X_i,y_i)\} D={(Xi,yi)}
首先知道一棵回归树对应输入空间的一个划分以及在划分单元上的输出值。假设将数据集划分为N个子集 D 1 , D 2 , . . . , D n D_1,D_2,...,D_n D1,D2,...,Dn,并且在每个单元上都有一个固定输出值 c i c_i ci,于是回归树的模型可表示为 f ( x ) = ∑ i = 1 N c i I ( x ∈ D i ) f(x)=\sum_{i=1}^{N}{c_iI(x\in D_i)} f(x)=i=1∑NciI(x∈Di)
当输入空间的划分确定时,可以用平方误差 ∑ X i ∈ R m ( y i − f ( x i ) ) 2 \sum_{X_i\in R_m}{(y_i-f(x_i))^2} ∑Xi∈Rm(yi−f(xi))2来表示回归树对于训练数据的预测误差,用平方最小的准则求解每个单元上的最优输出值。易得,单元 R m R_m Rm上的 c m c_m cm的最优值 c m ^ \hat{c_m} cm^是 R m R_m Rm上的所有输入实例对应的输出的均值,即 c m ^ = a v e ( y i ∣ x i ∈ R m ) \hat{c_m}=ave(y_i|x_i \in R_m) cm^=ave(yi∣xi∈Rm)
问题是怎样对输入空间进行划分,这里使用启发式的方法,选择第 j j j个变量 x ( i ) x^{(i)} x(i)和它取得值是,作为切分变量和切分点,并定义两个区域:
R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } R_1(j,s)=\{x|x^(j) \leq s\} R1(j,s)={x∣x(j)≤s}和
R 2 ( j , s ) = { x ∣ x ( j ) > s } R_2(j,s)=\{x|x^(j)>s\} R2(j,s)={x∣x(j)>s}
然后寻找最优切分变量j和最优切分点s.求解
m i n j , s [ m i n c 1 ∑ x 1 ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + m i n c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] min_{j,s}[min_{c_1}\sum_{x_1 \in R_1(j,s)}{(y_i-c_1)^2}+min_{c_2}\sum_{x_i \in R_2(j,s){(y_i-c_2)^2}}] minj,s[minc1x1∈R1(j,s)∑(yi−c1)2+minc2xi∈R2(j,s)(yi−c2)2∑]
对固定输入变量j可以找到最优切分点s.
c 1 ^ = a v e ( y 1 ∣ x i ∈ R 1 ( j , s ) ) \hat{c_1}=ave(y_1|x_i \in R_1(j,s)) c1^=ave(y1∣xi∈R1(j,s))和 c 2 ^ = a v e ( y i ∣ x i ∈ R 2 ( j , s ) ) \hat{c_2}=ave(y_i|x_i \in R_2(j,s)) c2^=ave(yi∣xi∈R2(j,s))
遍历所有输入变量,找到最优的切分变量j,构成一个对 ( j , s ) (j,s) (j,s)。依次将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,知道满足停止条件位置。这样就生成一颗回归树。这样的回归树通常称为最小二乘回归树。
先给出生成算法:
输入:训练集D
输出:回归树
在训练数据集所在的输入空间中,递归的将每个区域划分为两个字区域并决定每个子区域的输出值,构建二叉决策树
随机森林就是通过集成学习的思想将多颗决策树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习中的集成学习。
从直观的角度来看,随机森林就是将每个基分类器的结果汇总起来,按照一定的选取规则,例如:投票次数最多的,指定为最终的输出结果。
特点:
FAQ:
随机森林的错误率与两个因素有关:
袋外错误率:
为了解决最优的特征选择个数问题,通过袋外错误率来作为主要依据。
随机森林有个重要的优点就是它能在生成的过程中对误差建立一个无偏估计。
在构建每棵树时使用了boostrap sample的方式。所以对于第k棵树来说,大约有1/3的训练集没有参与该树的生成,它们被称为该树的oob样本。
oob的计算方式如下:
oob误分率是误差的无偏估计。