归一化的matlab实现
2016-06-24 17:16
507 查看
最近在做神经网络,需要对训练数据进行归一化到[0.1 0.9]之间。虽然matlab有现成的归一化函数(mapminmax() premnmx),但归一化到特定的区间,上述函数并不方便使用。由此萌生了自己编写归一化函数的想法。
本质上,常用的归一化就是线性变换。本文中以转化到[0.1 0.9]为例
y与x之间的关系为y=ax+b,具体一下就是
y=0.9−0.1xmax−xminx+0.1xmax−0.9xminxmax−xmin
x=xmax−xmin0.9−0.1y+0.9xmin−0.1xmax0.9−0.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.9−0.1)[m1−n100m2−n2]−1
[b100b2]=[0.1m1−0.9n1000.1m2−0.9n2][m1−n100m2−n2]−1
对于matlab来说,上面的对角阵非常容易实现
一堆恶心的公式到此结束,接下来上干货儿。以matlab为例,
本质上,常用的归一化就是线性变换。本文中以转化到[0.1 0.9]为例
y与x之间的关系为y=ax+b,具体一下就是
y=0.9−0.1xmax−xminx+0.1xmax−0.9xminxmax−xmin
x=xmax−xmin0.9−0.1y+0.9xmin−0.1xmax0.9−0.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.9−0.1)[m1−n100m2−n2]−1
[b100b2]=[0.1m1−0.9n1000.1m2−0.9n2][m1−n100m2−n2]−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
相关文章推荐
- [置顶] MATLAB常用的快捷键
- 【转载】Matlab中如何加载.mat变成矩阵形式
- 基于Kmeans的证件照背景色替换算法
- matlab对excel数据进行排序求和
- 脉冲时滞微分方程matlab方程
- 利用matlab怎样进行频谱分析
- matlab的regionprops详解
- matlab添加 m_map工具箱
- matlab使用小结
- MATLAB循环保存figure
- matlab绘图基础
- MATLAB绘制3D隐函数曲面的方法总结
- matlab调用Java程序时出现 Java.lang.OutOfMemoryErrot: GC overhead limit exceeded
- matlab内存溢出的解决方案
- Laplacian interpolation implementation in matlab
- matlab 交换矩阵的行和列
- MATLAB 散点图
- 【混淆矩阵】matlab画混淆矩阵
- Ncut matlab 代码bug 修复(适用于R2014a)
- 关于matlab中的kmeans和reshape函数