目录
学习内容参考来源:datawhale组队学习第23期—集成学习(上)机器学习基础
基本回归模型
1. 回归模型的评估
选择度量模型性能的指标:
- MSE均方误差: MSE ( y , y ^ ) = 1 n samples ∑ i = 0 n samples − 1 ( y i − y ^ i ) 2 . \text{MSE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_\text{samples} - 1} (y_i - \hat{y}_i)^2. MSE(y,y^)=nsamples1∑i=0nsamples−1(yi−y^i)2.
- MAE平均绝对误差: MAE ( y , y ^ ) = 1 n samples ∑ i = 0 n samples − 1 ∣ y i − y ^ i ∣ \text{MAE}(y, \hat{y}) = \frac{1}{n_{\text{samples}}} \sum_{i=0}^{n_{\text{samples}}-1} \left| y_i - \hat{y}_i \right| MAE(y,y^)=nsamples1∑i=0nsamples−1∣yi−y^i∣
- R 2 R^2 R2决定系数: R 2 ( y , y ^ ) = 1 − ∑ i = 1 n ( y i − y ^ i ) 2 ∑ i = 1 n ( y i − y ˉ ) 2 R^2(y, \hat{y}) = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2} R2(y,y^)=1−∑i=1n(yi−yˉ)2∑i=1n(yi−y^i)2
- 解释方差得分: e x p l a i n e d _ v a r i a n c e ( y , y ^ ) = 1 − V a r { y − y ^ } V a r { y } explained\_{}variance(y, \hat{y}) = 1 - \frac{Var\{ y - \hat{y}\}}{Var\{y\}} explained_variance(y,y^)=1−Var{y}Var{y−y^}
2. 线性回归
2.1 基本概念
线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为:
y
i
=
w
0
+
w
1
x
i
1
+
.
.
.
+
w
p
x
i
p
+
ϵ
i
y_i = w_0 + w_1x_{i1} +...+w_px_{ip} + \epsilon_i
yi=w0+w1xi1+...+wpxip+ϵi
ϵi 称为残差,表示真实值与预测值之间的差距,该差距服从均值为0的正态分布。
回归分析中,线性回归假设目标值与特征之间线性相关,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示得到回归分析称为一元线性回归分析。回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
通过构建损失函数,来求解损失函数最小时的参数w:
假设:数据集
D
=
{
(
x
1
,
y
1
)
,
.
.
.
,
(
x
N
,
y
N
)
}
D = \{(x_1,y_1),...,(x_N,y_N) \}
D={(x1,y1),...,(xN,yN)},
x
i
∈
R
p
,
y
i
∈
R
,
i
=
1
,
2
,
.
.
.
,
N
x_i \in R^p,y_i \in R,i = 1,2,...,N
xi∈Rp,yi∈R,i=1,2,...,N,
X
=
(
x
1
,
x
2
,
.
.
.
,
x
N
)
T
,
Y
=
(
y
1
,
y
2
,
.
.
.
,
y
N
)
T
X = (x_1,x_2,...,x_N)^T,Y=(y_1,y_2,...,y_N)^T
X=(x1,x2,...,xN)T,Y=(y1,y2,...,yN)T
假设X和Y之间存在线性关系,模型的具体形式为
y
^
=
f
(
w
)
=
w
T
x
\hat{y}=f(w) =w^Tx
y^=f(w)=wTx
2.2 计算方法
2.2.1 最小二乘估计
我们需要衡量真实值
y
i
y_i
yi与线性回归模型的预测值
w
T
x
i
w^Tx_i
wTxi之间的差距,这个差距可以有多种衡量形式,在这里使用二范数的平方和L(
w
w
w)来描述这种差距,即:
L
(
w
)
=
∑
i
=
1
N
∣
∣
w
T
x
i
−
y
i
∣
∣
2
2
=
∑
i
=
1
N
(
w
T
x
i
−
y
i
)
2
=
(
w
T
X
T
−
Y
T
)
(
w
T
X
T
−
Y
T
)
T
=
w
T
X
T
X
w
−
2
w
T
X
T
Y
+
Y
Y
T
L(w) = \sum\limits_{i=1}^{N}||w^Tx_i-y_i||_2^2=\sum\limits_{i=1}^{N}(w^Tx_i-y_i)^2 = (w^TX^T-Y^T)(w^TX^T-Y^T)^T = w^TX^TXw - 2w^TX^TY+YY^T
L(w)=i=1∑N∣∣wTxi−yi∣∣22=i=1∑N(wTxi−yi)2=(wTXT−YT)(wTXT−YT)T=wTXTXw−2wTXTY+YYT
L(
w
w
w)表示预测值与真实值之间的差距,这个差距越小,则模型的预测效果越好,所以,需要找到使得L(
w
w
w)最小时对应的参数
w
w
w,即:
w
^
=
a
r
g
m
i
n
L
(
w
)
\hat{w} = argmin\;L(w)
w^=argminL(w)
为了达到求解最小化L(w)问题,使用求导来解决这个问题:
∂
L
(
w
)
∂
w
=
2
X
T
X
w
−
2
X
T
Y
=
0
,
\frac{\partial L(w)}{\partial w} = 2X^TXw-2X^TY = 0,
∂w∂L(w)=2XTXw−2XTY=0,
因此:
w
^
=
(
X
T
X
)
−
1
X
T
Y
\hat{w} = (X^TX)^{-1}X^TY
w^=(XTX)−1XTY
2.2.2 几何解释
在线性代数中,两个向量a和b相互垂直可以得出:
<
a
,
b
>
=
a
.
b
=
a
T
b
=
0
<a,b> = a.b = a^Tb = 0
<a,b>=a.b=aTb=0,而平面X的法向量为Y-X
w
w
w,与平面X互相垂直,因此:
<
X
,
(
Y
−
X
w
)
>
=
X
T
(
Y
−
X
w
)
=
0
<X,(Y-Xw)> =X^T(Y-Xw) = 0
<X,(Y−Xw)>=XT(Y−Xw)=0,即:
w
=
(
X
T
X
)
−
1
X
T
Y
w = (X^TX)^{-1}X^TY
w=(XTX)−1XTY
2.2.3 概率视角
假设残差
ϵ
∽
N
(
0
,
σ
2
)
,
y
=
f
(
w
)
+
ϵ
=
w
T
x
+
ϵ
\epsilon \backsim N(0,\sigma^2),y=f(w)+\epsilon=w^Tx+\epsilon
ϵ∽N(0,σ2),y=f(w)+ϵ=wTx+ϵ,因此:
y
∣
x
i
,
w
∽
N
(
w
T
x
,
σ
2
)
y|x_i,w \backsim N(w^Tx,\sigma^2)
y∣xi,w∽N(wTx,σ2)
使用极大似然估计MLE对参数
w
w
w进行估计:
L
(
w
)
=
l
o
g
P
(
Y
∣
X
;
w
)
=
l
o
g
∏
i
=
1
N
P
(
y
i
∣
x
i
;
w
)
=
∑
i
=
1
N
l
o
g
P
(
y
i
∣
x
i
;
w
)
=
∑
i
=
1
N
l
o
g
(
1
2
π
σ
e
x
p
(
−
(
y
i
−
w
T
x
i
)
2
2
σ
2
)
)
=
∑
i
=
1
N
[
l
o
g
(
1
2
π
σ
)
−
1
2
σ
2
(
y
i
−
w
T
x
i
)
2
]
L(w) = log\;P(Y|X;w) = log\;\prod_{i=1}^N P(y_i|x_i;w) = \sum\limits_{i=1}^{N} log\; P(y_i|x_i;w)\\ = \sum\limits_{i=1}^{N}log(\frac{1}{\sqrt{2\pi \sigma}}exp(-\frac{(y_i-w^Tx_i)^2}{2\sigma^2})) = \sum\limits_{i=1}^{N}[log(\frac{1}{\sqrt{2\pi}\sigma})-\frac{1}{2\sigma^2}(y_i-w^Tx_i)^2] \\
L(w)=logP(Y∣X;w)=logi=1∏NP(yi∣xi;w)=i=1∑NlogP(yi∣xi;w)=i=1∑Nlog(2πσ1exp(−2σ2(yi−wTxi)2))=i=1∑N[log(2πσ1)−2σ21(yi−wTxi)2]
a
r
g
m
a
x
w
L
(
w
)
=
a
r
g
m
i
n
w
[
l
(
w
)
=
∑
i
=
1
N
(
y
i
−
w
T
x
i
)
2
]
argmax_w L(w) = argmin_w[l(w) = \sum\limits_{i = 1}^{N}(y_i-w^Tx_i)^2]\\
argmaxwL(w)=argminw[l(w)=i=1∑N(yi−wTxi)2]
因此:线性回归的最小二乘估计<==>残差
ϵ
∽
N
(
0
,
σ
2
)
\epsilon\backsim N(0,\sigma^2)
ϵ∽N(0,σ2)的极大似然估计。
2.2.4 代码实现
- sklearn的线性回归方法
- 使用波士顿房价数据做线性回归
from sklearn import linear_model # 引入线性回归方法
lin_reg = linear_model.LinearRegression() # 创建线性回归的类
lin_reg.fit(X,y) # 输入特征X和因变量y进行训练
print("模型系数:",lin_reg.coef_) # 输出模型的系数
print("模型得分:",lin_reg.score(X,y)) # 输出模型的决定系数R^2
- 运行结果:
2.3 线性回归的推广(非线性回归模型)
在线性回归中,因为假设因变量与特征之间的关系是线性关系,这样的模型优点是模型很简单,但缺点也很明显。因为模型本身是线性的,对于特征与因变量之间关系为非线性关系时,线性回归模型的预测性能及其低下。这时需要去推广线性回归模型,使得推广后的模型更能表达非线性的关系。
2.3.1 多项式回归
2.3.1.1 基本概念
标准线性回归模型:
y
i
=
w
0
+
w
1
x
i
+
ϵ
i
y_i = w_0 + w_1x_i + \epsilon_i
yi=w0+w1xi+ϵi
改成非线性回归,一个很自然的想法就是将该模型的一次项改成高次项,就变成了:
y
i
=
w
0
+
w
1
x
i
+
w
2
x
i
2
+
.
.
.
+
w
d
x
i
d
+
ϵ
y_i = w_0 + w_1x_i + w_2x_i^2 + ...+w_dx_i^d + \epsilon
yi=w0+w1xi+w2xi2+...+wdxid+ϵ
但是,多项式的阶数d不能取过大,当d越大,多项式曲线就会越光滑,在X的边界处有异常的波动。(图中的边界处的4阶多项式拟合曲线的置信区间(虚线表示置信区间)明显增大,预测效果的稳定性下降。)
2.3.1.2 代码实现
- sklearn中关于多项式回归的介绍
sklearn.preprocessing.PolynomialFeatures(degree=2, *, interaction_only=False, include_bias=True, order=‘C’): - 代码实现:
from sklearn.preprocessing import PolynomialFeatures
X_arr = np.arange(6).reshape(3, 2)
print("原始X为:\n",X_arr)
poly = PolynomialFeatures(2)
print("2次转化X:\n",poly.fit_transform(X_arr))
poly = PolynomialFeatures(interaction_only=True)
print("2次转化X:\n",poly.fit_transform(X_arr))
- 运行结果:
2.3.2 广义可加模型(GAM)
2.3.2.1 基本概念
广义可加模型GAM实际上是线性模型推广至非线性模型的一个框架,每一个变量都用一个非线性函数来代替,但是模型本身保持整体可加性。GAM模型不仅仅可以用在线性回归的推广,还可以将线性分类模型进行推广。具体的推广形式是:
标准的线性回归模型:
y
i
=
w
0
+
w
1
x
i
1
+
.
.
.
+
w
p
x
i
p
+
ϵ
i
y_i = w_0 + w_1x_{i1} +...+w_px_{ip} + \epsilon_i
yi=w0+w1xi1+...+wpxip+ϵi
GAM模型框架:
y
i
=
w
0
+
f
1
(
x
i
1
)
+
f
2
(
x
i
2
)
+
.
.
.
.
.
.
+
f
p
(
x
i
p
)
+
ϵ
i
=
w
0
+
∑
j
=
1
p
f
j
(
x
i
j
)
+
ϵ
i
y_i = w_0+f_1(x_{i1})+f_2(x_{i2})+... ...+f_p(x_{ip}) + \epsilon_i = w_0 + \sum\limits_{j=1}^{p}f_{j}(x_{ij}) + \epsilon_i
yi=w0+f1(xi1)+f2(xi2)+......+fp(xip)+ϵi=w0+j=1∑pfj(xij)+ϵi
2.3.2.2 GAM模型的优点与不足:
- 优点:
简单容易操作,能够很自然地推广线性回归模型至非线性模型,使得模型的预测精度有所上升;由于模型本身是可加的,因此GAM还是能像线性回归模型一样把其他因素控制不变的情况下单独对某个变量进行推断,极大地保留了线性回归的易于推断的性质。 - 缺点:
GAM模型会经常忽略一些有意义的交互作用,比如某两个特征共同影响因变量,不过GAM还是能像线性回归一样加入交互项 x ( i ) × x ( j ) x^{(i)} \times x^{(j)} x(i)×x(j)的形式进行建模;但是GAM模型本质上还是一个可加模型,如果能摆脱可加性模型形式,可能还会提升模型预测精度。
2.3.2.3 代码实现
- 代码实现
from pygam import LinearGAM
gam = LinearGAM().fit(boston_data[boston.feature_names], y)
gam.summary()
- 运行结果
3. 回归树
3.1基本概念
决策树在过去一般是用来处理分类问题, 常见的决策树,如ID3、C4.5、CART 等,用图形表示大概可以表示成如下形式:
由图可以看出,可以根据每个特征的不同,将其分为不同类型。所以决策树在分类问题上有较为广泛的应用,但将其转化为图形的形式,也可用在回归领域。
如图所示:
此时,可以将特征空间划分为若干区域,不同区域便是不同的预测结果。
3.2 回归树的构建过程
建立回归树的过程大致可以分为以下两步:
-
将自变量的特征空间(即 x ( 1 ) , x ( 2 ) , x ( 3 ) , . . . , x ( p ) x^{(1)},x^{(2)},x^{(3)},...,x^{(p)} x(1),x(2),x(3),...,x(p))的可能取值构成的集合分割成j个互不重叠的区域 R 1 , R 2 , . . . , R j R_1,R_2,...,R_j R1,R2,...,Rj。
-
对落入区域 R j R_j Rj的每个观测值作相同的预测,预测值等于 R j R_j Rj上训练集的因变量的简单算术平均。
具体来说,就是:a. 选择最优切分特征j以及该特征上的最优点s,遍历特征j以及固定j后遍历切分点s,选择使得下式最小的(j,s)
m i n j , s [ m i n c 1 ∑ x i ∈ 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\limits_{x_i\in R_1(j,s)}(y_i-c_1)^2 + min_{c_2}\sum\limits_{x_i\in R_2(j,s)}(y_i-c_2)^2 ] minj,s[minc1xi∈R1(j,s)∑(yi−c1)2+minc2xi∈R2(j,s)∑(yi−c2)2]
b. 按照(j,s)分裂特征空间:
R 1 ( j , s ) = { x ∣ x j ≤ s } R_1(j,s) = \{x|x^{j} \le s \} R1(j,s)={x∣xj≤s} R 2 ( j , s ) = { x ∣ x j > s } R_2(j,s) = \{x|x^{j} > s \} R2(j,s)={x∣xj>s}
c ^ m = 1 N m ∑ x ∈ R m ( j , s ) y i \hat{c}_m = \frac{1}{N_m}\sum\limits_{x \in R_m(j,s)}y_i c^m=Nm1x∈Rm(j,s)∑yi
m = 1 , 2 m=1,2 m=1,2
c. 继续调用步骤a,b直到满足停止条件,就是每个区域的样本数小于等于5。
d. 将特征空间划分为J个不同的区域,生成回归树:
f ( x ) = ∑ m = 1 J c ^ m I ( x ∈ R m ) f(x) = \sum\limits_{m=1}^{J}\hat{c}_mI(x \in R_m) f(x)=m=1∑Jc^mI(x∈Rm)
3.3 回归树与线性模型的比较:
线性模型的模型形式与树模型的模型形式有着本质的区别,具体而言,线性回归对模型形式做了如下假定:
f
(
x
)
=
w
0
+
∑
j
=
1
p
w
j
x
(
j
)
f(x) = w_0 + \sum\limits_{j=1}^{p}w_jx^{(j)}
f(x)=w0+j=1∑pwjx(j)
,而回归树则是
f
(
x
)
=
∑
m
=
1
J
c
^
m
I
(
x
∈
R
m
)
f(x) = \sum\limits_{m=1}^{J}\hat{c}_mI(x \in R_m)
f(x)=m=1∑Jc^mI(x∈Rm)
那么哪种模型更优呢?这个要视具体情况而言,如果特征变量与因变量的关系能很好的用线性关系来表达,那么线性回归通常有着不错的预测效果,拟合效果则优于不能揭示线性结构的回归树。反之,如果特征变量与因变量的关系呈现高度复杂的非线性,那么树方法比传统方法更优。
3.4 树模型的优缺点
- 树模型的解释性强,在解释性方面可能比线性回归还要方便。
- 树模型更接近人的决策方式。
- 树模型可以用图来表示,非专业人士也可以轻松解读。
- 树模型可以直接做定性的特征而不需要像线性回归一样哑元化。
- 树模型能很好处理缺失值和异常值,对异常值不敏感,但是这个对线性模型来说却是致命的。
- 树模型的预测准确性一般无法达到其他回归模型的水平,但是改进的方法很多。
3.5 代码实现
- sklearn中关于回归树的方法
- 参数说明:
sklearn.tree.DecisionTreeRegressor(*, criterion=‘mse’, splitter=‘best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort=‘deprecated’, ccp_alpha=0.0) - 代码实现:
from sklearn.tree import DecisionTreeRegressor
reg_tree = DecisionTreeRegressor(criterion = "mse",min_samples_leaf = 5)
reg_tree.fit(X,y)
reg_tree.score(X,y)