matlab_matlab反归一化

matlab_matlab反归一化最近在做神经网络,需要对训练数据进行归一化到[0.10.9]之间。虽然matlab有现成的归一化函数(mapminmax()premnmx),但归一化到特定的区间,上述函数并不方便使用。由此萌生了自己编写归一化函数的想法。(先说推导,matlab代码见后面)

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

最近在做神经网络,需要对训练数据进行归一化到[0.1 0.9]之间。虽然matlab有现成的归一化函数(mapminmax() premnmx),但归一化到特定的区间,上述函数并不方便使用。由此萌生了自己编写归一化函数的想法。
本质上,常用的归一化就是线性变换。本文中以转化到[0.1 0.9]为例
这里写图片描述

y与x之间的关系为 y=ax+b ,具体一下就是

y=0.90.1xmaxxminx+0.1xmax0.9xminxmaxxmin




x=xmaxxmin0.90.1y+0.9xmin0.1xmax0.90.1



对于单个值和向量来说,只要按照上面的公式转化就行,很简单。

但很多时候,我们需要归一化的是多维向量,比如训练数据的输入特征集

X=[X1,X2,...,XM]T
,其中

Xi
是行向量。最大值向量

max=[m1,m2,...]
,最小值向量为

min=[n1,n2,...]


以2维向量为例,我们进行推导,得到:


[Y1Y2]=[a100a2]X+[b100b2]ones(size(X))



写到这里,对于程序实现来说,并没什么卵用。接下来对两个系数矩阵进一步推导,这里的

a1,a2


b1,b2
对应每维向量的

a




b

[a100a2]=(0.90.1)[m1n100m2n2]1

[b100b2]=[0.1m10.9n1000.1m20.9n2][m1n100m2n2]1



对于matlab来说,上面的对角阵非常容易实现

一堆恶心的公式到此结束,接下来上干货儿。以matlab为例,

function [ y, xmax, xmin ] = Normalize( x, xmax , xmin )
%NORMALIZE 利用max-min方法将数据归一化到[0.1,0.9]
% input: x---每行对应一个特征,每列为一个样本,
% output: nx---归一化数据,max---特征最大值,min---特征最小值
% created by Nie Zhipeng 2016.06.24
nxmin = 0.1;
nxmax = 0.9;
if nargin < 2
    P = minmax(x);
    xmin = P(:,1);
    xmax = P(:,2);
end
K = (nxmax - nxmin) * inv(diag(xmax - xmin));
b = diag(nxmin * xmax - nxmax * xmin) / diag(xmax - xmin);
y = K * x + b * ones(size(x));
end
function [ x ] = RNormalize( y, xmax, xmin )
%RNORMALIZE 恢复max-min方法归一化的数据
%input: nx---归一化的数据, 每行对应一个特征,每列对应一个样本
% max---特征最大值
% min---特征最小值
%Created by Nie Zhipeng 2016.06.24
nxmin = 0.1;
nxmax = 0.9;
K = 1/(nxmax-nxmin) * diag(xmax - xmin);
b = 1/(nxmax-nxmin) * diag(nxmax * xmin - nxmin * xmax);
x = K * y + b * ones(size(y)); 
end
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183177.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Go语言之append函数

    Go语言之append函数append函数的作用官方解释append函数是向slice里面追加一个或多个元素,然后返回一个和slice一样类型的slice,其签名为funcappend(slice[]T,elements…T)[]Tappend所做的是在切片尾添加元素并返回结果。结果需要返回因为,正如我们手写的Append,底层的数组可能更改。使用示例:x:=[]int{1,2

    2022年6月18日
    45
  • ubuntu镜像下载教程_Ubuntu镜像

    ubuntu镜像下载教程_Ubuntu镜像在众多的linux操作系统中,Ubuntu(乌班图)是目前主流的linux操作系统。而绝大部分新手网友要接触linux或使用linux操作系统,当然是首选Ubuntu(乌班图)linux操作系统。因为Ubuntu系统绝大部分是图形化操作,很少会使用到命令,同时在linux操作系统中支持Ubuntu系统的软件、游戏也最多。Ubuntu官方网站:http://www.ubuntu.com/downl

    2025年6月26日
    6
  • mysql密码字段类型_MySQL 字段类型[通俗易懂]

    mysql密码字段类型_MySQL 字段类型[通俗易懂]数值MySQL的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且MySQL允许我们指定数值字段中的值是否有正负之分(UNSIGNED)或者用零填补(ZEROFILL)。INT在MySQL中支持的5个主要整数类型是TINYINT,SMALLINT,MEDIUMINT,INT和B…

    2025年7月30日
    6
  • MIPI协议介绍

    MIPI协议介绍MIPI(MobileIndustryProcessorInterface)MIPI联盟是手机工业领导者的集合,成员有Intel,Motorola,Nokia,NXP,Samsung,ST,TI目的是提供给手机应用处理器提供一个统一的接口MIPI联盟用于显示的规格:DCS(DisplayCommandSet):DCS是用于命令模式和显示模式的命令设置DBI

    2022年5月3日
    67
  • 递归 数列_数列递归公式

    递归 数列_数列递归公式标题:递归数列类别函数与递归程序类型:代码片段时间限制:2S内存限制 10000Kb问题描述 一个数列A定义如下A(1)=1,A(2)=1/(1+A(1)),A(3)=1/(1+A(2)),……A(n)=1/(1+A(n-1))。定义一个函数function用来计算数列的第第n项的值,函数声明如下:doublefunction(intn);输入说明: 输入为1个正整数n,n<=10。输出说明 函数输出数列A第n项的值,结果小数点后保留6位有.

    2025年10月29日
    2
  • solidworks常用快捷键命令大全_solidworks怎么设置快捷键

    solidworks常用快捷键命令大全_solidworks怎么设置快捷键为了更好的节约大家的设计时间,小编花了一番功夫为大家整理出了一份SolidWorks的快捷键大全,希望可以帮助到大家。

    2022年9月28日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号