当我想通过使用inverse_transform
转换回原始形式时,我得到了以下错误:
X_train = []
y_train = []
for i in range(120, data_training.shape[0]):
X_train.append(data_training[i-120:i])
y_train.append(data_training[i,0])
X_train , y_train = np.array(X_train) , np.array(y_train)
X_train.shape , y_train.shape
((5377, 120, 15), (5377,))
train_pred=scaler.inverse_transform(train_pred) #error
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-44-2819933dc538> in <module>()
1 #Transformback to original form
----> 2 train_pred=scaler.inverse_transform(train_pred)
/usr/local/lib/python3.7/dist-packages/sklearn/preprocessing/_data.py in inverse_transform(self, X)
434 force_all_finite="allow-nan")
435
--> 436 X -= self.min_
437 X /= self.scale_
438 return X
ValueError: non-broadcastable output operand with shape (5377,1) doesn't match the broadcast shape (5377,15)
我刚开始接触人工智能,不明白这个错误意味着什么。
有人能解释一下它的意思和如何修复它吗?
2条答案
按热度按时间rn0zuynd1#
这个错误告诉你
NumPy
不能对这两个数组执行元素级操作。发生这种情况的原因是,如这里所述,
NumPy
使用了一组严格的规则:1.如果两个数组的维数不同,则维数较少的数组的形状在其前导(左)侧用1填充。
1.如果两个数组的形状在任何维度上都不匹配,则在该维度上形状等于1的数组将被拉伸以匹配另一个形状。
1.如果在任何维度中,大小不一致且都不等于1,则会引发错误。
由于数组的形状是
(5377,1)
和(5377,15)
-它们属于第二类,因此第一个数组(维度为(5377,1)
)被拉伸以适合形状为(5377,15)
的数组。然后,如
-=
所示,尝试将其重新赋给形状为(5377,1)
的对象,这会引发错误。你可以做的是:
使用
X = X - self.min_
代替X -= self.min_
:或者,如果
X
应保持初始形状(5377, 1)
,则可以对列求和:但是你应该从你所使用的算法的Angular 来考虑这个结果是否符合你的需要。
干杯
bfnvny8b2#
这个
train_pred
必须与你在其上拟合定标器的数据集具有相同的形状。要做inverse_transform
,你可以从你的定标器中提取所需的属性,并将它们应用到你的预测中。Here你有一个解释得很好的解决方案。