俯视机器学习
很多人想知道机器学习的那边是什么,其实机器学习的那边是数学。
第6章 线性回归
生活中充满了各种预测,比如输入踩油门的力,输出车的速度。输入学习的时间,输出考试分数。输入硫和碳的函数,输出铁的硬度。
1. 基本形式
对一个样本,有
d
d
d 个属性,
x
=
[
x
1
;
⋯
;
x
d
]
x=[x_1; \cdots; x_d]
x=[x1;⋯;xd],函数
f
(
x
)
=
w
1
x
1
+
⋯
+
w
d
x
d
+
b
f(x) = w_1 x_1 + \cdots + w_d x_d + b
f(x)=w1x1+⋯+wdxd+b
写成向量形式
f
(
x
)
=
w
T
x
+
b
f(x) = w^T x + b
f(x)=wTx+b
写成扩展形式
f
(
x
)
=
w
T
x
f(x) = w^T x
f(x)=wTx
这里用同样记号,但实际上
w
w
w 和
x
x
x 都多增加了一行(
w
w
w 和
x
x
x 均为列向量),下文中一律采样扩展形式。
补充: w w w 的权重分量绝对值越大,对应属性值对目标影响越大。
2. 线性回归
收集
m
m
m 个训练样本,第
i
i
i 个样本记为
x
i
∈
R
n
+
1
x_i\in R^{n+1}
xi∈Rn+1(样本为扩展形式,此处
x
i
x_i
xi 代表一个样本,注意与上文区别),其观测值为
y
i
∈
R
y_i \in R
yi∈R。数据矩阵为
X
=
[
−
−
x
1
T
−
−
−
−
⋮
−
−
−
−
x
m
T
−
−
]
X = \left[\begin{matrix} -- & x_1^T & -- \\ -- & \vdots & -- \\ -- & x_m^T & -- \\ \end{matrix}\right]
X=⎣⎢⎡−−−−−−x1T⋮xmT−−−−−−⎦⎥⎤
要求权重
w
w
w ,其实就是求解
X
w
=
y
(1)
X w =y \tag{1}
Xw=y(1)
方程
(
1
)
(1)
(1) 的解的个数有3种情况:
-
情形1:唯一解。通常是 X X X 为方阵。
-
情形2:无解。通常是 X X X 为细高型形矩阵。
-
情形3:无穷多解。通常是 X X X 为扁胖形矩阵。
对只有唯一解的情形1,可以直接矩阵求逆 w = X − 1 y w = X^{-1} y w=X−1y 获得权重。但更多遇到的是情形2和情形3. 对无解情况,通常采用最小二乘法。对无穷多解情况,通常采用岭回归和LASSO回归。下面分别叙述。
3. 最小二乘法
在无解的时候,寻找平方误差和最小的解当作最优解。最小二乘法衡量的平方误差:
∑
i
=
1
m
(
y
i
−
x
i
T
w
)
2
=
∥
y
−
X
w
∥
2
(2)
\sum_{i=1}^m (y_i - x_i^T w)^2 = \Vert y - Xw\Vert ^2 \tag{2}
i=1∑m(yi−xiTw)2=∥y−Xw∥2(2)
优化问题:
优化变量为
w
w
w,
m
i
n
i
m
i
z
e
∥
y
−
X
w
∥
2
(3)
{\rm minimize} \quad \Vert y - Xw\Vert ^2 \tag{3}
minimize∥y−Xw∥2(3)
令
f
(
w
)
=
∥
y
−
X
w
∥
2
f(w) = \Vert y - Xw\Vert ^2
f(w)=∥y−Xw∥2,则最优解时
∇
f
(
w
)
=
2
X
T
(
X
w
−
y
)
=
0
(4)
\nabla f(w) = 2X^T (Xw - y) = \boldsymbol 0 \tag{4}
∇f(w)=2XT(Xw−y)=0(4)
当
X
T
X
X^T X
XTX 满秩,则
w
=
(
X
T
X
)
−
1
X
T
y
(5)
w = (X^T X)^{-1}X^T y \tag{5}
w=(XTX)−1XTy(5)
4. 岭回归
建模:
当有无穷多解的时候,通常找系数和最小的解。优化问题:
m
i
n
i
m
i
z
e
∥
w
∥
2
2
s
u
b
j
e
c
t
t
o
X
w
=
y
(6)
\begin{aligned} {\rm minimize} &\quad \Vert w\Vert_2^2\\ {\rm subject\ to} &\quad Xw = y \end{aligned}\tag{6}
minimizesubject to∥w∥22Xw=y(6)
通常会把这个问题转换成一个无约束问题,即
m
i
n
i
m
i
z
e
∥
w
∥
2
2
+
γ
∥
X
w
−
y
∥
2
2
(7)
{\rm minimize} \quad \Vert w\Vert_2^2 + \gamma\Vert Xw - y\Vert_2^2 \tag{7}
minimize∥w∥22+γ∥Xw−y∥22(7)
其中
w
w
w 为优化变量,
γ
>
0
\gamma>0
γ>0 为常数,当
γ
→
+
∞
\gamma\rightarrow +\infty
γ→+∞ 时,相当于
(
6
)
(6)
(6) 中的约束条件。此外,为了和最小二乘法类似,通常把式
(
7
)
(7)
(7) 改成如下的形式:
m
i
n
i
m
i
z
e
∥
X
w
−
y
∥
2
2
+
λ
∥
w
∥
2
2
(8)
{\rm minimize} \quad \Vert Xw - y\Vert_2^2 + \lambda \Vert w\Vert_2^2 \tag{8}
minimize∥Xw−y∥22+λ∥w∥22(8)
其中
λ
=
1
/
γ
>
0
\lambda = 1/\gamma > 0
λ=1/γ>0 。当
λ
\lambda
λ 比较小的时候,相当于
(
6
)
(6)
(6) 中约束,而当
λ
\lambda
λ 比较大时,会使
w
w
w 的模长尽可能小。
求解:
令
f
(
w
)
=
∥
y
−
X
w
∥
2
+
λ
∥
w
∥
2
f(w) = \Vert y - Xw\Vert ^2 +\lambda \Vert w\Vert ^2
f(w)=∥y−Xw∥2+λ∥w∥2,则最优解时
∇
f
(
w
)
=
2
(
X
T
(
X
w
−
y
)
+
λ
w
)
=
0
\nabla f(w) = 2(X^T (Xw - y) + \lambda w)= \boldsymbol 0
∇f(w)=2(XT(Xw−y)+λw)=0
解得
w
=
(
X
T
X
+
λ
I
)
−
1
X
T
y
w = (X^T X + \lambda I)^{-1}X^T y
w=(XTX+λI)−1XTy
这里
I
I
I 为单位矩阵,
X
T
X
+
λ
I
X^T X + \lambda I
XTX+λI 是一个半正定矩阵和一个正定矩阵的和,一定为正定矩阵,则可逆。
5. LASSO 回归
当问题
(
6
)
(6)
(6) 中的目标函数变成最小化
∥
x
∥
1
\Vert x\Vert_1
∥x∥1 的时候,类似上面推导,问题转如下形式:
m
i
n
i
m
i
z
e
∥
y
−
X
w
∥
2
2
+
λ
∥
w
∥
1
{\rm minimize} \quad \Vert y - Xw\Vert_2^2 + \lambda \Vert w\Vert_1\\
minimize∥y−Xw∥22+λ∥w∥1
其中
λ
>
0
\lambda > 0
λ>0 ,优化变量为
w
w
w。
目标函数关于优化变量 w w w 并不处处可导,可以通过坐标轮换法进行求解。这里不作相关推导。
-
劣势:不可求导。
-
优势:可降维。
6. 评价指标
-
直接使用误差平方和评价,取值 [ 0 , + ∞ ) [0, +\infty) [0,+∞),值越小越好。
E r r = ∑ ( y t r u e − y p r e d ) 2 Err = \sum(y_{true} - y_{pred})^2 Err=∑(ytrue−ypred)2 -
使用下面相关系数平均,取值 ( − ∞ , 1 ] (-\infty,1] (−∞,1],值越大越好。
r = 1 − ∑ ( y t r u e − y p r e d ) 2 ∑ ( y t r u e − y t r u e − m e a n ) 2 r = 1- \frac{\sum (y_{true} - y_{pred})^2}{\sum (y_{true} - y_{true-mean})^2} r=1−∑(ytrue−ytrue−mean)2∑(ytrue−ypred)2
7. 实战:徒手编写实现线性回归、岭回归
import numpy as np
import matplotlib.pyplot as plt
X = np.arange(5, 20)
y = 2 * X + np.random.randint(-5, 5, X.shape)
X = X.reshape(-1, 1)
X = np.c_[X, np.ones((len(X), 1))]
# 求解
w = np.linalg.inv(X.T @ X) @ X.T @ y
print(w)
# 绘图
yy = X @ w
plt.plot(X[:,0], yy)
plt.show()
8. 实战:波士顿房价预测
数据集介绍:
- 来源:Sklearn自带数据集
- 概述:根据小镇的城镇人均犯罪率、住宅用地所用比例、城镇中非商业用地的比例、每栋住宅的房间数等 13 个属性,预测房价。
- 502 个样本,13个数值属性,回归问题。
import numpy as np
from sklearn.datasets import load_boston
X, y = load_boston(return_X_y=True)
X = np.c_[X, np.ones((len(X), 1))] # 增加偏置项
print(X.shape, y.shape)
# 求解
lamb = 1.
w1 = np.linalg.inv(X.T @ X) @ X.T @ y
w2 = np.linalg.inv(X.T @ X + lamb * np.eye(X.shape[1])) @ X.T @ y
# 计算平方误差和
lse1 = 1 - ((y - X@w1)**2).sum() / ((y - y.mean())**2).sum()
lse2 = 1 - ((y - X@w2)**2).sum() / ((y - y.mean())**2).sum()
print(np.abs(w1[:-1]).sum(), np.abs(w2[:-1]).sum())
# print(np.abs(y - X@w1).sum(), np.abs(y - X@w2).sum())
print(lse1, lse2)
9. 实战:sklearn 中的线性回归、岭回归、LASSO回归
class sklearn.linear_model.LinearRegression(*, fit_intercept=True, normalize=False, copy_X=True, n_jobs=None)
- 参数
fit_intercept [bool, default=True]拟合截距项normalize [bool, default=False]是否规范化。在fit_intercept=True时无效。copy_X [bool, default=True]是否拷贝数据,不拷贝可能改变原有数据
- 属性
coef_ [array of shape (n_features, ) or (n_targets, n_features)]系数rank_ [int]数据X的秩intercept_ [float or array of shape (n_targets,)]截距
- 方法
fit(X, y[, sample_weight])predict(X)score(X, y[, sample_weight])返回 R 2 R^2 R2
class sklearn.linear_model.Ridge(alpha=1.0, *, fit_intercept=True, normalize=False,copy_X=True, max_iter=None, tol=0.001, solver=’auto’,random_state=None)
- 参数
solver [{‘auto’, ‘svd’, ‘cholesky’, ‘lsqr’, ‘sparse_cg’, ‘sag’, ‘saga’}, default=’auto’]求解器- 其他同线性回归
class sklearn.linear_model.Lasso(alpha=1.0, *, fit_intercept=True, normalize=False, precompute=False, copy_X=True, max_iter=1000, tol=0.0001,warm_start=False, positive=False, random_state=None, selection=’cyclic’)
- 参数:
alpha [float, default=1.0]L 1 L_1 L1 范数项的系数positive [bool, default=False]当设为True时,迫使所有系数均为正数
import numpy as np
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, Ridge, Lasso
X, y = load_boston(return_X_y=True)
print(X.shape, y.shape)
# 线性回归
lg = LinearRegression()
lg.fit(X, y)
# 岭回归
lamb = 1.
ridge = Ridge(alpha=lamb)
ridge.fit(X, y)
# 计算相关系数
lg_lse = lg.score(X, y)
ridge_lse = ridge.score(X, y)
print(np.abs(lg.coef_).sum(), np.abs(ridge.coef_).sum())
print(lg_lse, ridge_lse)
版权申明:本教程版权归创作人所有,未经许可,谢绝转载!
交流讨论QQ群:784117704
部分视频观看地址:b站搜索“火力教育”
课件下载地址:QQ群文件(有最新更新) or 百度网盘PDF课件及代码
链接:https://pan.baidu.com/s/1lc8c7yDc30KY1L_ehJAfDg
提取码:u3ls
1万+

被折叠的 条评论
为什么被折叠?



