⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sctu.m

📁 bayes树的针对生物数据剪接位点识别的实现算法
💻 M
字号:
function[tree,cacu,nn]=sctu(trt,trf,train_t,train_f,l)

infor=zeros(l,l);
num_i=l*(l-1)/2;    %计算的互信息的个数
for i=1:l           %计算属性之间的互信息
    for j=(i+1):l
        [h,num_t,num_f]=caculatei(trt,trf,train_t,train_f,l,i,j);
        infor(i,j)=h;
    end
end

tree=zeros(l,l);%边的邻接矩阵
for m=1:l
    vv(m)=1;    %vv表示节点集合,为0的结点是没有添加到贝叶斯树中的结点
end

vv(1)=0;    %表示将表示属性1的结点添加到贝叶斯树中
vl(1,1)=1;
vl(2,1)=1;
vl(3,1)=-1;

for m=2:l   
    vl(1,m)=1;
    vl(2,m)=m;
    vl(3,m)=infor(1,m); %vl里保存的是与树节点集合相邻结点最大权重边,第一行中结点为树节点,第二行中结点为非树节点
end

while   equal_jz(vv,zeros(1,l))==0 
    max=-1;
    max_v=0;
    max_u=0;
    for m=1:l           %寻找与树节点相关信息最大的结点,即寻找以树节点为一个端点的最大权重的边
        if vl(3,m)>max
            max_v=vl(1,m);
            max_u=vl(2,m);
            max=vl(3,m);
        end
    end

    vv(max_u)=0;    %将寻找的最大权重边的另一点添加入树节点集合中
    vl(3,max_u)=-1;
    tree(max_v,max_u)=1;        %将寻找的最大权重边添加到树中,保存在边的邻接矩阵中
    
    for m=1:l           %更新vl信息,vl里保存的是与树节点集合相邻结点最大权重边,第一行中结点为树节点,第二行中结点为非树节点
        if vv(m)~=0
            if infor(max_u,m)>vl(3,m)
                vl(1,m)=max_u;
                vl(2,m)=m;
                vl(3,m)=infor(max_u,m);
            elseif infor(m,max_u)>vl(3,m)
                vl(1,m)=max_u;
                vl(2,m)=m;
                vl(3,m)=infor(m,max_u);  
            end
        end
    end
end

for n=1:l               %将无向无环图转换为有向无环图,即树,tree为生成树的邻接矩阵~
    uu(n)=n;
end

for m=1:l           
    for n=1:l
        if tree(m,n)==1
            tree(n,m)=1;
        elseif tree(n,m)==1
            tree(m,n)=1;
        end
    end
end
uu(1)=0;
vv(1)=1;
nn=0;
while equal_jz(uu,zeros(1,l))==0            %cacu表示通过树结构得到的需要计算的条件概率,其中分类属性省略表示
    for m=1:l
        if vv(m)~=0
            for n=1:l
                if tree(m,n)==1&vv(n)==0
                    tree(m,n)=1;
                    tree(n,m)=-1;
                    nn=nn+1;
                    cacu(1,nn)=m;
                    cacu(2,nn)=n;
                    uu(n)=0;
                    vv(n)=n; 
                end
            end
            vv(m)=0;
        end
    end
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -