本篇文章包含的内容
本系列所涉及的内容不是博主的专业相关内容,博主仅知皮毛,学习机器学习仅仅是兴趣使然。参考的课程是:吴恩达 2022新版机器学习课程
一、多元回归
1.1 多元线性回归 Multiple linear regression
上一篇讨论了单变量线性回归模型。但在更多的情况下,我们希望通过多个特征来预测结果,这时我们就要对训练集中的多个特征进行表示。下面是一个包含多个输入变量的训练集。
输入特征 x 1 x_1 x1 | 输入特征 x 2 x_2 x2 | 输入特征 x 3 x_3 x3 | 输入特征 x 4 x_4 x4 | 输出变量 y y y |
---|---|---|---|---|
房子的大小( m 2 m^2 m2) | 卧室数量(个) | 房屋层数(层) | 房龄(年) | 价格(万元) |
2104 | 5 | 1 | 45 | 460 |
1416 | 3 | 2 | 40 | 232 |
1534 | 3 | 2 | 30 | 315 |
834 | 2 | 1 | 36 | 178 |
… | … | … | … | … |
我们引入更多的符号来表示这个训练集中的信息。使用
x
1
x_1
x1,
x
2
x_2
x2,
x
3
x_3
x3,
x
4
.
.
.
x_4...
x4...来代表不同的特征,用简写
x
j
x_j
xj 来表示特征列表。
x
j
→
第
j
个特征
n
→
特征的总数
x
⃗
(
i
)
→
第
i
个训练实例
x
j
(
i
)
→
第
i
个训练实例中的第
j
个特征值
x_j \rightarrow 第j个特征\\ n \rightarrow 特征的总数\\ \vec x^{(i)} \rightarrow 第i个训练实例\\ x_j^{(i)}\rightarrow 第i个训练实例中的第j个特征值
xj→第j个特征n→特征的总数x(i)→第i个训练实例xj(i)→第i个训练实例中的第j个特征值
如图表所示,第
i
i
i 个训练实例是由四个数字组成的列表,其组成了一个向量。
x
x
x上面的箭头是一个可省略的符号,其意义只是强调这是所有输入变量中的一个向量。
下面来定义对于多个特征的模型,对于上面的训练集可以这样定义:
f
w
,
b
(
x
)
=
w
1
x
1
+
w
2
x
2
+
w
3
x
3
+
w
4
x
4
+
b
f_{w,b}(x)=w_1x_1+w_2x_2+w_3x_3+w_4x_4+b
fw,b(x)=w1x1+w2x2+w3x3+w4x4+b
对于下面这个特例:
f
w
,
b
(
x
)
=
0.1
x
1
+
4
x
2
+
10
x
3
−
2
x
4
+
80
f_{w,b}(x)=0.1x_1+4x_2+10x_3-2x_4+80
fw,b(x)=0.1x1+4x2+10x3−2x4+80
输入特征前面的系数可以这样理解:房屋的最低价格为
80
80
80 万元(假设房屋的各个输入特征均为
0
0
0,
b
=
80
b = 80
b=80),房屋的价格每增加1平方米价格就增加
0.1
0.1
0.1 万元(
w
1
=
0.1
w_1 = 0.1
w1=0.1),每增加一间卧室房屋价格增加
4
4
4 万元(
w
2
=
4
w_2 = 4
w2=4),房屋每增加一层价格增加
10
10
10万元(
w
3
=
10
w_3 = 10
w3=10),房屋的年龄每增加一年价格就下跌
2
2
2 万元(
w
4
=
−
2
w_4 = -2
w4=−2)
对于一般情况,具有多种特征的线性模型称为多元线性回归模型,可以有以下定义:
f
w
,
b
(
x
)
=
w
1
x
1
+
w
2
x
2
+
w
3
x
3
+
.
.
.
+
w
n
x
n
+
b
f_{w,b}(x)=w_1x_1+w_2x_2+w_3x_3+...+w_nx_n+b
fw,b(x)=w1x1+w2x2+w3x3+...+wnxn+b
接下来引入一些符号用一种更简单但等价的方式重写这个表达式,w和x都变成行向量。
w
⃗
=
[
w
1
w
2
w
3
.
.
.
w
n
]
x
⃗
=
[
x
1
x
2
x
3
.
.
.
x
n
]
f
w
⃗
,
b
(
x
⃗
)
=
w
⃗
⋅
x
⃗
+
b
\vec w = [w_1 \; w_2 \; w_3 \; ... \; w_n]\\ \vec x = [x_1 \; x_2 \; x_3 \; ... \; x_n]\\ f_{\vec w,b}(\vec x)=\vec w \cdot \vec x+b
w=[w1w2w3...wn]x=[x1x2x3...xn]fw,b(x)=w⋅x+b
需要强调的是,上面的模型不是多元回归模型,其只局限于用直线来拟合数据的情况。
3.2 矢量化 Vectorization
当编写机器学习代码时,使用矢量化可以让代码更简洁,也可以提高代码的运行效率。同时,使用向量化还可以使用线性代数库,甚至图形处理的GPU硬件(客观设计用于加速计算机中的计算机图形处理的硬件)。
在Python中可以这样定义行向量
w
w
w ,
b
b
b和
x
x
x(
n
=
3
n=3
n=3 ):
w = np.array([1.0, 2.5, -3.3])
b = 4
x = np.array([10, 20, 30])
f = np.dot(w, x) + b
使用矢量化提高代码运行效率的原因是:numpy.dot()
函数可以在计算机中使用并行硬件,这远比使用顺序计算和使用for循环实现累加更加高效。
接下来深入讨论矢量化在计算机中是如何工作的。如果我们运行下面的代码:
for j in range(0, 16):
f = f + w[j] * x[j]
对于每一个循环,我们都需要运行时间。其运行的总时间为:
t
=
t
1
+
t
2
+
.
.
.
+
t
15
t=t_1+t_2+...+t_{15}
t=t1+t2+...+t15
相对地,如果我们使用函数 np.dot(w, x)
,由于向量
w
w
w 和向量
x
x
x 中的数据都是并列的,计算机首先计算对应位置上数据的积(
t
1
t_1
t1),然后计算这些积的和(
t
2
t_2
t2),其运行的总时间为:
t
=
t
1
+
t
2
t=t_1+t_2
t=t1+t2
如果
n
=
16
n = 16
n=16,在实际的代码运行中可能很难看到差别。但是如果对于成千上万的特性和非常大的训练集,矢量化将在运行中节省巨量的时间(几分钟和几个小时的差异)。
3.3 多元线性回归的梯度下降算法 Gradient Descent for Multiple Regression
在向量化之后,我们需要对表示梯度下降的数学符号进行明确:
w
⃗
=
[
w
1
w
2
w
3
.
.
.
w
n
]
x
⃗
=
[
x
1
x
2
x
3
.
.
.
x
n
]
f
w
⃗
,
b
(
x
⃗
)
=
w
⃗
⋅
x
⃗
+
b
J
(
w
1
,
w
2
,
.
.
.
,
w
n
,
b
)
=
J
(
w
⃗
,
b
)
\vec w = [w_1 \; w_2 \; w_3 \; ... \; w_n]\\ \vec x = [x_1 \; x_2 \; x_3 \; ... \; x_n]\\ f_{\vec w,b}(\vec x)=\vec w \cdot \vec x+b\\ J(w_1,w_2,...,w_n,b)=J(\vec w,b)
w=[w1w2w3...wn]x=[x1x2x3...xn]fw,b(x)=w⋅x+bJ(w1,w2,...,wn,b)=J(w,b)
梯度下降算法可以这样表示:
w
j
′
=
w
j
−
α
∂
∂
w
j
J
(
w
⃗
,
b
)
b
′
=
b
−
α
∂
∂
b
J
(
w
⃗
,
b
)
w_j' = w_j-\alpha \frac {\partial} {\partial w_j}J(\vec w,b)\\ b' = b-\alpha \frac {\partial} {\partial b}J(\vec w,b)
wj′=wj−α∂wj∂J(w,b)b′=b−α∂b∂J(w,b)
式中代价函数的偏导数公式如下:
∂
∂
w
j
J
(
w
⃗
,
b
)
=
1
m
∑
i
=
1
m
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
∂
∂
b
J
(
w
⃗
,
b
)
=
1
m
∑
i
=
1
m
(
f
w
⃗
,
b
(
x
⃗
(
i
)
)
−
y
(
i
)
)
\frac {\partial} {\partial w_j}J(\vec w,b)=\frac {1}{m}\sum_{i=1}^m (f_{\vec w,b}(\vec x^{(i)})-y^{(i)})x_j^{(i)}\\ \frac {\partial} {\partial b}J(\vec w,b)=\frac {1}{m}\sum_{i=1}^m (f_{\vec w,b}(\vec x^{(i)})-y^{(i)})
∂wj∂J(w,b)=m1i=1∑m(fw,b(x(i))−y(i))xj(i)∂b∂J(w,b)=m1i=1∑m(fw,b(x(i))−y(i))
3.4 标准方程法 Normal equation
除了梯度下降外,还有一个方法可以用来找到 w 和 b,称为标准方程法。这种算法只适用于线性回归,且不像梯度下降算法只能找到最优解的近似值,标准方程法可以找到 w 和 b 的最优解且不需要迭代。
首先明确标准方程法的一些缺点。不像梯度下降算法一样,其不能推广到其他学习算法;如果输入变量的个数n很大,标准方程法比梯度下降算法更慢;几乎没有学习机器学习的人会使用标准方程法,但是对于成熟的机器学习库,标准方程法可以用来找到 w 和 b 的最优解。
该系列持续更新中,但是博主买了新书,英文版教程学习起来还是有些吃力……
欢迎点赞,收藏~ 如有谬误敬请在评论区不吝告知,感激不尽!博主将持续更新有关嵌入式开发、机器学习方面的学习笔记~