线性回归旨在找到一条直线,以最好地表示输入特征(我们称之为 $x$)与连续输出值($y$)之间的关系。这条线的方程通常写为:$$y = mx + b$$这里,$m$ 代表直线的斜率($x$ 每增加一个单位,$y$ 的变化量),$b$ 是 y 轴截距(当 $x$ 为零时,$y$ 的值)。但是,算法实际如何确定 $m$ 和 $b$ 的具体值,从而为我们的数据找到“最佳”直线呢?这就是“学习”的部分。可以把它想象成调音器乐。你调整调音旋钮(参数 $m$ 和 $b$),直到声音(与数据的拟合度)恰到好处。目标:最小化误差“最佳”直线并非主观判断;在机器学习中,“最佳”通常指使其预测值与实际数据点之间的总误差最小的直线。想象一下,你的数据点已经绘制在图上。对于任何给定的直线 $y = mx + b$,你可以计算:预测值: 对于每个实际数据点 $(x_i, y_i)$,将 $x_i$ 值代入直线方程,得到一个预测值,我们称之为 $\hat{y}_i = mx_i + b$。误差(残差): 计算实际值 $y_i$ 与预测值 $\hat{y}_i$ 之间的差值。这个差值,$y_i - \hat{y}_i$,就是该特定点的误差或残差。它本质上是数据点与图上直线之间的垂直距离。线性回归算法的目标是找到 $m$ 和 $b$ 的值,使得所有数据点的总误差尽可能小。{"layout": {"title": "线性回归:寻找最佳拟合", "xaxis": {"title": "输入特征 (x)"}, "yaxis": {"title": "输出值 (y)"}, "showlegend": true, "width": 600, "height": 400, "legend": {"yanchor": "top", "y": 0.99, "xanchor": "left", "x": 0.01}}, "data": [{"x": [1, 2, 3, 4, 5, 6, 7], "y": [1.5, 3.8, 3.1, 5.5, 4.9, 7.2, 6.5], "mode": "markers", "type": "scatter", "name": "数据点", "marker": {"color": "#228be6", "size": 8}}, {"x": [0, 8], "y": [1, 5], "mode": "lines", "type": "scatter", "name": "初始猜测(拟合不佳)", "line": {"color": "#ff8787", "dash": "dash"}}, {"x": [0, 8], "y": [1.2, 7.6], "mode": "lines", "type": "scatter", "name": "学习后的拟合(更好)", "line": {"color": "#51cf66", "width": 3}}]}这张图显示了样本数据点、直线的初始猜测以及经过学习过程后更好地拟合数据的直线。目标是找到像绿线那样的直线。学习方式:迭代调整计算机不擅长像人类有时那样“直接看到”最佳直线。相反,线性回归等算法使用迭代过程:初始化: 从参数 $m$ 和 $b$ 的一些初始猜测开始。这些可以是随机值,或者简单地设为零($m=0, b=0$)。这为我们提供了一条初始直线。误差计算: 使用所有数据点计算当前直线的总误差。我们需要一种精确的方法来测量这个总误差,这正是成本函数的作用所在(我们将在下一节详细介绍)。目前,只需知道它会给出一个单一的数字,表示当前直线拟合的“好坏”程度。参数更新: 根据计算出的误差,算法智能地调整 $m$ 和 $b$ 的值。重要的是要朝减小总误差的方向调整它们。可以把它想象成轻微地推动斜率和截距,使直线拟合得更好。重复: 带着新的 $m$ 和 $b$ 值返回步骤2。计算新的、希望更小的误差。再次更新参数。多次重复此过程。每次迭代,直线应逐渐接近最佳拟合,总误差也应减小。这个过程持续到误差足够小,或者 $m$ 和 $b$ 的变化变得可以忽略不计,这意味着算法已经收敛到它能找到的最佳值。在步骤3中,常用于确定如何调整 $m$ 和 $b$ 的具体数学技术称为梯度下降,我们将在本章稍后介绍。目前,重要的是这种测量误差并调整参数以最小化该误差的迭代过程。这就是线性回归从你提供的数据中“学习”最佳直线的方式。