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)
  • 相关阅读:
    Android 重写系统Crash处理类,保存Crash信息到SD卡 和 完美退出程序的方法
    LeetCode第二十四题-交换链表中节点值
    LeetCode第二十三题-合并n个有序链表
    LeetCode第二十二题-创建n对括号
    LeetCode第二十一题-对两个有序链表排序
    LeetCode第二十题-有效的括号
    LeetCode第十九题-链表节点的删除
    LeetCode第十八题-四数之和
    LeetCode第十七题-电话号码的字母组合
    LeetCode第十六题-找出数组中三数之和最接近目标值的答案
  • 原文地址:https://www.cnblogs.com/youngsea/p/7471732.html
Copyright © 2011-2022 走看看