目录
计算频率
欧氏距离判断法
Fisher判别函数
Bayes判别函数
针对序列建立模型,对DNA进行分类。DNA序列中存在着局部的和全局性的结构,充分挖掘序列的结构对理解DNA全序列有着重要的意义。
%计算A、C、G、T在序列中出现的频率
clear all
clc
a=[ 33 44 19 15
30 46 18 17
30 50 24 7
47 20 12 32
26 47 26 12
39 44 14 14
39 40 11 21
31 41 18 21
23 48 23 17
20 45 30 15];
b=zeros(10,4);
for i=1:10
for j=1:4
b(i,j)=a(i,j)/(a(i,1)+a(i,2)+a(i,3)+a(i,4));
end
end
b
Y = inv(X)
计算方阵X
的 逆矩阵。
X^(-1)
等效于inv(X)
。
x = A\b
的计算方式与x = inv(A)*b
不同,建议用于求解线性方程组。
%距离判别法中的线性判别函数
clear all
clc
a= [ 0.2973 0.3964 0.1712 0.1351
0.2703 0.4144 0.1622 0.1532
0.2703 0.4505 0.2162 0.0631
0.4234 0.1802 0.1081 0.2883
0.2342 0.4234 0.2342 0.1081
0.3514 0.3964 0.1261 0.1261
0.3514 0.3604 0.0991 0.1892
0.2793 0.3694 0.1622 0.1892
0.2072 0.4324 0.2072 0.1532
0.1818 0.4091 0.2727 0.1364];
b=[ 0.3545 0.1000 0.0455 0.5000
0.3273 0.1455 0.0273 0.5000
0.2545 0.1273 0.1000 0.5182
0.3000 0.1182 0.0818 0.5000
0.2909 0.0636 0 0.6455
0.3636 0.0909 0.0818 0.4636
0.3545 0.1364 0.2455 0.2636
0.2909 0.0909 0.1182 0.5000
0.2182 0.0727 0.1455 0.5636
0.2000 0.0636 0.1727 0.5636 ];
x=mean(a)';
y=mean(b)';
d=a';
for i=1:10
for j=1:4
d(j,i)=(d(j,i)-d(j,1));
end
end
s1=d*d'
e=b';
for i=1:10
for j=1:4
e(j,i)=(e(j,i)-e(j,1));
end
end
s2=e*e'
s=s1+s2;
f=s/(10+10-2);
njz=inv(f);
u=(njz*(x-y))'
v=u*(x+y)/2;
u*v
得出线性判别函数
%判别函数
function y=fun3(x1,x2,x3,x4)
y=0.0765*x1+7.7047*x2-2.8483*x3-4.4863*x4+0.0204;
使用线性判别函数对DNA序列进行归类,若w(x)>0则为A类,反之为B类。
clear all
clc
m=[0.2973 0.3964 0.1712 0.1351
0.2703 0.4144 0.1622 0.1532
0.2703 0.4505 0.2162 0.0631
0.4234 0.1802 0.1081 0.2883
0.2342 0.4234 0.2342 0.1081
0.3514 0.3964 0.1261 0.1261
0.3514 0.3604 0.0991 0.1892
0.2793 0.3694 0.1622 0.1892
0.2072 0.4324 0.2072 0.1532
0.1818 0.4091 0.2727 0.1364];
a=[ 0.3545 0.1000 0.0455 0.5000
0.3273 0.1455 0.0273 0.5000
0.2545 0.1273 0.1000 0.5182
0.3000 0.1182 0.0818 0.5000
0.2909 0.0636 0 0.6455
0.3636 0.0909 0.0818 0.4636
0.3545 0.1364 0.2455 0.2636
0.2909 0.0909 0.1182 0.5000
0.2182 0.0727 0.1455 0.5636
0.2000 0.0636 0.1727 0.5636 ];
for i=1:10
b(i,1)=fun3(a(i,1),a(i,2),a(i,3),a(i,4));
c(i,1)=fun3(m(i,1),m(i,2),m(i,3),m(i,4));
end
c
b
得到y0便于后续判断
%fisher判别法
clear all
clc
x=[0.2973 0.3964 0.1712 0.1351
0.2703 0.4144 0.1622 0.1532
0.2703 0.4505 0.2162 0.0631
0.4234 0.1802 0.1081 0.2883
0.2342 0.4234 0.2342 0.1081
0.3514 0.3964 0.1261 0.1261
0.3514 0.3604 0.0991 0.1892
0.2793 0.3694 0.1622 0.1892
0.2072 0.4324 0.2072 0.1532
0.1818 0.4091 0.2727 0.1364];
x1=[0.3545 0.1000 0.0455 0.5000
0.3273 0.1455 0.0273 0.5000
0.2545 0.1273 0.1000 0.5182
0.3000 0.1182 0.0818 0.5000
0.2909 0.0636 0 0.6455
0.3636 0.0909 0.0818 0.4636
0.3545 0.1364 0.2455 0.2636
0.2909 0.0909 0.1182 0.5000
0.2182 0.0727 0.1455 0.5636
0.2000 0.0636 0.1727 0.5636];
a=mean(x)';
b=mean(x1)';
x=x';
x1=x1';
for i=1:4
for j=1:10
x(i,j)=x(i,j)-a(i,1);
x1(i,j)=x1(i,j)-b(i,1);
end
end
s=x*x';
s1=x1*x1';
c=1/18*(s+s1)
m=inv(c);
for i=1:4
n(i,1)=a(i,1)-b(i,1);
end
z=1/18*m*n
y=0;
y1=0;
for i=1:4
y=a(i,1)*z(i,1)+y;
y1=b(i,1)*z(i,1)+y1;
end
y0=(10*y+10*y1)/20;
y0
根据z的值得到判别函数
%判别函数
function y=fun5(x1,x2,x3,x4);
y=-873.0364*x1-869.4539*x2-875.4649*x3-875.5247*x4;
归类:y>y0为A类,反之为B类
%调用函数
clear all
clc
f=[0.2973 0.3964 0.1712 0.1351
0.2703 0.4144 0.1622 0.1532
0.2703 0.4505 0.2162 0.0631
0.4234 0.1802 0.1081 0.2883
0.2342 0.4234 0.2342 0.1081
0.3514 0.3964 0.1261 0.1261
0.3514 0.3604 0.0991 0.1892
0.2793 0.3694 0.1622 0.1892
0.2072 0.4324 0.2072 0.1532
0.1818 0.4091 0.2727 0.1364];
m=[0.3545 0.1000 0.0455 0.5000
0.3273 0.1455 0.0273 0.5000
0.2545 0.1273 0.1000 0.5182
0.3000 0.1182 0.0818 0.5000
0.2909 0.0636 0 0.6455
0.3636 0.0909 0.0818 0.4636
0.3545 0.1364 0.2455 0.2636
0.2909 0.0909 0.1182 0.5000
0.2182 0.0727 0.1455 0.5636
0.2000 0.0636 0.1727 0.5636];
for i=1:10
b(i,1)=fun5(f(i,1),f(i,2),f(i,3),f(i,4));
h(i,1)=fun5(m(i,1),m(i,2),m(i,3),m(i,4));
end
b
h
确定函数
%贝叶斯判别法
clear all
clc
A=[ 0.2973 0.3964 0.1712 0.1351
0.2703 0.4144 0.1622 0.1532
0.2703 0.4505 0.2162 0.0631
0.4234 0.1802 0.1081 0.2883
0.2342 0.4234 0.2342 0.1081
0.3514 0.3964 0.1261 0.1261
0.3514 0.3604 0.0991 0.1892
0.2793 0.3694 0.1622 0.1892
0.2072 0.4324 0.2072 0.1532
0.1818 0.4091 0.2727 0.1364];
a=(mean(A))';
d=A';
B=[0.3545 0.1000 0.0455 0.5000
0.3273 0.1455 0.0273 0.5000
0.2545 0.1273 0.1000 0.5182
0.3000 0.1182 0.0818 0.5000
0.2909 0.0636 0 0.6455
0.3636 0.0909 0.0818 0.4636
0.3545 0.1364 0.2455 0.2636
0.2909 0.0909 0.1182 0.5000
0.2182 0.0727 0.1455 0.5636
0.2000 0.0636 0.1727 0.5636];
b=(mean(B))';
% c=zeros(3);
for i=1:10
for j=1:4
d(j,i)=(d(j,i)-a(j,1));
end
end
S1=d*d'
e=B';
for x=1:10
for y=1:4
e(y,x)=(e(y,x)-b(y,1));
end
end
S2=e*e';
s=S1+S2;
r=inv(s/18);
log(0.5)-0.5*a'*r*a
r*a
log(0.5)-0.5*b'*r*b
r*b
进行分类
%判别函数
clear all
clc
format long;
a=[0.2973 0.3964 0.1712 0.1351
0.2703 0.4144 0.1622 0.1532
0.2703 0.4505 0.2162 0.0631
0.4234 0.1802 0.1081 0.2883
0.2342 0.4234 0.2342 0.1081
0.3514 0.3964 0.1261 0.1261
0.3514 0.3604 0.0991 0.1892
0.2793 0.3694 0.1622 0.1892
0.2072 0.4324 0.2072 0.1532
0.1818 0.4091 0.2727 0.1364];
b=[0.3545 0.1000 0.0455 0.5000
0.3273 0.1455 0.0273 0.5000
0.2545 0.1273 0.1000 0.5182
0.3000 0.1182 0.0818 0.5000
0.2909 0.0636 0 0.6455
0.3636 0.0909 0.0818 0.4636
0.3545 0.1364 0.2455 0.2636
0.2909 0.0909 0.1182 0.5000
0.2182 0.0727 0.1455 0.5636
0.2000 0.0636 0.1727 0.5636];
for i=1:10
c(i,1)=fun7_1(a(i,1),a(i,2),a(i,3),a(i,4));
d(i,1)=fun7_2(a(i,1),a(i,2),a(i,3),a(i,4));
e(i,1)=fun7_1(b(i,1),b(i,2),b(i,3),b(i,4));
f(i,1)=fun7_2(b(i,1),b(i,2),b(i,3),b(i,4));
end
c
d
e
f
最终分类结果表明,欧式距离法、Fisher判别法、Bayes判别法这三种方法的判对率分别为90%,95%,80%。故用Fisher判别法判别DNA分类较好。