Vous êtes sur la page 1sur 22

BAYESIAN CLASSIFICATION PROGRAM

import java.sql.*; import java.lang.Math.*; import java.io.*;

public class Table {

public static void main(String args[]) { try { int count = 0; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:work", "system", "system"); Statement st = con.createStatement(); /** * ****************counting total no of rows******************* */ System.out.println("--------TABLE-----------"); System.out.println("NAME" + "\t" + "HEIGHT" + "\t" + "OUTPUT1"); System.out.println("----" + "\t" + "------" + "\t" + "-------"); ResultSet rs = st.executeQuery("select * from classification"); while (rs.next()) { String n = rs.getString(1); double h = rs.getDouble(3); String op = rs.getString(4); System.out.println(n + "\t" + h + "\t" + op);

count++; } int s[] = new int[1]; int m[] = new int[1]; int t[] = new int[1]; float pt[] = new float[1]; float ps[] = new float[1]; float pm[] = new float[1]; float pmt[] = new float[1]; float pms[] = new float[1]; float pmm[] = new float[1]; float pht[] = new float[1]; float phs[] = new float[1]; float phm[] = new float[1]; /** * *******************************prob of short,medium,tall*********************** */ rs = st.executeQuery("select count(output1) from classification where output1 like 'short' "); while (rs.next()) { s[0] = rs.getInt(1); ps[0] = (float) s[0] / count; } rs = st.executeQuery("select count(output1) from classification where output1 like 'medium' "); while (rs.next()) { m[0] = rs.getInt(1); pm[0] = (float) m[0] / count;

} rs = st.executeQuery("select count(output1) from classification where output1 like 'tall' "); while (rs.next()) { t[0] = rs.getInt(1); pt[0] = (float) t[0] / count; } /** * *******************************prob of male female of s,m,t************** */ System.out.println("\n"); System.out.println("ENTER NEW TUPLE DETAILS"); System.out.println("ENTER NAME"); String name = br.readLine(); System.out.println("ENTER GENDER(lower case)"); String gender = br.readLine(); rs = st.executeQuery("select count(output1) from classification where output1 like 'tall' and gender like '" + gender + "' "); while (rs.next()) { int a = rs.getInt(1); pmt[0] = (float) a / t[0]; } rs = st.executeQuery("select count(output1) from classification where output1 like 'medium' and gender like '" + gender + "' "); while (rs.next()) { int a = rs.getInt(1); pmm[0] = (float) a / m[0];

} rs = st.executeQuery("select count(output1) from classification where output1 like 'short' and gender like '" + gender + "' "); while (rs.next()) { int a = rs.getInt(1); pms[0] = (float) a / s[0]; } /** * **************************prob of ht in s,m,t******************************** */ System.out.println("ENTER HEIGHT ACCORDING TO TABLE VALUES GIVEN"); System.out.print("ENTER HEIGHT:"); double hte = Double.parseDouble(br.readLine()); rs = st.executeQuery("select count(output1) from classification where output1 like 'tall' and height='" + hte + "' "); while (rs.next()) { int ht = rs.getInt(1); pht[0] = (float) ht / t[0]; } rs = st.executeQuery("select count(output1) from classification where output1 like 'medium' and height='" + hte + "' "); while (rs.next()) { int ht = rs.getInt(1); phm[0] = (float) ht / m[0]; } rs = st.executeQuery("select count(output1) from classification where output1 like 'short' and height='" + hte + "' "); while (rs.next()) {

int ht = rs.getInt(1); phs[0] = (float) ht / s[0]; } /** * *************************prob of gender and ht******************************** */ float gs = pms[0] * phs[0]; float gm = pmm[0] * phm[0]; float gt = pmt[0] * pht[0]; /** * ***********************likelihood of s,m,t************************************* */ float lp = gs * ps[0] + gm * pm[0] + gt * pt[0]; System.out.println("-----PROBABILITY OF GIVEN TUPLE T-----\n"); System.out.println("P(Tuble):" + lp); /** * ***************************actual probabilities******************************* */ float aps = (gs * ps[0]) / lp; float apm = (gm * ps[0]) / lp; float apt = (gt * ps[0]) / lp; System.out.println("-----FINAL PROBABILITIES-----\n"); System.out.println("P(Short/Tuple):" + aps); System.out.println("P(Medium/Tuple):" + apm); System.out.println("P(Tall/Tuple):" + apt + "\n"); /**

* ********************************classifying given tuple******************* */ System.out.println("\n\n"); System.out.println("-----ACCORDING TO BAYESIAN CLASSIFICATION-----\n\n"); if (aps > apm && aps > apt) { System.out.println(name + " " + "of" + " " + gender + " " + "is classified as SHORT"); } else if (apm > apt) { System.out.println(name + " " + "of" + " " + gender + " " + "is classified as MEDIUM"); } else { System.out.println(name + " " + "of" + " " + gender + " " + "is classified as TALL"); } } catch (Exception ex) { System.out.println(ex); } } }

EXECUTION: --------------------------Driver name-----------------------------------------------

control panel-->administrative tools-->data sources(odbc)--> system dsn-->add-->Microsoft ODBC for oracle-->finish--> data source name:work--->OK

-----------TABLE CREATION--------------CREATE TABLE CLASSIFICATION ( NAME VARCHAR2(40), GENDER VARCHAR2(40), HEIGHT NUMBER, OUTPUT1 VARCHAR2(40), OUTPUT2 VARCHAR2(40) ) /

------------DATA------------------copy paste in SQL COMMAND PROMPT insert into classification values( 'krist' ,'female' 'male', 2, ,1.6 'tall', ,'short' ,'medium');

insert into classification values( 'jim',

'medium'); 1.9, 1.88, 'medium', 'medium', 'tall'); 'tall');

insert into classification values( 'maggie', insert into classification values( 'martha',

'female', 'female', 1.7,

insert into classification values( 'steph' ,'female', insert into classification values( 'bob' ,'male', 1.85,

'short', 'medium'); 'medium');

'medium',

insert into classification values( 'kathy' ,'female', insert into classification values( 'dave', 'male', 1.7, insert into classification values( 'worth' ,'male', 2.2, insert into classification values( 'steve', 'male', 2.1 insert into classification values( 'debbie' ,'female', insert into classification values( 'todd' insert into classification values( 'kim', ,'male' ,1.95, 'female',

1.6,

'short' ,'medium');

'short', 'medium'); 'tall', ,'tall', 1.8 'tall'); 'tall'); ,'medium' ,'medium');

'medium', 1.9, 1.8,

'medium'); 'tall'); 'medium'); 'medium');

'medium', 'medium', 1.75

insert into classification values( 'amy', 'female', insert into classification values( 'wynette',

'female',

,'medium',

------------------------------------------------------------------------------------------------------------------Commit;

OUTPUT: C:\Program Files\Java>javac Table.java

C:\Program Files\Java>java Table --------TABLE----------NAME ---HEIGHT OUTPUT1

------ ------short tall medium

krist 1.6 jim 2.0

maggie 1.9

martha 1.88 medium steph 1.7 short

bob 1.85 medium kathy 1.6 short dave 1.7 short tall tall medium medium medium medium

worth 2.2 steve 2.1 debbie 1.8 todd 1.95 kim amy 1.9 1.8

wynette 1.75 medium

ENTER NEW TUPLE DETAILS ENTER NAME

sarath ENTER GENDER(lower case) male ENTER HEIGHT ACCORDING TO TABLE VALUES GIVEN ENTER HEIGHT:1.75 -----PROBABILITY OF GIVEN TUPLE T-----

P(Tuble):0.016666668 -----FINAL PROBABILITIES-----

P(Short/Tuple):0.0 P(Medium/Tuple):0.5 P(Tall/Tuple):0.0

-----ACCORDING TO BAYESIAN CLASSIFICATION-----

sarath of male is classified as MEDIUM

BAYESIAN CLASSIFICATION PROGRAM

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package services;

import java.sql.*; import java.util.*;

/** * * @author admin */ public class GameServiceImpl {

Connection connection = null; Statement statement; ResultSet resultSet; PreparedStatement preparedStatement; List<String> columnNames = new ArrayList<String>(); Map<Object, Double> classMembersAndCount = new HashMap<Object, Double>(); List<Object> classMembers = new ArrayList<Object>(); Map<Object, Double> map = new HashMap<Object, Double>(); List<Object> userTuple = new ArrayList<Object>(); Scanner scanner = new Scanner(System.in);

public Connection getConnection() { try { Class.forName("oracle.jdbc.driver.OracleDriver"); connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "system", "system"); return connection; } catch (Exception ex) { ex.printStackTrace(); return null; }

public Map<Object, Double> getClassMembersAndThereCount(String tablename) throws Exception { statement = connection.createStatement(); resultSet = statement.executeQuery("select class,count(*) from " + tablename + " group by class"); while (resultSet.next()) { classMembers.add(resultSet.getObject(1)); classMembersAndCount.put(resultSet.getObject(1), resultSet.getDouble(2)); } return classMembersAndCount;

public List<String> getColoumnNames(String tablename) throws Exception { statement = connection.createStatement();

resultSet = statement.executeQuery("SELECT * FROM " + tablename); ResultSetMetaData rsmd = resultSet.getMetaData(); int NumOfCol = rsmd.getColumnCount(); for (int i = 1; i <= NumOfCol; i++) { if (!rsmd.getColumnName(i).equalsIgnoreCase("class")) { columnNames.add(rsmd.getColumnName(i)); }

} return columnNames; }

public Map<Object, Double> getColoumnWithClassAndCount(String tablename) throws Exception { for (int i = 0; i < columnNames.size(); i++) { //System.out.println("fiiiiiiiii"); String sql = "select " + columnNames.get(i) + " ,class,count(*) from " + tablename + " group by " + columnNames.get(i) + ",class"; System.out.println(sql);

statement = connection.createStatement(); resultSet = statement.executeQuery(sql); while (resultSet.next()) { map.put(resultSet.getObject(1) + ":" + resultSet.getObject(2), resultSet.getDouble(3)); }

return map; }

public List<Object> readTupleFromUser() {

for (int i = 0; i < columnNames.size(); i++) { System.out.println("enter tuple for " + columnNames.get(i));

//userTuple.add(scanner.next()); String input = scanner.next(); if (input.equals("::")) { } else { userTuple.add(input); }

// System.out.println(userTuple + "================"); return userTuple; }

public void bayesian(String tablename) {

int totalNumberofrows = 0;

try { statement = connection.createStatement(); resultSet = statement.executeQuery("select count(*) from " + tablename); while (resultSet.next()) { totalNumberofrows = resultSet.getInt(1); } System.out.println("total number of rows " + totalNumberofrows);

getColoumnNames(tablename); getClassMembersAndThereCount(tablename); getColoumnWithClassAndCount(tablename);

System.out.println(columnNames); System.out.println(classMembersAndCount); System.out.println(map);

System.out.println("enter the tuples"); readTupleFromUser(); System.out.println(userTuple);

double temp = 0.0; Map<Object, Double> result = new HashMap<Object, Double>();

// System.out.println(userTuple.get(0)); //System.out.println(classMembers.get(0));

//System.out.println(map.get(userTuple.get(0) + ":" + classMembers.get(0)));

//System.out.println(totalNumberofrows); for (int i = 0; i < classMembers.size(); i++) { temp = 1; for (int j = 0; j < userTuple.size(); j++) { System.out.println(userTuple.get(j) + ":" + classMembers.get(i) + "===" + map.get(userTuple.get(j) + ":" + classMembers.get(i)) + "/" + classMembersAndCount.get(classMembers.get(i)));

if (map.get(userTuple.get(j) + ":" + classMembers.get(i)) != null) { temp = temp * (map.get(userTuple.get(j) + ":" + classMembers.get(i)) / classMembersAndCount.get(classMembers.get(i))); System.out.println(map.get(userTuple.get(j) + ":" + classMembers.get(i)) / classMembersAndCount.get(classMembers.get(i))); } else { temp = 0; System.out.println("null "); } } temp = temp * classMembersAndCount.get(classMembers.get(i)) / totalNumberofrows; // System.out.println(temp); result.put(classMembers.get(i), temp);

System.out.println("==========================end======================"); System.out.println(result); double t = 0.0; Set keys = result.keySet(); for (Iterator i = keys.iterator(); i.hasNext();) { Object key = i.next(); Double value = (Double) result.get(key); //System.out.println(key + " = " + value); t = t + value; } for (Iterator i = keys.iterator(); i.hasNext();) { Object key = i.next(); Double value = ((Double) result.get(key)) / t; result.put(key, value); System.out.println(key + " = " + value); } Object classificationResultKey = null; double classificationResultValue = 0.0; Iterator iterator = keys.iterator(); if (iterator.hasNext()) { classificationResultKey = iterator.next(); classificationResultValue = result.get(classificationResultKey); } for (Iterator i = keys.iterator(); i.hasNext();) {

Object key = i.next(); if (result.get(key) > classificationResultValue) { classificationResultKey = key; classificationResultValue = result.get(key); }

System.out.println("============================================="); if (classificationResultKey != null && classificationResultValue != 0.0) { System.out.println("the given tuple is classified under " + classificationResultKey); } else { System.out.println("the given tuple cannot be classified"); }

} catch (Exception ex) { ex.printStackTrace(); }

} }

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package util;

import java.util.*; import services.GameServiceImpl; public class Mapdemo {

/** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here GameServiceImpl gameServiceImpl=new GameServiceImpl(); gameServiceImpl.getConnection(); System.out.println("enter table name"); Scanner scanner=new Scanner(System.in); String tablename=scanner.next(); gameServiceImpl.bayesian(tablename);

} }

OUTPUT run: enter table name game total number of rows 14 select OUTLOOK ,class,count(*) from game group by OUTLOOK,class select TEMP ,class,count(*) from game group by TEMP,class select HUMIDITY ,class,count(*) from game group by HUMIDITY,class select WINDY ,class,count(*) from game group by WINDY,class [OUTLOOK, TEMP, HUMIDITY, WINDY] {p=9.0, n=5.0} {hot:n=2.0, false:n=2.0, hot:p=2.0, normal:n=1.0, cool:n=1.0, normal:p=6.0, cool:p=3.0, false:p=6.0, high:p=3.0, overcast:p=4.0, mild:n=2.0, mild:p=4.0, true:p=3.0, sunny:n=3.0, true:n=3.0, rain:n=2.0, sunny:p=2.0, high:n=4.0, rain:p=3.0} enter the tuples enter tuple for OUTLOOK rain enter tuple for TEMP hot enter tuple for HUMIDITY high enter tuple for WINDY false [rain, hot, high, false] rain:p===3.0/9.0 0.3333333333333333 hot:p===2.0/9.0

0.2222222222222222 high:p===3.0/9.0 0.3333333333333333 false:p===6.0/9.0 0.6666666666666666 rain:n===2.0/5.0 0.4 hot:n===2.0/5.0 0.4 high:n===4.0/5.0 0.8 false:n===2.0/5.0 0.4 ==========================end====================== {p=0.010582010582010581, n=0.01828571428571429} p = 0.3665689149560117 n = 0.6334310850439884 ============================================= the given tuple is classified under n BUILD SUCCESSFUL (total time: 14 seconds)

Vous aimerez peut-être aussi