OLS回归python中的形状未对齐错误

Posted

技术标签:

【中文标题】OLS回归python中的形状未对齐错误【英文标题】:Shape not aligned error in OLS Regression python 【发布时间】:2019-05-11 04:42:34 【问题描述】:

我有一个dataframe,我试图在其中运行statsmodel.api OLS 回归。 它正在打印摘要。但是当我使用 predict() 函数时,它给了我一个错误 -

形状 (75,7) 和 (6,) 未对齐:7 (dim 1) != 6 (dim 0)

我的代码是:

X = newdf.loc[:, newdf.columns != 'V-9'].values
y = newdf.iloc[:,3].values
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 
0.2,random_state=0)
import statsmodels.formula.api as sm
model = sm.OLS(y_train,X_train[:,[0,1,2,3,4,6]])
result = model.fit()
print(result.summary())`

运行时出错:

y_pred = result.predict(X_test)

我的X_train 的形状是 - (297,7) 我的 X_test 的形状是 - (75,7)dtypenumpy.ndarray

以前有人问过这个问题。我关注了 ***.com 上的一些帖子,并尝试使用 reshape 函数解决它。但是,它对我没有帮助。谁能解释我为什么会收到这个错误?解决办法是什么?

【问题讨论】:

你是不是故意漏掉了[0,1,2,3,4,6]中的5?因为这使您对回归的输入为 6 维,而您通过的 X_test 有 7 维,因此 7(dim1)!+6(dim0) 是的,我删除了第 5 个变量,因为它的 p 值大于 0.05。我希望模型有 6 个变量。但我的 X 测试应该包含所有 7 个变量。我该如何做到这一点? 然后试试y_pred = result.predict(X_test[:,[0,1,2,3,4,6]]) 感谢@D_Serg ..解决了我的问题!!请将其写为答案,以便我将其标记为“已接受的解决方案”并关闭问题。 【参考方案1】:

model 在行 model = sm.OLS(y_train,X_train[:,[0,1,2,3,4,6]]) 中,当以这种方式训练时,假设输入数据是 6 维的,因为删除了 X_train 的第 5 列。这要求测试数据(在本例中为 X_test)也是 6 维的。这就是y_pred = result.predict(X_test) 不起作用的原因,因为X_test 原本是7 维的。正确的解决方法是:

y_pred = result.predict(X_test[:, [0,1,2,3,4,6]]

奖金

我看到您正在使用 Pandas 库。删除列的更好做法是使用.drop so 而不是

newdf.loc[:, newdf.columns != 'V-9'].values

你可以使用

newdf.drop('V-9', axis=1) # axis=1 makes sure cols are dropped, not rows

同样代替

X_train[:,[0,1,2,3,4,6]]

你可以使用

X_train.drop(X_train.columns[5], axis=1) # this like dropping the 5th column of the dataFrame

这使得代码更具可读性和更容易编码,特别是如果您有 50 个维度而不是 7 个维度。

我很高兴它有帮助!

【讨论】:

以上是关于OLS回归python中的形状未对齐错误的主要内容,如果未能解决你的问题,请参考以下文章

在 SciKit 线性回归中获取“ValueError:形状未对齐”

线性回归器无法预测一组值;错误:ValueError:形状(100,1)和(2,1)未对齐:1(dim 1)!= 2(dim 0)

拟合多项式回归时形状未对齐

使用 statsmodels 忽略多个 OLS 回归中的缺失值

python statsmodels - 回归中的二次项

python/pandas 中的 MultinomialNB 在预测时返回“对象未对齐”错误