【问题标题】:How to deal with error dimension in multiple linear regression?如何处理多元线性回归中的误差维度?
【发布时间】:2020-09-14 05:42:51
【问题描述】:

我正在尝试使用 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)

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

ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 2 is different from 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.shape 带给你什么?
  • @AmiTavory 它给了我 (1300, 1)
  • 看我的回答!正如我所说,您的尺寸不匹配。

标签: python scikit-learn regression data-science linear-regression


【解决方案1】:

尺寸不匹配。

您的维度不兼容,因为 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]]

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

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

ValueError: matmul: Input operand 1 has a mismatch in its core 维度 0,带有 gufunc 签名 (n?,k),(k,m?)->(n?,m?) (大小 2 是 不同于 1)

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


【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 2020-03-06
      • 2021-10-28
      • 2013-07-17
      • 2020-09-07
      相关资源
      最近更新 更多