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

📄 c45.pas

📁 以从医院病案室获得的3022例数据为样本
💻 PAS
📖 第 1 页 / 共 2 页
字号:
     listview1.items.clear;
     

setvalue(i1,i2,j1,j2,k1,k2);                                      //以下为找第一层
for v:=0 to 5 do
begin
  first;
  while not eof do          //是否读到dataset的最后一条记录
   begin
   oneEnt(i1,i2,j1,j2,k1,k2,lie1array[v],i1,i2,j1,j2,k1,k2);
   next;
   end;
   EntMath(i1,i2,j1,j2,k1,k2, Ent_node,Ent_positive,Ent_negative,newEnt,gain);
   E[v]:=gain;
   setvalue(i1,i2,j1,j2,k1,k2);
end;

max:=E[0];                                                 //找信息增益的最大值
for v:=1 to 5 do
begin
  if E[v]>max
  then
  max:=E[v];
end;


vh:=-1;
for v:=0 to 5 do
begin
  if E[v]=max
  then
  begin
  item := listview1.items.add;
  item.caption := '1' ;
  node[0]:=lie1array[v];
  item.subitems.Add(node[0]) ;
  item.subitems.Add(floattostr(max));
  end
  else
  begin
  vh:=vh+1;
  H[0][vh]:=lie1array[v];                        //产生候选数组,前5个
  end;
  end;

setvalue(i1,i2,j1,j2,k1,k2);                                      //以下为找第二层的‘是分支’
for v:=0 to 4 do
begin
  first;
  while not eof do          //是否读到dataset的最后一条记录
   begin
   with  adoquery1 do
   judge:=(fieldbyname(node[0]).AsVariant='1');
   twoEnt(i1,i2,j1,j2,k1,k2,H[0][v],judge,i1,i2,j1,j2,k1,k2);
   next;
   end;
   EntMath(i1,i2,j1,j2,k1,k2, Ent_node,Ent_positive,Ent_negative,newEnt,gain);
   E[v]:=gain;
   setvalue(i1,i2,j1,j2,k1,k2);
end;


max:=E[0];
for v:=1 to 4 do
begin
  if E[v]>max
  then
  max:=E[v];
end;

vh:=-1;
for v:=0 to 4 do
begin
  if E[v]=max
  then
  begin
  item := listview1.items.add;
  item.caption := '2' ;
  node[1]:=H[0][v];
  item.subitems.Add(node[1]) ;
  item.subitems.Add(floattostr(max));
  end
  else
  begin
  vh:=vh+1;
  H[1][vh]:=H[0][v];                        //产生候选数组,前4个
end;
end;



setvalue(i1,i2,j1,j2,k1,k2);                                      //以下为找第二层的‘否分支’
for v:=0 to 4 do
begin
  first;
  while not eof do          //是否读到dataset的最后一条记录
   begin
   with  adoquery1 do
   judge:=(fieldbyname(node[0]).AsVariant='0');
   twoEnt(i1,i2,j1,j2,k1,k2,H[0][v],judge,i1,i2,j1,j2,k1,k2);
   next;
   end;
   EntMath(i1,i2,j1,j2,k1,k2, Ent_node,Ent_positive,Ent_negative,newEnt,gain);
   E[v]:=gain;
   setvalue(i1,i2,j1,j2,k1,k2);
end;


max:=E[0];
for v:=1 to 4 do
begin
  if E[v]>max
  then
  max:=E[v];
end;

vh:=-1;
for v:=0 to 4 do
begin
  if E[v]=max
  then
  begin
  item := listview1.items.add;
  item.caption := '2' ;
  node[2]:=H[0][v];
  item.subitems.Add(node[2]) ;
  item.subitems.Add(floattostr(max));
  end
  else
  begin
  vh:=vh+1;
  H[2][vh]:=H[0][v];       
  end;                 //产生候选数组,前4个
end;

for n:=0 to 3 do                                                //以下为找第三层
begin
setvalue(i1,i2,j1,j2,k1,k2);
selectint(n/2,m_2);
selectint(n/4,m_4);
//selectint(n/8,m_8);
for v:=0 to 3 do
begin
  first;
  while not eof do          //是否读到dataset的最后一条记录
   begin
   with  adoquery1 do
   judge:=(fieldbyname(node[m_4]).AsVariant=N4[n,0])and(fieldbyname(node[(m_2+1)]).AsVariant=N4[n,1]);
   twoEnt(i1,i2,j1,j2,k1,k2,H[(m_2+1),v],judge,i1,i2,j1,j2,k1,k2);
   next;
   end;
   EntMath(i1,i2,j1,j2,k1,k2, Ent_node,Ent_positive,Ent_negative,newEnt,gain);
   E[v]:=gain;
   setvalue(i1,i2,j1,j2,k1,k2);
end;


max:=E[0];
for v:=1 to 3 do
begin
  if E[v]>max
  then
  max:=E[v];
end;

vh:=-1;
for v:=0 to 3 do
begin
  if E[v]=max
  then
  begin
  item := listview1.items.add;
  item.caption := '3' ;
  node[n+3]:=H[(m_2+1),v];
  item.subitems.Add(node[n+3]) ;
  item.subitems.Add(floattostr(max));
  end
  else
  begin
  vh:=vh+1;
  H[(n+3),vh]:=H[(m_2+1),v]; 
  end;                       //产生候选数组,前3个
end;
end;                          //for(n)'s  end

for n:=0 to 7 do                                                //以下为找第四层
begin
setvalue(i1,i2,j1,j2,k1,k2);
selectint(n/2,m_2);
selectint(n/4,m_4);
selectint(n/8,m_8);
for v:=0 to 2 do
begin
  first;
  while not eof do                                         //是否读到dataset的最后一条记录
   begin
   with  adoquery1 do
   judge:=(fieldbyname(node[m_8]).AsVariant=N8[n,0])and(fieldbyname(node[(m_4+1)]).AsVariant=N8[n,1])and(fieldbyname(node[(m_2+3)]).AsVariant=N8[n,2]);
   twoEnt(i1,i2,j1,j2,k1,k2,H[(m_2+3),v],judge,i1,i2,j1,j2,k1,k2);
   next;
   end;
   EntMath(i1,i2,j1,j2,k1,k2, Ent_node,Ent_positive,Ent_negative,newEnt,gain);
   E[v]:=gain;
   setvalue(i1,i2,j1,j2,k1,k2);
end;


max:=E[0];
for v:=1 to 2 do
begin
  if E[v]>max
  then
  max:=E[v];
end;


if (max>0)
then
begin
vh:=-1;
for v:=0 to 2 do
begin
  if (E[v]=max)
  then
  begin
  item := listview1.items.add;
  item.caption := '4' ;
  node[n+7]:=H[(m_2+3),v];
  item.subitems.Add(node[n+7]) ;
  item.subitems.Add(floattostr(max));
  end
  else
  begin
  vh:=vh+1;
  H[(n+7),vh]:=H[(m_2+3),v]; 
  end;                       //产生候选数组,前2个
end;
end;                         //max>0's   end

if (max<=0)
then
begin
  item := listview1.items.add;
  item.caption := '4' ;
  node[n+7]:=H[(m_2+3),2];
  item.subitems.Add('***') ;
  item.subitems.Add('000');
vh:=-1;
for v:=0 to 1 do
begin
  vh:=vh+1;
  H[(n+7),vh]:=H[(m_2+3),v];
  end;                       //产生候选数组,前2个
end;                         //max<=0's   end

end;                          //for(n)'s  end


for n:=0 to 15 do                                                //以下为找第五层
begin
setvalue(i1,i2,j1,j2,k1,k2);
selectint(n/2,m_2);
selectint(n/4,m_4);
selectint(n/8,m_8);
selectint(n/16,m_16);
for v:=0 to 1 do
begin
  first;
  while not eof do                                         //是否读到dataset的最后一条记录
   begin
   with  adoquery1 do
   judge:=(fieldbyname(node[m_16]).AsVariant=N16[n,0])and(fieldbyname(node[m_8+1]).AsVariant=N16[n,1])and(fieldbyname(node[(m_4+3)]).AsVariant=N16[n,2])and(fieldbyname(node[(m_2+7)]).AsVariant=N16[n,3]);
   twoEnt(i1,i2,j1,j2,k1,k2,H[(m_2+7),v],judge,i1,i2,j1,j2,k1,k2);
   next;
   end;
   EntMath(i1,i2,j1,j2,k1,k2, Ent_node,Ent_positive,Ent_negative,newEnt,gain);
   E[v]:=gain;
   setvalue(i1,i2,j1,j2,k1,k2);
end;


max:=E[0];
v:=1 ;
  if E[v]>max
  then
  max:=E[v];


if (max>0)
then
begin
vh:=-1;
for v:=0 to 1 do
begin
  if (E[v]=max)
  then
  begin
  item := listview1.items.add;
  item.caption := '5' ;
  node[n+15]:=H[(m_2+7),v];
  item.subitems.Add(node[n+15]) ;
  item.subitems.Add(floattostr(max));
  end
  else
  begin
  vh:=vh+1;
  H[(n+15),vh]:=H[(m_2+7),v]; 
  end;                       //产生候选数组,前1个
end;
end;                         //max>0's   end

if (max<=0)
then
begin
  item := listview1.items.add;
  item.caption := '5' ;
  node[n+15]:=H[(m_2+3),1];
  item.subitems.Add('***') ;
  item.subitems.Add('000');
vh:=-1;
//for v:=0 to 1 do
//begin
  vh:=vh+1;
  H[(n+15),vh]:=H[(m_2+3),0];
 // end;                       //产生候选数组,前1个
end;                         //max<=0's   end

end;                          //for(n)'s  end


except
     listview1.items.Clear;
     messagedlg('运行出错',mtError,[mbok],0);
   end  ;
end;

finally
    Listview1.Items.EndUpdate;                     //结束更新
end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
listview1.items.Clear;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;

end.

⌨️ 快捷键说明

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