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

Posted

技术标签:

【中文标题】如何处理多元线性回归中的误差维度?【英文标题】: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) 看我的回答!正如我所说,您的尺寸不匹配。 【参考方案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 的定义,看看您是如何进入这种状态的。

【讨论】:

以上是关于如何处理多元线性回归中的误差维度?的主要内容,如果未能解决你的问题,请参考以下文章

如何用Python进行线性回归以及误差分析

如何用Python进行线性回归以及误差分析

如何用Python进行线性回归以及误差分析

时间序列预测多元线性回归模型

多元线性回归中自变量减少预测误差变大回归平方怎么变化

使用 scikit-learn (sklearn),如何处理线性回归的缺失数据?