我有一个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
函数来解决它。但是,它没有帮助我。谁能解释我为什么收到此错误?怎么解决?
答案 0 :(得分: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
,而不是
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个尺寸。
我很高兴能有所帮助!