使用matlab对数据集进行归一化处理

简要记录工作内容

1、对数据集进行归一化处理
2、输出mat + 创建TFrecord

数据集归一化方法选择

数据集为1030个500 * 2的样本
数据集(标记为A)物理意义:
1、二维——实际上是信号的实部和虚部分开存储
2、(幅度)App = sqrt( 实部2+虚部2)是信号的幅度

注意:因为涉及虚部实部,所以有2种归一化方法
方法 1 虚部实部分别算最大值,分别归一化到同一数值。 不可取,实部虚部归一到同一水平会打乱角度信息!!!!角度信息也是特征,避免使数据集损失特征!!
方法 2 算幅值App的最大值,在原始复数矩阵里所有元素同÷最大值*同一数值(1000),可以避免丢掉角度特征

综上 我们使用方法2进行数据归一化。

开工

话不多说,上代码

读取部分

clc;close all;clear all;
A = xlsread('测试用数据集(5类)-均衡20181105 -206个.xlsx');
A = single(A);

归一化

maxApp = max(abs(A),[],2);
Anormal = zeros(size(A));
[lenA,tempp ] =size(A);
for j = 1:lenA
	Anormal(j,:) = A(j,:) * 2000 / maxApp(j,1);
end

输出jpg查看效果

Arn = Anormal(:,1:2:end) ;      %实部(经过归一化)
Ain = Anormal(:,2:2:end) ;		%虚部(经过归一化)
Apn = Ain.^2 + Arn.^2;
Appn = sqrt(Apn);                   %幅度(经过归一化)
for i = 1:5:1030                            %输出图像jpg
    filename = ['.jpg'];
    h_fig = figure('Visible', 'off');
    plot(t,Appn(i,:)); 						%你的画图语句
     xlabel('t/s');
    ylabel('采样值');
    title('信号时域图');
    axis([0 0.016 0 3000]);
    a = num2str(i);
    saveas(h_fig, strcat(a,filename));
    close(h_fig); 							%关闭figure,清空内存
end

效果对比
使用前~:
在这里插入图片描述

使用后~:
在这里插入图片描述

效果很明显哈。

下一步:输出到.mat

Anormal = single(Anormal);
Ai = zeros(206 ,500 ,2);
Ai = single(Ai);

for j = 0:4
     cc=randperm(206); %随机取1-206的数 用来随机分配train和test
     k=0;
    for i = cc(1:206)
        Ai(i,:,1) = Anormal(j*206+i,1:2:end);
        Ai(i,:,2) = Anormal(j*206+i,2:2:end);
        a = num2str(i);
        b = num2str(j);
        temp  = Ai(i,:,:);
        data = squeeze(temp); %1*500*2  ---> 500*2 去掉单独位
        if k<50 %取前50个随机数 输出到test
            save(strcat('D:\project\matlab data preprocessing\test\',b,'\',a),'data') ; 
        else %剩下的输出到train
            save(strcat('D:\project\matlab data preprocessing\train\',b,'\',a),'data') ; 
        end
       k =k +1;
     end
end

较上篇文章多加了一个循环,用来把数据分门别类的放到对应类别的文件夹里,省去很多人工操作。

END

心态把握住,虽然很累,但是享受每天都在进步的感觉!

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐