zoukankan      html  css  js  c++  java
  • [数学建模(四)]MATLAB神经网络工具箱的简单应用

    问题:蠓虫分类问题

    1 问题描述

    蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与Apf)进行鉴别,依据的资料是触角和翅膀的长度,已经测得了9 只Af 和6 只Apf 的数据如下:

     Af: (1.24,1.27),(1.36,1.74),(1.38,1.64),(1.38,1.82),(1.38,1.90),(1.40,1.70),(1.48,1.82),(1.54,1.82),(1.56,2.08).

    Apf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96).
    现在的问题是:
    (i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。
    (ii)对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的3 个标本,用所得
    到的方法加以识别。

    已知的蠓虫数据分布如图(圆圈为Apf类,六角为Af,米字型为未知型)

    2.MATLAB 实现

    clear
    p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];  %Af
    p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00;1.28,2.00;1.30,1.96];                                %Apf
    p=[p1;p2]';
    pr=minmax(p);
    goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]; %p1类为1;p2类为0
    x=[1.24 1.80;1.28 1.84;1.40 2.04];

    for i=1:9
    plot(p1(i,1),p1(i,2),'h')
    hold on
    end

    for i=1:6
    plot(p2(i,1),p2(i,2),'o');
    end

    for i=1:3
    plot(x(i,1),x(i,2),'*')
    text (x(i,1),x(i,2),'?');
    end

    %Rx2的矩阵以定义R个输入向量的最小值和最大值;设定每层神经元个数的数组
    net=newff(pr,[3,2],{'logsig','logsig'});
    net.trainParam.show = 10; % 训练显示间隔
    net.trainParam.lr = 0.05; %学习步长
    net.trainParam.goal = 1e-10; %最小均方误差
    net.trainParam.epochs = 50000; %最大训练次数
    net = train(net,p,goal); %训练神经网络
    y0=sim(net,p); %对已知的数据进行验证
    x=x';
    y=sim(net,x); %对未知的数据进行分类

     3 结果

    目标标签设置

    goal =

    1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 1 1 1 1 1 1

    已知数据训练后:

    y0 =

    1 至 10 列                                                                                                         11 至 15 列

    0.9999 0.9999 0.9999 0.9998 0.9995 0.9999 0.9999 0.9999 0.9999 0.0001 0.0001 0.0001 0.0001 0.0002 0.0006
    0.0001 0.0001 0.0001 0.0002 0.0005 0.0001 0.0001 0.0001 0.0001 0.9999 0.9999 0.9999 0.9999 0.9998 0.9994

    未知数据分类: 

    y =

    0.0004 0.0036 0.9899
    0.9996 0.9964 0.0101

    从结果可知:(1.24,1.80),(1.28,1.84)属于Apf,(1.40,2.04)属于Af

    4 工具箱界面简介

    更具体的介绍详见:http://blog.csdn.net/q1302182594/article/details/8790613

    神经网络训练参数说明:http://blog.sina.com.cn/s/blog_5c9288aa0101gsu2.html

    5 拓展

    可以通过蒙卡特罗法产生大量数据点,通过神经网络进行分类。

    因为有一些数据点分布在神经网络的分界面附近,因此可以大约知道分界面的位置。

    N=1000;
    k1 = 1.1 + (1.6-1.1).*rand(1,N);
    k2 = 1.2 + (2.1-1.2).*rand(1,N);
    z=[k1;k2];
    z1=sim(net,z);
    for i=1:1000
        if z1(1,i)<0.5
             plot(z(1,i),z(2,i),'o');
                hold on
        end
        
        if z1(1,i)>0.5
             plot(z(1,i),z(2,i),'h');
        end
    end

    6.非监督学习

    clear
    p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90; 1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
    p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00; 1.28,2.00;1.30,1.96];
    p=[p1;p2]'
    pr=minmax(p)
    goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)]
    net = newlvq(pr,4,[0.6,0.4])
    net = train(net,p,goal)
    Y = sim(net,p)
    x=[1.24 1.80;1.28 1.84;1.40 2.04]'
    sim(net,x)
  • 相关阅读:
    Andrej Karpathy的char-rnn Python3版本
    【转载】各位设备爹 来说说不用效果器的牛逼乐队吧
    为什么原始人和小动物不需要艺术?
    子非我焉知我之怒?人与人的悲欢并不相通
    尼采喜欢跳舞?论“每一个不曾起舞的日子 都是对生命的辜负真的”的误译!
    Thinkpad已不是曾经的IBM Thinkpad,联想已不是曾经的联想
    简单二进制编码(SBE)
    挪威志愿消防员笑话
    挪威的概念消防车
    一些有意思的牛津辩题
  • 原文地址:https://www.cnblogs.com/youngsea/p/7471732.html
Copyright © 2011-2022 走看看