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,:)';      %神經網絡訓練的輸入
 for LL=1:10                          %程序運行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;          %預測分類結果
 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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM