zoukankan      html  css  js  c++  java
  • 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('一次风机部分检测数据');
    

      

  • 相关阅读:
    tslib編译和安装
    Web服务器的工作原理
    激励一生的六个经典故事
    VS2010中创建安装项目
    vue中img标签图片 加载时 与 加载失败 的处理方法
    Vue函数式组件的应用
    深入浅出Object.defineProperty()
    重学Git(一)
    backgroundblendmode
    箭头流程图前端实现
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/9491639.html
Copyright © 2011-2022 走看看