做线性回归,Python 里最常用的两套工具就是 statsmodelssklearn。很多新手(甚至老手)在切换使用时,经常被一些看似微小的细节卡住:报错说维度不对、截距莫名其妙多了一个、预测时特征数不匹配……今天就把这些最常见的坑一次性说清楚,顺便把两个库的核心差异也理一理。

Python怎么做线性回归_statsmodels与sklearn单变量回归

statsmodels 的 OLS 为什么总报 ValueError: endog must be 1-dimensional

这个错误几乎天天有人问。原因很简单:statsmodels.api.OLS 要求因变量(endog)必须是严格的一维数组,而你传进去的恰恰是 shape 为 (n, 1) 的二维结构——最常见的就是用了 df[['y']] 而不是 df['y'],或者从 sklearn 那边拿过来的数据没做压平处理。

sklearn 的 LinearRegression 需不需要手动加截距项

不需要。默认就带截距(fit_intercept=True),而且它把截距当参数单独学,不在 X 里拼一列 1。这一点和 statsmodels 的思路完全不同。

预测时 predict()ValueError: X has 1 features, but LinearRegression is expecting 2 features

这说明训练时 X 是二维(比如 df[['x']]),但预测时却传了一维数据(比如 [x0]np.array([x0]))。

结果怎么看:sklearn 输出系数,statsmodels 输出完整统计表

两者定位不同。sklearn 给你 coef_intercept_,干净利落,适合快速部署和预测;statsmodelssummary() 则包含 t 值、p 值、R²、置信区间,更适合做推断和假设检验。

实际用的时候,最常卡住的真不是公式理解,而是维度对不上、索引没对齐、还有那个神出鬼没的常数列。多打两次 shapendim,比硬猜快得多。

本文转载于:https://www.php.cn/faq/2342256.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。