Sunday, 16 June 2019

Implement ID3 decision tree algorithm for classification. Data Mining and Business Intelligence GTU 2170715


             
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

It's time To increase blogging capability. To have a chance to contribute in digital world. Any Interested People who want to make t...