线性回归中的截距之谜为什么我们要加一列“1”❝你是不是也曾疑惑sm.add_constant(X)加的那一列 1到底有什么用截距不是模型自己算出来的吗为什么偏要手动塞一列 1别急今天我们就用最直白的语言把这个“截距之谜”彻底讲清楚 从一个简单问题开始假设我们要用房子的面积预测房价最简单的线性模型是房价 截距 系数 × 面积也就是 []() 是截距代表当面积为 0 时虽然现实中不存在房价的“基础值”。) 是斜率代表面积每增加 1 平方英尺房价涨多少。这个截距 () 是我们要从数据中学习的不是我们拍脑袋定的。 最小二乘法怎么同时算出截距和斜率我们有一堆数据点 ((x_1, y_1), (x_2, y_2), \dots)最小二乘法的目标是找到一条直线让所有点到直线的距离平方和最小。数学推导会得到两个方程正规方程 [] []解这个方程组就得到 [] []你看() 是通过数据均值 () 和 () 以及斜率计算出来的——它是数据的产物不是我们设的 1。❓ 那为什么代码里要加一列 1在 statsmodels 里我们用矩阵运算一次性求出所有系数 [ \mathbf{y} \mathbf{X} \boldsymbol{\beta} \boldsymbol{\varepsilon} ] 这里的 (\mathbf{X}) 是设计矩阵每一行是一个样本的特征。为了把截距也放进这个统一形式我们把 (\beta_0) 也当作一个“特征”的系数而这个特征对所有样本都是一样的所以我们加一列全是 1。这列 1 就是截距的“占位符”它代表“常数项”这个特征。拟合之后这一列对应的系数就是 (\beta_0)也就是截距的值。类比一下就像你要给每个学生一个“基础分”这个基础分对所有学生都一样1但具体加多少系数是老师根据全班成绩评定的——这个系数就是截距。 回到房价例子我们之前的数据面积、卧室数、厕所数、城市虚拟变量用sm.add_constant(X)加了一列 1拟合结果中const的系数是68240这就是模型学到的截距。它的含义是当面积0、卧室数0、厕所数0且城市为基准组 A 时预测房价为 68240 元。这可以理解为“土地成本”或“基础房价”。如果没有这一列 1模型会强制通过原点即认为所有自变量为 0 时房价必须为 0这显然不符合现实谁会白送地。所以加 1 是为了给模型一个自由度让它自己决定截距该是多少。 一句话总结我们加的一列 1是截距的“位置标记”它的系数才是截距的真正数值。截距是通过最小二乘法从数据中自动学习出来的不是我们手动指定的。现在你明白了吗下次再看到add_constant你就知道哦这是在给截距留个位置让模型自己去填值 互动话题你在建模中还遇到过哪些“看似奇怪但很有道理”的操作欢迎留言分享如果你觉得本文对你有帮助记得点赞、在看、转发三连哦 全文完