Linear Regression & Gradient Descent

文章详细介绍了线性回归的基本概念,包括术语、单变量线性回归、成本函数、梯度下降及其作用,以及学习率的影响。通过可视化和数学推导解释了如何计算一元线性回归的闭式解,并探讨了最小二乘估计和极大似然估计的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线性回归(Linear Regression)

为数据拟合(fitting)一条直线。线性回归的很多思想在其他model中也有体现。

严格定义的话,线性模型一般可以写成:
f ( x ) = w 1 x 1 + w 2 x 2 + . . . + w d x d + b f(x) = w_1x_1 + w_2x_2 + ... + w_dx_d + b f(x)=w1x1+w2x2+...+wdxd+b
或者使用向量形式
f ( x ) = w T x + b f(x) = w^Tx + b f(x)=wTx+b

还是房价的那个例子,给出一系列房屋大小-房价的数据,绘图(plot)

也可以绘制Data table

在这里插入图片描述

Terminology 术语

  • Training set,训练集,用来训练的数据。
  • feature,特征,也叫input,或者映射关系中的x
  • target,目标,也叫output,映射关系中的y
  • ( x , y ) (x, y) (x,y)代表训练集中的一个样例, ( x ( i ) , y ( i ) ) (x^{(i)}, y^{(i)}) (x(i),y(i))代表第i个样例。

Linear Regression with One Variable

在这里插入图片描述

如图,在监督式学习中,学习算法使用训练集学习出一个Model(或者说是一种函数),这个model接受x输入,并预测y的值,记 y ^ \hat y y^

定义直线二维坐标下直线的公式
f w , b ( x i ) = w x i + b ,  使得 f w , b ( x ) ≃ y i f_{w, b}(x_i) = wx_i + b, \ 使得f_{w, b}(x) \simeq y_i fw,b(xi)=wxi+b, 使得fw,b(x)yi
称有一个输入变量的线性回归公式(也叫Univariate linear egression)。

Cost Function

用于衡量模型的好坏。构建成本函数可以自动化优化模型。

给定一组数据和一个模型,使用模型预测出y的预测值 y ^ \hat y y^,将估计值与y的真值(true value)进行比对。从直观上,单组预测值与真值之间的关系可以描述为二者在空间上的距离关系,即 ( y − y ^ ) 2 \sqrt{(y - \hat y)^2} (yy^)2 ,也可以用 ( y − y ^ ) 2 (y - \hat y)^2 (yy^)2来表示这种关系,称平方误差(square error)。将整组数组的误差求和,就可以得到衡量模型整体好坏的总平方误差(total squarre error)。

总平方误差会随着数据量的变化而变化,例如,假定单组数据的平方误差都为1,对于10组数据,总平方误差为10,对于100组数据,总平方误差为100;为了能够比较不同数据量训练出来的模型之间的好坏,还应该对总平方误差取均值,获得平均平方误差(average square error,或称均方误差平方损失)。习惯上,我们还会多除一个2以简化计算(因为后面要求导,求导会出来一个2)
A v e r a g e   S q u a r e   E r r r o r = 1 2 m ∑ i = 1 m ( y ^ − y ) 2 Average\ Square\ Errror = \frac 1 {2m}\sum_{i = 1}^{m}(\hat y - y)^2 Average Square Errror=2m1i=1m(y^y)2

均方误差是回归任务中最常用的性能度量,对应“欧氏距离(Euclidean distance)”,通过最小化均方误差来求解模型的方法称为“最小二乘法(least square method)

Cost Functionb Intuition

在这里建立下对成本函数的直观理解。

在回归任务中,我们的目标是让成本函数最小化,如下图

在这里插入图片描述

考虑一个更为简化的模型,假定b恒=0,只考虑w的变化,则回归函数 f w ( x ) f_w(x) fw(x)与损失函数 J ( w ) J(w) J(w)分别为以x和以w为参数的函数。

对每个特定的w(fixed w),绘制 f w ( x ) f_w(x) fw(x)并计算对应的 J ( w ) J(w) J(w)值,可以绘制如下曲线

在这里插入图片描述

以上是对一元损失函数的直观可视化

More Visualize of the Cost Function

上面展示了损失函数随着w一个参数的变化,接下来,对w和b进行综合考虑。即J(w, b),使用等高线图或者3维视图绘制如下

在这里插入图片描述

在这里插入图片描述

可以看到,函数表面呈“碗形”,存在最低点对应的(w, b),使得损失最小。

在这个例子中,我们通过手动打点的方式绘制并找到了最低点,这种方法明显不适合更为复杂的机器学习模型;接下来将介绍机器学习中非常重要的概念——梯度下降(Gradient Descent),该算法用于自动化找到使成本最低的组合。

Gradient Descent

如图所示,从直观上理解梯度下降,就是在每一步选择当前下降最快的那个方向走一步,最终到达一个局部最低点的过程。

在具有两个参数的损失函数J(w, b)中,算法的数学表达式如下
w = w − α ∂ ∂ w J ( w , b ) b = b − α ∂ ∂ b J ( w , b ) w = w - \alpha \frac {\partial}{\partial w} J(w, b) \newline b = b - \alpha \frac {\partial}{\partial b} J(w, b) w=wαwJ(w,b)b=bαbJ(w,b)
其中, α \alpha α是学习率(Learning rate),该参数控制每次下降时跨出的一步有多长;过小的学习率会使训练缓慢,过大的学习率会让算法冲过最低点。

需要注意的是,w和b参数应该是**同步更新(Simultaneously update)**的,即在实现算法的时候,应当先使用变量暂存w和b的旧值,使用旧值计算出新值并赋值
t m p _ w = w − α ∂ ∂ w J ( w , b ) t m p _ b = b − α ∂ ∂ b J ( w , b ) w = t m p _ w b = t m p _ b tmp\_w = w - \alpha \frac {\partial}{\partial w} J(w, b) \newline tmp\_b = b - \alpha \frac {\partial}{\partial b} J(w, b) \newline w = tmp\_w \newline b = tmp\_b tmp_w=wαwJ(w,b)tmp_b=bαbJ(w,b)w=tmp_wb=tmp_b

梯度下降有效性

进一步从图像角度上来解释梯度下降为什么有效,如图,在仅考虑w或仅考虑b的情况下,从某个初始值开始进行梯度下降,该点的导数为切线斜率,斜率可正可负,计算结果表现为向最低点移动。

在这里插入图片描述

学习率(learning rate)

继续对学习率进行深入理解。不合适的学习率可能会导致无法梯度下降,如下图所示。当学习率过低的时候,导数乘一个非常小的学习率,因此每次下降的步长非常小,虽然可以获得最低成本,但耗时会非常的长;当学习率过高的时候,步长会过大,冲过最低点,甚至使成本更高,最终导致无法收敛(converge)。

在这里插入图片描述

当到达最低点的时候,导数值为0,此时不会继续下降。

Gradient Descent for Linear Regression

在这里实现线性回归的梯度下降。给出对w偏导公式如下
∂ ∂ w J ( w , b ) = ∂ ∂ w 1 2 m ∑ i = 1 m ( f w , b ( x i ) − y i ) 2 \frac {\partial}{\partial w} J(w, b) = \frac {\partial} {\partial w} \frac {1} {2m} \sum_{i = 1}^{m} (f_{w, b}(x_i) - y_i)^2 wJ(w,b)=w2m1i=1m(fw,b(xi)yi)2
根据导数运算法则,和的导数等于导数的和,对w求偏导可得
∂ ∂ w J ( w , b ) = 1 2 m ∑ i = 1 m ∂ ∂ w ( w x i + b − y i ) 2 = 1 2 m ∑ i = 1 m 2 ( w x i + b − y ) ∗ x i = 1 m ∑ i = 1 m ( w x i + b − y ) ∗ x i \frac {\partial}{\partial w} J(w, b) = \frac {1} {2m} \sum_{i = 1}^m \frac {\partial}{\partial w} (w x_i + b - y_i)^2 \newline = \frac {1} {2m} \sum_{i = 1}^m 2(w x_i + b - y) * x_i \newline = \frac {1} {m} \sum_{i = 1}^m (w x_i + b - y) * x_i wJ(w,b)=2m1i=1mw(wxi+byi)2=2m1i=1m2(wxi+by)xi=m1i=1m(wxi+by)xi
同理,推导出对b的偏导
∂ ∂ b J ( w , b ) = ∂ ∂ b 1 2 m ∑ i = 1 m ( f w , b ( x i ) − y i ) 2 = 1 2 m ∑ i = 1 m ∂ ∂ b ( w x i + b − y i ) 2 = 1 m ∑ i = 1 m ( w x i + b − y i ) \frac {\partial} {\partial b} J(w, b) = \frac {\partial}{\partial b} \frac 1 {2m} \sum_{i = 1}^m(f_{w, b}(x_i) - y_i)^2 \newline = \frac 1 {2m} \sum_{i = 1}^m \frac{\partial}{\partial b} (w x_i + b - y_i)^2 \newline = \frac 1 m \sum_{i = 1}^m (w x_i + b - y_i) bJ(w,b)=b2m1i=1m(fw,b(xi)yi)2=2m1i=1mb(wxi+byi)2=m1i=1m(wxi+byi)

对于线性回归,不会存在多个局部最小值,而是存在一个全局最小值;这类函数被称为凸函数(Convex Function)。

Batch & Subset

Batch指每步训练都使用所有的训练数据进行训练。

Batch之外还有其他的算法,每次使用训练集的一个子集(Subset)进行训练。

导数可视化

对单个参数,可以使用函数曲线进行可视化

在这里插入图片描述

如果想要同时表示两个参数,可以使用“箭头图”。箭头的大小反映导数大小;箭头的方向表示了该点两个导数的比值。

在这里插入图片描述

运行梯度下降

在这里插入图片描述

从输出中可以看出,成本在逐渐下降。导数最开始很大,然后逐渐变小。下降速度也随着变慢。在固定学习率的情况下,下降速度仍随着导数变慢。

成本下降可视化

因为最开始下降快,后面下降慢,所以分两段绘制

成本应该一致下降,并且先快后慢。

在这里插入图片描述

绘制等高线图来查看随着w和b以及成本的变化。

在这里插入图片描述

NumPy报错:Python int too large to convert to C long

这个问题是因为numpy数组默认使用int,需要在赋值语句后面加上.astype('float')或者.astype('int64')来规定类型为float或int64

另外,在修改外部代码文件后,需要重启jupyter notebook内核,并重新运行代码才能读到修改后的代码。

学习率过大的可视化

如果学习率过大,会使梯度下降冲过最低点,且导致不能收敛的情况。

在这里插入图片描述

西瓜书的相关推导

均方误差(mean squared error)

在回归任务中最常使用的性能度量就是均方误差。
E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f; D) = \frac 1 m \sum_{i = 1}^m(f(x_i) - y_i)^2 E(f;D)=m1i=1m(f(xi)yi)2
更一般的情况,对数据分布D和概率密度函数 p ( ⋅ ) p(\cdot) p(),可描述为
E ( f ; D ) = ∫ x ∼ d ( f ( x ) − y ) 2 p ( x ) d x E(f; D) = \int_{x \sim d}(f(x) - y)^2p(x)dx E(f;D)=xd(f(x)y)2p(x)dx

凸函数定义

对区间[a,b]上定义的函数,若对区间内任意两点,均有$f(\frac {x_1 + x_2} 2) \le \frac{f(x_1) + f(x_2)} {2} $,则称该函数为区间[a, b]上的凸函数。

换个直观点的说法就是,区间内任意两点,其割线在函数曲线的上方,类似下图

在这里插入图片描述

对于实数集上的函数,可以通过二阶导数判别是否为凸函数,若二阶导非负,则为凸函数,若二阶导恒大于0,则称为严格凸函数。

这里的凸函数定义是最优化里的定义,与高等数学中的凸函数定义不同。

一元线性回归闭式解推导

一元线性回归的最优化过程,就是求解w和b,使 E w , b = ∑ i = 1 m ( w x i + b − y i ) 2 E_{w, b} = \sum_{i = 1}^m(wx_i + b - y_i)^2 Ew,b=i=1m(wxi+byi)2最小

分别对w和b求偏导
∂ E w , b ∂ w = ∑ i = 1 m ∂ ∂ w ( w x i + b − y i ) 2 = 2 ∑ i = 1 m ( w x i + b − y i ) x i = 2 ( w ∑ i = 1 m x i 2 − ∑ i = 1 m ( y i − b ) x i ) ∂ E w , b ∂ b = ∑ i = 1 m ∂ ∂ b ( w x i + b − y i ) 2 = 2 ∑ i = 1 m ( w x i + b − y i ) = 2 ( m b − ∑ i = 1 m ( y i − w x i ) ) \frac {\partial E_{w, b}}{\partial w} = \sum_{i = 1}^m \frac {\partial} {\partial w}(wx_i + b - y_i)^2 \newline = 2\sum_{i=1}^m (wx_i + b - y_i) x_i \newline = 2 (w\sum_{i=1}^m x_i^2 - \sum_{i=1}^m(y_i - b)x_i) \newline \newline \frac {\partial E_{w, b}}{\partial b} = \sum_{i = 1}^m \frac {\partial} {\partial b}(wx_i + b - y_i)^2 \newline = 2 \sum_{i=1}^m (wx_i + b - y_i) \newline = 2 (mb - \sum_{i=1}^m (y_i - wx_i)) wEw,b=i=1mw(wxi+byi)2=2i=1m(wxi+byi)xi=2(wi=1mxi2i=1m(yib)xi)bEw,b=i=1mb(wxi+byi)2=2i=1m(wxi+byi)=2(mbi=1m(yiwxi))

进一步,得到w和b的闭式解(closed-formed solution,也叫解析解analytical solution),等价于吴恩达老师给出的w和b的计算式(这里我从吴恩达老师的公式开始,推导西瓜书的表达式)

闭式解指可以通过具体的表达式求出待解参数。例如可以直接根据上面的表达式求得w,机器学习算法很少有闭式解,线性回归是特例。

先推导b,因为后面推w会用到
b = b − α ∂ ∂ b J ( w , b ) = b − 1 m ∑ i = 1 m ( w x i + b − y i ) → ∑ i = 1 m ( w x i + b − y i ) = 0 → m b = ∑ i = 1 m ( y i − w x i ) → b = 1 m ∑ i = 1 m ( y i − w x i ) → b = y ˉ − w x ˉ b = b - \alpha \frac {\partial}{\partial b} J(w, b) \newline = b - \frac 1 m \sum_{i = 1}^m (w x_i + b - y_i) \newline\rightarrow \sum_{i = 1}^m (w x_i + b - y_i) = 0 \newline\rightarrow mb = \sum_{i = 1}^m(y_i - wx_i) \newline\rightarrow b = \frac 1 m \sum_{i = 1}^m(y_i - wx_i) \newline\rightarrow b = \bar y - w \bar x b=bαbJ(w,b)=bm1i=1m(wxi+byi)i=1m(wxi+byi)=0mb=i=1m(yiwxi)b=m1i=1m(yiwxi)b=yˉwxˉ
接着推导w
w = w − α ∂ ∂ w J ( w , b ) = w − 1 m ∑ i = 1 m ( w x i + b − y ) ∗ x i → ( w ∑ i = 1 m x i 2 − ∑ i = 1 m ( y i − b ) x i ) = 0 带入 b → w ∑ i = 1 m x i 2 = ∑ i = 1 m y i x i − ∑ i = 1 m ( y ˉ − w x ˉ ) x i → w ∑ i = 1 m x i 2 = ∑ i = 1 m y i x i − y ˉ ∑ i = 1 m x i + w x ˉ ∑ i = 1 m x i → w ( ∑ i = 1 m x i 2 − x ˉ ∑ i = 1 m x i ) = ∑ i = 1 m y i x i − y ˉ ∑ i = 1 m x i → w = ∑ i = 1 m y i x i − y ˉ ∑ i = 1 m x i ∑ i = 1 m x i 2 − x ˉ ∑ i = 1 m x i 令 y ˉ ∑ i = 1 m x i = 1 m ∑ i = 1 m y i ∑ i = 1 m x i = x ˉ ∑ i = 1 m y i x ˉ ∑ i = 1 m x i = 1 m ( ∑ i = 1 m x i ) 2 得 w = ∑ i = 1 m y i ( x i − x ˉ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 w = w - \alpha \frac {\partial}{\partial w} J(w, b) \newline = w - \frac {1} {m} \sum_{i = 1}^m (w x_i + b - y) * x_i \newline\rightarrow (w\sum_{i=1}^m x_i^2 - \sum_{i=1}^m(y_i - b)x_i) = 0 \newline带入b\rightarrow w\sum_{i=1}^m x_i^2 = \sum_{i=1}^m y_ix_i - \sum_{i = 1}^m (\bar y - w \bar x)x_i \newline\rightarrow w \sum_{i=1}^m x_i^2 = \sum_{i=1}^m y_ix_i - \bar y \sum_{i = 1}^m x_i + w \bar x\sum_{i = 1}^mx_i \newline\rightarrow w (\sum_{i=1}^m x_i^2 - \bar x\sum_{i = 1}^mx_i) = \sum_{i=1}^m y_ix_i - \bar y \sum_{i = 1}^m x_i \newline\rightarrow w = \frac {\sum_{i=1}^m y_ix_i - \bar y \sum_{i = 1}^m x_i}{\sum_{i=1}^m x_i^2 - \bar x\sum_{i = 1}^mx_i} \newline 令\bar y \sum_{i = 1}^m x_i = \frac 1 m \sum_{i = 1}^m y_i \sum_{i = 1}^m x_i = \bar x \sum_{i = 1}^m y_i \newline \bar x\sum_{i = 1}^mx_i = \frac 1 m (\sum_{i = 1}^m x_i)^2 \newline 得w = \frac {\sum_{i = 1}^m y_i (x_i - \bar x)}{\sum_{i=1}^m x_i^2 - \frac 1 m (\sum_{i = 1}^mx_i)^2} \newline \newline w=wαwJ(w,b)=wm1i=1m(wxi+by)xi(wi=1mxi2i=1m(yib)xi)=0带入bwi=1mxi2=i=1myixii=1m(yˉwxˉ)xiwi=1mxi2=i=1myixiyˉi=1mxi+wxˉi=1mxiw(i=1mxi2xˉi=1mxi)=i=1myixiyˉi=1mxiw=i=1mxi2xˉi=1mxii=1myixiyˉi=1mxiyˉi=1mxi=m1i=1myii=1mxi=xˉi=1myixˉi=1mxi=m1(i=1mxi)2w=i=1mxi2m1(i=1mxi)2i=1myi(xixˉ)
综上,w和b最优解的闭式解为
w = ∑ i = 1 m y i ( x i − x ˉ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 b = 1 m ∑ i = 1 m ( y i − w x i ) w = \frac {\sum_{i = 1}^m y_i (x_i - \bar x)}{\sum_{i=1}^m x_i^2 - \frac 1 m (\sum_{i = 1}^mx_i)^2} \newline b = \frac 1 m \sum_{i = 1}^m(y_i - wx_i) w=i=1mxi2m1(i=1mxi)2i=1myi(xixˉ)b=m1i=1m(yiwxi)

补充:最小二乘估计与极大似然估计

基于均方误差最小化来进行模型求解的方法称为”最小二乘法“,前一小节已经讨论过很多了。
arg ⁡ min ⁡ ( w , b ) E ( w , b ) = ∑ i = 1 m ( y i − f ( x i ) ) 2 = ∑ i = 1 m ( y i − ( w x i + b ) ) 2 \arg\min_{(w,b)}E_{(w, b)} = \sum_{i = 1}^m(y_i - f(x_i))^2 \newline = \sum_{i = 1}^m(y_i - (wx_i + b))^2 arg(w,b)minE(w,b)=i=1m(yif(xi))2=i=1m(yi(wxi+b))2

arg ⁡ min ⁡ ( w , b ) \arg\min_{(w,b)} argmin(w,b)意思是使表达式值最小的参数w和b

与最小二乘估计殊途同归的是最大似然估计。似然可以理解为某个参数取特定值的可能性,极大似然估计则是通过寻找可能性的最大值点,找到最有可能的参数值。两者为何殊途同归可以参考南瓜书的视频P2

一元线性回归闭式解的向量化

参考南瓜书,利用NumPy等线性代数库加速,对之前推导的一元线性回归闭式解进行向量化

此前推导的一元线性回归闭式解
w = ∑ i = 1 m y i ( x i − x ˉ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 b = 1 m ∑ i = 1 m ( y i − w x i ) w = \frac {\sum_{i = 1}^m y_i (x_i - \bar x)}{\sum_{i=1}^m x_i^2 - \frac 1 m (\sum_{i = 1}^mx_i)^2} \newline b = \frac 1 m \sum_{i = 1}^m(y_i - wx_i) w=i=1mxi2m1(i=1mxi)2i=1myi(xixˉ)b=m1i=1m(yiwxi)
这个解中的求和运算只能使用循环实现(事实上吴恩达老师上一小节的notebook里就是用循环实现的),参考南瓜书,进行向量化实现。

已知形如 ∑ x i y i \sum x_iy_i xiyi的求和可以被表示为向量 x x x y y y的点乘,或者表示为类似 x T y x^Ty xTy的形式。进行凑配
w = ∑ i = 1 m y i ( x i − x ˉ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2 = ∑ i = 1 m y i ( x i − x ˉ ) ∑ i = 1 m x i 2 − x ˉ ∑ i = 1 m x i = ∑ i = 1 m y i ( x i − x ˉ ) ∑ i = 1 m ( x i 2 − x ˉ x i ) ∵ ∑ i = 1 m x ˉ x i = ∑ i = 1 m x i x ˉ = m x ˉ 2 = ∑ i = 1 m x ˉ 2 ∑ i = 1 m y i x ˉ = ∑ i = 1 m x i y ˉ = m x ˉ y ˉ = ∑ i = 1 m x ˉ y ˉ ∴ w = ∑ i = 1 m ( x i y i − x ˉ y i − x i y ˉ + x ˉ y ˉ ) ∑ i = 1 m ( x i 2 − x ˉ x i − x i x ˉ + x ˉ 2 ) = ∑ i = 1 m ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 m ( x i − x ˉ ) 2 令  x d = ( x 1 − x ˉ , x 2 − x ˉ , … , x n − x ˉ ) , y d = ( y 1 − y ˉ , y 2 − y ˉ , … , y n − y ˉ ) w = x d T y d x d T x d w = \frac {\sum_{i = 1}^m y_i (x_i - \bar x)}{\sum_{i=1}^m x_i^2 - \frac 1 m (\sum_{i = 1}^mx_i)^2} \newline = \frac {\sum_{i = 1}^m y_i (x_i - \bar x)}{\sum_{i=1}^m x_i^2 - \bar x \sum_{i = 1}^mx_i} \newline = \frac {\sum_{i = 1}^m y_i (x_i - \bar x)}{\sum_{i=1}^m (x_i^2 - \bar x x_i)} \newline \because \left.\begin{array}{} \sum_{i=1}^m \bar x x_i = \sum_{i=1}^m x_i \bar x = m\bar x^2 = \sum_{i=1}^m \bar x^2\\ \sum_{i = 1}^m y_i \bar x = \sum_{i = 1}^m x_i \bar y = m\bar x \bar y =\sum_{i = 1}^m \bar x \bar y \end{array}\right. \newline \therefore w = \frac {\sum_{i = 1}^m (x_iy_i - \bar x y_i - x_i\bar y + \bar x \bar y)}{\sum_{i=1}^m (x_i^2 - \bar x x_i - x_i\bar x + \bar x^2)} \newline =\frac {\sum_{i = 1}^m (x_i - \bar x)(y_i - \bar y)}{\sum_{i=1}^m (x_i - \bar x)^2} \newline 令\ x_d = (x_1 - \bar x, x_2 - \bar x, \dots, x_n - \bar x), y_d = (y_1 - \bar y, y_2 - \bar y, \dots, y_n - \bar y) \newline w = \frac{x_d^T y_d}{x_d^T x_d} w=i=1mxi2m1(i=1mxi)2i=1myi(xixˉ)=i=1mxi2xˉi=1mxii=1myi(xixˉ)=i=1m(xi2xˉxi)i=1myi(xixˉ)i=1mxˉxi=i=1mxixˉ=mxˉ2=i=1mxˉ2i=1myixˉ=i=1mxiyˉ=mxˉyˉ=i=1mxˉyˉw=i=1m(xi2xˉxixixˉ+xˉ2)i=1m(xiyixˉyixiyˉ+xˉyˉ)=i=1m(xixˉ)2i=1m(xixˉ)(yiyˉ) xd=(x1xˉ,x2xˉ,,xnxˉ),yd=(y1yˉ,y2yˉ,,ynyˉ)w=xdTxdxdTyd

下面尝试编程实现,测试计算 a ˉ \bar a aˉ a d a_d ad

>>> import numpy as np
>>> a = np.arange(10); print(a)
[0 1 2 3 4 5 6 7 8 9]
>>> a_bar = a.mean(); print(a_bar)
4.5
>>> a_d = a - a_bar; print(a_d)
[-4.5 -3.5 -2.5 -1.5 -0.5  0.5  1.5  2.5  3.5  4.5]

根据闭式解直接求得结果

>>> # init parameters
... b = 0
>>> w = 0
>>> # set data
... x = np.arange(10); print(f'x = {x}')
x = [0 1 2 3 4 5 6 7 8 9]
>>> y = np.arange(5, 15); print(f'y = {y}')
y = [ 5  6  7  8  9 10 11 12 13 14]
>>> x_bar = x.mean()
>>> y_bar = y.mean()
>>> x_d = x - x_bar
>>> y_d = y - y_bar
>>> w =  np.dot(x_d, y_d)/ np.dot(x_d, x_d)
>>> b = (y - w*x).mean()
>>> print(w, b)
1.0 5.0

在这里强调一下,闭式解是可以直接根据表达式求得参数的,例如这里直接求得了w和b,没有进行梯度下降等方法去拟合一个模型来预测。正如南瓜书所说,机器学习算法很少有闭式解,线性回归是个特例。

参考

  • 2022吴恩达机器学习
  • 《机器学习》周志华(西瓜书)
  • 南瓜书
### 关于线性回归实现的例子 在线性回归中,目标是最小化预测值与实际值之间的误差平方和。下面展示了一个简单的线性回归模型的实现方法。 #### 非向量化实现 对于非向量化的版本,在每次迭代过程中逐步累加各个特征对应的权重乘以其输入值的结果来计算预测值[^3]: ```matlab prediction = 0.0; for j = 1:n+1 prediction = prediction + theta(j) * x(j); end ``` 这段代码展示了如何通过循环遍历每一个参数并将其与相应的自变量相乘再求和得到最终的预测结果。 #### 向量化实现 相比之下,采用矩阵运算可以更高效地完成相同的操作。这里给出了一个利用MATLAB内置函数进行向量内积操作从而一次性得出所有样本预测值得例子: ```matlab prediction = theta' * x; ``` 此段代码中的`theta'`表示转置后的系数向量,而`x`则是包含了多个观测数据点组成的列向量;两者做点乘即实现了快速批量处理多条记录的功能。 为了更好地理整个过程以及验证算法的有效性,还可以编写测试案例来进行梯度下降的学习率调整实验[^5]: ```matlab [theta J_hist] = gradientDescent([1 5; 1 2; 1 4; 1 5], [1 6 4 2]', [0 0]', 0.01, 1000); disp(theta); % 显示训练结束后的最优 disp(J_hist(1)); % 初始代价函数值 disp(J_hist(end)); % 训练完成后最后一次迭代时的成本 ``` 上述命令会调用名为`gradientDescent`的方法执行一系列优化步骤直到收敛,并输出学习到的最佳拟合直线斜率和平移项作为返回值之一——`theta`数组;同时也会保存每轮更新后损失的变化情况至列表型对象`J_hist`里供后续分析使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Recitative

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值