我有一个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函数来解决这个问题。然而,它并没有帮助我。有人能解释我为什么会犯这个错误吗?解决办法是什么?
发布于 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。
我很高兴它有帮助!
https://stackoverflow.com/questions/53703009
复制相似问题