Matlab中的数据预处理-归一化(mapminmax)与标准化(mapstd)

一、mapminmax

Process matrices by mapping row minimum and maximum values to [-1 1]

意思是将矩阵的每一行处理成[-1,1]区间,此时对于模式识别或者其他统计学来说,数据应该是每一列是一个样本,每一行是多个样本的同一维,即对于一个M*N的矩阵来说,样本的维度是M,样本数目是N,一共N列N个样本。

其主要调用形式有:

1. [Y,PS] = mapminmax(X,YMIN,YMAX)

2. [Y,PS] = mapminmax(X,FP)

3. Y = mapminmax(‘apply‘,X,PS)

4. X = mapminmax(‘reverse‘,Y,PS)

5. dx_dy = mapminmax(‘dx_dy‘,X,Y,PS)

对于1和2的调用形式来说,X是预处理的数据,Ymin和Ymax是期望的每一行的最小值与最大值,FP是一个结构体成员主要是FP.ymin, FP.ymax.这个结构体就可以代替Ymin和Ymax,1和2的处理效果一样,只不过参数的带入形式不同。

代码:

x=[2,3,4,5,6;7,8,9,10,11];
mapminmax(x,0,1)
fp.ymin=0;
fp.ymax=1;
mapminmax(x,fp) 

而对于3式,在模式识别或者统计学里,PS是训练样本的数据的映射,即PS中包含了训练数据的最大值和最小值,这里的X是测试样本,对于测试样本来说,预处理应该和训练样本一致即最大值和最小值应该是训练集的最大值与最小值。假设y是测试样本,一共两个测试样本,则代码如下:

x=[2,3,4,5,6;7,8,9,10,11];
y=[2,3;4,5];
[xx,ps]=mapminmax(x,0,1);
mapminmax('apply',y,ps)

对于4式,是预处理之后的数据进行反转得到原始数据。

x=[2,3,4,5,6;7,8,9,10,11];
y=[2,3;4,5];
[xx,ps]=mapminmax(x,0,1);
yy=mapminmax('apply',y,ps);
mapminmax('reverse',yy,ps)

对于5式,根据给定的矩阵X、标准化矩阵Y及映射PS,获取逆向导数(reverse derivative)。如果给定的X和Y是m行n列的矩阵,那么其结果dx_dy是一个1×n结构体数组,其每个元素又是一个m×n的对角矩阵。这种用法不常用,这里不再举例。

二、mapminmax原理及其实现

mapminmax的数学公式为y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin。如果某行的数据全部相同,此时xmax=xmin,除数为0,则此时数据不变。

matlab实现为:

function [out]=myMapminmax(x,ymin,ymax)

out=(ymax-ymin).*(x-repmat(min(x,[],2),1,size(x,2)))./repmat((max(x,[],2)-min(x,[],2)),1,size(x,2))+ymin;
index=isnan(out);
out(index)=x(index);

end

注意上面的代码均假设数据x中样本是列向量。

三、mapstd 标准化

Process matrices by mapping each row‘s means to 0 and deviations to 1:将矩阵的每一行映射为0均值1方差的数据。

主要调用形式有:

1.  [Y,PS] = mapstd(X,ymean,ystd)

2. [Y,PS] = mapstd(X,FP)

3. Y = mapstd(‘apply‘,X,PS)

4. X = mapstd(‘reverse‘,Y,PS)

5. dx_dy = mapstd(‘dx_dy‘,X,Y,PS)

和mapminmax类似的,1和2式是对数据X进行标准化,其中ymean和ystd是期望得到数据的每一行的均值和方差,同样的,我们也可以用一个结构体包含 ymean 和ystd进行带入。

x=[2,3,4,5,6;7,8,9,10,11];
y=[2,3;4,5];
[xx,ps]=mapstd(x,0,1)
fp.ymean=0;
fp.ystd=1;
[xx,ps]=mapstd(x,fp)

3式是对测试数据进行预处理,利用训练数据中均值和方差进行处理,4式是将预处理之后的数据反转。

x=[2,3,4,5,6;7,8,9,10,11];
y=[2,3;4,5];
[xx,ps]=mapstd(x,0,1);
yy=mapstd('apply',y,ps);

mapstd('reverse',yy,ps)

四、mapstd标准化的实现

公式为y = (x-xmean)*(ystd/xstd) + ymean。如果设置的ystd=0,或某行的数据全部相同(此时xstd =0)

function [out] = myMapstd(x,ymean,ystd)
out=(x-repmat(mean(x,2),1,size(x,2)))./repmat(std(x,0,2),1,size(x,2)).*ystd+ymean;
end

五、关于mean ,std等函数的说明

mean默认是对每一列求和,mean(x,2)是对每一行求和,std函数默认求的是标准差的无偏估计,有三种用法,s = std(X),s = std(X,flag),s = std(X,flag,dim)

其中flag是无偏估计的参数,flag=0是无偏估计,即默认 是无偏估计,flag=1是有偏估计,dim表示对第几维求方差,std(X,0,2)表示对X的每一行做无偏的标准差估计。

时间: 2024-10-03 19:19:41

Matlab中的数据预处理-归一化(mapminmax)与标准化(mapstd)的相关文章

Matlab中的数据预处理-归一化(mapminmax)与标准化(mapstd)

一.mapminmax 意思是将矩阵的每一行处理成[-1,1]区间,此时对于模式识别或者其他统计学来说,数据应该是每一列是一个样本,每一行是多个样本的同一维,即对于一个M*N的矩阵来说,样本的维度是M,样本的个数是N,一共N个样本. 其主要调用方式有: 1.[Y, PS] = mapminmax(X, Ymin, Ymax) 2.[Y, PS] = mapminmax(X, FP) 3.Y = 原文地址:https://www.cnblogs.com/LoganChen/p/9123746.ht

WEKA中的数据预处理

数据预处理包括数据的缺失值处理.标准化.规范化和离散化处理. 数据的缺失值处理:weka.filters.unsupervised.attribute.ReplaceMissingValues. 对于数值属性,用平均值代替缺失值,对于nominal属性,用它的mode(出现最多的值)来代替缺失值. 标准化(standardize):类weka.filters.unsupervised.attribute.Standardize.标准化给定数据集中所有数值属性的值到一个0均值和单位方差的正态分布.

VC++中调用MATLAB中的数据

网上的帖子都是如何将VC++数据添加进入MATLAB中,而VC++调用MATLAB中的数据几乎没有,再次记录一点东西吧 配置好编程环境,本文环境为:VS2012+MATLAB2012b. 首先要了解的是Matlab Engine API函数 接下来贴代码和效果: void test2() { Engine *ep; if (!(ep = engOpen(NULL))) { cout<<"Can't start MATLAB engine"<<endl; //Me

数据挖掘过程中:数据预处理

原文:http://www.itongji.cn/article/0Q926052013.html 在数据分析之前,我们通常需要先将数据标准化(normalization),利用标准化后的数据进行数据分析.数据标准化也就是统计数据的指数化.数据标准化处理主要包括数据同趋化处理和无量纲化处理两个方面.数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加总不能正确反映不同作用力的综合结果,须先考虑改变逆指标数据性质,使所有指标对测评方案的作用力同趋化,再加总才能得出正确结果.数据无量纲化处理

MATLAB中导入数据:importdata函数

用load函数导入mat文件大家都会.可是今天我拿到一个数据,文件后缀名竟然是'.data'.该怎么读呢? 我仅仅好用matlab界面Workspace区域的"import data"button手工导入该文件.恩,还好,竟然成功了.顺便提一下,这个"import data"button功能非常强大,连excel文件都能导入. 可是假设在脚本里怎样导入这样的非mat文件呢? 这时候就轮到"importdata"函数登场啦! -----------

关于使用sklearn进行数据预处理 —— 归一化/标准化/正则化

一.标准化(Z-Score),或者去除均值和方差缩放 公式为:(X-mean)/std  计算时对每个属性/每列分别进行. 将数据按期属性(按列进行)减去其均值,并处以其方差.得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1. 实现时,有两种不同的方式: 使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 >>> from skle

[Scikit-Learn] - 数据预处理 - 归一化/标准化/正则化

reference: http://www.cnblogs.com/chaosimple/p/4153167.html 一.标准化(Z-Score),或者去除均值和方差缩放 公式为:(X-mean)/std  计算时对每个属性/每列分别进行. 将数据按期属性(按列进行)减去其均值,并处以其方差.得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1. 实现时,有两种不同的方式: 使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化. 1

使用sklearn进行数据预处理 —— 归一化/标准化/正则化

一.标准化(Z-Score),或者去除均值和方差缩放 公式为:(X-mean)/std  计算时对每个属性/每列分别进行. 将数据按期属性(按列进行)减去其均值,并处以其方差.得到的结果是,对于每个属性/每列来说所有数据都聚集在0附近,方差为1. 实现时,有两种不同的方式: 使用sklearn.preprocessing.scale()函数,可以直接将给定数据进行标准化. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 >>> from skle

matlab中的数据图像拟合

1.需要给x,y赋一样多个数的值 2.点击右下角的start->toolbox->curve fitting->curve fitting tool 3.点击data,选择数据x,y,然后输入data set name,点击create即可,退出 4,然后点击fitting ->new fit ,选择polynomial中的拟合次数,次数越高,越贴近数据 然后点击apply即可