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
