【机器学习】线性回归(Linear Regression)

张开发
2026/4/11 11:37:30 15 分钟阅读

分享文章

【机器学习】线性回归(Linear Regression)
目录概述引入一个例子线性回归梯度下降总结概述线性回归是统计学与机器学习领域中最基础、最经典的算法之一核心用途在于预测数值以及分析变量之间的关联关系。你可以将其形象地理解为在一堆看似杂乱无章的数据点中绘制出一条“最佳拟合线”以此揭示数据背后隐藏的规律进而对未来趋势做出预判。相较于复杂的非线性模型线性回归的建模过程更为简洁结果的可解释性也更强。正因如此它常常被用作机器学习入门者的首选算法帮助大家建立起对数据建模的初步认知。引入一个例子例如使用UCI波士顿房屋数据集这个数据集数量比较小并不代表大数据问题但是可以拿来说明算法。这份数据包含506行14列每行代表一栋房子每栋房子有14个属性其中最后一列为该栋房子的价格中位数。其余属性包含了犯罪率房间数量等信息。为了课程学习我们只取其中一个特征来研究它与房价之间的相关性即房间数量。上图中x轴代表房间数量y轴代表房价两个变量之间显然有相关性。但这种相关性如何表达呢一般情况下我们可以直接画一条直线来表达出“房间越多房价越高”的结论。但是这样的直线可以有很多条为了确定唯一的一条所以我们引入“线性回归”的方法。线性回归根据初中的数学知识我们知道要在二维空间中绘制一条线需要确定两个值直线的斜率以及线与y yy轴相交的值也就是截距。假设房间数量为x xx房价为h hh斜率为w 0 w_0w0​和w 1 w_1w1​下面的公式描述h ( x ) w 0 w 1 x h(x)w_0w_1xh(x)w0​w1​x而线性回归求取w 0 w_0w0​和w 1 w_1w1​的方法是通过构建损失函数coss function决定的。如下所示C ( w 0 , w 1 ) 1 2 m ∑ i 1 m ( h ( x i ) − y i ) 2 1 2 m ∑ i 1 m ( w 0 w 1 x i − y i ) 2 \begin{equation}\begin{split} C(w_0,w_1)\frac{1}{2m}\sum_{i1}^m{(h(x_i)-y_i})^2 \\ \frac{1}{2m}\sum_{i1}^m{(w_0w_1x_i-y_i)}^2 \end{split}\end{equation}C(w0​,w1​)​2m1​i1∑m​(h(xi​)−yi​)22m1​i1∑m​(w0​w1​xi​−yi​)2​​​所谓“损失”指的预测值与真实值的差异这里的预测值指的是通过h ( x ) h(x)h(x)函数计算出来的预估房价真实值指的通过数据收集到的真实房价。这里构建损失函数的方法称为均方误差。这个公式可以简单理解为每个由函数计算出来的房价与其对应真实房价之间的误差h ( x i ) − y i h(x_i)-y_ih(xi​)−yi​的叠加(∑ \sum∑)。由于原本的x xx和y yy都被样本的值填充所以该公式的未知项变成了w 0 w_0w0​和w 1 w_1w1​。并且根据损失函数的数学定义当C ( w 0 , w 1 ) C(w_0,w_1)C(w0​,w1​)的值最小时样本的值与算法预测的值最为接近该算法就越能代表数据的规律且此时对应的w 0 w_0w0​和w 1 w_1w1​为最佳。那么如何求得w 0 w_0w0​和w 1 w_1w1​使得损失函数的值最小呢梯度下降我们可以先直观感受一下损失函数的图像。这个图像的蓝色区域是我们想要到达的区域因为这个区域所代表的损失函数值最小。要想到达这个区域我们引入梯度下降的方法。这里需要一些高等数学求导的知识。为了解释清楚为什么求导能够找到函数的最低点我们先回到一维的情况。已知函数在某个点上求导实际上是求函数在该点上切线的斜率k kk而斜率是有方向的如下所示。橙色直线是函数C ( w ) w 2 C(w)w^2C(w)w2在初始化w 2 w2w2时的切线斜率为4红色直线是函数在初始化w − 2 w-2w−2时的切线斜率为-4。此时如果我们让w − k w-kw−k如果k 0 k0k0时对应的( w , C ) (w,C)(w,C)就会向左移。同理如果初始的点在图像的另一边点就会向右移。如果我们将w − k w-kw−k的结果赋值给新的w ww我们继续在新的w ww上求导重复上面的过程我们就会发现( w , C ) (w,C)(w,C)会不断朝着“低谷”走去。如下所示。等到w ww的变化不大时这个过程就会停止。值得注意的话随着计算的进行实际上斜率k kk的值也会越来越小导致w ww的变化也会越来越小所以停下来是自然而然的。回到上面多维的情况同理我们对函数C ( w 0 , w 1 ) C(w_0,w_1)C(w0​,w1​)求偏导。相当于计算函数在这两个方向上的切线斜率。根据向量求和的原则它们在各自方向上的移动可以叠加为一个方向的移动如下所示。此时我们针对任意的w j w_jwj​可以根据损失函数的偏导数对w j w_jwj​进行更新w j : w j − γ ∂ ∂ w j C ( w ) w_j:w_j-\gamma\frac{\partial}{\partial w_j}C(w)wj​:wj​−γ∂wj​∂​C(w)其中γ \gammaγ为学习率决定每次更新的幅度有多大。总结关于线性回归的内容在这个章节就记录了这么多。总体而言通过收集数据制作样本构建损失函数以及梯度下降等步骤在整个人工智能算法研发的过程都是通用的。只是每一步在线性回归的领域内都还算简单。后续的内容将会越来越复杂。最后如果在学习的过程中有任何问题的话都可以通过980623070qq.com发邮件给我提意见或建议。

更多文章