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

📄 grow.m

📁 IDARP 分類演算法..(使用Matlab開發)
💻 M
字号:
function [lbs,ubs]=Grow(PBags,relevant)
%Given the positive bags and relevant features, expand a APR using the backfitting algorithm.

if(sum(relevant)==0)
    error('no relevant features');
end

size1=size(PBags);
num_bags=size1(1);
size2=size(relevant);
dimension=size2(2);

%映射相关属性
temp_pbags=cell(num_bags,1);
for i=1:num_bags
    count=0;
    for j=1:dimension
        if(relevant(1,j)==1)
            count=count+1;
            temp_pbags{i,1}(:,count)=PBags{i,1}(:,j);
        end
    end
end
PBags=temp_pbags;

%constructing minimax APR
for i=1:sum(relevant)
    tempmin=-1e20;
    tempmax=1e20;
    for j=1:num_bags
        temp1=min(PBags{j,1}(:,i));
        temp2=max(PBags{j,1}(:,i));
        if(temp2<tempmax)
            tempmax=temp2;
        end
        if(temp1>tempmin)
            tempmin=temp1;
        end
    end
    minimax(i,1)=tempmax;
    minimax(i,2)=tempmin;
end
center_pointer=(minimax(i,1)+minimax(i,2))/2;

%choosing initial "seed" positive instance
min_distance=1e20;
for i=1:num_bags
    size1=size(PBags{i,1});
    for j=1:size1(1)
        temp_distance=sum((center_pointer'-PBags{i,1}(j,:)).^2);
        if(temp_distance<min_distance)
            min_distance=temp_distance;
            starting_bags=i;
            starting_inst=j;
        end
    end
end

chosen=zeros(num_bags,sum(relevant));
chosen(1,:)=PBags{starting_bags,1}(starting_inst,:);
usage=zeros(1,num_bags);
usage(1,starting_bags)=1;
pointer_bags=zeros(1,num_bags);
pointer_instances=zeros(1,num_bags);
pointer_bags(1,1)=starting_bags;
pointer_instances(1,1)=starting_inst;

for i=2:num_bags
    %greedy step
    curAPR=minmax(chosen(1:(i-1),:)');
    curSize=sum(curAPR(:,2)-curAPR(:,1));
    incremental=1e20;
    for j=1:num_bags
        if(usage(1,j)==0)
            tempsize=size(PBags{j,1});
            for k=1:tempsize(1)
                tempAPR=minmax([curAPR';PBags{j,1}(k,:)]');
                temp_increment=sum(tempAPR(:,2)-tempAPR(:,1))-curSize;
                if(temp_increment<incremental)
                    incremental=temp_increment;
                    pointer_bags(1,i)=j;
                    pointer_instances(1,i)=k;
                    chosen(i,:)=PBags{j,1}(k,:);
                end
            end
        end
    end
    usage(1,pointer_bags(1,i))=1;
    
    %backfitting
    changed=1;
    while(changed==1)
        changed=0;
        for m=1:i
            tempAPR=[chosen(1:(m-1),:);chosen((m+1):i,:)];
            tempAPR=minmax(tempAPR');
            tempsize=sum(tempAPR(:,2)-tempAPR(:,1));
            incremental=1e20;
            cur_instance=pointer_instances(1,m);
            cur_bag=pointer_bags(1,m);
            size_cur_bag=size(PBags{cur_bag,1});
            for n=1:size_cur_bag(1)
                tempAPR1=minmax([tempAPR';PBags{cur_bag,1}(n,:)]');
                temp_increment=sum(tempAPR1(:,2)-tempAPR1(:,1))-tempsize;
                if(temp_increment<incremental)
                    incremental=temp_increment;
                    pointer_instances(1,m)=n;
                    chosen(m,:)=PBags{cur_bag,1}(n,:);
                end
            end
            if(pointer_instances(1,m)~=cur_instance)
                changed=1;
            end
        end
    end
end

resultAPR=minmax(chosen');
lbs=resultAPR(:,1)';
ubs=resultAPR(:,2)';
            

⌨️ 快捷键说明

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