numpy ValueError:操作数无法与形状一起广播- inverse_transform- Python

nc1teljy  于 2023-03-23  发布在  Python
关注(0)|答案(3)|浏览(183)

我知道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中的广播错误吗?任何建议都将有所帮助。提前感谢!

pbwdgjma

pbwdgjma1#

虽然你没有具体说明,但我假设你使用的是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
yzckvree

yzckvree2#

这里的问题是,缩放器没有执行“逆”函数所需的原始数据信息。缩放器对象跟踪执行逆变换所需的信息。当使用拟合函数将缩放器拟合到数据集时()方法,定标器计算统计数据(例如StandardScaler的均值和方差或MinMaxScaler的最小值和最大值)并将它们存储在其内部状态中。

1dkrff03

1dkrff033#

看起来你正在使用sklearn. preprocessing的pre-fitscaler对象。如果是真的,根据我的说法,你用于拟合的数据是(x,25)维,而你的数据形状是(x,23)维,这就是你遇到这个问题的原因。

相关问题