有没有像「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_param.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函数来进行正方形检测?