python - OLS回归python中的形状未对齐错误
问题描述
我有一个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)
dtype
是numpy.ndarray
这个问题以前有人问过。我关注了 stackoverflow.com 上的一些帖子,并尝试使用reshape
函数来解决它。但是,它对我没有帮助。谁能解释我为什么会收到这个错误?解决方案是什么?
解决方案
model
在 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]]
奖金
我看到你正在使用 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 个维度。
我很高兴它有帮助!
推荐阅读
- node.js - 使用 Node js 按周/月/年对文档进行分组
- javascript - React 输入 defaultValue 重新渲染
- flutter - 视频播放器中的颤振问题
- bash - Bash:使用 getopts 解析参数后的选项
- django - 分配前引用的 Django UnboundLocalError 局部变量“注册”
- powershell - Powershell 图形用户界面。从动态列表框中选择一个项目,随后从 Active Directory 中卸载用户信息
- c# - 如何在 WinForms 按钮的文本之前添加图像图标?
- docker - Docker多阶段不调用入口点
- wordpress - 收到一定数量的视图后如何在 WordPress 上隐藏内容
- python - 使用Django、python和vue axiox提交表单后重定向到主页