首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OLS回归python中的形状不对齐误差

OLS回归python中的形状不对齐误差
EN

Stack Overflow用户
提问于 2018-12-10 09:45:24
回答 1查看 16.8K关注 0票数 13

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

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

我的代码是:

代码语言:javascript
复制
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())`

运行以下命令时出现错误:

代码语言:javascript
复制
y_pred = result.predict(X_test)

我的X_train的形状是- (297,7)

我的X_test的形状是- (75,7)

dtypenumpy.ndarray

这个问题以前也有人问过。我跟踪了一些关于stackoverflow.com的文章,并试图使用reshape函数来解决这个问题。然而,它并没有帮助我。有人能解释我为什么会犯这个错误吗?解决办法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-12 18:01:51

model in line 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]]

奖金

我看你在用潘达斯图书馆。删除列的一个更好的做法是使用.drop而不是

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。

我很高兴它有帮助!

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53703009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档