> 文章列表 > matlab数据归一化与反归一化处理

matlab数据归一化与反归一化处理

matlab数据归一化与反归一化处理

假如数据实际取值范围为 X i ∈ [ − π π ] , i = 1 , 2 , 3 X_i \\in [-\\pi \\ \\ \\pi], i=1,2,3 Xi[π  π],i=1,2,3,变量服从正态分布

示例如下:

%% 数据归一化处理及其概率密度函数
clear
clc
Mu = [0 0 0];  % 均值
Sigma = [1 1 1];  % 标准差
CovarianceMatrix = Sigma;
CovarianceMatrix = diag(CovarianceMatrix);    % 转换为对角矩阵
N = 100000;       % 样本点数目
X = lhsnorm(Mu, CovarianceMatrix, N);   % 采用lhsnorm生成均值为Mu,标准差为Sigma的矩阵
% 绘制归一化之前的X的概率密度函数
[f,xi] = ksdensity(X(:,1));  % 计算概率密度函数,返回在xi点的概率密度f
pic1 = plot(xi,f,'LineWidth',2,'LineStyle','-','color','K');   % 绘制概率密度曲线
hold on   % 保留当前figure,实现图层叠加
%% 归一化数据,并将数据放缩到实际取值范围
[x_pdf,ps1]=mapminmax(X' ,0 ,1);        % mapminmax是按照行进行归一化的,因此要对矩阵X进行转置
x_pdf = x_pdf';                         % 归一化后再将矩阵X转置回来
x_pdf = -pi+2.*pi.*x_pdf;               % 放缩到原函数取值范围
% 绘制归一化之后的x_pdf的概率密度函数
[f,xi] = ksdensity(x_pdf(:,1));
pic2 = plot(xi,f,'LineWidth',2,'LineStyle','-','color','r');% 绘制概率密度曲线
hold on%% 反归一化数据,注意一定要先把数据从实际范围归一化(或放缩)到[0 1]之后,再反归一化处理 
[x_pdf,ps2]=mapminmax(x_pdf' ,0 ,1);  % 首先将数据归一化到放缩前的范围
x_pdf = x_pdf';
X_re = mapminmax('reverse',x_pdf',ps1); % 反归一化到原分布下的数据
X_re = X_re';
% 绘制反归一化之后的x_pdf的概率密度函数
[f,xi] = ksdensity(X_re(:,1)); % 计算概率密度函数,返回在xi点的概率密度f
pic3 = plot(xi,f,'color','g','Marker','o');%绘制概率密度曲线
legend('原始数据','归一化后数据','反归一化后数据')

在这里插入图片描述