You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BigQuery线性回归模型中强制y截距(b)为0?

在BigQuery中实现强制y截距为0的线性回归(复刻Google Sheets LINEST calculate_b=FALSE)

方法1:手动计算斜率(完全匹配LINEST逻辑)

当强制y截距为0时,线性回归的斜率可通过最小二乘法直接推导,公式为:
斜率 = SUM(x * y) / SUM(x²)
用BigQuery的聚合函数就能直接实现,结果和Google Sheets LINEST(y, x, FALSE)完全一致。

示例代码:

SELECT
  SUM(x * y) / SUM(POW(x, 2)) AS slope
FROM
  `你的项目ID.数据集ID.数据表`;

方法2:用BigQuery ML框架构建无截距模型

如果想用BigQuery的机器学习模块,需要正确配置模型禁用截距拟合,同时注意不要在训练数据中加入常量特征(比如全1的列)。

创建模型

CREATE OR REPLACE MODEL `你的项目ID.数据集ID.无截距回归模型`
OPTIONS(
  model_type='linear_reg',
  fit_intercept=FALSE, -- 核心配置:不拟合截距
  input_label_cols=['y']
) AS
SELECT
  x AS feature_x, -- 仅传入自变量,不要加全1列
  y
FROM
  `你的项目ID.数据集ID.数据表`;

查看模型系数

SELECT
  feature,
  coefficient
FROM
  ML.WEIGHTS(`你的项目ID.数据集ID.无截距回归模型`);

返回结果里只会有自变量的斜率系数,没有截距项。

关于fit_intercept参数无效的原因

如果之前设置fit_intercept=FALSE但没生效,大概率是你的训练查询里手动加了全1的特征列(比如1 AS intercept)。这种情况下,模型会把这个常量列当成普通特征拟合,忽略fit_intercept的设置,所以一定要确保训练数据里只有自变量和标签列。

结果验证

把BigQuery算出的斜率代入y = 斜率 * x,和Google Sheets的LINEST结果对比,就能确认两者完全匹配。

内容的提问来源于stack exchange,提问作者emorgsssss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:35:09