机器学习 学习笔记(二)丨多元线性回归


  本系列所涉及的内容不是博主的专业相关内容,博主仅知皮毛,学习机器学习仅仅是兴趣使然。参考的课程是:吴恩达 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个特征值 xjj个特征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+10x32x4+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αwjJ(w ,b)b=bαbJ(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)}) wjJ(w ,b)=m1i=1m(fw ,b(x (i))y(i))xj(i)bJ(w ,b)=m1i=1m(fw ,b(x (i))y(i))

3.4 标准方程法 Normal equation

  除了梯度下降外,还有一个方法可以用来找到 w 和 b,称为标准方程法。这种算法只适用于线性回归,且不像梯度下降算法只能找到最优解的近似值,标准方程法可以找到 w 和 b 的最优解且不需要迭代。
首先明确标准方程法的一些缺点。不像梯度下降算法一样,其不能推广到其他学习算法;如果输入变量的个数n很大,标准方程法比梯度下降算法更慢;几乎没有学习机器学习的人会使用标准方程法,但是对于成熟的机器学习库,标准方程法可以用来找到 w 和 b 的最优解。


  该系列持续更新中,但是博主买了新书,英文版教程学习起来还是有些吃力……


  欢迎点赞,收藏~ 如有谬误敬请在评论区不吝告知,感激不尽!博主将持续更新有关嵌入式开发、机器学习方面的学习笔记~

猜你喜欢

转载自blog.csdn.net/weixin_62179882/article/details/128458840