使用Statsmodels内置数据集时OLS模型出现“Shapes not aligned”错误
问题解决:Statsmodels OLS预测报错及建模建议
错误修正
你的报错源于调用了未完成拟合的OLS模型对象的predict方法,正确操作是使用拟合后的结果对象执行预测。
错误原因
model = sm.OLS(train_y, train_x)仅创建了OLS模型的框架,并未完成参数拟合;results = model.fit()才是执行拟合流程、返回包含拟合参数与预测方法的结果对象。直接调用model.predict()会触发矩阵维度不匹配的错误。
修正后的代码
将预测行替换为拟合结果对象的调用即可,完整代码如下:
import numpy as np import pandas as pd import statsmodels.api as sm from statsmodels import datasets from sklearn.model_selection import train_test_split data = datasets.anes96.load_pandas().data train, test = train_test_split(data, test_size=0.2) x_vars = ['age', 'educ', 'selfLR'] y_var = 'PID' train_x = train[x_vars] train_x = sm.add_constant(train_x) train_y = train[y_var] model = sm.OLS(train_y, train_x) results = model.fit() # 建议开启该行查看模型拟合统计摘要,评估模型质量 # print(results.summary()) test_x = test[x_vars] test_x = sm.add_constant(test_x) # 使用拟合后的results对象执行预测 predictions = results.predict(test_x)
建模与数据集使用建议
- 模型拟合验证:拟合完成后务必查看
results.summary(),通过系数p值(判断特征显著性)、R²(模型解释力)、F统计量(模型整体显著性)等指标,确认模型拟合质量。 - 数据集预处理与认知:
- 用
data.info()检查变量类型、缺失值情况,data.describe()查看数值变量统计分布,提前处理缺失值或异常值; - 通过
datasets.anes96.NOTE查看数据集官方说明,明确变量含义(比如PID代表党派认同,selfLR代表自我意识形态定位),帮助合理选择特征与解读结果。
- 用
- 测试集性能评估:预测完成后,可结合测试集真实值评估模型泛化能力,例如计算均方误差:
from sklearn.metrics import mean_squared_error mse = mean_squared_error(test[y_var], predictions) print(f"测试集均方误差: {mse:.2f}") - 特征一致性保障:确保训练集与测试集的特征处理逻辑完全一致,比如统一添加常数项、选择相同特征列,避免因特征维度或顺序不一致引发错误。
内容的提问来源于stack exchange,提问作者Sarah DeCelie
相关产品推荐
相关产品推荐

