MinMaxScaler 中scaler.inverse_transform不能反归一化正确的数据

这篇具有很好参考价值的文章主要介绍了MinMaxScaler 中scaler.inverse_transform不能反归一化正确的数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

起因

参考代码[时间序列预测]基于BP、RNN、LSTM、CNN-LSTM算法多特征(多影响因素)用电负荷预测[保姆级手把手教学]
他的源代码部分:
MinMaxScaler 中scaler.inverse_transform不能反归一化正确的数据

我的代码仿写部分:

# 将真实值标签进行反归一化操作
real = np.concatenate((test[16:, :-1], y_test), axis=1)#我猜这个-1只是为了让合并的列为5个,保持列维不变
print('contenate的归一化真实值real:\n',real)
print('======================================\n\n')
#3.反归一化
real = scaler.inverse_transform(real)#反归一化。反回来的最后一列就是不对???
real = real[:, -1]
print('反归一化第3列真实值real:\n',real)
real_1 = pd.DataFrame(real)
# real_1.to_csv('real-step11.27.csv')#真实标签值

# 将模型预测出的值进行反归一化操作
prediction = np.concatenate((test[16:, :-1], predicted), axis=1)#归一化后的值在列上的合并
# print('打印prediction:\n',prediction)
# print(prediction.shape)
prediction = scaler.inverse_transform(prediction)#反归一化
prediction = prediction[:,-1]
print('反归一化的第3列预测值:\n',prediction)
prediction_1 = pd.DataFrame(prediction)
# prediction_1.to_csv(('prediction-step11.27.csv'))#预测标签的值


对np.concatenate的理解

其中的np.concatenate就是拼接,按列拼接。
我拿个demo来解释一下:

import numpy as np

x=[[1,2,3],[2,3,4],[3,4,5]]
y=[['a'],['b'],['c']]

real = np.concatenate((x, y), axis=1)#拼接
print(real)
打印结果:
[['1' '2' '3' 'a']
 ['2' '3' '4' 'b']
 ['3' '4' '5' 'c']]

也就是从demo理解了我把y列加在了x上,并且是在最后列。
好,理解了这里,回到主题。先来看看我的 test[16:, :] 数据大概样子:

0,1,2,3,4#索引
37.9542,-123.8893,7.4,154.2,154
37.95203,-123.88796,7.7,152.7,154
37.94984,-123.88661,7.4,153.8,153
37.94767,-123.88525,7.4,152.1,155
37.94558,-123.88393,7.4,153.1,154
37.94342,-123.88258,7.5,154.6,156
37.94161,-123.88145,7,153.4,155
37.93982,-123.88034,7.1,151.9,154
37.93783,-123.87911,7.1,153.7,155

对应看这行代码:

prediction = np.concatenate((test[16:, :-1], predicted), axis=1)#归一化后的值在列上的合并

为啥写成test[16:, :-1],就去掉了最后一列特征,然后最后拼接上预测得到的predicted一列,才能反归一化?下面给出了相关解答。 就是保证我归一化时输入的5个特征列,那么我反归一化也要保证为5个特征列,这样代码不会报错。

相关解答:

1.MinMaxScaler 中scaler.inverse_transform不能反归一化正确的数据2.
‘由于归一化是按列进行的,scaler会对每一列生成用于放缩的属性,所以在反归一化时,需要输入数据维度和原数据维度相同。’


关于MinMaxScaler的反归一化inverse_transform的理解

那么在维度问题上我们解决了前后一致,接着看下面:

prediction = scaler.inverse_transform(prediction)#反归一化
prediction = prediction[:,-1]
print('反归一化的第3列预测值:\n',prediction)

代码中看到inverse_transform反归一化刚才合并的prediction。prediction[:,-1],就是把合并后的最后列给到我要反归一化的列然后打印出来,发现并不是第3列(特征3)的相关的值,很大很离谱的值。

我找了很久问题,只是理解了归一化和返归一化的维度问题,却忽略了返回一化之前要把预测的归一化数据放回原来的位置。在这篇博文里我受到了启发【关于归一化与反归一化数据统一的问题】:训练集与测试集必须使用同一参数的归一化与反归一化,我圈出来的地方就是我理解到的:
MinMaxScaler 中scaler.inverse_transform不能反归一化正确的数据

再回归我的代码。就是说我不是拼接在最后,我是要用预测的值换掉原来输入的位置上的值,我拼接出来的其实是占据了第5个特征的位置,所以返回的值不对,正确的我要反归一化第3列的值,我就把预测的放回第3列。

更正后的代码:

# 将真实值标签进行反归一化操作
#1.查看test[16:,2]和y_test的shape
print(test[16:,2].shape,y_test.shape)#查看一下替换的维度。
#2.y_test改成和test[16:,2]一样的维度
y_test= np.reshape(y_test,(y_test.shape[0],))
print('更改维度后的y_test:\n',y_test)
#3.再把y_test替换test[16:,2]
test[16:,2]=y_test

real = test[16:,:]
print('归一化后的真实值real:\n',real)
print('======================================\n\n')
#3.反归一化
real = scaler.inverse_transform(real)#反归一化。反回来的最后一列就是不对
'由于归一化是按列进行的,scaler会对每一列生成用于放缩的属性,所以在反归一化时,需要输入数据维度和原数据维度相同。'
real = real[:,2]
print('反归一化后的真实值real:\n',real)
real_1 = pd.DataFrame(real)
real_1.to_csv('real11.29.csv')#真实标签值


# 将预测值标签进行反归一化操作,方便后续和真实值进行对比
#1.查看test[16:,2]和y_test的shape
print(test[16:,2].shape,predicted.shape)#查看一下替换的维度。
#2.y_test改成和test[16:,2]一样的维度
prediction = np.reshape(predicted,(predicted.shape[0],))
print('更改维度后的y_test:\n',prediction )
#3.再把y_test替换test[16:,2]
test[16:,2]=prediction

prediction= test[16:,:]
print('归一化后的预测值prediction:\n',prediction)
print('======================================\n\n')
#3.反归一化
prediction = scaler.inverse_transform(prediction)#反归一化
prediction = prediction[:,2]
print('反归一化后的预测值prediction:\n',prediction)
prediction_1 = pd.DataFrame(prediction)
prediction_1.to_csv('prediction11.29.csv')#真实标签值```

最后可视化一下:
MinMaxScaler 中scaler.inverse_transform不能反归一化正确的数据
预测评价指标:指标不高,但返回来的值是对的了。
R2:0.84535
MAE:0.17494
RMSE:0.22439


后续

这个问题真的困扰了几天,解决了。

1.环境

我的环境是python3.6+tensorflow2.4.0+keras2.4.3,另外一个python3.8+tensorflow2.4.0+keras2.4.3也能用。

2.无效尝试
1)[使用MinMaxScaler 中scaler.inverse_transform不能返回原来数据的原因](https://blog.csdn.net/llllwwsasa12345/article/details/123768063)

2)还有训练是.fit_transform,测试改为.transform,没有用。

3.demo理解反归一化

sklearn MinMaxScaler对某一个特征反归一化文章来源地址https://www.toymoban.com/news/detail-421831.html

到了这里,关于MinMaxScaler 中scaler.inverse_transform不能反归一化正确的数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【机器学习】进阶学习:详细解析Sklearn中的MinMaxScaler---原理、应用、源码与注意事项

    【机器学习】进阶学习:详细解析Sklearn中的MinMaxScaler—原理、应用、源码与注意事项 这篇文章的质量分达到了 97分 ,虽然满分是100分,但已经相当接近完美了。 请您耐心阅读,我相信您一定能从中获得不少宝贵的收获和启发~ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matp

    2024年03月12日
    浏览(55)
  • 【SOEE3250】Inverse Theory

    Q1. A racing car needs to be assessed for performance. In a time trial, measurements are made of its position at a series of times. Assuming that the car has (unknown) constant acceleration a     and (unknown) initial speed u  and (known) zero initial position, the task is to fit the mathematical model x = ut + ½ at 2 , where x is the distance travelled

    2024年01月21日
    浏览(33)
  • 创宇区块链|Inverse Finance 安全事件分析

    北京时间 2022 年 4 月 2 日晚,Inverse Finance 借贷协议遭到攻击,损失约 1560 万美元。知道创宇区块链安全实验室第一时间跟踪本次事件并分析。 基础信息 攻击tx1:0x20a6dcff06a791a7f8be9f423053ce8caee3f9eecc31df32445fc98d4ccd8365 攻击tx2:0x600373f67521324c8068cfd025f121a0843d57ec813411661b07edc5ff781842 攻

    2023年04月08日
    浏览(38)
  • Textual Inversion: 一种精调Stable Diffusion模型的方法

    最近的文本到图像Stable Diffusion (SD)模型已经证明了使用文本提示合成新颖场景的前所未有的能力。这些文本到图像的模型提供了通过自然语言指导创作的自由。然而,它们的使用受到用户描述特定或独特场景、艺术创作或新物理产品的能力的限制。很多时候,用户被迫行使

    2024年02月03日
    浏览(44)
  • 乘法逆元(inverse element)及四大相关求法详解(含证明)

    知识的补缺是老生常谈的一大问题,随着自身学习进程的推进,越发觉着逆元知识的重要,故此我站在网上各路大牛的肩膀上,对此知识进行一定程度上的系统梳理。如有不足之处,还请大家指出,大家共同进步,互利共赢 !! 先呈上菜: 很明显,上述式子只有一条不成立

    2023年04月15日
    浏览(34)
  • MATLAB - 机器人逆运动学设计器(Inverse Kinematics Designer APP)

          通过逆运动学设计器,您可以为 URDF 机器人模型设计逆运动学求解器。您可以调整逆运动学求解器并添加约束条件,以实现所需的行为。使用该程序,您可以 从 URDF 文件或 MATLAB 工作区导入 URDF 机器人模型。 调整逆运动学求解器和约束条件。 创建关节配置并导出航点

    2024年04月14日
    浏览(29)
  • 机器人——正向运动学(Forward Kinematics)与逆向运动学(Inverse Kinematics)

    正向运动学和反向运动学分别是什么意思 正向运动学是指从机器人的关节运动推导出末端执行器的运动的过程,也就是从机器人的关节坐标计算出末端执行器的位置和姿态信息的过程。反向运动学则是指从末端执行器的位置和姿态信息推导出机器人的关节坐标的过程。简单来

    2024年02月16日
    浏览(45)
  • Solving 3D Inverse Problems using Pre-trained 2D Diffusion Models

    论文链接:https://arxiv.org/abs/2211.10655 GitHub链接:https://github.com/HJ-harry/DiffusionMBIR 【score-MRI作者】 扩散模型已成为具有高质量样本的新的艺术生成模型,具有模式覆盖和高灵活性等有趣的特性。它们也被证明是有效的逆问题求解器,充当分布的先验,而正演模型的信息可以在采

    2024年02月09日
    浏览(43)
  • 论文学习记录之SeisInvNet(Deep-Learning Inversion of Seismic Data)

    目录 1 INTRODUCTION—介绍 2 RELATED WORKS—相关作品 3 METHODOLOGY AND IMPLEMENTATION—方法和执行 3.1 方法 3.2 执行 4 EXPERIMENTS—实验 4.1 数据集准备 4.2 实验设置 4.3 基线模型 4.4 定向比较 4.5 定量比较 4.6 机理研究 5 CONCLUSION—结论           地震勘探是根据地震波在大地中的传播规律来

    2024年01月19日
    浏览(46)
  • 【反渲染高斯】GS-IR: 3D Gaussian Splatting for Inverse Rendering

    会有自己的理解PS,不保证正确,欢迎评论中指出错误。 我们提出了一种基于3D高斯溅射(GS)的新型反向渲染方法GS-IR,它利用前向映射体渲染forward mapping volume rendering来实现逼真的新视图合成和重照明结果。与先前使用隐式神经表征和体绘制(例如NeRF)的工作不同,这些工作具有

    2024年02月19日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包