简介
通常在C编程中,我们会采用线性回归或多项式拟合方法,用于拟合多个坐标点的数据。而线性回归是一种最为常见的拟合技术,它通过最小二乘法来估计回归系数,以找到使误差函数最小化的参数值。在这个过程中,我们需要运用偏导数和链式法则等微积分概念,以计算参数的导数,从而优化误差函数。需要特别注意的是,线性回归的导数计算与一元函数的导数计算在方法上存在差异。
线性回归模型
线性回归是一种常用的统计方法,用于在实际场景中拟合和分析两个或多个变量之间的线性关系。在简单线性回归中,我们通常使用线性方程 Y = kx + b 来拟合坐标散点,其中:
- Y 代表因变量(也称为响应变量或目标变量),它是我们想要预测或解释的变量。
- x 代表自变量(也称为解释变量或特征),它是用来预测或解释因变量的变量。
- k 是斜率(也称为回归系数),表示每单位 x 变化时 Y 的变化量。
- b 是截距,表示当 x 等于零时,Y 的值。
线性回归的目标是找到最佳的斜率k 和截距 b。
线性拟合
线性拟合通常指的是在一组数据点中寻找最佳拟合直线的方法。给定 n 个数据点 (x1, y1), (x2, y2),…, (xn, yn),我们可以使用最小二乘法求解线性拟合方程。
假设线性拟合的方程为 y = a * x + b,其中 a 和 b 是我们需要求解的参数。
根据最小二乘法,我们可以通过以下公式计算 a 和 b:
a = (n * Σ(xi * yi) - Σxi * Σyi) / (n * Σ(xi * xi) - (Σxi)^2)
b = (Σyi - a * Σxi) / n
其中,Σ表示求和,xi 和 yi 分别表示数据集中的 x 值和 y 值。
通过上述公式,我们可以得到线性拟合的方程,从而对数据集进行最佳拟合。
最小二乘法
最小二乘法是一种常用于参数估计的方法,特别是在线性回归中。它的目标是找到一组参数,使模型(理论值)与观测数据(实测值)之间的残差平方和最小化。在线性回归中,最小二乘法被用来拟合一个线性模型到实际数据,以便估计回归系数(如截距和斜率),使拟合线尽可能地接近数据点。
考虑一个简单的线性回归模型:
Y = kx + b
最小二乘法的目标是通过最小化误差函数SSE来估计k和b,其中:
SSE = Σ(Yi-(b+kxi))2
通过最小化SSE来找到最佳的k和b的值。
偏导数:
偏导数是微积分中的一个概念,用于计算多元函数相对于各个变量的导数。它告诉我们函数在每个自变量方向的变化率,同时将其他自变量保持不变。在线性回归中,我们使用偏导数来计算误差函数相对于回归系数的导数,以找到最小误差函数的参数值。
考虑误差函数SSE,我们想计算对于b的偏导数。这个偏导数告诉我们在保持k不变的情况下,误差函数SSE对于k的变化率。这个偏导数为:
d(SSE)/dB = ∑d(SSE)/du * du/db = ∑2(Yi-(b+kxi))*(-1);
链式法则:
链式法则是微积分中的一个关键规则,用于计算复合函数的导数,当一个函数包含两一个函数时,链式法则告诉我们如何计算这两个函数的导数只积。在线回归中,链式法则用于计算误差函数相对于模型参数的导数,因为误差函数包含了内部函数,例如每个数据点的模型预测与实际值之间的差异。
考虑误差函数SSE,其中u时内部函数:
u=Yi-(b+kxi);
我们使用链式法则来计算d(SSE)/db。首先d(SSE)/du,然后计算du/db,最终将两者相乘。
完整示例
首先,我们定义残差(Residual)为观测值(实际的Y值)与模型预测值之间的差异:Residual = Y - (β₀ + β₁X)
残差平方和(Sum of Squared Residuals)表示所有数据点的残差的平方之和:SSE = Σ(Residual)²,其中,Σ 表示对所有数据点求和。
最小二乘法的目标是最小化 SSE,也就是找到最佳的β₀ 和 β₁ 来使 SSE 最小。为了实现这一目标,我们需要计算 SSE 对于 β₀ 和 β₁ 的偏导数,并将它们设为零,然后解出 β₀ 和 β₁。
对于β₀,我们计算 SSE 对 β₀ 的偏导数,并将其设为零:
d(SSE)/dβ₀ = -2Σ(Y - (β₀ + β₁X)) = 0
这样,我们可以解出β₀:
ΣY - Σβ₀ - β₁ΣX = 0;β₀ = (ΣY - β₁ΣX) / n,这就是截距的估计值。
对于β₁,我们计算 SSE 对 β₁ 的偏导数,并将其设为零:
d(SSE)/dβ₁ = -2ΣX(Y - (β₀ + β₁X)) = 0
这样,我们可以解出β₁:
ΣXY - β₀ΣX - β₁Σ(X²) = 0,用β₀ 的估计值代入,得到:
ΣXY - ((ΣY - β₁ΣX) / n)ΣX - β₁Σ(X²) = 0
然后,将所有项移到一边:
ΣXY - ((ΣYΣX - β₁(ΣX)²) / n) - β₁Σ(X²) = 0
继续整理,我们得到:
ΣXY - (ΣYΣX / n) + (β₁(ΣX)² / n) - β₁Σ(X²) = 0,
然后,将所有包含β₁ 的项移到一边:
β₁(Σ(X²) - (ΣX)² / n) = ΣXY - (ΣYΣX / n)
最后,解出β₁:
β₁ = (ΣXY - (ΣYΣX / n)) / (Σ(X²) - (ΣX)² / n)
这就是斜率的估计值。