【问题标题】:scaling data to specific range in python在python中将数据缩放到特定范围
【发布时间】:2020-10-26 19:18:04
【问题描述】:

我想将大小为 [192,4000] 的数组缩放到特定范围。我希望将每一行(1:192)重新缩放到特定范围,例如(-840,840)。我运行了一个非常简单的代码:

import numpy as np
from sklearn import preprocessing as sp
sample_mat = np.random.randint(-840,840, size=(192, 4000))
scaler = sp.MinMaxScaler(feature_range=(-840,840))
scaler = scaler.fit(sample_mat)
scaled_mat= scaler.transform(sample_mat)

这会弄乱我的矩阵范围,即使我的原始矩阵的最大值和最小值完全相同。我不知道出了什么问题,有什么想法吗?

【问题讨论】:

标签: python scikit-learn normalization


【解决方案1】:

您可以手动执行此操作。 它是最小最大归一化数据的线性变换。

interval_min = -840
interval_max = 840
scaled_mat = (sample_mat - np.min(sample_mat) / (np.max(sample_mat) - np.min(sample_mat)) * (interval_max - interval_min) + interval_min

【讨论】:

  • 是的,这也有效,但我想知道 minmaxscaler 怎么会弄乱范围?
  • 对我来说,带有 feature_range 的 minmaxscaler 提供了正确的方法。但是,如果您的问题是并非每一行都缩放到您的间隔,那么这就是 minmaxscaler 的工作原理。它标准化你的整个矩阵,使矩阵内的比例保持不变。如果要单独规范化每一行,则必须为每一行安装一个缩放器,或者单独运行每一行的规范化。
猜你喜欢
  • 2019-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
相关资源
最近更新 更多