OLS 回归中的形状未对齐错误 python
Shape not aligned error in OLS Regression python
我有一个 dataframe
,我正在尝试 运行 statsmodel.api
OLS 回归。
它正在打印摘要。但是当我使用 predict()
函数时,它给我一个错误 -
shapes (75,7) and (6,) not aligned: 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
这个问题之前有人问过。我关注了 whosebug.com 上的一些帖子并尝试使用 reshape
函数解决它。但是,它没有帮助我。谁能解释为什么我会收到此错误?解决方案是什么?
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 个维度时。
很高兴对您有所帮助!
我有一个 dataframe
,我正在尝试 运行 statsmodel.api
OLS 回归。
它正在打印摘要。但是当我使用 predict()
函数时,它给我一个错误 -
shapes (75,7) and (6,) not aligned: 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
这个问题之前有人问过。我关注了 whosebug.com 上的一些帖子并尝试使用 reshape
函数解决它。但是,它没有帮助我。谁能解释为什么我会收到此错误?解决方案是什么?
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 个维度时。
很高兴对您有所帮助!