【问题标题】:Sklearn linearregression.predict() gives a error of size diferenceSklearn linearregression.predict() 给出大小差异的误差
【发布时间】:2021-03-10 16:00:41
【问题描述】:

我正在尝试制作预测列表中下一个数字的线性回归模型。因此它创建了一个数组,将 60 个值存储到 x_train,下一个存储到 y_train。然后上移一个,将 60 个值存储到 x_train,下一个存储到 y_train。如此重复,直到完成了 80% 的数据集。拟合函数工作正常,但是当我使用 .predict() 函数和来自数据集的 60 x 值的新列表时,它返回此错误: ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 60 is different from 1) 我认为这来自形状问题。我试图重塑 pred_x 与:pred_x.reshape(60, 1) 但这仍然给出了同样的错误。

我的代码:

training_data_len = math.ceil(len(dataset) * .8)

train_data = dataset[0:training_data_len , :]
print(train_data)


x_train = []
y_train = []

for i in range(60, len(train_data)):
    x_train.append(train_data[i-60:i])
    y_train.append(train_data[i])

lr = LinearRegression()

nsamples, nx, ny = np.shape(x_train)
x_train = np.reshape(x_train, (nsamples, nx*ny))

lr.fit(x_train, y_train)

len_data = len(df)

pred_x = df[len_data-61:len_data-1]

pred_x = pred_x.values

prediction = lr.predict(pred_x)

print(prediction)

print(df[0])

【问题讨论】:

  • 你能发布一个可重现的例子吗?
  • 你试过pred_x.reshape(1,60)吗(我假设60 = nx*ny,但如果有一个可重复的样本来进一步帮助会很有用)
  • 感谢@piterbarg 以这种方式重塑解决了它。也许今天晚些时候我会发布一个可重现的样本,供其他遇到同样问题的人使用。
  • 酷。我将作为答案发布,因此其他人不需要阅读 cmets

标签: python scikit-learn


【解决方案1】:

您需要将在预测中使用的数据重新整形为与在训练中使用的相同数量的维度,并为您的“特征”维度(除“nsamples”维度之外的所有维度)使用相同的形状。据我所知,您的火车数据形状为(nsamples, nx*ny)nx*ny=60。如果你想基于 1 个样本进行预测,你应该重塑 pred_x 所以:pred_x.reshape(1,60)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-05
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    相关资源
    最近更新 更多