有没有像「scaler.inverse_transform()」这样的方法来获取部分缩放器参数来反规范化答案?

Posted

技术标签:

【中文标题】有没有像「scaler.inverse_transform()」这样的方法来获取部分缩放器参数来反规范化答案?【英文标题】:Is there any method like 「scaler.inverse_transform()」to get partial scaler params to de-normalize the answer? 【发布时间】:2020-04-16 12:16:42 【问题描述】:

我正在尝试标准化我的数据(形状为 (23687,7)),然后将原始数据集的均值和标准差保存到 "normalized_pa​​ram.pkl"

将归一化数据拟合到我的 LSTM 模型后,我会得到一个答案数组(形状为 (23687, 1)

现在我要做的是:

test_sc_path = os.path.join('normalized_standard', 'normalized_param.pkl')
test_scaler = load(test_sc_path)
test_denorm_value = test_scaler.inverse_transform(test_normalized_data)

ValueError:形状为 (23687,1) 的不可广播输出操作数与广播形状 (23687,7) 不匹配


我认为这是因为 test_scaler 对象内部有 7 个 dim 参数,所以如果我只想对 1 个 dim 数据进行反规范化,我应该使用 test_scaler.mean_[-1]and「test_scaler.scale_[-1]获取我要计算的最后一个参数。 不过我觉得挺复杂的,有没有像scaler.inverse_transform()这样的sklearn方法可以轻松解决这个问题?

谢谢

【问题讨论】:

【参考方案1】:

是的,有一种方法。请参阅文档here。

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

scaler.fit(data) # Basically fits the data, store means & standard deviations.
scaler.transform(data) # Standardize (Normalize) the data with the scaler parameters
scaler.fit_transform(data) # Fits & Transform 
scaler.inverse_transform(data) # Apply inverse transformation for the input data.

【讨论】:

谢谢,但我认为这不是我想问的。我知道你提到的方法。就我而言,我的 input_data 有 7 个属性,但我的 predict_data(output) 只有 1 个属性。因此,当我对训练数据进行归一化并保存 StandardScaler() 时,它实际上保存了 7 个属性。在另一个过程中,我加载 StandardScaler() 并规范化 test_data。将其拟合到模型后,我将得到只有 1 个属性的预测。现在,我想对预测进行反规范化,我不能直接使用scaler.fit_transform(data),因为该方法应该适合 7 个属性。 我明白了,让我们分开 X(预测变量)和 y(目标),现在用 StandardScaler() 分别缩放 X 和 y,然后如果你将 inverse_transform 与“y 缩放器”一起应用,它应该可以它。基本上,如果目标变量 y 在 7 个属性中,则将其拆分。

以上是关于有没有像「scaler.inverse_transform()」这样的方法来获取部分缩放器参数来反规范化答案?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法以更像咖啡脚本的方式扩展原型?

有没有像“cvHoughCircles()”这样的opencv函数来进行正方形检测?

UIGestureRecognizer 状态。为啥没有像“空闲”这样的状态?

有没有像 DBus 那样具有信号功能的 RPC 框架?

有没有可以像 Telnet 一样使用的 REST api

android上有没有像fiddler或wireshark这样的http代理?