news 2026/9/17 1:17:40

最小二乘法、相关系数与决定系数:回归分析三大指标辨析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
最小二乘法、相关系数与决定系数:回归分析三大指标辨析

做数据分析这行十来年,我发现一个挺有意思的现象:很多人能把最小二乘法、相关系数、决定系数这三个词背得滚瓜烂熟,公式也能默写,可一旦放到真实项目里,就开始乱用。最常见的就是拿一个决定系数去判断两组数据“有没有关系”,或者用相关系数去评价一个多元回归模型“拟合得好不好”。更麻烦的是,这三个东西在代码里往往一两行就能跑出来,太容易得到结果,反而没人愿意弄清楚它们各自在回答什么问题。这篇内容我就按一个从业者的思路,把最小二乘法、相关系数、决定系数的来龙去脉、公式推导、实操细节和踩过的坑一次性讲透,既适合刚接触回归分析的新手打基础,也适合已经用过现成库函数、但心里没底的人回头补课。

1. 三个概念到底在解决什么问题:先理清各自的岗位职责

我习惯把这几个概念当成一个团队里的三个岗位来看,这样理解起来会顺很多。最小二乘法是干活的那个,负责在给定数据下把模型参数算出来;相关系数是体检的那个,专门衡量两个变量之间线性关系的强弱和方向;决定系数则是验收的那个,评价你拟合出来的这条件线到底解释了数据里多少波动。它们服务的阶段不同,回答的问题也完全不同,混用就等于让体检医生去干质检的活,结论必然出问题。

1.1 一次真实的翻车经历:用决定系数判断相关性

早些年我做一个渠道投放分析,需要判断几个渠道的投入和产出之间有没有明显关系。当时图省事,直接把每个渠道的投入和产出丢进回归,看R²。结果有个渠道的数据明显是一条上升趋势线,R²却只有0.4左右,我差点判定“这个渠道投入产出关系不明显”。后来回头把散点图画出来才发现,那组数据里有一个极端值把整体拉平了,相关系数其实不低,只是模型被个别点牵着走。问题就出在我把“拟合优度”当成了“相关性强弱”,这两个指标虽然在一元线性回归里数值上碰巧相等,但含义和抗干扰能力完全是两码事。

这件事让我彻底改掉了“看一个数就下结论”的毛病。这三个指标,必须搞清楚它们各自的定义域、适用边界和对异常值的敏感程度,才不至于在项目里翻车。

1.2 三者定位差异一览

维度最小二乘法相关系数决定系数
本质参数估计方法统计量拟合优度指标
回答的问题参数取多少误差最小两变量线性关系多强模型解释了多少变异
取值范围无(输出参数)[-1, 1]通常 [0, 1]
是否依赖模型是,本身就是建模手段否,可直接计算是,需要模型预测值
与线性关系隐含线性假设专门测线性关系模型整体解释力
对异常值敏感(平方放大了影响)较敏感敏感

看这张表你会发现,最小二乘法是“方法”,另外两个是“指标”。方法没有取值范围,指标才有。很多人犯的错就是拿方法的产物去和指标比较,逻辑上就已经错位了。

2. 最小二乘法:那套公式到底是怎么来的

最小二乘法的核心思想其实特别朴素:既然数据点不会完美落在一条直线上,那我就找一条线,让所有点到这条线的垂直距离平方和最小。为什么是平方而不是绝对值?道理很实在——平方函数处处可导,求极值的时候能直接套微积分,绝对值在零点不可导,解起来麻烦得多。这不是数学洁癖,而是工程上的务实选择。

2.1 从“距离平方和最小”到求导等于零

设直线为 y = kx + b,第 i 个点的残差就是真实值 y_i 减去预测值 (kx_i + b),记作 e_i = y_i - kx_i - b。我们希望最小化的目标函数是:

Q(k, b) = Σ (y_i - k*x_i - b)^2

这里 Σ 是对所有样本求和。要让 Q 最小,对 k 和 b 分别求偏导并令其为零:

∂Q/∂k = -2 * Σ x_i * (y_i - k*x_i - b) = 0 ∂Q/∂b = -2 * Σ (y_i - k*x_i - b) = 0

整理之后得到两个方程,业内叫“正规方程组”。解这个方程组,就得到了大家熟悉的那两个公式:

k = Σ (x_i - x̄)(y_i - ȳ) / Σ (x_i - x̄)^2 b = ȳ - k * x̄

很多人只记结果不记推导,遇到数据带权重、带正则项或者非线性的时候就不会变通了。其实只要记住“目标是最小化残差平方和,手段是求导等于零”,任何变形你都能自己推出来。

2.2 一元线性回归手算全过程

光看公式容易飘,我用一组小数据把整条链路走一遍。假设研究广告投入 x(万元)和销售额 y(万元)的关系:

样本xy
112
224
335
444
555

第一步算均值:x̄ = 3,ȳ = 4。

第二步算两个关键的求和项:

Σ (x_i - x̄)(y_i - ȳ) = (-2)(-2) + (-1)(0) + (0)(1) + (1)(0) + (2)(1) = 4 + 0 + 0 + 0 + 2 = 6 Σ (x_i - x̄)^2 = 4 + 1 + 0 + 1 + 4 = 10

第三步代入公式:

k = 6 / 10 = 0.6 b = 4 - 0.6 * 3 = 2.2

所以拟合直线是 y = 0.6x + 2.2。把每个 x 代进去,得到预测值分别是 2.8、3.4、4.0、4.6、5.2,残差是 -0.8、0.6、1.0、-0.6、-0.2。

手动算这一遍的价值在于,你会亲眼看到为什么最小二乘法对异常值敏感——残差被平方之后,一个偏离较大的点会以二次方的速度放大对目标函数的影响。数据里如果有个别“离群点”,整条线都可能被它拽偏。

2.3 从一元到多元:矩阵形式才是工程主流

真实项目里很少只有一个自变量。把上面的推导推广到多个自变量,写成矩阵形式会清爽很多。设设计矩阵为 X(第一列全为 1,代表截距项),参数向量为 β,目标函数变成:

Q(β) = (y - Xβ)^T (y - Xβ)

对 β 求导令其为零,得到正规方程:

X^T X β = X^T y

解出参数:

β = (X^T X)^(-1) X^T y

这个式子就是线性代数里最常见的解,理解它的前提是 X^T X 可逆。实际工程里如果特征之间高度共线,X^T X 会接近奇异,这时候直接用这个公式求逆会非常不稳定。所以实际代码里通常不会去硬算逆矩阵,而是用 QR 分解或者 SVD 分解来求解,数值稳定性好得多。

2.4 实操中容易忽略的几个点

  • 量纲问题:最小二乘法本身对量纲不敏感,但如果你加了正则项(比如岭回归),不同特征的量纲会直接影响惩罚力度,这时候必须先做标准化。
  • 截距项:很多人为了“简化”强行让直线过原点,除非业务上确有依据(比如投入为零产出必然为零),否则不要省截距,容易造成系统性偏差。
  • 目标函数的选择:最小二乘默认误差服从正态分布且方差恒定。如果数据里异常值多,最小二乘会被带偏,这时候应该考虑最小绝对偏差或者 Huber 损失这类更稳健的方法。

注意:最小二乘法本身不告诉你模型好不好,它只负责把参数算出来。模型好坏要靠决定系数、残差分析等其他手段去判断,千万别混为一谈。

3. 相关系数:专门衡量线性关系的那把尺子

相关系数最常见的是皮尔逊相关系数,记作 r。它衡量的是两个变量之间线性关系的方向和强度,取值范围从 -1 到 1。接近 1 表示强正相关,接近 -1 表示强负相关,接近 0 表示几乎没有线性关系。这里的关键词是“线性”,非线性关系再强,皮尔逊相关系数也可能接近零。

3.1 皮尔逊相关系数的公式拆解

皮尔逊相关系数的定义式是:

r = Σ (x_i - x̄)(y_i - ) / sqrt[ Σ (x_i - x̄)^2 * Σ (y_i - ȳ)^2 ]

把它和前面最小二乘法的斜率公式放在一起看,会发现分子完全一样,都是 Σ(x_i - x̄)(y_i - ȳ)。这说明两者在计算上是同源的,区别在于:斜率 k 只除以了 x 的离差平方和,会随着 x 的量纲变化;而相关系数还额外除去了 y 的离差平方和,做了归一化,所以它成了无量纲的指标,可以跨数据集比较。

用 2.2 节那组数据算一下:分子是 6,分母是 sqrt(10 * 6) = sqrt(60) ≈ 7.746,所以 r ≈ 0.7746。这个值说明广告投入和销售额之间有中等偏强的正相关。

3.2 相关系数最容易被误读的三种情况

第一种是把相关当因果。两个变量相关系数很高,不代表一个导致了另一个。经典的例子是夏天冰淇淋销量和溺水人数正相关,真正的原因是气温这个共同因素。做业务分析的时候,相关只能作为线索,因果要靠实验设计去验证。

第二种是忽略非线性关系。数据呈现完美的 U 型或者周期关系时,皮尔逊相关系数可能接近 0,但两个变量其实高度相关。遇到这种情况,先画散点图,别急着下结论。

第三种是被异常值带偏。相关系数的分子分母都涉及离差乘积,一个远离中心的点能显著改变 r 的值。实际项目里我一般会先看散点图和箱线图,确认数据质量再做相关性分析。

3.3 什么时候该换其他相关系数

  • 变量非正态或有明显异常值:用斯皮尔曼等级相关系数,它先对数据排序再算相关,对异常值稳健得多。
  • 变量是分类或有序变量:用肯德尔相关系数更合适。
  • 只关心单调关系不关心线性:斯皮尔曼比皮尔逊更合适。

选择的基本原则就是先看数据类型和分布,再决定用哪个系数,而不是默认拿皮尔逊去套所有场景。

4. 决定系数:拟合优度的核心指标

决定系数通常记作 R²,它回答的问题是:模型解释的那部分变异占总变异的比例是多少。公式是:

R² = 1 - SSE / SST

其中 SSE 是残差平方和,也就是 Σ(y_i - ŷ_i)²;SST 是总平方和,也就是 Σ(y_i - ȳ)²。这两者的差就是回归平方和 SSR,反映模型解释掉的那部分。三者关系是 SST = SSR + SSE,这是方差分解的基本恒等式。

4.1 继续用那组数据算一遍

前面已经算过 SST = 6,SSE = 2.4,那么:

R² = 1 - 2.4 / 6 = 1 - 0.4 = 0.6

这说明这条拟合直线解释了销售额 60% 的波动,剩下 40% 是模型没抓住的部分。

有意思的地方来了:前面算出来的相关系数 r ≈ 0.7746,平方一下正好是 0.6,和 R² 完全相等。这不是巧合,在一元线性回归且含截距项的模型里,R² 恒等于 r 的平方。这个关系是很多人混淆两个概念的根源。

4.2 为什么一元时 R² 等于 r²,多元时就不成立了

关键差别在于“一元”和“含截距”这两个前提。一元回归只有一条直线,方向由数据决定,模型自由度足够贴合;一旦进入多元回归,模型会利用多个自变量从不同方向逼近目标,此时 R² 衡量的是所有自变量整体对 y 的解释力,而相关系数只能描述两个变量之间的关系,两者不再有等式关系。所以看到有人拿多个自变量的 R² 去开平方当作相关系数,可以直接判断他理解有偏差。

4.3 调整决定系数:防止堆变量刷高分

R² 有一个很坑的性质:只要往模型里加自变量,哪怕这个变量和 y 毫无关系,R² 也不会下降,最多持平。因为多一个变量就多一个自由度,模型总能找到一点点解释力。这在业务上会导致有人不断堆变量把 R² 刷高,做出一个看起来很美但毫无泛化能力的模型。

解决方法是看调整决定系数:

Adjusted R² = 1 - (SSE / (n - p - 1)) / (SST / (n - 1))

其中 n 是样本量,p 是自变量个数。它给增加的变量加了惩罚,只有新变量带来的解释力提升超过惩罚,调整 R² 才会上升。我在实际建模时的习惯是主看调整 R²,R² 只作参考,两者差距过大说明模型里有冗余变量。

4.4 决定系数踩过的两个坑

第一个坑是样本量太小导致虚高。n 很小的时候,随机波动就能把 R² 推到很高。我做小样本分析时一般会配合交叉验证,看模型在留出集上的表现,避免被训练集的高 R² 迷惑。

第二个坑是跨数据集比较 R² 没有意义。不同数据集的 y 方差不同,SST 不同,R² 自然不可比。要比较模型好坏,最好固定数据集或用统一的评估协议。

5. 三者的区别与联系:一张对照表加三个判断场景

到这里,三个概念的边界应该比较清楚了。我再补一张更细的对照表,然后给出几个真实场景里的判断逻辑。

5.1 公式层面的联系与区别

对比项最小二乘法相关系数 r决定系数 R²
计算对象模型参数两个变量模型整体
核心公式k = Sxy / Sxxr = Sxy / sqrt(Sxx * Syy)R² = 1 - SSE / SST
是否归一化
与 Sxy 关系直接用直接用间接使用
一元线性下提供参数r
是否考虑 y 波动部分

从表里能看出,最小二乘法是“发动机”,相关系数和决定系数都在用它计算过程中产生的中间量(Sxy、Sxx、Syy、SSE)。三者是同一套数学基础生长出来的不同分支。

5.2 场景一:判断两变量有没有关系

先算相关系数,再看散点图。相关系数高说明线性关系强,但务必搭配散点图确认没有非线性结构和异常值干扰。这一步不要用 R²,因为 R² 需要先建立模型,多了一道流程,而且会掩盖两个变量之间的直接关系。

5.3 场景二:评估回归模型好坏

看 R² 和调整 R²,同时看残差分布和交叉验证结果。R² 高不代表模型可用,如果残差呈现明显的曲线模式,说明线性假设不成立,这时候 R² 再高也要打问号。我通常还会看 RMSE 和 MAE,多个指标一起判断更稳。

5.4 场景三:只想知道参数怎么估

直接用最小二乘法。这一步和其他两个指标没有直接关系,只要模型假设成立(线性、误差独立、方差齐性),最小二乘就是最优的。

6. 常见问题与排查技巧实录

实际操作里遇到的问题五花八门,我把高频的几个整理成速查表,再补充几条自己的经验。

6.1 问题速查表

现象可能原因排查手段解决方向
R² 很高但预测很差过拟合、小样本交叉验证减变量、加正则
相关系数低但散点图明显相关非线性关系画散点图换斯皮尔曼或做变换
R² 为负模型严重不适合检查残差重新选模型
加了变量 R² 不升变量冗余或共线看调整 R² 和方差膨胀因子删变量或做特征选择
相关系数在异常值前后差异大异常值干扰箱线图、库克距离剔除或做稳健回归
多元回归 R² 开平方不等于 r概念误用认清多元前提直接看 R²

6.2 我踩过的三条经验

第一条:永远先画图再算数。不管多急着出结论,散点图能帮你排除掉八成误判。我见过太多“相关系数接近零就判定无关”的案例,最后发现数据是一条完美的抛物线。

第二条:残差分析不能省。决定系数只给一个总数,残差图才能告诉你模型哪里出了问题。如果残差和拟合值呈现喇叭形,说明方差不齐;如果残差有明显趋势,说明模型缺了非线性项。这些都是 R² 掩盖掉的细节。

第三条:指标只是工具,业务逻辑才是裁判。R² 0.6 的模型在一个场景里可能足够用,在另一个场景里就不行。我做过一个用户留存预测,R² 只有 0.3,但业务上抓出了最关键的几个流失信号,落地效果很好。反过来也遇到过 R² 0.95 的模型,因为变量都是“事后变量”,上线后完全没用。所以算完指标,一定要回到业务场景里问一句:这个结论我能拿它做什么决策。

提示:如果你在团队里做评审,看到有人用决定系数去论证相关性、用相关系数去衡量模型好坏,直接把这篇文章的对照表甩给他,能省掉很多无谓的争论。

我在实际项目里的体会是,这三个概念真正的难点不在公式,而在“什么时候该用哪个”。公式背得再熟,用错场合也白搭。我的建议是每次分析前先问自己三个问题:我现在是在估参数、测关系还是评模型?数据有没有异常值和非线性结构?样本量够不够支撑我要下的结论?把这三个问号理清楚,选哪个指标就是水到渠成的事。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 1:15:50

C# WebService ASMX实战:VS2019工业级部署全流程

1. 这不是“教科书式”的WebService入门,而是我在产线调试上位机时踩出来的全流程你搜“C# WebService VS2019”,大概率会看到一堆零散截图、半截代码、缺配置步骤的博客,甚至还有把ASMX和WCF混着讲的——我去年在给一家汽车零部件厂做设备数…

作者头像 李华
网站建设 2026/9/17 1:14:47

Flutter+OpenHarmony开发智能家庭相册实践

1. 项目概述:FlutterOpenHarmony家庭相册开发背景家庭相册类应用一直是移动开发领域的经典练手项目,但结合Flutter跨平台框架与OpenHarmony操作系统开发却是个新鲜尝试。这个项目本质上要解决三个核心问题:如何用Flutter高效开发多端一致的UI…

作者头像 李华
网站建设 2026/9/17 1:14:45

云成本巡检进阶:从告警到自动化闭环治理的Mission调度实践

云成本巡检这件事,圈内人有个心照不宣的痛点:告警天天发,账单月月超,但真正动手去治理的人永远只有那么一两个运维。我早先做云上资源治理的时候,也是先搞了一套“成本巡检”,结果跑了两个月,发…

作者头像 李华
网站建设 2026/9/17 1:13:07

三级分销返佣系统PHP实现:从表结构到事务与风控

简介:一份基于PHP的企业三级分销与报单会员系统源码,面向需要搭建推广返佣体系的中小企业、电商运营方及PHP开发者,可快速部署会员邀请、三级分佣、商城销售与后台管理流程。资源压缩包共含745个文件,大小约16.26MB,主…

作者头像 李华