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

📄 build_tree.m

📁 决策树
💻 M
📖 第 1 页 / 共 4 页
字号:
        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_1(i,1)==0;
                    all_gini(1,flag)=mingini(class_num_0_1_1_0,i,class_0_1_1_0,data_4((class_num_0_0+class_num_0_1_0+1):(class_num_0_0+class_num_0_1_0+class_num_0_1_1_0),(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_0_1_1_0]=min(all_gini);
            attribute_use_0_1_1_0(attri(1,attribute_0_1_1_0),1)=1;
            cla_point_0_1_1_0=attri(1,attribute_0_1_1_0);
            disp('................................................the classification 0_1_1_0 !!')
            [class_num_0_1_1_0_0,class_value_0_1_1_0,class_0_1_1_0_0,class_0_1_1_0_1]=classificate(class_num_0_1_1_0,attri(1,attribute_0_1_1_0),class_0_1_1_0,data_4((class_num_0_0+class_num_0_1_0+1):(class_num_0_0+class_num_0_1_0+class_num_0_1_1_0),(attri(1,attribute_0_1_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;
        end
    end

%分第_0_1_1_1 节点

    if class_num-class_num_0_0-class_num_0_1_0-class_num_0_1_1_0>=element_num
        class_split_a=split(class_0_1_1_1(:,1),class_num-class_num_0_0-class_num_0_1_0-class_num_0_1_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_1(i,1)==0;
                    all_gini(1,flag)=mingini(class_num-class_num_0_0-class_num_0_1_0-class_num_0_1_1_0,i,class_0_1_1_1,data_4((class_num_0_0+class_num_0_1_0+class_num_0_1_1_0+1):class_num,(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_0_1_1_1]=min(all_gini);
            attribute_use_0_1_1_1(attri(1,attribute_0_1_1_1),1)=1;
            cla_point_0_1_1_1=attri(1,attribute_0_1_1_1);
            disp('................................................the classification 0_1_1_1 !!')
            [class_num_0_1_1_1_0,class_value_0_1_1_1,class_0_1_1_1_0,class_0_1_1_1_1]=classificate(class_num-class_num_0_0-class_num_0_1_0-class_num_0_1_1_0,attri(1,attribute_0_1_1_1),class_0_1_1_1,data_4((class_num_0_0+class_num_0_1_0+class_num_0_1_1_0+1):class_num,(attri(1,attribute_0_1_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;
        end
    end
end

class_value_1_0_0_1=0;
class_value_1_0_0_0=0;
cla_point_1_0_0_0=0;
class_num_1_0_0_0_0=0;
cla_point_1_0_0_1=0;
class_num_1_0_0_1_0=0;
if class_num_1_0_0_0~=0
%分第四层1_0_0_0节点

    if class_num_1_0_0_0>=element_num
        class_split_a=split(class_1_0_0_0(:,1),class_num_1_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_1_0_0(i,1)==0;
                    all_gini(1,flag)=mingini(class_num_1_0_0_0,i,class_1_0_0_0,data_4((class_num+1):(class_num+class_num_1_0_0_0),(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_1_0_0_0]=min(all_gini);
            attribute_use_1_0_0_0(attri(1,attribute_1_0_0_0),1)=1;
            cla_point_1_0_0_0=attri(1,attribute_1_0_0_0);
            disp('................................................the classification 1_0_0_0 !!')
            [class_num_1_0_0_0_0,class_value_1_0_0_0,class_1_0_0_0_0,class_1_0_0_0_1]=classificate(class_num_1_0_0_0,attri(1,attribute_1_0_0_0),class_1_0_0_0,data_4((class_num+1):(class_num+class_num_1_0_0_0),(attri(1,attribute_1_0_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;
        end
    end        

%分第四层1_0_0_1节点

    if class_num_1_0_0-class_num_1_0_0_0>=element_num
        class_split_a=split(class_1_0_0_1(:,1),class_num_1_0_0-class_num_1_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_1_0_0(i,1)==0;
                    all_gini(1,flag)=mingini((class_num_1_0_0-class_num_1_0_0_0),i,class_1_0_0_1,data_4((class_num+class_num_1_0_0_0+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_1]=min(all_gini);
            attribute_use_1_0_0_1(attri(1,attribute_1_0_0_1),1)=1;
            cla_point_1_0_0_1=attri(1,attribute_1_0_0_1);
            disp('................................................the classification 1_0_0_1 !!')
            [class_num_1_0_0_1_0,class_value_1_0_0_1,class_1_0_0_1_0,class_1_0_0_1_1]=classificate((class_num_1_0_0-class_num_1_0_0_0),attri(1,attribute_1_0_0_1),class_1_0_0_1,data_4((class_num+class_num_1_0_0_0+1):(class_num+class_num_1_0_0),(attri(1,attribute_1_0_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;
        end
    end
end

class_value_1_0_1_1=0;
class_value_1_0_1_0=0;
cla_point_1_0_1_0=0;
class_num_1_0_1_0_0=0;
cla_point_1_0_1_1=0;
class_num_1_0_1_1_0=0;
if class_num_1_0_1_0~=0
%分第四层1_0_1_0节点

    if class_num_1_0_1_0>=element_num
        class_split_a=split(class_1_0_1_0(:,1),class_num_1_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_1_0_1(i,1)==0;
                    all_gini(1,flag)=mingini(class_num_1_0_1_0,i,class_1_0_1_0,data_4((class_num+class_num_1_0_0+1):(class_num+class_num_1_0_0+class_num_1_0_1_0),(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_1_0_1_0]=min(all_gini);
            attribute_use_1_0_1_0(attri(1,attribute_1_0_1_0),1)=1;
            cla_point_1_0_1_0=attri(1,attribute_1_0_1_0);
            disp('................................................the classification 1_0_1_0 !!')
            [class_num_1_0_1_0_0,class_value_1_0_1_0,class_1_0_1_0_0,class_1_0_1_0_1]=classificate(class_num_1_0_1_0,attri(1,attribute_1_0_1_0),class_1_0_1_0,data_4((class_num+class_num_1_0_0+1):(class_num+class_num_1_0_0+class_num_1_0_1_0),(attri(1,attribute_1_0_1_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;
        end
    end        

%分第四层1_0_1_1节点

    if class_num_1_0-class_num_1_0_0-class_num_1_0_1_0>=element_num
        class_split_a=split(class_1_0_1_1(:,1),class_num_1_0-class_num_1_0_0-class_num_1_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_1_0_1(i,1)==0;
                    all_gini(1,flag)=mingini((class_num_1_0-class_num_1_0_0-class_num_1_0_1_0),i,class_1_0_1_1,data_4((class_num+class_num_1_0_0+class_num_1_0_1_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_1]=min(all_gini);
            attribute_use_1_0_1_1(attri(1,attribute_1_0_1_1),1)=1;
            cla_point_1_0_1_1=attri(1,attribute_1_0_1_1);
            disp('................................................the classification 1_0_1_1 !!')
            [class_num_1_0_1_1_0,class_value_1_0_1_1,class_1_0_1_1_0,class_1_0_1_1_1]=classificate((class_num_1_0-class_num_1_0_0-class_num_1_0_1_0),attri(1,attribute_1_0_1_1),class_1_0_1_1,data_4((class_num+class_num_1_0_0+class_num_1_0_1_0+1):(class_num+class_num_1_0),(attri(1,attribute_1_0_1_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;
        end
    end
end

class_value_1_1_0_1=0;
class_value_1_1_0_0=0;
cla_point_1_1_0_0=0;
class_num_1_1_0_0_0=0;
cla_point_1_1_0_1=0;
class_num_1_1_0_1_0=0;
if class_num_1_1_0_0~=0
%分第四层1_1_0_0节点

    if class_num_1_1_0_0>=element_num
        class_split_a=split(class_1_1_0_0(:,1),class_num_1_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_1_0(i,1)==0;
                    all_gini(1,flag)=mingini(class_num_1_1_0_0,i,class_1_1_0_0,data_4((class_num+class_num_1_0+1):(class_num+class_num_1_0+class_num_1_1_0_0),(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_1_1_0_0]=min(all_gini);
            attribute_use_1_1_0_0(attri(1,attribute_1_1_0_0),1)=1;
            cla_point_1_1_0_0=attri(1,attribute_1_1_0_0);
            disp('................................................the classification 1_1_0_0 !!')
            [class_num_1_1_0_0_0,class_value_1_1_0_0,class_1_1_0_0_0,class_1_1_0_0_1]=classificate(class_num_1_1_0_0,attri(1,attribute_1_1_0_0),class_1_1_0_0,data_4((class_num+class_num_1_0+1):(class_num+class_num_1_0+class_num_1_1_0_0),(attri(1,attribute_1_1_0_0)*2-1)));
%             attribute_use_1_1_0_0=attribute_use_1_1_0;
%             attribute_use_1_1_0_1=attribute_use_1_1_0;
            clear  all_gini min attribute_0_0 attribute_0_1 attribute_1_0 attribute_1_1 flag attri;
        end
    end

%分第四层1_1_0_1节点

    if class_num_1_1_0-class_num_1_1_0_0>=element_num
        class_split_a=split(class_1_1_0_1(:,1),class_num_1_1_0-class_num_1_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_1_0(i,1)==0;
                    all_gini(1,flag)=mingini((class_num_1_1_0-class_num_1_1_0_0),i,class_1_1_0_1,data_4((class_num+class_num_1_0+class_num_1_1_0_0+1):class_num+class_num_1_0+class_num_1_1_0,(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_1_1_0_1]=min(all_gini);
            attribute_use_1_1_0_1(attri(1,attribute_1_1_0_1),1)=1;
            cla_point_1_1_0_1=attri(1,attribute_1_1_0_1);
            disp('................................................the classification 1_1_0_1 !!')
            [class_num_1_1_0_1_0,class_value_1_1_0_1,class_1_1_0_1_0,class_1_1_0_1_1]=classificate((class_num_1_1_0-class_num_1_1_0_0),attri(1,attribute_1_1_0_1),class_1_1_0_1,data_4((class_num+class_num_1_0+class_num_1_1_0_0+1):class_num+class_num_1_0+class_num_1_1_0,(attri(1,attribute_1_1_0_1)*2-1)));
%             attribute_use_1_1_1_0=attribute_use_1_1_1;
%             attribute_use_1_1_1_1=attribute_use_1_1_1
            clear  all_gini min attribute_0_0 attribute_0_1 attribute_1_0 attribute_1_1 flag attri;
        end
    end
end

class_value_1_1_1_1=0;
class_value_1_1_1_0=0;
cla_point_1_1_1_0=0;
class_num_1_1_1_0_0=0;
cla_point_1_1_1_1=0;
class_num_1_1_1_1_0=0;
if class_num_1_1_1_0~=0
%分第四层1_1_1_0节点

    if class_num_1_1_1_0>=element_num
        class_split_a=split(class_1_1_1_0(:,1),class_num_1_1_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_1_1(i,1)==0;
                    all_gini(1,flag)=mingini(class_num_1_1_1_0,i,class_1_1_1_0,data_4((class_num+class_num_1_0+class_num_1_1_0+1):(class_num+class_num_1_0+class_num_1_1_0+class_num_1_1_1_0),(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_1_1_1_0]=min(all_gini);
            attribute_use_1_1_1_0(attri(1,attribute_1_1_1_0),1)=1;
            cla_point_1_1_1_0=attri(1,attribute_1_1_1_0);
            disp('................................................the classification 1_1_1_0 !!')
            [class_num_1_1_1_0_0,class_value_1_1_1_0,class_1_1_1_0_0,class_1_1_1_0_1]=classificate(class_num_1_1_1_0,attri(1,attribute_1_1_1_0),class_1_1_1_0,data_4((class_num+class_num_1_0+class_num_1_1_0+1):(class_num+class_num_1_0+class_num_1_1_0+class_num_1_1_1_0),(attri(1,attribute_1_1_1_0)*2-1)));
%             attribute_use_1_1_0_0=attribute_use_1_1_0;
%             attribute_use_1_1_0_1=attribute_use_1_1_0;
            clear  all_gini min attribute_0_0 attribute_0_1 attribute_1_0 attribute_1_1 flag attri;
        end
    end

%分第四层1_1_1_1节点

    if num-class_num-class_num_1_0-class_num_1_1_0-class_num_1_1_1_0>=element_num
        class_split_a=split(class_1_1_1_1(:,1),num-class_num-class_num_1_0-class_num_1_1_0-class_num_1_1_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_1_1(i,1)==0;
                    all_gini(1,flag)=mingini((num-class_num-class_num_1_0-class_num_1_1_0-class_num_1_1_1_0),i,class_1_1_1_1,data_4((class_num+class_num_1_0+class_num_1_1_0+class_num_1_1_1_0+1):num,(2*i-1)));
                    attri(1,flag)=i;
                    flag=flag+1;
                end
            end
            [min,attribute_1_1_1_1]=min(all_gini);
            attribute_use_1_1_1_1(attri(1,attribute_1_1_1_1),1)=1;
            cla_point_1_1_1_1=attri(1,attribute_1_1_1_1);
            disp('................................................the classification 1_1_1_1 !!')
            [class_num_1_1_1_1_0,class_value_1_1_1_1,class_1_1_1_1_0,class_1_1_1_1_1]=classificate((num-class_num-class_num_1_0-class_num_1_1_0-class_num_1_1_1_0),attri(1,attribute_1_1_1_1),class_1_1_1_1,data_4((class_num+class_num_1_0+class_num_1_1_0+class_num_1_1_1_0+1):num,(attri(1,attribute_1_1_1_1)*2-1)));
%             attribute_use_1_1_1_0=attribute_use_1_1_1;
%             attribute_use_1_1_1_1=attribute_use_1_1_1
            clear  all_gini min attribute_0_0 attribute_0_1 attribute_1_0 attribute_1_1 flag attri;
        end
    end
end


disp('The tree is built !!');
%draw_tree;  %画出决策树
test_A;
clear_variable;

⌨️ 快捷键说明

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