5-SOM神经网络

https://blog.csdn.net/gavinlyy/article/details/8302814

https://blog.csdn.net/u011314012/article/details/51191006

%神经网络:
%随机生成1000个二维向量,作为样本,并绘出其分布 
P = rands(2,1000); 
plot(P(1,:),P(2,:),'+r') 
title('初始随机样本点分布'); 
xlabel('P(1)'); 
ylabel('P(2)'); 
%建立网络,得到初始权值 
net=newsom([0 1; 0 1],[5 6]); 
w1_init=net.iw{1,1} 
%绘出初始权值分布图 
figure; 
plotsom(w1_init,net.layers{1}.distances) 
%分别对不同的步长,训练网络,绘出相应的权值分布图 
for i=10:30:100 
   net.trainParam.epochs=i; 
   net=train(net,P); 
   figure; 
   plotsom(net.iw{1,1},net.layers{1}.distances) 
end 
%对于训练好的网络,选择特定的输入向量,得到网络的输出结果 
p=[0.5;0.3]; 
a=0; 
a = sim(net,p)

  

%SOM神经网络
clc, clear;
pp = xlsread('E:a-建模第六轮附件4副本.xlsx', 'A1:E4961');
P = pp'; %一横行表示一组属性数据
%生成一个som网络
net = newsom(minmax(P), [6 6]);
%训练次数
net.trainparam.epochs = 1;
%训练网格和查看分类
net=train(net,P);
y = sim(net, P);
yc(7,:) = vec2ind(y);
% hold on
plotsom(net.iw{1,1},net.layers{1}.distances)
yc
% hold off
%%网格作分类的预测
%测试样本输入
t = P;
%sim()来做网格仿真
r = sim(net, t);
%变换函数 将单值向量转变成下标向量
rr = vec2ind(r)   %得到每个组数据在那个格子里面
fenlei_4 = rr'
save fenlei_4;

%找出分类和对应的值:
ct = zeros(36);
%正常样本类
% zhengchan = [7 8 13 14 15 19 20 21 25 26 27 28 31 32 33 34];
%找出分类点:

% dian = []; %存放需要剔除的类别编号
% dian = [1 2 3 7 8 9 13 14 19 20];
dian = [1 2 3 7 8  13 14];
% [zn, zlen] = size(zhengchan);
% cz = 0;
% bj = zeros(1,36); %1表示正常,0表示需要剔除的类别
% for i = 1:zlen
%     bj(zhengchan(i)) = 1; %标记正常
% end
% cct = 0;
% for i = 1:36
%     if bj(i) == 0  %需要剔除的
%         cct = cct + 1;
%         dian(cct) = i;
%     end
% end

%统计    
[n,len] = size(dian);
for i = 1:4961
    for j = 1:len
        if fenlei_4(i) == dian(j)
            ct(j) = ct(j) + 1;
            bianhao(j, ct(j)) = i;
        end
    end
end
zongshu = sum(sum(ct)) %总数

%剔除数据:
%需要剔除的标号:
len2 = 4961;
tichu = zeros(1,len2);
for i=1:10  %bianhao的行数
    for j = 1:360 %提出类中最多数据个数,bianhao的列数
        if bianhao(i,j) > 0
            tichu(bianhao(i,j)) = 1;
        end
    end
end
tichuhouP = []; %存放剔除后的数据
myct = 0;
for i=1:len2
    if tichu(i) == 0    %只取正常数据
        myct = myct + 1;
        tichuhouP(:,myct) = P(:,i);
    end
end

%画图:
%剔除前:
% plot(P(1,:)', '-r');
hold on;
% plot(P(2,:)', '-b');
plot(P(3,:)', '-g');
% plot(P(4,:)', '-k');
% plot(P(5,:)', '-y');
% plot(P(6,:)', '-c');
% plot(P(7,:)', '-m');
xlabel('序号');
ylabel('测量值');
title('附件四原始数据');

%剔除后:
% plot(tichuhouP(1,:)', '-k');
% plot(tichuhouP(2,:)', '-g');
plot(tichuhouP(3,:)', '-m');
xlabel('序号');
ylabel('测量值');
title('附件四去异常后数据');

yst2 = tichuhouP';

hold on;
for i = 1:5
    plot(P(i,:)');
end
xlabel('序号');
ylabel('测量值');
title('一次风机部分检测数据');

  

原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/9491639.html