前言

在使用机器学习做分类和回归分析时,往往需要对训练和测试数据首先做归一化处理。这里就对使用MATLAB对数据进行归一化方法做一个小总结。

为什么进行归一化

一般做机器学习应用的时候大部分时间是花费在特征处理上,其中很关键的一步就是对特征数据进行归一化。关于为什么进行归一化处理维基百科给出的解释是:1)归一化后加快了梯度下降求最优解的速度;2)归一化有可能提高精度。
具体介绍:https://www.cnblogs.com/davidwang456/articles/9729746.html

使用MATLAB归一化

对于模式识别或者其他统计学来说,训练数据和测试数据应该是每一列是一个样本,每一行是多个样本的同一维,即对于一个M*N的矩阵来说,样本的维度是M,一共N列N个样本。而对数据归一化也应该是对同一维的数据进行归一化。MATLAB提供了归一化函数mapminmax,其主要调用形式有:

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)

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

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

结果:

0    0.250000000000000   0.500000000000000   0.750000000000000   1
0   0.250000000000000   0.500000000000000   0.750000000000000   1

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

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)

但对于训练样本和测试样本,一般是将两者合起来一起归一化,例如要将train,test一起归一化:

[mtrain,ntrain]=size(train);
[mtest,ntest]=size(test);
dataset=[train;test];
[dataset_scale,ps]=mapminmax(dataset',0,1);
train=dataset_scale(1:mtrain,:);
test=dataset_scale((mtrain+1):(mtrain+mtest),:);

对于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);
y=mapminmax('reverse',yy,ps)

归一化算法描述

y′=lower+(upper−lower)∗(y−min)/(max−min)y'=lower+(upper-lower)*(y-min)/(max-min)y′=lower+(upper−lower)∗(y−min)/(max−min)
其中,y表示原始数据,y’表示经过归一化后的数据。

按列进行归一化

mapminmax函数默认是按行进行归一化的。当我们使用libsvm工具箱进行回归分析时,其数据组织要求一行表示一个样本数据,因此我们需要掌握如何使用mapminmax函数按列进行归一化的方法。

基于magic函数生成测试数据,假设有5个样本。

train = magic(5);
    17    24     1     8    1523     5     7    14    164     6    13    20    2210    12    19    21     311    18    25     2     9

假设第1列数据为因变量数据,第2、3、4和5列数据为自变量数据。每一列数据的属性相同,假设第1列数据表征身体的健康分数,2、3、4和5列是一些测量指标(如:体重、身高等)。在对数据进行归一化时,应该对每一列进行归一化,而不是将体重和升高一起进行归一化。
由于mapminmax只能按行进行归一化,因此,我们只需要对训练数据进行转置,然后进行归一化,归一化后再转置回来即可。

t      = magic(5);          % 训练数据
x      = t';                % 转置
[y,ps] = mapminmax(x,0,1);  % 归一化
tn     = y';                % 转置

结果:

    0.6842    1.0000         0    0.3158    0.63161.0000         0    0.2500    0.6316    0.68420    0.0526    0.5000    0.9474    1.00000.3158    0.3684    0.7500    1.0000         00.3684    0.6842    1.0000         0    0.3158

如果觉得上述方法不够简单,还可以使用下面的函数进行归一化:
描述

t = magic(5)
scaleSVM(t,0,1)
function out_scale = scaleSVM(c,lower,upper)
%   设置归一化范围 [lower ,upper]
%   按列进行归一化
[m,n]=size(c);                              %%获取行数m 和 列数  nCmax=zeros(1,n);
Cmin=zeros(1,n);
for i=1:nCmax(1,i)=max(c(:,i));                 %%Cmax用来保存每一列中的最大值
end
for i=1:nCmin(1,i)=min(c(:,i));                  %%Cmin用来保存每一列中的最小值
end
for i=1:mfor j=1:nc(i,j)=lower+(upper-lower)*(c(i,j)-Cmin(1,j))/(Cmax(1,j)-Cmin(1,j));  %%执行前述的公式进行归一化end
end
out_scale=c;
end

参考:
https://www.mathworks.com/help/deeplearning/ref/mapminmax.html;jsessionid=8db547639f6ef5a379e2738db0ef
https://blog.csdn.net/qq_22625309/article/details/76576184
https://www.cnblogs.com/litthorse/p/9276594.html

使用Matlab对数据归一化相关推荐

  1. 【Matlab系列】matlab中数据归一化方法

    DATE: 2019.9.13 中秋 文章目录 1.参考 2.数据归一化 1.参考 matlab 中 将一组数据归一化到(0,1)之间 2.数据归一化 用函数mapminmax 默认的map范围是[- ...

  2. matlab中数据归一化方法,矩阵归一化

    matlab中数据一行归一化 默认的map范围是[-1, 1],所以如果需要[0, 1],则按这样的格式提供参数 Data1 = mapminmax(lData, 0, 1); 矩阵归一化 data= ...

  3. 数据如何归一化matlab中,数据归一化汇总

    ============外一篇 有关mapminmax的用法详解 by faruto================================== 几个要说明的函数接口: [Y,PS] = ma ...

  4. matlab标准化处理Excel数据,matlab一组数据归一化后数据 | 在excel表格中如何对数据进行归一化处理...

    请问在excel里可以直接做归一化处理吗 归一化是一种计算的方式,即将纲的表达式,经换,化为纲的表达式,成为标量. 在多种计算中都经常用到这种方法. 归一化是一种无量纲处理手段,使物理系统数值的绝对值 ...

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

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

  6. matlab进行数据归一化处理

    一化的具体作用是归纳统一样本的统计分布性.归一化在0-1之间是统计的概率分布,归一化在-1--+1之间是统计的坐标分布.归一化有同一.统一和合一的意思.无论是为了建模还是为了计算,首先基本度量单位要同 ...

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

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

  8. 分酒问题matlab代码,matlab葡萄酒分类数据归一化问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 matlab葡萄酒分类数据归一化问题% 选定训练集和测试集 % 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集 train_wi ...

  9. 数据归一化matlab及python 实现

    更多细节请查看 https://www.zhihu.com/question/20455227 归一化的目的简而言之,是使得没有可比性的数据变得具有可比性,同时又保持相比较的两个数据之间的相对关系. ...

最新文章

  1. 基于YOLOv5模型压缩、模型量化、模型剪枝
  2. python脚本如何监听终止进程行为,如何通过脚本名获取pid
  3. 蓝桥杯:安慰奶牛(最小生成树)
  4. C#获取SQLServer数据库表名和字段名
  5. spark总结——转载
  6. Java - 强引用、弱引用、软引用、虚引用
  7. Unity3D_(游戏)2D坦克大战 像素版
  8. prompt set feedback set define的详解
  9. fedora 初始化系统_用Fedora数字化VHS
  10. hive hql文档_Hive存储过程HQL/SQL(一)–hplsql命令行
  11. Faster RCNN 学习笔记
  12. 深度学习蚕食软件,十年内大部分软件工作不再涉及编程
  13. sqlserver 列出表字段和字段说明
  14. MPC的终结——二次规划求解约束极值问题
  15. modelica学习
  16. Mac/Linux查看内网ip与访问公网的ip地址
  17. 【Practical】线性空间
  18. 文件上传与下载之数据库实现
  19. 一个大学生的心灵告白:世界上最后一封情书
  20. 浅谈GPU虚拟化技术(四)- GPU分片虚拟化

热门文章

  1. python撤回指令程序_python微信撤回监测代码
  2. spring实现原理
  3. i5 11400核显相当于什么显卡
  4. 使用Memory-driven Transformer生成医疗影像报告
  5. 1.Linux命令-删除
  6. 用turtle画多彩螺旋体
  7. 音视频中的DTS、PTS
  8. js截取视频第一帧图片
  9. 红米note5手机插u盘没反应_认真分析下:荣耀智慧屏x1和红米x50对比哪个好?用后一个月告诉大家实情...
  10. c语言实现二分法(折半查找)算法