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

Python运行statsmodels OLS回归报shapes not aligned错误如何解决

报错根因

这个形状不匹配报错由两个代码问题直接导致:

  • 自变量未正确处理:你通过拉丁超立方采样生成的4维特征存在data变量中,调用sm.OLS()时传入的X未被正确赋值,且没有给自变量添加截距项,OLS默认不会自动拟合截距。
  • 因变量维度不符合要求:你生成的y是形状为(100,2)的二维数组,包含2个输出目标,但statsmodels的原生OLS仅支持单维因变量(形状为(n_samples,)或(n_samples,1)),传入多列y时矩阵运算无法对齐维度。
    *额外注意:你代码里调用的sampler.lhs_method(100)是错误写法,scipy的QMC拉丁超立方采样接口调用方法为sampler.random(n_samples)。
修复方案

按照以下步骤调整代码即可正常运行:

  1. 修正采样逻辑,正确生成自变量并补充截距项
import numpy as np
import statsmodels.api as sm
from scipy.stats import qmc

# 修正采样接口调用
sampler = qmc.LatinHypercube(d=4)
u_bounds = np.array([5.0, 5.0, 10.0, 10.0])
l_bounds = np.array([0.125, 0.125, 0.1, 0.1])
data = sampler.random(100) * (u_bounds - l_bounds) + l_bounds

# 保留原有因变量生成逻辑
y = np.zeros((100,2))   
for i in range(np.shape(data)[0]):
    y[i,0], y[i,1] = objectives(data[i,0], data[i,1], data[i,2], data[i,3]) 

# 给自变量添加常数列,用于拟合截距
X = sm.add_constant(data)
  1. 拆分多列因变量,分别做单输出OLS回归
    原生OLS不支持多输出,如果你需要对y的两个输出分别建模,拆分y后逐列拟合即可:
# 拟合y的第一列结果
y_col1 = y[:, 0]
model1 = sm.OLS(y_col1, X).fit()
pred1 = model1.predict(X)
print(model1.summary())

# 拟合y的第二列结果
y_col2 = y[:, 1]
model2 = sm.OLS(y_col2, X).fit()
pred2 = model2.predict(X)
print(model2.summary())
报错逻辑说明

OLS计算回归系数时需要做矩阵运算:$\hat{\beta} = (XTX){-1}X^Ty$,要求X的列数与y的对应维度匹配。你传入多列y且X未正确赋值时,会出现X的维度1值为2、y的维度0值为100不相等的情况,直接触发维度对齐错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:54:19