我有一个这样的输入特征数据集:[81.2819,5636.209677,9957.279495],上面是我的神经网络的三个输入特征。假设我的整个数据集的大小是:(10,000 x 3)。当我使用以下代码行缩放整个数据集时:
scaler = preprocessing.MinMaxScaler()scaled_ds = scaler.fit_transform(dataset)
一切正常。但是当我只缩放像上面那样的单行数据时,我得到的是零,如下所示:
array([[0., 0., 0.]])
你们能解释这是为什么吗?
回答:
根据文档:
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))X_scaled = X_std * (max - min) + min
因此,对于单个样本,X.min 与 X.max 重合,导致范围为零。处理零除法反过来导致你的 X_scaled 为零。
这应该可以解释为什么特征缩放不能在单个数据样本上定义。另一方面,如果你已经拟合了你的数据集,并且只想转换一个新示例,你需要使用:
scaled_sample = scaler.transform(sample)
即,只使用预先获得的 min/max 值,而不是尝试拟合新的值。