多元线性回归中的误差维度如何处理?



我正在尝试使用 sklearn 进行多元线性回归。

features_2 = ['chronic_disease_binary', 'outcome']
X = df.loc[:, features_2].values
Y = df.loc[:, ['age']].values
# X = pd.get_dummies(X,drop_first=True)
#
X_train_lm, X_test_lm, y_train_lm, y_test_lm = create_dataset_test(X, Y)
X_train_lm = X_train_lm.reshape((2596, -1))
lm = linear_model.LinearRegression()
model = lm.fit(X_train_lm, y_train_lm)
y_pred_lm = lm.predict(X_test_lm)

当我尝试对X_test进行 tp 预测时,我遇到了这个问题:

ValueError: matmul: 输入操作数 1 的核心维度 0 不匹配,具有 gufunc 签名 (n?,k(,(k,m?(->(n?,m?(尺寸 2 与 1 不同(

  • 我的X_train有这个形式:
[[-0.77046461  1.29791815]
[-0.77046461 -0.77046461]
[-0.77046461  1.29791815]
...
[-0.77046461 -0.77046461]
[-0.77046461  1.29791815]
[-0.77046461 -0.77046461]]
  • 我的y_train是这样的:
[[59.]
[54.]
[40.]
...
[24.]
[33.]
[41.]]
  • 我进行预测的数据具有以下形式:
[[-0.76666002]
[ 1.30435914]
[-0.76666002]
...
[-0.76666002]
[-0.76666002]
[-0.76666002]]

维度不匹配。

您的维度不兼容,因为X_test_lm有 N(行数(样本,但与X_train的形状相比,只有 1(列数(特征/变量。


详:

您的X_train为:

[[-0.77046461  1.29791815]
[-0.77046461 -0.77046461]
[-0.77046461  1.29791815]
...
[-0.77046461 -0.77046461]
[-0.77046461  1.29791815]
[-0.77046461 -0.77046461]]

因此,该模型在具有 2(列数(特征/变量的 N(行数(样本上训练。

然后,当您要求预测:

[[-0.76666002]
[ 1.30435914]
[-0.76666002]
...
[-0.76666002]
[-0.76666002]
[-0.76666002]]

您有不兼容的 Dimesnions,因为X_test_lm再次具有 N(行数(样本,但这次只有 1(列数(特征/变量。

但是,模型的predict函数需要输入形状为 [N,2] 的数组,并且您会得到:

值错误:matmul:输入操作数 1 的核心不匹配 维度 0,具有 Gufunc 签名 (n?,k(,(k,m?(->(n?,m?(尺寸 2 是 不同于 1(

正如您所说,X_test_lm.shape是 (1300, 1(,因此模型试图预测这 1300 个样本的值,这些样本只有一个特征 (1(。这就是触发错误的原因。该模型使用形状为 [N,2]而不是[N,1] 的X_train进行训练。


由于X_test_lm.shape的值是(1300, 1),这意味着它只有 1 列,而不是 2 列作为训练数据。在训练数据上训练的 beta 向量需要一个包含 2 列的矩阵,这给出了错误。

您应该检查create_dataset_test的定义,看看您是如何达到这种状态的。

最新更新