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

使用statsmodels预测新数据遇ValueError: shapes不匹配问题求助

解决statsmodels多元回归预测时的维度不匹配错误

错误原因

训练模型时,你通过sm.add_constant(X)给特征矩阵添加了常数项(截距β₀对应的全1列),此时训练用的特征矩阵是5列(4个自变量+1个常数列),模型拟合出的系数向量长度为5(截距+4个自变量系数)。但预测新数据时,你只提取了4个自变量列,未添加常数项,导致特征矩阵维度为(143,4),无法和长度为5的系数向量完成矩阵乘法,触发维度不匹配错误。

解决方案

方法一:给新数据添加常数项(推荐)

保持训练和预测时的特征处理逻辑一致,给新数据的特征矩阵也添加常数项:

X_new = df_new[['var1','var2','var3','var4']]
# 添加常数项,与训练时的处理对齐
X_new = sm.add_constant(X_new, has_constant='add')
y_new = model.predict(X_new)
y_new

方法二:让statsmodels自动管理常数项

修改训练代码,初始化OLS模型时指定hasconst=True,由statsmodels自动添加截距项,预测时无需手动处理常数项:

训练代码修改:
X = df[['var1','var2','var3','var4']]
y = df['target_trait']
# 指定hasconst=True,自动添加截距
model = sm.OLS(y, X, hasconst=True).fit()
predictions = model.predict(X)
model.summary()
预测代码(无需修改):
X_new = df_new[['var1','var2','var3','var4']]
y_new = model.predict(X_new)
y_new

注意事项

  • 确保新数据的自变量列名与训练数据完全一致(如var1、var2等),否则statsmodels无法正确匹配系数;
  • 两种方法二选一即可,方法一逻辑更直观,便于排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:10:50