Code:
import
java.util.*;
import
java.io.*;
import
java.lang.*;
public class ID3
{
public
static String[][]
in={{"RID","Age","Income","Student","Credit_rating","buys_computers"},
{"1","youth","high","no","fair","no"},
{"2","youth","high","no","excellent","no"},
{"3","middle_aged","high","no","fair","yes"},
{"4","senior","medium","no","fair","yes"},
{"5","senior","low","yes","fair","yes"},
{"6","se nior","low","yes","excellent","no"},
{"7","middle_aged","low","yes","excellent","yes"},
{"8","youth","medium","no","fair","no"},
{"9","youth","low","yes","fair","yes"},
{"10","senior","medium","yes","fair","yes"},
{"11","youth","medium","yes","excellent","yes"},
{"12","middle_aged","medium","no","excellent","yes"},
{"13","middle_aged","high","yes","fair","yes"},
{"14","senior","medium","no","excellent","no"},
};
public static
void main(String args[])throws IOException
{
for(int
i=0;i<1;i++)
{
for(int
j=0;j<6;j++)
{
if(j==1)
System.out.print(in[i][j]+"\t
\t");
else
System.out.print(in[i][j]+"\t");
}
System.out.println();
}
System.out.println("-----------------------------------------------------------------------");
for(int
i=1;i<15;i++)
{
for(int
j=0;j<6;j++)
{
if(j==4)
{
if(i==1
|| i==3 || i==4 || i==5 || i==8 || i==9 ||i==10 ||i==13)
System.out.print(in[i][j]+"\t
\t");
else
System.out.print(in[i][j]+"\t");
}
else
if(j==1)
{
if(i==3
|| i==7 || i==12 || i==13)
System.out.print(in[i][j]+"\t");
else
System.out.print(in[i][j]+"\t
\t");
}
else
System.out.print(in[i][j]+"\t");
}
System.out.println();
}
System.out.println("--------------------------------------------------------------------");
System.out.println();
Scanner
sc=new Scanner(System.in);
System.out.println("Labeled
Class is buys_computers");
int
c=0,n=0,p=0;
int
len=(in.length)-1;
double
D=0.0,D1=0.0,G=0.0;
System.out.println("L
: "+len);
for(int
j=0;j<6;j++)
{
if(in[0][j ].equals("buys_computers"))
{
p=j;
break;
}
}
for(int
i=1;i<15;i++)
{
if(in[i][p].equals("no"))
n++;
else
c++;
}
System.out.println("No
: "+n);
System.out.println("Yes
:"+c);
D=info_D(n,c,len);
System.out.println("D
: "+D);
System.out.println("");
String
es;
do
{
System.out.println("Choose
column name for which u want to calculate
expected
information : \n 1. Age \n 2. Income \n 3. Student \n 4. Credit_rating \n
5.
Exit \n ");
es=sc.nextLine();
switch(es)
{
case
"Age" : D1=info_age(es,len);
System.out.println("\n
D1 : "+D1);
G=D-D1;
System.out.println("\n
Gain : "+G+"\n \n ");
break;
case
"Income" : D1=info_income(es,len);
System.out.println("\n
D1 : "+D1);
G=D-D1;
System.out.println("\n
Gain : "+G+"\n \n ");
break;
case
"Student" : D1=info_student(es,len);
System.out.println("\n
D1 : "+D1);
G=D-D1;
System.out.println("\n
Gain : "+G+"\n \n ");
break;
case
"Credit_rating" : D1=info_credit_rating(es,len);
System.out.println("\n
D1 : "+D1);
G=D-D1;
System.out.println("\n
Gain : "+G+"\n \n ");
break;
}
}while(!es.equals("Exit"));
System.out.println("\n
Decision Tree : ");
System.out.println("\n
age - youth - student - no - no ");
System.out.println("\n
age - youth - student - yes - yes ");
System.out.println("\n
age - middle_aged - yes : ");
System.out.println("\n
age - senior - Credit_rating - fair - yes ");
System.out.println("\n
age - senior - Credit_rating - excellent - no ");
}
public static
double log_base2(int x, int base, int l)
{
if(x==0)
return 0;
else if(l==0)
return
(double)(Math.log(x) / Math.log(base));
else
return
(double)((Math.log(x) / Math.log(base))-(Math.log(l) /
Math.log(base)));
}
public static
double info_D(int n,int c,int l)
{
double
D;
D =
(-((double)n/l)*(log_base2(n,2,l))) + (-((double)c/l)*(log_base2(c,2,l)));
return
D;
}
public static
double info_age(String es,int l)
{
int
n=0,c=0,n1=0,c1=0,p=0,p1=0,n2=0,c2=0;
double
D;
for(int
j=0;j<6;j++)
{
if(in[0][j].equals(es))
{
p=j;
break;
}
}
for(int
j=0;j<15;j++)
{
if(in[0][j].equals("buys_computers"))
{
p1=j;
break;
}
}
int y=0,s=0,m=0;
for(int
i=1;i<15;i++)
{
if(in[i][p].equals("youth"))
{
y++;
if(in[i][p1].equals("no"))
n++;
else
c++;
}
else
if(in[i][p].equals("senior"))
{
s++;
if(in[i][p1].equals("no"))
n1++;
else
c1++;
}
else
{
m++;
if(in[i][p1].equals("no"))
n2++;
else
c2++;
}
}
System.out.println("\n
\n For Age : \n ");
System.out.println("Youth
: "+y+" Yes : "+c+" No : "+n);
System.out.println("Senior
: "+s+" Yes : "+c1+" No : "+n1);
System.out.println("Middle-aged
: "+m+" Yes : "+c2+" No : "+n2);
D=((((double)y/l)*info_D(n,c,y))+(((double)s/l)*info_D(n1,c1,s))+(((doubl
e)m/l)*info_D(n2,c2,m)));
return D;
}
public static
double info_income(String es,int l)
{
int
n=0,c=0,n1=0,c1=0,p=0,p1=0,n2=0,c2=0;
double D;
for(int
j=0;j<6;j++)
{
if(in[0][j].equals(es))
{
p=j;
break;
}
}
for(int
j=0;j<15;j++)
{
if(in[0][j].equals("buys_computers"))
{
p1=j;
break;
}
}
int h=0,lo=0,m=0;
for(int
i=1;i<15;i++)
{
if(in[i][p].equals("high"))
{
h++;
if(in[i][p1].equals("no"))
n++;
else
c++;
}
else
if(in[i][p].equals("low"))
{
lo++;
if(in[i][p1].equals("no"))
n1++;
else
c1++;
}
else
{
m++;
if(in[i][p1].equals("no"))
n2++;
else
c2++;
}
}
System.out.println("\n
\n For Income : \n ");
System.out.println("High
: "+h+" Yes : "+c+" No : "+n);
System.out.println("Low
: "+lo+" Yes : "+c1+" No : "+n1);
System.out.println("Medium
: "+m+" Yes : "+c2+" No : "+n2);
D=((((double)h/l)*info_D(n,c,h))+(((double)lo/l)*info_D(n1,c1,lo))+(((double)m
/l)*info_D(n2,c2,m)));
return D;
}
public static
double info_student(String es,int l)
{
int
n=0,c=0,n1=0,c1=0,p=0,p1=0,n2=0,c2=0;
double D;
for(int
j=0;j<6;j++)
{
if(in[0][j].equals(es))
{
p=j;
break;
}
}
for(int
j=0;j<15;j++)
{
if(in[0][j].equals("buys_computers"))
{
p1=j;
break;
}
}
int y=0,n0=0;
for(int
i=1;i<15;i++)
{
if(in[i][p].equals("yes"))
{
y++;
if(in[i][p1].equals("no"))
n++;
else
c++;
}
else
{
n0++;
if(in[i][p1].equals("no"))
n1++;
else
c1++;
}
}
System.out.println("\n
\n For Student : \n ");
System.out.println("Yes
: "+y+" Yes : "+c+" No : "+n);
System.out.println("No
: "+n0+" Yes : "+c1+" No : "+n1);
D=((((double)y/l)*info_D(n,c,y))+(((double)n0/l)*info_D(n1,c1,n0)));
return D;
}
public static
double info_credit_rating(String es,int l)
{
int
n=0,c=0,n1=0,c1=0,p=0,p1=0,n2=0,c2=0;
double D;
for(int
j=0;j<6;j++)
{
if(in[0][j].equals(es))
{
p=j;
break;
}
}
for(int
j=0;j<15;j++)
{
if(in[0][j].equals("buys_computers"))
{
p1=j;
break;
}
}
int f=0,e=0;
for(int
i=1;i<15;i++)
{
if(in[i][p ].equals("fair"))
{
f++;
if(in[i][p1].equals("no"))
n++;
else
c++;
}
else
{
e++;
if(in[i][p1].equals("no"))
n1++;
else
c1++;
}
}
System.out.println("\n
\n For Credit_rating : \n ");
System.out.println("Fair
: "+f+" Yes : "+c+" No : "+n);
System.out.println("Excellent
: "+e+" Yes : "+c1+" No : "+n1);
D=((((double)f/l)*info_D(n,c,f))+(((double)e/l)*info_D(n1,c1,e)));
return D;
}
No comments:
Post a Comment