【深度学习】数据归一化/标准化 Normalization/Standardization

目录

一、实际问题

二、归一化 Normalization

三、归一化的类型

1. Min-max normalization (Rescaling)

2. Mean normalization

3.Z-score normalization (Standardization)

4.非线性归一化

4-1 对数归一化

4-2 反正切函数归一化

4-3 小数定标标准化(Demical Point Normalization)

四、如何选择归一化函数?

五、Java实现归一化工具类


一、实际问题

在数据分析、深度学习中,经常需要对数据进行处理,数据处理时,会发现一个问题:

不同维度的数据,数据范围偏差比较大,如

  • 距离地铁的距离——房价的关系
  • 海拔高度——氧气含量的关系

一个维度的数据范围大,一个小,导致以下问题:

【1】求解过程不平缓、函数收敛慢

【2】相关性展示不明显

如下图:

海拔越高、氧气含量越低,因为数据范围的原因,导致两者的相关性展示得不明显。

解决得方式就是归一化和标准化

二、归一化 Normalization

归一化,指将数据样本中的数据进行处理,使它们处于同一量级。

如 [0,1] 或者 [-1,1] 或者其它

归一化后,数据更具有可比性,如图

函数的求解过程也会比较平缓,更快求得最优解,如下图

左:未归一化的求解  右:归一化后的求解

三、归一化的类型

1. Min-max normalization (Rescaling)

最值归一化,公式如下:

\mathbf{​{x}'=\frac{x-min}{max-min}}

归一化后的数据范围为 [0, 1],其中min max分别求样本数据的最小值和最大值。

2. Mean normalization

均值归一化,公式如下:

\mathbf{​{x}'=\frac{x-mean}{max-min}}

归一化后的数据范围为 [-1, 1],其中mean、min、max为样本数据的平均值、最小值和最大值。

3.Z-score normalization (Standardization)

标准差归一化,也成为标准化(标准化其实就是归一化的一种),公式如下:

\boldsymbol{\mathbf{}\boldsymbol{\mathbf{}{x}'=\frac{x-mean}{\sigma}}}

归一化后的数据范围为实数集,其中mean、σ 分别为样本数据的均值和标准差。

4.非线性归一化

4-1 对数归一化

\boldsymbol{\mathbf{}{x}'=\frac{lg(x)}{lg(max)}}

4-2 反正切函数归一化

\boldsymbol{\mathbf{}{x}'=arctan(x)*\frac{2}{pi}}

归一化后的数据范围为 [-1, 1]

4-3 小数定标标准化(Demical Point Normalization)

\boldsymbol{\mathbf{}{x}'=\frac{x}{10^{j}}}

j为使

 \boldsymbol{\mathbf{}max(\left |{ x}' \right |)<1}

的最小整数,归一化后的数据范围为 [-1, 1]

四、如何选择归一化函数?

Min-Max归一化、Mean归一化适合

【1】最大最小值明确不变:如图像处理中,RGB值为0~255,可以使用Min-Max来处理。

【2】对数据范围有明确要求:如需要数据范围为-1~1

不适合:

【1】最大最小值不明确:每次有新的值加入,之前的结果就会发生改变,导致不稳定。

【2】有过大或过小的异常值存在:效果会较差

Z-score归一化适合:

【1】存在异常值、最大最小值不固定

缺点是:

【1】改变了数据的状态分布,但不会改变分布的种类:经过处理的数据呈均值为0,标准差为1的分布

非线性归一化适合

【1】数据分化程度较大的场景

五、Java实现归一化工具类

package com.potato.commonpro.util.math;import java.util.ArrayList;
import java.util.List;/*** 数据样本归一化工具类* 包含了多个归一化函数,提供了List/Array两种类型的输入输出,具体的归一化函数如下:* 【1】min-max normalization(Rescaling)* 【2】mean normalization* 【3】Z-score normalization (Standardization)* 【4】对数归一化* 【5】反正切函数归一化* 【6】小数定标标准化* <p>* Author:PotatoChan* Date:2023-12-30*/
public class PotatoNormalization {/*** min-max normalization(Rescaling)* 归一化公式:x'=(x-min)/(max-min)* 归一化后的数据范围为 [0, 1],其中min 、max 分别求样本数据的最小值和最大值。** @param data 数据样本* @return 归一化后的数据样本*/public static List<Double> normalizationForMinToMax(List<Double> data) {List<Double> result = new ArrayList<>();//求取样本数据中的最大值与最小值double max = Double.MIN_VALUE;double min = Double.MAX_VALUE;for (Double item : data) {if (item > max) max = item;if (item < min) min = item;}//计算归一化后的数据double dis = max - min;for (Double item : data) {double num = (item - min) / dis;result.add(num);}return result;}/*** min-max normalization(Rescaling)* 归一化公式:x'=(x-min)/(max-min)* 归一化后的数据范围为 [0, 1],其中min 、max 分别求样本数据的最小值和最大值。** @param data 数据样本* @return 归一化后的数据样本*/public static double[] normalizationForMinToMax(double[] data) {double[] result = new double[data.length];//求取样本数据中的最大值与最小值double max = Double.MIN_VALUE;double min = Double.MAX_VALUE;for (Double item : data) {if (item > max) max = item;if (item < min) min = item;}//计算归一化后的数据double dis = max - min;for (int i = 0; i < data.length; i++) {result[i] = (data[i] - min) / dis;}return result;}/*** mean normalization* 归一化公式:x'=(x-mean)/(max-min)* 归一化后的数据范围为 [-1, 1],其中mean为样本数据的平均值,min 、max 分别求样本数据的最小值和最大值** @param data 数据样本* @return 归一化后的数据样本*/public static List<Double> normalizationForMean(List<Double> data) {List<Double> result = new ArrayList<>();//求取样本数据中的最大值与最小值、平均值double max = Double.MIN_VALUE;double min = Double.MAX_VALUE;double mean = 0;for (Double item : data) {if (item > max) max = item;if (item < min) min = item;mean += item;}mean = mean / data.size();//计算归一化后的数据double dis = max - min;for (Double item : data) {double num = (item - mean) / dis;result.add(num);}return result;}/*** mean normalization* 归一化公式:x'=(x-mean)/(max-min)* 归一化后的数据范围为 [-1, 1],其中mean为样本数据的平均值,min 、max 分别求样本数据的最小值和最大值** @param data 数据样本* @return 归一化后的数据样本*/public static double[] normalizationForMean(double[] data) {double[] result = new double[data.length];//求取样本数据中的最大值与最小值、平均值double max = Double.MIN_VALUE;double min = Double.MAX_VALUE;double mean = 0;for (Double item : data) {if (item > max) max = item;if (item < min) min = item;mean += item;}mean = mean / data.length;//计算归一化后的数据double dis = max - min;for (int i = 0; i < data.length; i++) {result[i] = (data[i] - mean) / dis;}return result;}/*** Z-score normalization (Standardization)* 归一化公式:x'=(x-mean)/σ* 归一化后的数据范围为实数集,其中μ、σ 分别为样本数据的均值和标准差** @param data 数据样本* @return 归一化后的数据样本*/public static List<Double> normalizationForZScore(List<Double> data) {List<Double> result = new ArrayList<>();//求取样本数据中的平均值double mean = 0;for (Double item : data) {mean += item;}mean = mean / data.size();//计算方差double variance = 0;for (Double item : data) {variance += (item - mean) * (item - mean);}variance = variance / data.size();//计算标准差double standardDeviation = Math.sqrt(variance);//计算归一化后的数据for (Double item : data) {double num = (item - mean) / standardDeviation;result.add(num);}return result;}/*** Z-score normalization (Standardization)* 归一化公式:x'=(x-mean)/σ* 归一化后的数据范围为实数集,其中μ、σ 分别为样本数据的均值和标准差** @param data 数据样本* @return 归一化后的数据样本*/public static double[] normalizationForZScore(double[] data) {double[] result = new double[data.length];//求取样本数据中的平均值double mean = 0;for (Double item : data) {mean += item;}mean = mean / data.length;//计算方差double variance = 0;for (Double item : data) {variance += (item - mean) * (item - mean);}variance = variance / data.length;//计算标准差double standardDeviation = Math.sqrt(variance);//计算归一化后的数据for (int i = 0; i < data.length; i++) {result[i] = (data[i] - mean) / standardDeviation;}return result;}/*** 对数归一化* 归一化公式:x'=ln(x)/ln(max)* 其中,max为数据样本的最大值** @param data 数据样本* @return 归一化后的数据样本*/public static List<Double> normalizationForlg(List<Double> data) {List<Double> result = new ArrayList<>();//求取样本数据中的最大值double max = Double.MIN_VALUE;for (Double item : data) {if (item > max) max = item;}//计算归一化后的数据for (Double item : data) {double num = Math.log10(item) / Math.log10(max);result.add(num);}return result;}/*** 对数归一化* 归一化公式:x'=ln(x)/ln(max)* 其中,max为数据样本的最大值** @param data 数据样本* @return 归一化后的数据样本*/public static double[] normalizationForlg(double[] data) {double[] result = new double[data.length];//求取样本数据中的最大值double max = Double.MIN_VALUE;for (Double item : data) {if (item > max) max = item;}//计算归一化后的数据for (int i = 0; i < data.length; i++) {result[i] = Math.log10(data[i]) / Math.log10(max);}return result;}/*** 反正切函数归一化* 归一化公式:x'=arctan(x)*(2/PI)* 归一化后的数据范围为 [-1, 1],PI表示圆周率Π** @param data 数据样本* @return 归一化后的数据样本*/public static List<Double> normalizationForArctan(List<Double> data) {List<Double> result = new ArrayList<>();//计算归一化后的数据for (Double item : data) {double num = Math.atan(item) * (2 / Math.PI);result.add(num);}return result;}/*** 反正切函数归一化* 归一化公式:x'=arctan(x)*(2/PI)* 归一化后的数据范围为 [-1, 1],PI表示圆周率Π** @param data 数据样本* @return 归一化后的数据样本*/public static double[] normalizationForArctan(double[] data) {double[] result = new double[data.length];//计算归一化后的数据for (int i = 0; i < data.length; i++) {result[i] = Math.atan(data[i]) * (2 / Math.PI);}return result;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/664188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day17、18、19学习记录

#c语言知识 内存管理 1.作用域 &#xff08;1&#xff09;代码块作用域&#xff08;代码块是{}之间的一段代码&#xff09; &#xff08;2&#xff09;函数作用域 &#xff08;3&#xff09;文件作用域 2.局部变量&#xff08;自动变量auto&#xff09;&#xff1a; 在函…

jmeter-03界面介绍

文章目录 主界面介绍测试计划介绍线程组介绍线程组——选择测试计划&#xff0c;右键-->添加-->线程-->线程组 主界面介绍 测试计划介绍 测试计划&#xff1a;本次测试所需要的所有内容&#xff0c;即父线程 线程组介绍 jmeter讲究一个概念&#xff1a;一个线程一…

Linux内存管理:(十一)页面分配之慢速路径

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 水位管理和分配优先级 页面分配…

小白水平理解面试经典题目_二维数组类LeetCode 2966 Divide Array【排序算法实现】

2966 将数组划分为具有最大差值的数组 小白渣翻译&#xff1a; 给定一个大小为 n 的整数数组 nums 和一个正整数 k 。 将数组分成一个或多个大小为 3 的数组&#xff0c;满足以下条件&#xff1a; nums 的每个元素都应该位于一个数组中。一个数组中任意两个元素之间的差异小…

力扣每日一题 ---- 1906. 查询差绝对值的最小值

本题中&#xff0c;我们的题目求的是差值的最小值&#xff0c;我们考虑一个因素&#xff0c;当前题目中给出的数组是没有排序过的&#xff0c;那么想要求的差值&#xff0c;是不是要两两配对进行判断差值最小值。这里我们就很费时间了&#xff0c; O(N^2)的时间复杂度&#xf…

【LeetCode】27.移除元素 (快慢指针法)

题目 图解 思路 运行代码 代码 采用 LeetCode 的格式模板 int removeElement(int* nums, int numsSize, int val) {int Left 0;int Right 0;while(Right < numsSize){if(nums[Right] ! val) {nums[Left] nums[Right];Left;}Right;}return Left;// 此时 Left 刚好是数组的…

FANUC机器人开机时无法进入系统,示教器黑屏故障处理总结

FANUC机器人开机时无法进入系统&#xff0c;示教器黑屏故障处理总结 故障描述&#xff1a; FANUC机器人开机时&#xff0c;示教器在初始化时显示&#xff1a;EMAC initial call failed&#xff08;示教器上电时会进入boot画面&#xff0c;左上角会出现一些白色的英文提示&#…

Linux系统漏洞一键检测与修复工具

支持检测及修复漏洞的列表 OpenSSL CVE-2021-3712 OpenSSH CVE-2021-41617 sudo CVE-2021-3156 glibc CVE-2018-11236 polkit CVE-2021-4034 wget CVE-2017-13090 kernel CVE-2016-5195 bash CVE-2016-7543 samba CVE-2021-…

算法基础,一维,二维前缀和差分详解

目录 1.前缀和 1.一维前缀和 例题&#xff1a;【模板】前缀和 2.二维前缀和 例题&#xff1a;【模板】二维前缀和 2.差分 1.一维差分 1.性质&#xff1a;d[i]的前缀和等于a[i] 2.性质&#xff1a;后缀区间修改 例题&#xff1a;【模板】差分 2.二维差分 例题&#x…

.net core 6 集成 elasticsearch 并 使用分词器

1、nuget包安装NEST、安装elasticsearch、kibana、ik分词器、拼音分词器 2、创建操作对象 //索引库 static string indexName "testparticper"; //es 操作对象 ElasticClient elasticClient new ElasticClient(new ConnectionSettings(new Uri("http://192.…

YOLO-World: Real-Time Open-Vocabulary Object Detection

文章目录 1. Introduction2. Experiments2.1 Implementation Details2.2 Pre-training2.3 Ablation Experiments2.3.1 预训练数据2.3.2 对RepVL-PAN的消融研究2.3.3 文本编码器 2.4 Fine-tuning YOLO-World2.5 Open-Vocabulary Instance Segmentation2.6 Visualizations Refere…

Linux系统安全:安全技术 和 防火墙

一、安全技术 入侵检测系统&#xff08;Intrusion Detection Systems&#xff09;&#xff1a;特点是不阻断任何网络访问&#xff0c;量化、定位来自内外网络的威胁情况&#xff0c;主要以提供报警和事后监督为主&#xff0c;提供有针对性的指导措施和安全决策依据,类 似于监控…

ABAP Range Table:RANGES的使用

目录 Range TableRANGERANGES RANGE的四个参数SIGNOPTIONLOWHIGH示例程序 Range Table 1、Range Table 概述 RANGE TABLE为 SAP R/3系统标准内表的一种&#xff0c;结构与 Selection Table 一致&#xff0c; 由 SIGN, OPTION, LOW 和 HIGH字段组成&#xff1b; 可以通过 TYPE…

10. BI - 决策树的使用及可视化

本文为 「茶桁的 AI 秘籍 - BI 篇 第 10 篇」 文章目录 可视化探索决策树原理决策树算法决策树可视化泰坦尼克海难数据 Hi&#xff0c;你好。我是茶桁。 上一节课&#xff0c;咱们了解了图形的具体绘制方法&#xff0c;接下来咱们还要看看除了图形绘制之外&#xff0c;还有哪些…

机器学习入门-----sklearn

机器学习基础了解 概念 机器学习是人工智能的一个实现途径 深度学习是机器学习的一个方法发展而来 定义:从数据中自动分析获得模型,并利用模型对特征数据【数据集:特征值+目标值构成】进行预测 算法 数据集的目标值是类别的话叫做分类问题;目标值是连续的数值的话叫做回…

yum命令下载出现Failed to synchronize cache for repo ‘AppStream‘, ignoring this repo.

修改下面的配置文件 问题&#xff1a; cd /etc/yum.repos.d 修改下面四个文件 vim CentOS-Base.repo vim CentOS-AppStream.repo vim CentOS-Extras.repo vim CentOS-PowerTools.repo测试yum是否正常 yum -y install wget

MATLAB知识点:矩阵的拼接和重复

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章 3.3.4 矩阵的拼接和重复 有时候我们需要对多个矩…

word调整论文格式的记录

页眉的分章显示内容 效果&#xff1a; 步骤&#xff1a; 确保“显示/隐藏的标记”符号打开点亮 前提是章节前面有“分节符&#xff08;下一页&#xff09;”&#xff0c;没有则添加&#xff0c;在菜单栏“布局”——》“下一页” 添加页眉&#xff0c;双击页眉&#xff0c;选…

Cocos XR的WebBox实现流程

1. 正常3D场景下的webview 1.1 组件角色 Cocos Creator正常3D场景下只有在UI组件才支持webview&#xff0c;即作为下图中的UI Nodes(Canvas Node)的子节点&#xff0c;和3D组件是隔离开的&#xff0c;不能显示在3D空间中&#xff0c;UI Nodes(Canvas Node)是一个平面内的矩形…

jsp 样衣申请与归还管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 样衣申请与归还管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境 为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为My…