ValueError:操作数无法与形状一起广播 - inverse_transform- Python
Posted
技术标签:
【中文标题】ValueError:操作数无法与形状一起广播 - inverse_transform- Python【英文标题】:ValueError: operands could not be broadcast together with shapes - inverse_transform- Python 【发布时间】:2018-02-01 11:22:18 【问题描述】:我知道ValueError
的问题已经被问了很多times。我仍在努力寻找答案,因为我在代码中使用了inverse_transform
。
假设我有一个数组a
a.shape
> (100,20)
还有另一个数组b
b.shape
> (100,3)
当我做np.concatenate
时,
hat = np.concatenate((a, b), axis=1)
现在hat
的形状是
hat.shape
(100,23)
在这之后,我尝试这样做,
inversed_hat = scaler.inverse_transform(hat)
当我这样做时,我收到一个错误:
ValueError: 操作数无法与形状 (100,23) (25,) (100,23) 一起广播
这是inverse_transform
中的广播错误吗?任何建议都会有所帮助。提前致谢!
【问题讨论】:
【参考方案1】:虽然您没有指定,但我假设您使用的是 scikit learn 的 。您需要先拟合数据。StandardScaler
中的 inverse_transform()
import numpy as np
from sklearn.preprocessing import MinMaxScaler
In [1]: arr_a = np.random.randn(5*3).reshape((5, 3))
In [2]: arr_b = np.random.randn(5*2).reshape((5, 2))
In [3]: arr = np.concatenate((arr_a, arr_b), axis=1)
In [4]: scaler = MinMaxScaler(feature_range=(0, 1)).fit(arr)
In [5]: scaler.inverse_transform(arr)
Out[5]:
array([[ 0.19981115, 0.34855509, -1.02999482, -1.61848816, -0.26005923],
[-0.81813499, 0.09873672, 1.53824716, -0.61643731, -0.70210801],
[-0.45077786, 0.31584348, 0.98219019, -1.51364126, 0.69791054],
[ 0.43664741, -0.16763207, -0.26148908, -2.13395823, 0.48079204],
[-0.37367434, -0.16067958, -3.20451107, -0.76465428, 1.09761543]])
In [6]: new_arr = scaler.inverse_transform(arr)
In [7]: new_arr.shape == arr.shape
Out[7]: True
【讨论】:
感谢您的回复,我知道,我应该提到,我使用了MinMaxScaler
。例如:scaler = MinMaxScaler(feature_range=(0, 1))
.
我试过你的答案,当我有fit
时它可以工作,但是我有fit_transform
它给出了一个错误AttributeError: 'numpy.ndarray' object has no attribute 'inverse_transform'
。我用fit_transform
。你知道为什么会这样吗?我正在搜索这个。
是的,fit_transform()
返回一个数据集,fit()
将生成一个对象,您可以从中调用其他方法。如果您阅读docs,您可以看到fit()
没有返回类型,而fit_transform()
返回一个numpy 数组。
谢谢!这很有帮助!我有一个类似的问题datascience.stackexchange.com/questions/22488/… 和这个tutel.me/c/programming/questions/42997228/…
@Jesse Ya 在这两个问题中,你需要做类似scaler = MinMaxScaler().fit(dataset)
的事情,然后扩展你的数据集,做scaled_data = scaler.transform(dataset)
,然后在你尝试做的时候做 inverse_transform , 做scaler.inverse_transform(inv_yhat)
【参考方案2】:
您似乎正在使用 sklearn.preprocessing 的预拟合 scaler 对象。 如果这是真的,根据我的说法,您用于拟合的数据是 (x,25) 维度,而您的数据形状是 (x,23) 维度,这就是您遇到此问题的原因。
【讨论】:
以上是关于ValueError:操作数无法与形状一起广播 - inverse_transform- Python的主要内容,如果未能解决你的问题,请参考以下文章
如何修复Tensorflow中的“ValueError:操作数无法与形状(2592,)(4,)一起广播”?
SpaCy - ValueError:操作数无法与形状一起广播(1,2)(1,5)
ValueError:操作数无法与形状一起广播 - inverse_transform- Python
ValueError:在进行加权预测时,操作数无法与形状 (7,) (624,3) 一起广播