最近在做神经网络,需要对训练数据进行归一化到[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和bb

[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\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\end{matrix} \right] \left[\begin{matrix}{m_1-n_1}&0 \\0\end{matrix}\right]^{-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 < 2P = 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

归一化的matlab实现相关推荐

  1. 机器学习中训练集和测试集归一化(matlab版)

    转载自   https://blog.csdn.net/lkj345/article/details/50352385 背景介绍: 归一化后加快了梯度下降求最优解的速度,归一化有可能提高精度. 训练集 ...

  2. 向量归一化的matlab程序,向量X的归一化及其Matlab简单示例

    徐海蛟博士 归一化是要把需要处理的数据经过处理后限制在一定范围内,例如:[-1,1]或[0,1].归一化是为了后续数据处理的方便,也使得算法程序收敛加快. 在Matlab里面,归一化的方法共有3种: ...

  3. matlab数据归一化(补充),matlab数据归一化(补充)

    Yaksa版主对MATLAB中的归一化问题进行了详细的讲解和分析,下面我们对这议题进一步深入.再议归一化问题 [train_scale,test_scale,ps] = scaleForSVM(tra ...

  4. matlab怎么列向量归一化语句,matlab向量归一化

    mapminmax('apply', Z, PS); %对矩阵 Z 实施 PS 变换过程 mapminmax('reverse', Y, PS) ;%从 Y 变换回 X 注意,X 为行向量,默认归一化 ...

  5. 归一化处理matlab,MATLAB 中数据归一化处理

    2.看一下MATLAB里的premnmx函数和postmnmx函数.它们一个是归一一个是反归一 3.并不是归一化的数据训练效果就好 神经网络训练的时候,应该考虑极值情况,即归一化的时候要考虑你所需要识 ...

  6. matlab 实现向量归一化,向量X的归一化及其Matlab简单示例

    徐海蛟博士 归一化是要把需要处理的数据经过处理后限制在一定范围内,例如:[-1,1]或[0,1].归一化是为了后续数据处理的方便,也使得算法程序收敛加快. 在Matlab里面,归一化的方法共有3种: ...

  7. matlab灰度归一化,[转载]matlab图像处理为什么要归一化和如何归一化?

    matlab图像处理为什么要归一化和如何归一化?一.为什么归一化 1. 基本上归一化思想是利用图像的不变矩寻找一组参数使其能够消除其他变换函数对图像变换的影响.也就是转换成唯一的标准形式以抵抗仿射变换 ...

  8. matlab反归一化函数,MATLAB中BP神经网络的归一化与反归一化处理方法

    本帖最后由 CAPTIONVIP 于 2014-12-9 21:03 编辑 本人之前对MATLAB不是很熟悉,只是这次在做写一篇关于神经网络的文章时需要用到MATLAB,下面是我写的一个简单的程序,麻 ...

  9. 归一化相关 matlab,matlab – 归一化互相关的基础知识

    为了说明normxcorr2的使用,请考虑以下示例(改编自 this page) %# Make light gray plus on dark gray background template = ...

最新文章

  1. 招募 | 《大数据实践课》企业合作项目,2020年夏季学期“清华大学大数据能力提升项目”...
  2. Windows保护模式学习笔记(八)—— 页目录表基址/页表基址
  3. ExpandableListView用法的一个简单小例子
  4. 设计模式大集锦 程序员面试全攻略
  5. 推荐几个前端大佬,真的厉害!
  6. Metro风格的Java组合框(JMetro)–重新介绍
  7. 五步让你成为专家级程序员
  8. C语言中关于字符数组输入,scanf没执行
  9. python process_Python Process/Thread 概念整理
  10. python flag 参数_flag_flagpython_js开关flag - 云+社区 - 腾讯云
  11. UBI文件系统和镜像的制作及分区挂载说明
  12. 大数据开发:剖析Hadoop和Spark的Shuffle过程差异
  13. uva 111 History Grading(最长公共子序列)
  14. SQLite学习和使用
  15. 【浙江大学PAT真题练习乙级】1004 成绩排名 (20分) 真题解析
  16. 【个人总结】清除样式(间距、浮动、定位)
  17. truncate表和update 效率_SQL中Truncate的用法
  18. JAVA Eclipse创建Android程序界面不显示怎么办
  19. Camtasia给视频加马赛克怎么操作?
  20. OpenCV2.4.13+CUDA8.0+SSBA3.0+VS2010编译安装

热门文章

  1. SQL——行转列,列转行
  2. 同步与异步通信的区别
  3. 用SQL语句操作Oracle数据库——数据更新
  4. Mac Office Word设置多级标题
  5. L1-040 最佳情侣身高差 (10分)
  6. 高等学校计算机水平考试分值,请问计算机二级ps的考试题型和分值是怎样的?...
  7. 指令集架构、微架构、处理器架构、CPU架构
  8. 运放(二)-深度负反馈电路放大倍数分析
  9. 发明神奇的理发店“魔镜”,可提前预览新发型!
  10. 李航统计学习感知机算法实现