如何用Python进行线性回归以及误差分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用Python进行线性回归以及误差分析相关的知识,希望对你有一定的参考价值。
参考技术A 因变量是你自己确定的,一般主成分得分是作为自变量的,叫主成分回归分析如何处理多元线性回归中的误差维度?
【中文标题】如何处理多元线性回归中的误差维度?【英文标题】: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 进行预测时遇到了这个问题:
我的 X_train 有这个表格: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)
[[-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进行线性回归以及误差分析的主要内容,如果未能解决你的问题,请参考以下文章