📄 build_tree.m
字号:
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 + -