分类与回归树(classification and regression tree,CART)即可用于分类也可以用于回归,由特征选择、树的生成及剪枝组成,一般简称为决策树。
决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index)最小化准则,进行特征选择,生成二叉树。
回归树用平方误差最小化准则,所以又称它为最小二乘回归树。
最小二乘回归树生成算法
输入:训练数据集 D D D;
输出:回归树 f ( x ) f(x) f(x)。
在训练数据集所在的输入空间,递归将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树;
(1)选择最优切分变量 j j j与切分点 s s s,求解:
min j , s [ ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] (5.12) c 1 = a v e ( y i ∣ x i ∈ R 1 ( j , s ) ) c 2 = a v e ( y i ∣ x i ∈ R 2 ( j , s ) ) \begin{array}{ll} \min_{j,s} \left[\sum_{x_i \in R_1(j,s)}(y_i - c_1)^2 + \sum_{x_i \in R_2(j,s)}(y_i - c_2)^2 \right] \qquad \qquad \text{(5.12)}\\[2ex] c_1 = ave(y_i | x_i \in R_1(j,s)) \\[2ex] c_2 = ave(y_i | x_i \in R_2(j,s)) \end{array} minj,s[∑xi∈R1(j,s)(yi−c1)2+∑xi∈R2(j,s)(yi−c2)2](5.12)c1=ave(yi∣xi∈R1(j,s))c2=ave(yi∣xi∈R2(j,s))遍历变量 j j j,对固定的切分变量 j j j扫描切分点 s s s,选择使式(5.21)达到最小值得对 ( 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 i ∈ R m ( j , s ) y i , x ∈ R m , m = 1 , 2 \begin{array}{ll} R_1(j,s)=\{x|x^{(j)} \leqslant s\}\\[2ex] R_2(j,s)=\{x|x^{(j)} \gt s\} \\[2ex] \hat c_m = \frac1{N_m}\sum_{x_i \in R_m(j,s)}y_i, \quad x \in R_m, \quad m=1,2 \end{array} R1(j,s)={x∣x(j)⩽s}R2(j,s)={x∣x(j)>s}c^m=Nm1∑xi∈Rm(j,s)yi,x∈Rm,m=1,2
(3)继续对两个子区域调用步骤(1),(2),直到满足停止条件。
(4)将输入空间划分为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(x \in R_m) f(x)=m=1∑Mcm^I(x∈Rm)
在《机器学习实战》第九章,有对此算法具体实现的代码,可参考加深理解。
分类树算法用基尼指数选择最优特征及最优二值切分点,其他与归类树相同。
基尼指数:对给定的样本集合 D D D,其基尼指数为
Gini ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 \text{Gini}(D)=1-\sum_{k=1}^K\left( \frac{|C_k|}{|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|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 ) \text{Gini}(D,A)=\frac{|D_1|}{D}\text{Gini}(D_1)+\frac{|D_2|}{D}\text{Gini}(D_2) Gini(D,A)=D∣D1∣Gini(D1)+D∣D2∣Gini(D2)基尼指数 Gini ( D ) \text{Gini}(D) Gini(D)表示集合 D D D的不确定性,基尼指数 Gini ( D , A ) \text{Gini}(D,A) Gini(D,A)表示经 A = a A=a A=a分割后集合 D D D的不确定性。基尼指数越大,样本的不确定性也就越大。
线性回归是依据输入写出一个目标值的计算公式,即回归方程,根据回归方程和输入做预测。
假定输入数据存放在矩阵 X X X中,而回归系数存放在向量 w w w中。那么对于给定的数据 X 1 X_1 X1,预测结果将会通过 Y 1 = X 1 T w Y_1=X^T_1w Y1=X1Tw给出。如何求回归方程,也即,如何根据已有的 X X X和对应的 y y y,找到 w w w?一个常用的方法是找出使误差最小的 w w w,这里的误差平方误差 ∑ i = 1 m ( y i − x i T w ) 2 \sum_{i=1}^m(y_i-x_i^Tw)^2 ∑i=1m(yi−xiTw)2。对 w w w求导,并令其等于零,解得:
w ^ = ( X T X ) − 1 X T y \hat w=(X^TX)^{-1}X^Ty w^=(XTX)−1XTy通过调用NumPy库里的矩阵方法,仅需几行代码便可完成此功能,该方法也叫“普通最小二乘法”(ordinary least squares)。
线性回归可能出现的一个问题是欠拟合,因为它求的是最小均方误差的无偏估计,所以有些方法允许在估计中引入一些偏差,从而降低预测的均方误差。其中一个方法是局部加权线性回归(Locally Weighted Linear Regression, LWLR)。在方法中,给待预测点附近的每个点赋予一定的权重,然后基于最小均方误差来进行普通的回归,该算法解出回归系数 w w w的形式如下:
w ^ = ( X T W X ) X T W y \hat w=(X^TWX)X^TWy w^=(XTWX)XTWy其中, w w w是一个矩阵,用来给每个数据点赋予权重。
LWLR使用“核”来对附近的点赋予权重,常用的核是高斯核,对应权重如下:
w ( i , i ) = exp ( ∣ x ( i ) − x ∣ − 2 k 2 ) w(i,i)=\exp \left(\frac{|x^{(i)}-x|}{-2k^2} \right) w(i,i)=exp(−2k2∣x(i)−x∣)
岭回归就是在举证 X T X X^TX XTX上加一个 λ I \lambda I λI从而使得矩阵非奇异,回归系数的计算公式变成:
w ^ = ( X T X + λ I ) − 1 X T y \hat w=(X^TX+\lambda I)^{-1}X^Ty w^=(XTX+λI)−1XTy
前向逐步回归属于一种贪心算法,即每一步都尽可能减少误差。
该算法的伪代码如下:
数据标准化,使其分布满足0均值和单位方差
在每轮迭代过程中:
设置当前最小误差为正无穷
对每个特征:
增大或缩小:
改变特征对应系数得到一个新w
计算新w下的误差
更新最小误差
更新最佳系数矩阵
Logistic回归模型 二项Logistic回归模型是如下的条件概率分布:
P ( Y = 1 ∣ x ) = exp ( w ⋅ x + b ) 1 + exp ( w ⋅ x + b ) P ( Y = 10 x ) = 1 1 + exp ( w ⋅ x + b ) P(Y=1|x)=\frac{\exp (w \cdot x+b)}{1+\exp (w \cdot x +b)}\\[2ex] P(Y=10x)=\frac1{1+\exp (w \cdot x +b)} P(Y=1∣x)=1+exp(w⋅x+b)exp(w⋅x+b)P(Y=10x)=1+exp(w⋅x+b)1 x ∈ R n x \in R^n x∈Rn是输入, Y ∈ { 0 , 1 } Y \in \{0,1\} Y∈{0,1}是输出, w ∈ R n w \in R^n w∈Rn和 b ∈ R b \in R b∈R是参数, w w w称为权值向量, b b b称为偏置, w ⋅ x w \cdot x w⋅x为 w w w和 x x x的内积。
一般,将为计算方便,会扩充 w w w和 x x x,即 w = ( w ( 1 ) , w ( 2 ) , ⋯   , w ( n ) , b ) w=(w^{(1)},w^{(2)},\cdots,w^{(n)},b) w=(w(1),w(2),⋯,w(n),b), x = ( x ( 1 ) , x ( 2 ) , ⋯   , x ( n ) , 1 ) x=(x^{(1)},x^{(2)},\cdots,x^{(n)},1) x=(x(1),x(2),⋯,x(n),1),这时,Logistic模型如下:
P ( Y = 1 ∣ x ) = exp ( w ⋅ x ) 1 + exp ( w ⋅ x ) P ( Y = 10 x ) = 1 1 + exp ( w ⋅ x ) P(Y=1|x)=\frac{\exp (w \cdot x)}{1+\exp (w \cdot x)}\\[2ex] P(Y=10x)=\frac1{1+\exp (w \cdot x)} P(Y=1∣x)=1+exp(w⋅x)exp(w⋅x)P(Y=10x)=1+exp(w⋅x)1
使用极大似然估计法估计模型参数 w w w,进而得到Logistic回归模型。
设: P ( Y = 1 ∣ x ) = π ( x ) , P ( Y = 1 ∣ x ) = 1 − π ( x ) P(Y=1|x)=\pi (x),\qquad P(Y=1|x)=1-\pi (x) P(Y=1∣x)=π(x),P(Y=1∣x)=1−π(x)
似然函数为:
∏ i = 1 N [ π ( x i ) ] y i [ 1 − π ( x i ) ] 1 − y i \prod_{i=1}^N[\pi(x_i)]^{y_i}[1-\pi(x_i)]^{1-y_i} i=1∏N[π(xi)]yi[1−π(xi)]1−yi
对数似然函数为:
L ( w ) = ∑ i = 1 N [ y i ln π ( x i ) + ( 1 − y i ) ln ( 1 − π ( x i ) ) ] = ∑ i = 1 N [ y i ln π ( x i ) 1 − π ( x i ) + ln ( 1 − π ( x i ) ) ] = ∑ i = 1 N [ y i ( w ⋅ x i ) − ln ( 1 + exp ( w ⋅ x i ) ) ] \begin{array}{ll} L(w) & = \sum_{i=1}^N[y_i\ln\pi(x_i)+(1-y_i)\ln(1-\pi(x_i))] \\[2ex] & = \sum_{i=1}^N[y_i\ln\frac{\pi(x_i)}{1-\pi(x_i)}+\ln(1-\pi(x_i))]\\[2ex] & = \sum_{i=1}^N[y_i(w \cdot x_i)-\ln(1+\exp(w \cdot x_i))]\\[2ex] \end{array} L(w)=∑i=1N[yilnπ(xi)+(1−yi)ln(1−π(xi))]=∑i=1N[yiln1−π(xi)π(xi)+ln(1−π(xi))]=∑i=1N[yi(w⋅xi)−ln(1+exp(w⋅xi))]通过梯度上升法求 L ( W ) L(W) L(W)的极大值, w ( j ) w^{(j)} w(j)的更新过程为:
w ( j ) = w ( j ) + α ∂ π ( x i ) ∂ w ( j ) w^{(j)} = w^{(j)} + \alpha \frac {\partial \pi (x_i)}{\partial w^{(j)}} w(j)=w(j)+α∂w(j)∂π(xi)其中, α \alpha α为步长, w ( j ) w^{(j)} w(j)( w ( j ) ∈ w w^{(j)} \in w w(j)∈w)的偏导为:
∂ π ( x i ) ∂ w ( j ) = ∑ i = 1 N [ y i x i ( j ) − 1 1 + exp ( w ⋅ x i ) ⋅ exp ( w ⋅ x i ) ⋅ x i ( j ) ] = ∑ i = 1 N ( y i − π ( x i ) ) ⋅ x i ( j ) \begin{array}{ll} \frac {\partial \pi (x_i)}{\partial w^{(j)}} & = \sum_{i=1}^N[y_ix_i^{(j)}-\frac1{1+\exp(w \cdot x_i)} \cdot \exp(w \cdot x_i) \cdot x_i^{(j)}] \\[2ex] & = \sum_{i=1}^N(y_i-\pi (x_i)) \cdot x_i^{(j)}\end{array} ∂w(j)∂π(xi)=∑i=1N[yixi(j)−1+exp(w⋅xi)1⋅exp(w⋅xi)⋅xi(j)]=∑i=1N(yi−π(xi))⋅xi(j)
梯度上升算法,会对整个数据集进行多次迭代,但如果由数十亿样本和成千上万的特征,那么该算法的复杂度太高。改进的方法是一次仅用一个样本点更新回归系数,该方法称为随机梯度上升算法。具体实现,可参见《机器学习实战》第五章。