BP神经网络分类应用

  DNA序列分类  作为研究DNA序列结构的尝试,提出以下对序列集合进行分类的问题:有20个已知类别的人工制造序列,其中序列标号1-10为A类,11-20为B类。请从中提取特征,构造分类方法,并用这些已知类别的序列,衡量你的方法是否足够好。然后用你认为满意的方法,对另外20个未标明类别的人工序列(标号21-40)进行分类,判断哪些属于A类,哪些属于B类,哪些既不属于A类又不属于B类。

  (一)问题分析

   采用DNA序列中4个字符的含量百分比对DNA序列进行分类。

  (二)模型建立

    (1)BP神经网络结构的确定

      我们选取三层结构的BP神经网络模型。

      输入层:将所提取的特征作为输入,即DNA序列中a,t,c,g的含量百分比作为BP神经网络的输入。显然,输入层有4个节点。

      输出层:BP神经网络的输出为DNA序列的分类结果,将A类DNA序列的输出定义为[1,0],B类DNA序列的输出定义为[0,1],因此,输出层有2个节点。

      隐含层:为确定隐含层节点个数l,我们参考下列公式:

          l=sqrt(n+m)+a;

      其中n为输入层节点数,m为输出层节点个数,a为1-10之间的常数。我们这里确定隐含层个数为11。

      综上所述,建立了一个4-11-2结构的三层BP神经网络,并选择双型s型函数(tansig)作为隐含层的传递函数,线性函数(purelin)作为输出层的传递函数,变学习动量梯度下降算法(traingdx)作为训练函数。

    (2)训练数据及测试数据的确定

      训练数据用来训练BP神经网络,测试数据用来测试网络的分类能力。但由于已知类别的DNA序列只有20条(标号1-20),比较少,因此,我们将这20条数据即作为训练数据,又作为测试数据。最后,用训练好的BP神经网络对标号为21-40的DNA序列进行分类。

    (3)BP神经网络的训练

  (三)模型求解

    利用MATLAB编程求解,在分类时某些DNA序列有时属于A类,有时属于B类。为此将程序运行100次(书上是1000次,电脑慢,就跑100次,效果也很好),统计分类结果:     

    DNA序号  21     22     23     24    25     26     27     28     29    30     31     32     33     34     35     36     37     38     39     40
    A类     12     55     100   17    92      20    99      1       99    28     27     50     28    99      99     47    95      9      24      12
    B类     88     45     0       83    8        80    1        99     1      72     73     50     72    1        1       53     5       91    76      88

从上表可以看出,DNA序列被分到A类或B类的次数明显的多,就可认为该DNA序列属于那一类。但是某些DNA序列被分到A、B类的次数非常相近(如标号22),因此,这些DNA序列即不属于A类又不属于B类,即无法用BP神经网络分类,需要作进一步分析。根据以上分析,我们得到最终的分类结果:
    A类:23、25、27、29、34、35、37;
    B类:21、24、26、28、30、31、33、38、39、40;
    即不属于A类又不属于B类:22、32、36。

MATLAB程序:

clc
clear all
%%=========================统计字符个数以及含量====================================
fid=fopen('exp12_4_3.txt','r')  %读取数据文件,返回文件标识符,文件打开成功,fid为正数,否则为-1。
i=1;                                 %计数
while (~feof(fid))                   %reof测试文件是否到最后一行,到最后一行返回1,否则为0
    data=fgetl(fid);                 %fgetl表示读取文件的一行,不包括换行符号
    a=length(find(data=='a'));       %统计字符a的个数
    t=length(find(data=='t'));       %统计字符t的个数
    c=length(find(data=='c'));       %统计字符c的个数
    g=length(find(data=='g'));       %统计字符g的个数
    e=length(find(data~='a'&data~='c'&data~='t'&data~='g')); %统计其它字符的个数
    DNA_num(i,:)=[a t c g e  a+c+t+g+e];     %将字符个数放到DNA_num矩阵中
    DNA_HanL(i,:)=[a/(a+c+t+g) t/(a+c+t+g) c/(a+c+t+g) g/(a+c+t+g)]; %计算a,t,c,g字符的含量百分比
    i=i+1;                           %文件行数加1
end
fclose(fid);                         %关闭文件
%%=====================BP神经网络训练==========================================
[n,m]=size(DNA_HanL);
for i=1:20                           %定义已知类DNA序列的输出
    if i<=10
        output(i,:)=[1,0];          %标号1-10为A类,输出为[1,0]
    else
        output(i,:)=[0,1];          %标号11-20为A类,输出为[0,1]
    end
end
train_output=output';               %神经网络训练的输出
train_input=DNA_HanL(1:20,:)';      %神经网络训练的输入
total=zeros(3,20);
for i=1:20
    total(1,i)=i+20;
end
for LL=1:100                         %程序运行1000次时,设置为1:1000
    in_num=4;                            %输入层节点个数
    mid_num=11;                          %隐含层节点个数
    out_num=2;                           %输出层节点个数
    TF1='tansig';TF2='purelin';          %TF1为隐含层传递函数,TF2为输出层传递函数
    net=newff(minmax(train_input),[mid_num,out_num],{TF1,TF2}); %创建BP神经网络
    net.trainFcn='traingdx';             %训练函数,变学习动量梯度下降算法
    net.trainParam.epochs=5000;          %以下为训练参数设置
    net.trainParam.lr=0.1;
    net.trainParam.mc=0.75;
    net.trainParam.goal=0.001;
    net=train(net,train_input,train_output);  %网络训练
    an=sim(net,train_input);             %网络测试,此处测试数据即训练数据
    for i=1:20                           %测试分类结果统计
        output_test_fore(i)=find(an(:,i)==max(an(:,i)));  %1表示分到A类,2表示分到B类
        output1(i)=find(train_output(:,i)==max(train_output(:,i)));
    end
    error=output_test_fore-output1;        %BP网络分类误差
    sim_input=DNA_HanL(21:40,:)';           %待分类数据
    anan=sim(net,sim_input);              %网络仿真,返回预测结果
    for i=1:20                            %预测分类结果统计
        output_sim_fore(i)=find(anan(:,i)==max(anan(:,i))); %1表示分到A类,2表示分到B类
    end
    out(LL,:)=output_sim_fore;          %预测分类结果
    
    for i=1:20
        if output_sim_fore(i)==1
            total(2,i)=total(2,i)+1;
        else
            total(3,i)=total(3,i)+1;
        end
    end
    
end

[nn,mm]=size(out);
for ii=1:mm
    a=length(find(out(:,ii)==1));
    b=length(find(out(:,ii)==2));
    ff(ii,:)=[ii+20 a b];
end
ff=ff'

  

Txt数据:

1.aggcacggaaaaacgggaataacggaggaggacttggcacggcattacacggaggacgaggtaaaggaggcttgtctacggccggaagtgaagggggatatgaccgcttgg
2.cggaggacaaacgggatggcggtattggaggtggcggactgttcggggaattattcggtttaaacgggacaaggaaggcggctggaacaaccggacggtggcagcaaagga
3.gggacggatacggattctggccacggacggaaaggaggacacggcggacatacacggcggcaacggacggaacggaggaaggagggcggcaatcggtacggaggcggcgga
4.atggataacggaaacaaaccagacaaacttcggtagaaatacagaagcttagatgcatatgttttttaaataaaatttgtattattatggtatcataaaaaaaggttgcga
5.cggctggcggacaacggactggcggattccaaaaacggaggaggcggacggaggctacaccaccgtttcggcggaaaggcggagggctggcaggaggctcattacggggag
6.atggaaaattttcggaaaggcggcaggcaggaggcaaaggcggaaaggaaggaaacggcggatatttcggaagtggatattaggagggcggaataaaggaacggcggcaca
7.atgggattattgaatggcggaggaagatccggaataaaatatggcggaaagaacttgttttcggaaatggaaaaaggactaggaatcggcggcaggaaggatatggaggcg
8.atggccgatcggcttaggctggaaggaacaaataggcggaattaaggaaggcgttctcgcttttcgacaaggaggcggaccataggaggcggattaggaacggttatgagg
9.atggcggaaaaaggaaatgtttggcatcggcgggctccggcaactggaggttcggccatggaggcgaaaatcgtgggcggcggcagcgctggccggagtttgaggagcgcg
10.tggccgcggaggggcccgtcgggcgcggatttctacaagggcttcctgttaaggaggtggcatccaggcgtcgcacgctcggcgcggcaggaggcacgcgggaaaaaacg
11.gttagatttaacgttttttatggaatttatggaattataaatttaaaaatttatattttttaggtaagtaatccaacgtttttattactttttaaaattaaatatttatt
12.gtttaattactttatcatttaatttaggttttaattttaaatttaatttaggtaagatgaatttggttttttttaaggtagttatttaattatcgttaaggaaagttaaa
13.gtattacaggcagaccttatttaggttattattattatttggattttttttttttttttttttaagttaaccgaattattttctttaaagacgttacttaatgtcaatgc
14.gttagtcttttttagattaaattattagattatgcagtttttttacataagaaaatttttttttcggagttcatattctaatctgtctttattaaatcttagagatatta
15.gtattatatttttttatttttattattttagaatataatttgaggtatgtgtttaaaaaaaatttttttttttttttttttttttttttttttaaaatttataaatttaa
16.gttatttttaaatttaattttaattttaaaatacaaaatttttactttctaaaattggtctctggatcgataatgtaaacttattgaatctatagaattacattattgat
17.gtatgtctatttcacggaagaatgcaccactatatgatttgaaattatctatggctaaaaaccctcagtaaaatcaatccctaaacccttaaaaaacggcggcctatccc
18.gttaattatttattccttacgggcaattaattatttattacggttttatttacaattttttttttttgtcctatagagaaattacttacaaaacgttattttacatactt
19.gttacattatttattattatccgttatcgataattttttacctcttttttcgctgagtttttattcttactttttttcttctttatataggatctcatttaatatcttaa
20.gtatttaactctctttactttttttttcactctctacattttcatcttctaaaactgtttgatttaaacttttgtttctttaaggattttttttacttatcctctgttat
21.tttagctcagtccagctagctagtttacaatttcgacaccagtttcgcaccatcttaaatttcgatccgtaccgtaatttagcttagatttggatttaaaggatttagattga
22.tttagtacagtagctcagtccaagaacgatgtttaccgtaacgtacgtaccgtacgctaccgttaccggattccggaaagccgattaaggaccgatcgaaaggg
23.cgggcggatttaggccgacggggacccgggattcgggacccgaggaaattcccggattaaggtttagcttcccgggatttagggcccggatggctgggaccc
24.tttagctagctactttagctatttttagtagctagccagcctttaaggctagctttagctagcattgttctttattgggacccaagttcgacttttacgatttagttttgaccgt
25.gaccaaaggtgggctttagggacccgatgctttagtcgcagctggaccagttccccagggtattaggcaaaagctgacgggcaattgcaatttaggcttaggcca
26.gatttactttagcatttttagctgacgttagcaagcattagctttagccaatttcgcatttgccagtttcgcagctcagttttaacgcgggatctttagcttcaagctttttac
27.ggattcggatttacccggggattggcggaacgggacctttaggtcgggacccattaggagtaaatgccaaaggacgctggtttagccagtccgttaaggcttag
28.tccttagatttcagttactatatttgacttacagtctttgagatttcccttacgattttgacttaaaatttagacgttagggcttatcagttatggattaatttagcttattttcga
29.ggccaattccggtaggaaggtgatggcccgggggttcccgggaggatttaggctgacgggccggccatttcggtttagggagggccgggacgcgttagggc
30.cgctaagcagctcaagctcagtcagtcacgtttgccaagtcagtaatttgccaaagttaaccgttagctgacgctgaacgctaaacagtattagctgatgactcgta
31.ttaaggacttaggctttagcagttactttagtttagttccaagctacgtttacgggaccagatgctagctagcaatttattatccgtattaggcttaccgtaggtttagcgt
32.gctaccgggcagtctttaacgtagctaccgtttagtttgggcccagccttgcggtgtttcggattaaattcgttgtcagtcgctcttgggtttagtcattcccaaaagg
33.cagttagctgaatcgtttagccatttgacgtaaacatgattttacgtacgtaaattttagccctgacgtttagctaggaatttatgctgacgtagcgatcgactttagcac
34.cggttagggcaaaggttggatttcgacccagggggaaagcccgggacccgaacccagggctttagcgtaggctgacgctaggcttaggttggaacccggaaa
35.gcggaagggcgtaggtttgggatgcttagccgtaggctagctttcgacacgatcgattcgcaccacaggataaaagttaagggaccggtaagtcgcggtagcc
36.ctagctacgaacgctttaggcgcccccgggagtagtcgttaccgttagtatagcagtcgcagtcgcaattcgcaaaagtccccagctttagccccagagtcgacg
37.gggatgctgacgctggttagctttaggcttagcgtagctttagggccccagtctgcaggaaatgcccaaaggaggcccaccgggtagatgccasagtgcaccgt
38.aacttttagggcatttccagttttacgggttattttcccagttaaactttgcaccattttacgtgttacgatttacgtataatttgaccttattttggacactttagtttgggttac
39.ttagggccaagtcccgaggcaaggaattctgatccaagtccaatcacgtacagtccaagtcaccgtttgcagctaccgtttaccgtacgttgcaagtcaaatccat
40.ccattagggtttatttacctgtttattttttcccgagaccttaggtttaccgtactttttaacggtttacctttgaaatttttggactagcttaccctggatttaacggccagttt

  

猜你喜欢

转载自www.cnblogs.com/zxhyxiao/p/9418779.html