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

📄 mingini.m

📁 决策树
💻 M
字号:
function [min_gini,attri]=mingini(sample,attribute,classname,object)
%load classname;
%attribute=input('please input the attribute:','s');
mar=zeros(sample,2);
switch attribute
    case 1
        leucocyte_train=zeros(sample,2);
        disp('1.the attribute is leucocyte !');
        leucocyte_train(:,1)=object;
        leucocyte_train(:,2)=[1:sample];
        leucocyte_train=sortrows(leucocyte_train,1);
       % xlswrite('attribute.xls',leucocyte_train,'sheet1','a2:b701');
        mar=leucocyte_train;
        disp('the mingini is :');
       gini=zeros(sample,1);
        for i=1:sample
            k=0;
            m=0;
           for j=1:i
             if classname(mar(j,2),1)==1       % 第一类得值为“1”的个数
              k=k+1;
             end
           end
           for j=1:(sample-i)
              if classname(mar((i+j),2),1)==1  % 第二类得值为“1”的个数
                 m=m+1;
              end
           end
           ginic1=1-(k/i)^2-((i-k)/i)^2;      % 第一类的gini值
           if i==sample                            % 第二类的gini值
               ginic2=0;
           else
                ginic2=1-(m/(sample-i))^2-((sample-i-m)/(sample-i))^2;
           end
                gini(i,1)=(i/sample)*ginic1+((sample-i)/sample)*ginic2;   % 总的gini值
        end
         min_gini=min(gini)  %求 attribute 的最小gini
       %  xlswrite('using.xls',min_gini,'sheet1','a2');
       attri=1;
    case 2
        middle_train=zeros(sample,2);
        disp('2.the attribute is middle !');
        middle_train(:,1)=object;
        middle_train(:,2)=[1:sample];
        middle_train=sortrows(middle_train,1);
     %   xlswrite('attribute.xls',middle_train,'sheet1','c2:d701');
        mar=middle_train;
        disp('the mingini is :');
        gini=zeros(sample,1);
        for i=1:sample
            k=0;
            m=0;
           for j=1:i
             if classname(mar(j,2),1)==1       % 第一类得值为“1”的个数
              k=k+1;
             end
           end
           for j=1:(sample-i)
              if classname(mar((i+j),2),1)==1  % 第二类得值为“1”的个数
                 m=m+1;
              end
           end
           ginic1=1-(k/i)^2-((i-k)/i)^2;      % 第一类的gini值
           if i==sample                            % 第二类的gini值
               ginic2=0;
           else
                ginic2=1-(m/(sample-i))^2-((sample-i-m)/(sample-i))^2;
           end
                gini(i,1)=(i/sample)*ginic1+((sample-i)/sample)*ginic2;   % 总的gini值
        end
         min_gini=min(gini)  %求 attribute 的最小gini
       %  xlswrite('using.xls',min_gini,'sheet1','a3');
       attri=2;
    case 3
        lymph_train=zeros(sample,2);
        disp('3.the attribute is lymph !');
        lymph_train(:,1)=object;
        lymph_train(:,2)=[1:sample];
        lymph_train=sortrows(lymph_train,1);
     %   xlswrite('attribute.xls',lymph_train,'sheet1','e2:f701');
        mar=lymph_train;
        disp('the mingini is :');
        gini=zeros(sample,1);
        for i=1:sample
            k=0;
            m=0;
           for j=1:i
             if classname(mar(j,2),1)==1       % 第一类得值为“1”的个数
              k=k+1;
             end
           end
           for j=1:(sample-i)
              if classname(mar((i+j),2),1)==1  % 第二类得值为“1”的个数
                 m=m+1;
              end
           end
           ginic1=1-(k/i)^2-((i-k)/i)^2;      % 第一类的gini值
           if i==sample                            % 第二类的gini值
               ginic2=0;
           else
                ginic2=1-(m/(sample-i))^2-((sample-i-m)/(sample-i))^2;
           end
                gini(i,1)=(i/sample)*ginic1+((sample-i)/sample)*ginic2;   % 总的gini值
        end
         min_gini=min(gini)  %求 attribute 的最小gini
      %   xlswrite('using.xls',min_gini,'sheet1','a4');
      attri=3;
    case 4
        erythrocyte_train=zeros(sample,2);
        disp('4.the attribute is erythrocyte !');
        erythrocyte_train(:,1)=object;
        erythrocyte_train(:,2)=[1:sample];
        erythrocyte_train=sortrows(erythrocyte_train,1);
     %    xlswrite('attribute.xls',erythrocyte_train,'sheet1','g2:h701');
        mar=erythrocyte_train ;
        disp('the mingini is :');
               gini=zeros(sample,1);
        for i=1:sample
            k=0;
            m=0;
           for j=1:i
             if classname(mar(j,2),1)==1       % 第一类得值为“1”的个数
              k=k+1;
             end
           end
           for j=1:(sample-i)
              if classname(mar((i+j),2),1)==1  % 第二类得值为“1”的个数
                 m=m+1;
              end
           end
           ginic1=1-(k/i)^2-((i-k)/i)^2;      % 第一类的gini值
           if i==sample                            % 第二类的gini值
               ginic2=0;
           else
                ginic2=1-(m/(sample-i))^2-((sample-i-m)/(sample-i))^2;
           end
                gini(i,1)=(i/sample)*ginic1+((sample-i)/sample)*ginic2;   % 总的gini值
        end
         min_gini=min(gini)  %求 attribute 的最小gini
     %    xlswrite('using.xls',min_gini,'sheet1','a5');
     attri=4;
    case 5
        hypo_train=zeros(sample,2);
        disp('5.the attribute is hypo !');
        hypo_train(:,1)=object;
        hypo_train(:,2)=[1:sample];
        hypo_train=sortrows(hypo_train,1);
   %     xlswrite('attribute.xls',hypo_train,'sheet1','i2:j701');
        mar=hypo_train;
        disp('the mingini is :');
               gini=zeros(sample,1);
        for i=1:sample
            k=0;
            m=0;
           for j=1:i
             if classname(mar(j,2),1)==1       % 第一类得值为“1”的个数
              k=k+1;
             end
           end
           for j=1:(sample-i)
              if classname(mar((i+j),2),1)==1  % 第二类得值为“1”的个数
                 m=m+1;
              end
           end
           ginic1=1-(k/i)^2-((i-k)/i)^2;      % 第一类的gini值
           if i==sample                            % 第二类的gini值
               ginic2=0;
           else
                ginic2=1-(m/(sample-i))^2-((sample-i-m)/(sample-i))^2;
           end
                gini(i,1)=(i/sample)*ginic1+((sample-i)/sample)*ginic2;   % 总的gini值
        end
         min_gini=min(gini)  %求 attribute 的最小gini
     %    xlswrite('using.xls',min_gini,'sheet1','a6');
     attri=5;
    case 6
        platelet_train=zeros(sample,2);
        disp('6.the attribute is platelet !');
        platelet_train(:,1)=object;
        platelet_train(:,2)=[1:sample];
        platelet_train=sortrows(platelet_train,1);
    %     xlswrite('attribute.xls',platelet_train,'sheet1','k2:l701');
        mar=platelet_train;
        disp('the mingini is :');
               gini=zeros(sample,1);
        for i=1:sample
            k=0;
            m=0;
           for j=1:i
             if classname(mar(j,2),1)==1       % 第一类得值为“1”的个数
              k=k+1;
             end
           end
           for j=1:(sample-i)
              if classname(mar((i+j),2),1)==1  % 第二类得值为“1”的个数
                 m=m+1;
              end
           end
           ginic1=1-(k/i)^2-((i-k)/i)^2;      % 第一类的gini值
           if i==sample                            % 第二类的gini值
               ginic2=0;
           else
                ginic2=1-(m/(sample-i))^2-((sample-i-m)/(sample-i))^2;
           end
                gini(i,1)=(i/sample)*ginic1+((sample-i)/sample)*ginic2;   % 总的gini值
        end
         min_gini=min(gini)  %求 attribute 的最小gini
     %    xlswrite('using.xls',min_gini,'sheet1','a7');
     attri=6;
    otherwise
        return;
end
%clear

⌨️ 快捷键说明

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