线性回归和梯度下降

本文深入介绍了线性模型的基础概念及应用,包括单变量和多变量线性回归,并探讨了线性模型的泛化能力及其在实际场景中的应用。

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

在上一章我们说到,机器学习中主要的两个任务就是回归和分类。如果读者有高中数学基础,我们很容易回忆到我们高中学习过的一种回归方法——线性回归。我们将这种方法泛化,就可以得到机器学习中的一种常见模型——线性模型,线性模型是监督学习的一种
我们已经说过,我们要从数据集中训练出模型,每个数据可以视为(属性,标签)二元组。其中属性可以为属性向量。
假设给定具有n个属性的属性向量的数据 x⃗ =(x1,x2,x3xn) x → = ( x 1 , x 2 , x 3 … x n ) ,我们利用属性的线性组合来进行预测,即

f(x)=w1x1+w2x2+w3x3++wnxn+b f ( x ) = w 1 x 1 + w 2 x 2 + w 3 x 3 + ⋯ + w n x n + b

我们可以将其写成向量形式
f(x)=wTx+b f ( x ) = w T x + b

其中 w=(w1,w2,w3wn) w = ( w 1 , w 2 , w 3 … w n ) ,w和b就是该模型中我们要求的参数,确定w和b,该模型就得以确定。
我们将这样的模型称为线性模型,不得不提的是,线性模型并不是只能进行线性分类,它具有很强的泛化能力,我们后面会提到。

属性转换

在进行建模之前,我们要先对数据集进行处理,使得其适合进行建模。
我们注意到,在线性模型中,属性值都是实数,那么会出现以下两种需要进行转化的情况
- 属性离散,但是有序关系(可以比较)。例如身材的过轻,正常,肥胖,过于肥胖,可以被编码为-1,0,1,2,从而转化为实数进行处理。
- 属性离散,但是无序关系(不可比较)。例如国籍的中国人,美国人,日本人。我们可以将取值有k种的值转化为k维向量,如上例,可以编码为 (1,0,0),(0,1,0),(0,0,1) ( 1 , 0 , 0 ) , ( 0 , 1 , 0 ) , ( 0 , 0 , 1 )

单变量线性回归

如果 x=(x1,x2,x3xn) x = ( x 1 , x 2 , x 3 … x n ) 中n= 1,此时x为一个实数,线性回归模型就退化为单变量线性回归。我们将模型记为

f(x)=wx+b f ( x ) = w x + b

其中w,x,b都是实数,相信这个模型大家在高中都学习过。在这里我们有两种方法求解这个模型,分别是 最小二乘法梯度下降法
我们先定义符号, xi x i 代表第i个数据的属性值, yi y i 是第i个数据的标签值(即真值),f是我们学习到的模型, f(xi) f ( x i ) 即我们对第i个数据的预测值。
我们的目标是,求得适当的w和b,使得S最小,其中S是预测值和真值的差距平方和,亦称为 代价函数,当然代价函数还有很多其他的形式。
minS=12ni=1n(f(xi)yi)2 m i n S = 1 2 n ∑ i = 1 n ( f ( x i ) − y i ) 2

其中的 1n 1 n 只是将代价函数值归一化的系数。

最小二乘法

最小二乘法不是我们在这里要讨论的重点,但也是在很多地方会使用到的重要方法。
最小二乘法使用参数估计,将S看做一个关于w和b的函数,分别对w和b求偏导数,使得偏导数为0,由微积分知识知道,在此次可以取得S的最小值。由这两个方程即可求得w和b的值。(此处省略过程)
求得

w=ni=1yi(xix¯¯¯)ni=1x2i1m(ni=1xi)2 w = ∑ i = 1 n y i ( x i − x ¯ ) ∑ i = 1 n x i 2 − 1 m ( ∑ i = 1 n x i ) 2

b=y¯¯¯bx¯¯¯ b = y ¯ − b x ¯

其中 y¯¯¯x¯¯¯ y ¯ , x ¯ 分别是y和x的均值

梯度下降法

我们刚刚利用了方程的方法求得了单变量线性回归的模型。但是对于几百万,上亿的数据,这种方法太慢了,这时,我们可以使用凸优化中最常见的方法之一——梯度下降法,来更加迅速的求得使得S最小的w和b的值。
S可以看做w和b的函数 S(wb) S ( w , b ) ,这是一个双变量的函数,我们用matlab画出他的函数图像,可以看出这是一个明显的凸函数。
这里写图片描述
梯度下降法的相当于我们下山的过程,每次我们要走一步下山,寻找最低的地方,那么最可靠的方法便是环顾四周,寻找能一步到达的最低点,持续该过程,最后得到的便是最低点。
对于函数而言,便是求得该函数对所有参数(变量)的偏导,每次更新这些参数,直到到达最低点为止,注意这些参数必须在每一轮一起更新,而不是一个一个更新。
过程如下:

wb,0 给 w 、 b 随 机 赋 初 值 , 一 般 可 以 都 设 为 0

wnew=waS(w,b)wbnew=baS(w,b)b w n e w = w − a ∂ S ( w , b ) ∂ w , b n e w = b − a ∂ S ( w , b ) ∂ b

w=wnew,b=bnew w = w n e w , b = b n e w

带入真正的表达式,即为
w0=w0a1mi=1n(f(xi)yi),w0 w 0 = w 0 − a 1 m ∑ i = 1 n ( f ( x i ) − y i ) , w 0 是 常 数 项

wj=wja1mj=1n(f(xi)yi)xi,j{1,2,3n} w j = w j − a 1 m ∑ j = 1 n ( f ( x i ) − y i ) x i , j ∈ { 1 , 2 , 3 ⋯ n }

其中a为学习率,是一个实数。整个过程形象表示便是如下图所示,一步一步走,最后达到最低点。
参考图片
需要说明以下几点:
- a为学习率,学习率决定了学习的速度。
- 如果a过小,那么学习的时间就会很长,导致算法的低效,不如直接使用最小二乘法。
- 如果a过大,那么由于每一步更新过大,可能无法收敛到最低点。由于越偏离最低点函数的导数越大,如果a过大,某一次更新直接跨越了最低点,来到了比更新之前 更高的地方。那么下一步更新步会更大,如此反复震荡,离最佳点越来越远。以上两种情况如下图所示
这里写图片描述
- 我们的算法不一定能达到最优解。如上图爬山模型可知,如果我们初始位置发生变化,那么可能会到达不同的极小值点。但是由于线性回归模型中的函数都是 凸函数,所以利用梯度下降法,是可以找到全局最优解的,在这里不详细阐述。

多变量线性回归

如果数据中属性是一个多维向量, x⃗ =(x1,x2,x3xn) x → = ( x 1 , x 2 , x 3 … x n ) ,那么该回归模型称为多变量线性回归。也就是一般意义上的线性回归模型。
我们先定义符号, x⃗ i x → i 代表第i个数据的属性值,它是一个向量, xji x i j 表示第i个数据的第j个属性,它是一个实数, yi y i 是第i个数据的标签值,也是实数。f是我们学习到的模型, f(x⃗ i) f ( x → i ) 即我们对第i个数据的预测值。
我们建立的模型为:

f(x⃗ i)=w⃗ Tx⃗ +b f ( x → i ) = w → T ⋅ x → + b

我们的目标是,求得适当的 w⃗  w → 和b,使得S最小,其中S是预测值和真值的差距平方和,亦称为 代价函数,当然代价函数还有很多其他的形式。
minS=12ni=1n(f(x⃗ i)yi)2 m i n S = 1 2 n ∑ i = 1 n ( f ( x → i ) − y i ) 2

其中的 1n 1 n 只是将代价函数值归一化的系数。

特征缩放

由于 x⃗  x → 具有很多维的特征,每一维的特征大小可能相差甚多,这样会大大影响学习的速度。假如房价范围0-10000000,房子大小范围1-200,那么这两个特征学习到的系数大小会差很多倍,而学习率必须按照最小的系数来进行设定,则大系数的收敛会非常慢。
为了避免这种情况,我们使用了特征缩放将每个特征的值进行处理,使之在[-1,1]之间,当然,原本范围就于此在一个数量级的特征,也可以不进行处理。处理公式如下:

xi=xix¯¯¯xmaxxmin x i = x i − x ¯ x m a x − x m i n

或者
xi=xix¯¯¯σ x i = x i − x ¯ σ

其中 σ σ 为数据标准差。

正规方程法

对于多元线性回归而言,正规方程法是一种准确的方法,就像最小二乘法对于单变量线性回归一样。
为了使形式更加简化,我们做以下符号设定

X⃗ =111x11x12x1nx21x22x2nx31x32x3nxn1xn2xnn(3) (3) X → = [ 1 x 1 1 x 1 2 x 1 3 … x 1 n 1 x 2 1 x 2 2 x 2 3 … x 2 n ⋯ ⋯ ⋯ ⋯ 1 x n 1 x n 2 x n 3 … x n n ]

由此,我们可以将S写成另一种形式,定义如下
S1=(y⃗ X⃗ w⃗ )T(y⃗ X⃗ w⃗ ) S 1 = ( y → − X → ⋅ w → ) T ( y → − X → ⋅ w → )

请注意, S1 S 1 和S的区别仅仅在于它没有 1n 1 n 的系数,而该系数是一个定值,故最小化的目标和过程是一样的,我们在此要将 S1 S 1 最小化。
同理,我们将 S1 S 1 视为 w⃗  w → 的函数,对于 w⃗  w → 求导数,得到取得最小值时的 w⃗  w → 的值,便是我们得到的结果,记为 w⃗ 1 w → 1
w⃗ 1=(X⃗ TX⃗ )1X⃗ Ty⃗  w → 1 = ( X → T X → ) − 1 X → T y →

该方法得到了为准确值,即在我们给定条件下的最优解,但是该方法有两个弊端:
- 需要计算 (X⃗ TX⃗ )1 ( X → T X → ) − 1 ,相对于矩阵规模n而言,算法复杂度是O(n3), n非常大时, 计算非常慢,甚至根本无法完成。
- 可能出现矩阵不可逆的情况,在这里不进行数学上的分析,但是可以说明,以下两种情况容易导致矩阵不可逆。
- 我们使用了冗余的特征,例如我们选取的两个特征始终保持倍数关系,则这两个特征向量线性相关。此时应该去除冗余的向量。
- 我们使用了太多的特征(特征的数量超过了样本的数量).,也可以理解为样本的数量太少,对于这种情况我们可以删掉一些特征或者使用 正则化(在下一篇文章中会讲到)。

梯度下降法

此处的梯度下降法和之前一元线性回归的梯度下降法基本相同,无非是一元线性回归只有两个需要求的参数,而多元线性回归中有多个待求参数。其余的只需要将导数项换掉即可。最终得到的式子如下:

w0=w0a1mi=1n(f(xi)yi),w0 w 0 = w 0 − a 1 m ∑ i = 1 n ( f ( x i ) − y i ) , w 0 是 常 数 项

wj=wja1mi=1n(f(xi)yi)xji,j{1,2,3n} w j = w j − a 1 m ∑ i = 1 n ( f ( x i ) − y i ) x i j , j ∈ { 1 , 2 , 3 ⋯ n }

与正规方程法相比,梯度下降法当有大量特征时, 也能正常工作,仍可以在可接受的时间内完成。

泛化

之前我们提到过,线性模型并不是只能进行线性分类,它具有很强的泛化能力,如果仅仅使用在此之前的单元和多元线性回归,我们只能得到多维空间的高维平面,为了进一步增强泛化能力,我们可以引入幂次项
比如我们原来有只有一个特征 x1 x 1 ,我们现在令 x2=x21 x 2 = x 1 2 ,就人为的引入了第二个特征,拥有更强的拟合能力。
我们还可以引入两个特征的交叉项,使得线性模型更强大。
例如,我们原本只有一个模型:

y=w1x1+w2x2 y = w 1 x 1 + w 2 x 2

我们引入 x3=x21,x4=x22,x5=x1x2 x 3 = x 1 2 , x 4 = x 2 2 , x 5 = x 1 x 2 ,人为引入三个变量,我们的模型变为:
y=w1x1+w2x2+w3x3+w4x4+w5x5 y = w 1 x 1 + w 2 x 2 + w 3 x 3 + w 4 x 4 + w 5 x 5

也就是说,很多复杂的模型都可以转化为线性模型进行建模。
但是,我们也要防范 过拟合问题,过多的人为特征很容易导致过拟合,我们将在下一个章节详细讨论。

检验

那么,我们写好算法进行运行之后,如何检验我们的算法是否正常运行呢?一个办法就是看他的S(总误差)随时间变化的图像。
正常情况下,S应该随着算法的运行逐渐降低,降低的速度越来越小,但是如果算法错误,或者学习率不适宜,那么可能出现S反而增大或者抖动的现象,如下图所示:
这里写图片描述

总结

线性模型以其简单和可解释性在众多模型中脱颖而出,至今仍是经常使用的回归算法之一,在机器学习中仍然具有重要应用,如趋势线,流行病学预测,金融经济等。

查看更多

所有的文章都会在我的博客和我的知乎专栏同步进行更新,欢迎阅读
- 我的博客
- 知乎专栏

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值