前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matlab_matlab反归一化

matlab_matlab反归一化

作者头像
全栈程序员站长
发布2022-11-10 15:27:15
5550
发布2022-11-10 15:27:15
举报

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

这里写图片描述
这里写图片描述

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

y=0.9?0.1xmax?xminx+0.1xmax?0.9xminxmax?xmin

y=\frac{0.9-0.1}{xmax-xmin}x+\frac{0.1xmax-0.9xmin}{xmax-xmin}

x=xmax?xmin0.9?0.1y+0.9xmin?0.1xmax0.9?0.1

x=\frac{xmax-xmin}{0.9-0.1}y+\frac{0.9xmin-0.1xmax}{0.9-0.1} 对于单个值和向量来说,只要按照上面的公式转化就行,很简单。 但很多时候,我们需要归一化的是多维向量,比如训练数据的输入特征集 X=[X1,X2,...,XM]T X=[X_1,X_2,...,X_M]^T,其中 Xi X_i是行向量。最大值向量 max=[m1,m2,...] max=[m_1,m_2,...],最小值向量为 min=[n1,n2,...] min=[n_1,n_2,...] 以2维向量为例,我们进行推导,得到:

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

\left[ \begin{matrix} Y_1 \\ Y_2 \end{matrix} \right]=\left[ \begin{matrix} a_1&0 \\ 0&a_2 \end{matrix} \right] X + \left[ \begin{matrix} b_1&0 \\ 0&b_2 \end{matrix} \right] ones(size(X)) 写到这里,对于程序实现来说,并没什么卵用。接下来对两个系数矩阵进一步推导,这里的 a1,a2 a_1,a_2和 b1,b2 b_1,b_2对应每维向量的 a a和 b b

[a100a2]=(0.9?0.1)[m1?n100m2?n2]?1

\left[ \begin{matrix} a_1&0 \\ 0&a_2 \end{matrix} \right]=(0.9-0.1) \left[ \begin{matrix} {m_1-n_1}&0 \\ 0&{m_2-n_2} \end{matrix} \right]^{-1}

[b100b2]=[0.1m1?0.9n1000.1m2?0.9n2][m1?n100m2?n2]?1

\left[ \begin{matrix} b_1&0 \\ 0&b_2 \end{matrix} \right]=\left[ \begin{matrix} {0.1m_1-0.9n_1}&0 \\ 0&{0.1m_2-0.9n_2} \end{matrix}\right]\left[ \begin{matrix} {m_1-n_1}&0 \\ 0&{m_2-n_2} \end{matrix} \right]^{-1} 对于matlab来说,上面的对角阵非常容易实现 一堆恶心的公式到此结束,接下来上干货儿。以matlab为例,

代码语言:javascript
复制
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
代码语言:javascript
复制
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.cn/183177.html原文链接:https://javaforall.cn

本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com