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

Matlab中的数据预处理-归一化(mapminmax)与标准化(mapstd)最近遇到数据预处理的一些问题,本来很简单的东西,但是却搞的烦烦的,痛定思痛,决定自己实现一下。一、mapminmaxProcessmatricesbymappingrowminimumandmaximumvaluesto[-11]意思是将矩阵的每一行处理成[-1,1]区间,此时对于模式识别或者其他统计学来说,数据应该是每一列是一个样本,每一行是多个样本的同一维,即

大家好,又见面了,我是你们的朋友全栈君。

一、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的每一行做无偏的标准差估计。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147780.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • SRC挖掘—web不安全的直接对象引用 (IDOR)漏洞-3day

    SRC挖掘—web不安全的直接对象引用 (IDOR)漏洞-3day什么是IDOR?当应用程序根据用户提供的输入提供对对象的直接访问时,就会发生不安全的直接对象引用(IDOR)。由于此漏洞,攻击者可以绕过授权并直接访问系统中的资源,例如数据库记录或文件。不安全的直接对象引用允许攻击者通过修改用于直接指向对象的参数值来绕过授权并直接访问资源。这些资源可以是属于其他用户的数据库条目、系统中的文件等等。这是因为应用程序接受用户提供的输入并使用它来检索对象而没有执行足够的授权检查。(来源:OWASP)让我们看一个例子。想象一下,您正在使用一个文档共享平台。您可以上传..

    2022年6月5日
  • softmax 损失函数与梯度推导「建议收藏」

    softmax 损失函数与梯度推导「建议收藏」softmax与svm很类似,经常用来做对比,svm的lossfunction对wx的输出s使用了hingefunction,即max(0,-),而softmax则是通过softmaxfunction对输出s进行了概率解释,再通过crossentropy计算lossfunction。将score映射到概率的softmaxfunction:,其中,,j指代i-thclass。…

    2022年6月26日
  • 模2除法(CRC校验码计算)_crc校验模二算法

    模2除法(CRC校验码计算)_crc校验模二算法鉴于网上的讲解自己好不容易才看懂…所以自己整理了一下,也方便大家能够理解如果有不对或者不准确的地方,恳请大家指出…模2加减法模2除法需要用到模2加减法,关于模2加减法,其实就是异或操作,规则如下://不需要考虑进位和借位0±0=01±1=00±1=11±0=1例:1101±1001=0100计算如下:…

    2022年10月22日
  • 更新日志.txt

    【20210811.1905.3】增加了几处新功能:1.单码登录功能2.账号与用户电脑机械码绑定<url>https://zhuanlan.zhihu.com/p/350520546</url>【20210811.1905.2】优化了几个子程序算法,提高运行速度【20210811.1905.1】1.更新了xxx内容2.修复了几处小bug….

    2022年4月7日
  • 用C++实现简易的文本编辑器[通俗易懂]

    用C++实现简易的文本编辑器[通俗易懂]终于开始准备写自己的第一篇博客了,想想现在大二结束了,也要开始准备整理这么久学习的知识。学长们都对我说写博客是对自己知识整理最好的方法,所以我就静下心来把自己的课设写成自己的第一篇博客吧。废话就不多说了,接下来我来介绍一下我对实现这个简易的文本编辑器自己的理解。我自己的基本框架是.net,新建一个CLR项目,添加一个窗体。首先说一下要实现的基本功能,最基本的肯定是读写.txt文件,其次是复制、粘

    2022年6月9日
  • pycharm导入库变灰色_import python

    pycharm导入库变灰色_import pythonpycharm中import导入包呈现灰色问题之解决!问题描述:pycharm中单个py文件导入包时呈灰色,而别的文件却能正常显示,我按照CSDN博客上给的设置①右键点击项目,找下面的MarkDirectoryas选择SourceRoot”以及②点击File-InvalidteCaches/Restart…重启两种方法均不起作用,无法解决问题。我的解决方法:将鼠标移动到那行…

    2022年8月27日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号