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

📄 build_tree.m

📁 决策树
💻 M
📖 第 1 页 / 共 4 页
字号:
        if classificate_condition~=0
            flag=1;
            for i=1:attribute_num
                if attribute_use_1(i,1)==0;
                    all_gini(1,flag)=mingini(class_num_1_0,i,class_1_0,data_2((class_num+1):(class_num+class_num_1_0),(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_1_0]=min(all_gini);
            attribute_use_1_0(attri(1,attribute_1_0),1)=1;
            cla_point_1_0=attri(1,attribute_1_0);
            disp('................................................the classification 1_0 !!')
            [class_num_1_0_0,class_value_1_0,class_1_0_0,class_1_0_1]=classificate(class_num_1_0,attri(1,attribute_1_0),class_1_0,data_2((1+class_num):(class_num+class_num_1_0),(attri(1,attribute_1_0)*2-1)));
            clear  all_gini  min flag attri;
            attribute_use_1_0_0=attribute_use_1_0;
            attribute_use_1_0_1=attribute_use_1_0;
        else
            class_value_1_0=0;
            cla_point_1_0=0;
            class_num_1_0_0=0;
        end
    else
        class_value_1_0=0;
        cla_point_1_0=0;
        class_num_1_0_0=0;
    end

%分第二层右节点的右节点

    if num-class_num-class_num_1_0>=element_num
        class_split_a=split(class_1_1(:,1),num-class_num-class_num_1_0);
        if class_split_a<class_split
            classsplit=1;
        else
            classsplit=0;
        end
        classificate_condition=classsplit*attribute_num_use*tree_level;
        if classificate_condition~=0
            flag=1;
            for i=1:attribute_num
                if attribute_use_1(i,1)==0;
                    all_gini(1,flag)=mingini((num-class_num-class_num_1_0),i,class_1_1,data_2((class_num+class_num_1_0+1):num,(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_1_1]=min(all_gini);
            attribute_use_1_1(attri(1,attribute_1_1),1)=1;
            cla_point_1_1=attri(1,attribute_1_1);
            disp('................................................the classification 1_1 !!')
            [class_num_1_1_0,class_value_1_1,class_1_1_0,class_1_1_1]=classificate((num-class_num-class_num_1_0),attri(1,attribute_1_1),class_1_1,data_2((class_num+class_num_1_0+1):num,(attri(1,attribute_1_1)*2-1)));
            attribute_use_1_1_0=attribute_use_1_1;
            attribute_use_1_1_1=attribute_use_1_1;
            clear  all_gini attribute_use attribute_use_0 attribute_use_1  min flag attri;
        else
            class_value_1_1=0;
            cla_point_1_1=0;
            class_num_1_1_0=0;
        end
    else
        class_value_1_1=0;
        cla_point_1_1=0;
        class_num_1_1_0=0;
    end
else
    class_value_1_1=0;
    class_value_1_0=0;
    cla_point_1_1=0;
    class_num_1_1_0=0;
    cla_point_1_0=0;
    class_num_1_0_0=0;
end

tree_level=tree_level-1;

data_3_0=chongpai_3_0(class_num_0_0,class_num,data_2(1:class_num,:),cla_point_0_0,cla_point_0_1);
data_3_1=chongpai_3_1(class_num_1_0,num-class_num-class_num_1_0,data_2(class_num+1:num,:),cla_point_1_0,cla_point_1_1);
%clear data_2;
for i=1:class_num
    data_3(i,:)=data_3_0(i,:);
end
for i=1:num-class_num
    data_3(class_num+i,:)=data_3_1(i,:);
end
attribute_num_use=attribute_num_use-1;
clear data_3_0 data_3_1 ;
%分第三层0_0_0节点

if class_num_0_0_0~=0;
    if class_num_0_0_0>=element_num
        class_split_a=split(class_0_0_0(:,1),class_num_0_0_0);
        if class_split_a<class_split
            classsplit=1;
        else
            classsplit=0;
        end
        classificate_condition=classsplit*attribute_num_use*tree_level;
        if classificate_condition~=0
            flag=1;
            for i=1:attribute_num
                if attribute_use_0_0(i,1)==0;
                    all_gini(1,flag)=mingini(class_num_0_0_0,i,class_0_0_0,data_3(1:class_num_0_0_0,(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_0_0_0]=min(all_gini);
            attribute_use_0_0_0(attri(1,attribute_0_0_0),1)=1;
            cla_point_0_0_0=attri(1,attribute_0_0_0);
            disp('................................................the classification 0_0_0 !!')
            [class_num_0_0_0_0,class_value_0_0_0,class_0_0_0_0,class_0_0_0_1]=classificate(class_num_0_0_0,attri(1,attribute_0_0_0),class_0_0_0,data_3(1:class_num_0_0_0,(attri(1,attribute_0_0_0)*2-1)));
            attribute_use_0_0_0_0=attribute_use_0_0_0;
            attribute_use_0_0_0_1=attribute_use_0_0_0;
            clear  all_gini  min flag attri;
        else
            class_value_0_0_0=0;
            cla_point_0_0_0=0;
            class_num_0_0_0_0=0;
        end
    else
        class_value_0_0_0=0;
        cla_point_0_0_0=0;
        class_num_0_0_0_0=0;
    end

%分第三层0_0_1节点

    if class_num_0_0-class_num_0_0_0>=element_num
        class_split_a=split(class_0_0_1(:,1),class_num_0_0-class_num_0_0_0);
        if class_split_a<class_split
            classsplit=1;
        else
            classsplit=0;
        end
        classificate_condition=classsplit*attribute_num_use*tree_level;
        if classificate_condition~=0
            flag=1;
            for i=1:attribute_num
                if attribute_use_0_0(i,1)==0;
                    all_gini(1,flag)=mingini((class_num_0_0-class_num_0_0_0),i,class_0_0_1,data_3((class_num_0_0_0+1):class_num_0_0,(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_0_0_1]=min(all_gini);
            attribute_use_0_0_1(attri(1,attribute_0_0_1),1)=1;
            cla_point_0_0_1=attri(1,attribute_0_0_1);
            disp('................................................the classification 0_0_1 !!')
            [class_num_0_0_1_0,class_value_0_0_1,class_0_0_1_0,class_0_0_1_1]=classificate(class_num_0_0-class_num_0_0_0,attri(1,attribute_0_0_1),class_0_0_1,data_3((class_num_0_0_0+1):class_num_0_0,(attri(1,attribute_0_0_1)*2-1)));
            attribute_use_0_0_1_0=attribute_use_0_0_1;
            attribute_use_0_0_1_1=attribute_use_0_0_1;
            clear  all_gini  min flag attri;
        else
            class_value_0_0_1=0;
            cla_point_0_0_1=0;
            class_num_0_0_1_0=0;
        end
    else
        class_value_0_0_1=0;
        cla_point_0_0_1=0;
        class_num_0_0_1_0=0;
    end
else
    class_value_0_0_1=0;
    class_value_0_0_0=0;
    cla_point_0_0_0=0;
    class_num_0_0_0_0=0;
    cla_point_0_0_1=0;
    class_num_0_0_1_0=0;
end
%分第三层0_1_0节点
if class_num_0_1_0~=0
    if class_num_0_1_0>=element_num
        class_split_a=split(class_0_1_0(:,1),class_num_0_1_0);
        if class_split_a<class_split
            classsplit=1;
        else
            classsplit=0;
        end
        classificate_condition=classsplit*attribute_num_use*tree_level;
        if classificate_condition~=0
            flag=1;
            for i=1:attribute_num
                if attribute_use_0_1(i,1)==0;
                    all_gini(1,flag)=mingini(class_num_0_1_0,i,class_0_1_0,data_3((class_num_0_0+1):(class_num_0_0+class_num_0_1_0),(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_0_1_0]=min(all_gini);
            attribute_use_0_1_0(attri(1,attribute_0_1_0),1)=1;
            cla_point_0_1_0=attri(1,attribute_0_1_0);
            disp('................................................the classification 0_1_0 !!')
            [class_num_0_1_0_0,class_value_0_1_0,class_0_1_0_0,class_0_1_0_1]=classificate(class_num_0_1_0,attri(1,attribute_0_1_0),class_0_1_0,data_3((class_num_0_0+1):(class_num_0_0+class_num_0_1_0),(attri(1,attribute_0_1_0)*2-1)));
            attribute_use_0_1_0_0=attribute_use_0_1_0;
            attribute_use_0_1_0_1=attribute_use_0_1_0;
            clear  all_gini  min flag attri;
        else
            class_value_0_1_0=0;
            cla_point_0_1_0=0;
            class_num_0_1_0_0=0;
        end
    else
        class_value_0_1_0=0;
        cla_point_0_1_0=0;
        class_num_0_1_0_0=0;
    end

%分第_0_1_1 节点

    if class_num-class_num_0_0-class_num_0_1_0>=element_num
        class_split_a=split(class_0_1_1(:,1),class_num-class_num_0_0-class_num_0_1_0);
        if class_split_a<class_split
            classsplit=1;
        else
            classsplit=0;
        end
        classificate_condition=classsplit*attribute_num_use*tree_level;
        if classificate_condition~=0
            flag=1;
            for i=1:attribute_num
                if attribute_use_0_1(i,1)==0;
                    all_gini(1,flag)=mingini(class_num-class_num_0_0-class_num_0_1_0,i,class_0_1_1,data_3((class_num_0_0+class_num_0_1_0+1):class_num,(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_0_1_1]=min(all_gini);
            attribute_use_0_1_1(attri(1,attribute_0_1_1),1)=1;
            cla_point_0_1_1=attri(1,attribute_0_1_1);
            disp('................................................the classification 0_1_1 !!')
            [class_num_0_1_1_0,class_value_0_1_1,class_0_1_1_0,class_0_1_1_1]=classificate(class_num-class_num_0_0-class_num_0_1_0,attri(1,attribute_0_1_1),class_0_1_1,data_3((class_num_0_0+class_num_0_1_0+1):class_num,(attri(1,attribute_0_1_1)*2-1)));
            attribute_use_0_1_1_0=attribute_use_0_1_1;
            attribute_use_0_1_1_1=attribute_use_0_1_1;
            clear  all_gini  min flag attri;
        else
            class_value_0_1_1=0;
            cla_point_0_1_1=0;
            class_num_0_1_1_0=0;
        end
    else
        class_value_0_1_1=0;
        cla_point_0_1_1=0;
        class_num_0_1_1_0=0;
    end
else
    class_value_0_1_1=0;
    class_value_0_1_0=0;
    cla_point_0_1_0=0;
    class_num_0_1_0_0=0;
    cla_point_0_1_1=0;
    class_num_0_1_1_0=0;
end

if class_num_1_0_0~=0
%分第三层1_0_0节点

    if class_num_1_0_0>=element_num
        class_split_a=split(class_1_0_0(:,1),class_num_1_0_0);
        if class_split_a<class_split
            classsplit=1;
        else
            classsplit=0;
        end
        classificate_condition=classsplit*attribute_num_use*tree_level;
        if classificate_condition~=0
            flag=1;
            for i=1:attribute_num
                if attribute_use_1_0(i,1)==0;
                    all_gini(1,flag)=mingini(class_num_1_0_0,i,class_1_0_0,data_3((class_num+1):(class_num+class_num_1_0_0),(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_1_0_0]=min(all_gini);
            attribute_use_1_0_0(attri(1,attribute_1_0_0),1)=1;
            cla_point_1_0_0=attri(1,attribute_1_0_0);
            disp('................................................the classification 1_0_0 !!')
            [class_num_1_0_0_0,class_value_1_0_0,class_1_0_0_0,class_1_0_0_1]=classificate(class_num_1_0_0,attri(1,attribute_1_0_0),class_1_0_0,data_3((class_num+1):(class_num+class_num_1_0_0),(attri(1,attribute_1_0_0)*2-1)));
            attribute_use_1_0_0_0=attribute_use_1_0_0;
            attribute_use_1_0_0_1=attribute_use_1_0_0;
            clear  all_gini  min flag attri;
        else
            class_value_1_0_0=0;
            cla_point_1_0_0=0;
            class_num_1_0_0_0=0;
        end
    else
        class_value_1_0_0=0;
        cla_point_1_0_0=0;
        class_num_1_0_0_0=0;
    end        

%分第三层1_0_1节点

    if class_num_1_0-class_num_1_0_0>=element_num
        class_split_a=split(class_1_0_1(:,1),class_num_1_0-class_num_1_0_0);
        if class_split_a<class_split
            classsplit=1;
        else
            classsplit=0;
        end
        classificate_condition=classsplit*attribute_num_use*tree_level;
        if classificate_condition~=0
            flag=1;
            for i=1:attribute_num
                if attribute_use_1_0(i,1)==0;
                    all_gini(1,flag)=mingini((class_num_1_0-class_num_1_0_0),i,class_1_0_1,data_3((class_num+class_num_1_0_0+1):(class_num+class_num_1_0),(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_1_0_1]=min(all_gini);
            attribute_use_1_0_1(attri(1,attribute_1_0_1),1)=1;
            cla_point_1_0_1=attri(1,attribute_1_0_1);
            disp('................................................the classification 1_0_1 !!')
            [class_num_1_0_1_0,class_value_1_0_1,class_1_0_1_0,class_1_0_1_1]=classificate((class_num_1_0-class_num_1_0_0),attri(1,attribute_1_0_1),class_1_0_1,data_3((class_num+class_num_1_0_0+1):(class_num+class_num_1_0),(attri(1,attribute_1_0_1)*2-1)));
            attribute_use_1_0_1_0=attribute_use_1_0_1;
            attribute_use_1_0_1_1=attribute_use_1_0_1;
            clear  all_gini  min flag attri;
        else
            class_value_1_0_1=0;
            cla_point_1_0_1=0;
            class_num_1_0_1_0=0;
        end
    else
        class_value_1_0_1=0;
        cla_point_1_0_1=0;
        class_num_1_0_1_0=0;
    end

⌨️ 快捷键说明

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