首页 > 解决方案 > MinMaxScaler 用于 fit 和 inverse_transform 中的不同形状

问题描述

我正在使用MinMaxScalerfromsklearn将输入缩放为介于两者之间的值01然后处理数据以获得另一个向量。我使用inverse_transform获得的向量来取回原始范围内的值。输入的形状和输入的形状fit_transforminverse_transform不同的。作为 MWE,我提供了以下代码。

import numpy as np
from sklearn.preprocessing import MinMaxScaler

sc = MinMaxScaler(feature_range=(0, 1))
a = np.random.randint(0, 10, (10, 5))
b = sc.fit_transform(a) # b values are in [0, 1] range
c = np.random.rand(10, 30) # as an example, I have generated values between 0 and 1
d = sc.inverse_transform(c)

我遇到了错误

ValueError:操作数无法与形状一起广播 (10,30) (5,) (10,30)

我知道这是因为形状不匹配。但是我的实际代码中输入的形状是固定的,不能改变(而且彼此也不同)。我怎样才能让它工作?任何帮助表示赞赏。

标签: pythonnumpyscikit-learn

解决方案


您正在使用的内容为您作为输入提供的 5 个列向量中的每一个学习不同的变换。我猜您可能想学习固定变换。我想你可以通过向量化矩阵来实现它。我建议以下

mean = a.mean()
std = a.std()
# Transform
b = (a - mean) / std
# Inverse transform
c = np.random.rand(10, 30)
d = c * std + mean

推荐阅读