当前位置: 首页 > news >正文

利用字典对归一化后的数据0误差还原

  • 假设我对精度要求很高,高到无法容忍有任何误差,那么我先将x按照大小排序,然后归一化,用字典将归一化前后的x存储下来,在深度学习时使用归一化后的x进行处理,但是最后画图等处理时,我用字典取出归一化之前对应的值。

思路:x = [3, 4, 5, 1, 2, 3],先排序,然后用scaler = StandardScaler()
x_scaled = scaler.fit_transform(x.reshape(-1, 1))
这种方法归一化得到结果, 然后采用1个字典,能存储归一化之后的值:归一化之前的值,这种字典,以及归一化之前的值:归一化之后的值这种字典。

首先,将 x 数组排序并使用 StandardScaler 进行归一化。接着,创建两个字典:

  1. 归一化后的值:归一化之前的值scaled_to_original
  2. 归一化之前的值:归一化之后的值original_to_scaled

下面是实现的示例代码:

import numpy as np
from sklearn.preprocessing import StandardScaler# 原始数据
x = np.array([3, 4, 5, 1, 2, 3])# 排序数据
x_sorted = np.sort(x)# 使用 StandardScaler 进行归一化
scaler = StandardScaler()
x_scaled = scaler.fit_transform(x_sorted.reshape(-1, 1)).flatten()# 创建字典存储归一化值到原始值的映射
scaled_to_original = {scaled: original for scaled, original in zip(x_scaled, x_sorted)}# 创建字典存储原始值到归一化值的映射
original_to_scaled = {original: scaled for original, scaled in zip(x_sorted, x_scaled)}# 打印结果
print("归一化后的值:归一化之前的值 字典:", scaled_to_original)
print("归一化之前的值:归一化后的值 字典:", original_to_scaled)# 示例:使用归一化值查找原始值
example_scaled_value = x_scaled[0]
example_original_value = scaled_to_original[example_scaled_value]
print(f"归一化值 {example_scaled_value} 对应的原始值: {example_original_value}")# 示例:使用原始值查找归一化值
example_original_value = 3
example_scaled_value = original_to_scaled[example_original_value]
print(f"原始值 {example_original_value} 对应的归一化值: {example_scaled_value}")

代码说明

  1. 数据排序x_sorted = np.sort(x) 会将 x 中的元素排序。
  2. 归一化scaler.fit_transform() 方法对排序后的数据进行标准化,返回标准化后的结果。
  3. 字典生成
    • scaled_to_original 字典将归一化后的值作为键,原始值作为值。
    • original_to_scaled 字典将原始值作为键,归一化后的值作为值。

运行结果

当运行上述代码时,输出结果会显示两个字典的内容,并且可以通过这两个字典进行值的查找。

示例输出

输出结果:

归一化后的值:归一化之前的值 字典: {-1.5491933384829668: 1, -0.7745966692414834: 2, 0.0: 3, 0.7745966692414834: 4, 1.5491933384829668: 5}
归一化之前的值:归一化后的值 字典: {1: -1.5491933384829668, 2: -0.7745966692414834, 3: 0.0, 4: 0.7745966692414834, 5: 1.5491933384829668}
归一化值 -1.5491933384829668 对应的原始值: 1
原始值 3 对应的归一化值: 0.0

由于 3x 中出现了两次,因此在字典中将其映射到的归一化值是相同的。


  • 一个宽松的版本
  1. 使用插值方法:可以使用线性插值来获取最接近的原始值,而不是严格寻找对应的值。
  2. 确保预测值在范围内:确保生成的 predicted_normalized 值确实在归一化范围内。

以下是采用线性插值的实现方式:

示例代码

import numpy as np
from sklearn.preprocessing import MinMaxScaler
from scipy.interpolate import interp1d# 生成数据
x = np.random.rand(100) * 100  # 生成100个随机数,范围在0到100之间# 创建 MinMaxScaler 对象
scaler = MinMaxScaler()# 对数据进行排序
x_sorted = np.sort(x)# 归一化数据
x_normalized = scaler.fit_transform(x_sorted.reshape(-1, 1)).flatten()# 创建字典存储原始值与归一化值的对应关系
value_map = {original: normalized for original, normalized in zip(x_sorted, x_normalized)}# 深度学习模型处理(示例代码省略)# 假设预测的归一化值为 predicted_normalized
predicted_normalized = np.random.rand(10)  # 示例:10个随机生成的归一化值# 使用插值来反归一化
# 创建插值函数
interp_function = interp1d(x_normalized, x_sorted, bounds_error=False, fill_value="extrapolate")# 获取对应的原始值
predicted_original = interp_function(predicted_normalized)print("归一化后的预测值:", predicted_normalized)
print("对应的原始值:", predicted_original)

输出

归一化后的预测值: [0.01215447 0.96987883 0.04315991 0.89114311 0.52770111 0.99296480.07379656 0.55385428 0.96930254 0.52309784]
对应的原始值: [ 2.27449952 96.09964077  5.31200141 88.38615894 52.78092728 98.361298158.31337469 55.34306884 96.04318341 52.32996038]

说明

  • 插值函数interp1dscipy.interpolate 中导入,可以根据归一化值计算相应的原始值。通过设置 bounds_error=Falsefill_value="extrapolate",可以处理在 value_map.values() 中找不到的值(即插值和外推)。通过使用插值技术,可以避免在查找字典中直接索引可能不存在的归一化值,从而确保代码的健壮性和有效性。
  • 适用性:这种方法适用于在归一化数据中查找最接近的原始值,确保获得合理的输出,而不是直接找不到值时导致错误。

相关文章:

利用字典对归一化后的数据0误差还原

假设我对精度要求很高,高到无法容忍有任何误差,那么我先将x按照大小排序,然后归一化,用字典将归一化前后的x存储下来,在深度学习时使用归一化后的x进行处理,但是最后画图等处理时,我用字典取出归…...

HarmonyOS:UIAbility组件概述

一、概述 UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。 UIAbility的设计理念: 原生支持应用组件级的跨端迁移和多端协同。支持多设备和多窗口形态。 UIAbility划分原则与建议: UIAbility组件是系统调度的基本单元&#xff0c…...

12寸半导体厂说的华夫区是什么意思

1\什么是华夫板 在半导体行业中,“华夫区”通常指的是“华夫板”(Waffle Slab),这是一种特殊设计的楼板,其表面具有许多均匀分布的孔洞,这些孔洞形成了回风通道,用于电子芯片厂房等对空气洁净度有极高要求的环境。华夫板的设计和施工对于保证洁净室的功能发挥至关重要。…...

数据结构之链式结构二叉树的实现(进阶版)

本篇文章主要讲解链式二叉树的层序遍历以及判断是否为一棵完全二叉树 二者将会用到之前学过的队列知识,是将队列和二叉树的整合 一、如何将之前已经写好的文件加入当前的编译界面 如图所示,打开我们需要加入文件所在的文件夹,找到我们要加…...

【高等数学】3-2多元函数积分学

1. 二重积分 可以想象你有一块不规则的平面薄板,它在一个平面区域上。二重积分就是用来求这个薄板的质量(假设薄板的面密度函数是)。 把区域划分成许多非常小的小方块(类似于把一块地划分成很多小格子),在每个小方块上,密度近似看成是一个常数,然后把每个小方块的质量加…...

【传知代码】智慧医疗:纹理特征VS卷积特征

🍑个人主页:Jupiter. 🚀 所属专栏:传知代码 欢迎大家点赞收藏评论😊 目录 论文概述纹理特征和深度卷积特征算法流程数据预处理方法纹理特征提取深度卷积特征提取分类网络搭建代码复现BLS_Model.py文件——分类器搭建py…...

Python-创建并调用自定义文件中的模块/函数

背景:在Python编程中,我们常常需要创建自己的专属文件,以便帮助我们更高效,快捷地完成任务。那么在Python中我们怎么创建并调用自己文件中的模块/函数呢? 在Python中调用自定义文件,通常是指调用自己编写的Python模块…...

Kali Linux

起源与背景 Kali Linux是一个基于Debian的开源Linux发行版,专门为信息安全工作者和渗透测试员设计。它是由Offensive Security Ltd.开发和维护的,作为BackTrack的继承者而诞生。BackTrack是一个流行的安全测试发行版,但为了提供更好的支持和…...

DiffusionDet: Diffusion Model for Object Detection—用于对象检测的扩散模型论文解析

DiffusionDet: Diffusion Model for Object Detection—用于对象检测的扩散模型论文解析 这是一篇发表在CVPR 2023的一篇论文,因为自己本身的研究方向是目标跟踪,之前看了一点使用扩散模型进行多跟踪的论文,里面提到了DiffusionDet因此学习一…...

深度学习基础知识-编解码结构理论超详细讲解

编解码结构(Encoder-Decoder)是一种应用广泛且高效的神经网络架构,最早用于序列到序列(Seq2Seq)任务,如机器翻译、图像生成、文本生成等。随着深度学习的发展,编解码结构不断演变出多种模型变体…...

探讨Java深搜算法的学习笔记

大家好,我是 V 哥。深度优先搜索(DFS)是一种图遍历算法,它优先深入到某条路径的尽头,再回溯到前一个节点继续探索其他路径,直到找到目标或遍历完整个图。DFS的应用场景广泛,可以用于路径搜索、连…...

408——操作系统(持续更新)

文章目录 一、操作系统的概念及特征1.1 计算机系统的概念1.2 操作系统的基本特征 二、操作系统的功能和接口2.1 操作系统作为计算机资源的管理者2.2 操作系统作为用户和计算机硬件系统之间的接口2.3 操作系统实现对计算机资源的扩充 三、操作系统的发展和分类四、操作系统的运行…...

架构师之路-学渣到学霸历程-37

Nginx的热部署实验 本次分享的就是nginx的升级以及降级,实验中其实很多操作都需要理解,实际操作不难,但是需要全面理解这个动作,敲这个命令是用来干什么的?借着这个笔记可以试一下;go~! 1、ng…...

CSRF与SSRF

csrf(跨站请求伪造)的原理: csrf全称是跨站请求伪造(cross-site request forgery),也被称为one-click attack 或者 session riding scrf攻击利用网站对于用户网页浏览器的信任,劫持用户当前已登录的web应用程序,去执行分用户本意的操作。 利…...

RabbitMQ 存储机制

一、消息存储机制 不管是持久化的消息还是非持久化的消息都可以被写入到磁盘。持久化的消息在到达队列时就被写入到磁盘,非持久化的消息一般只保存在内存中,在内存吃紧的时候会被换入到磁盘中,以节省内存空间。这两种类型的消息的落盘处理都…...

【Java SE】类型转换

类型转换是将一个值从一种类型转换为另一种类型的过程。该过程如果从低精度数据类型转为高精度数据类型,则不会发生溢出并且总能成功,如果从高精度数据类型转为低精度数据类型,则会有信息丢失且可能失败。类型转换又可分为隐式转换和显式转换…...

JAVA:常见 JSON 库的技术详解

1、简述 在现代应用开发中,JSON(JavaScript Object Notation)已成为数据交换的标准格式。Java 提供了多种方式将对象转换为 JSON 或从 JSON 转换为对象,常见的库包括 Jackson、Gson 和 org.json。本文将介绍几种常用的 JSON 处理…...

Redis缓存击穿、雪崩、穿透解决方案

Redis 缓存击穿、雪崩、穿透解决方案 1、首先看看逻辑方面是否还有优化空间,正常流程查询redis中获取不到数据,则去数据库获取,但数据库查询并返回时,调用异步方法,将该数据存储进redis中,并设置一个较短的…...

C++ 优先算法——盛最多水的容器(双指针)

目录 题目:盛最多水的容器 1. 题目解析 2. 算法原理 3. 代码实现 题目:盛最多水的容器 1. 题目解析 题目截图: 如图所示: 水的高度一定是由较低的那条线的高度决定的:例1图中,是由7决定的,然后求出…...

blender 小车建模 建模 学习笔记

一、学习blender视频教程链接 案例4:狂奔的小车_建模_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Bt4y1E7qn?p14&spm_id_from333.788.videopod.episodes&vd_sourced0ea58f1127eed138a4ba5421c577eb1 二、开始建模 (1)创…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...