Numpy:逆变换不同大小的数组

时间:2017-02-21 02:23:21

标签: python numpy

我试图让我的数据正常化,对其进行一些工作然后再将其更改。在进行inverse_transform时,我必须始终传递与fit_transform时完全相同的形状吗?下面的代码将给我一个"不可广播的输出操作数,其形状(3,1)与广播形状(3,3)不匹配"

import numpy as np
from sklearn.preprocessing import MinMaxScaler

first = np.array([[  1.2345, 1.220000,1.26245],
 [  1.234,1.220000,7.0901],
 [  1.23450,1.22000,1.14795]])

scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(first)
new_dataset = dataset[:,:1]
trainPredict2 = scaler.inverse_transform(new_dataset)

1 个答案:

答案 0 :(得分:0)

您不必传递具有完全相同形状的数据集,但列数必须与原始数据集匹配,因为每行都被解释为记录,并且每列都被解释为要素。从技术上讲,您不能错过测试数据集的功能。因此,例如,切片行仍然有效:

new_dataset = dataset[:1,:]
trainPredict2 = scaler.inverse_transform(new_dataset)

这将返回原始数据集的第一行:

trainPredict2
# array([[ 1.2345 ,  1.22   ,  1.26245]])

如果您确实要反转一个或两个要素,可以通过反转最小 - 最大转换x′:=(x−xmin)/(xmax−xmin)公式来计算:

scaler.data_range_[:1] * dataset[:,:1] + scaler.data_min_[:1]
# array([[ 1.2345],
#        [ 1.234 ],
#        [ 1.2345]])

这将返回原始数据集的第一列。