function pembentukan_tree($N_parent, $kasus) { //mengisi kondisi if ($N_parent != '') { $kondisi = $N_parent . " AND " . $kasus; } else { $kondisi = $kasus; } echo $kondisi . "<br>"; //cek data heterogen / homogen??? $cek = cek_heterohomogen('ipk', $kondisi); if ($cek == 'homogen') { echo "<br>LEAF "; $sql_keputusan = mysql_query("SELECT DISTINCT(ipk) FROM data_training WHERE {$kondisi}"); $row_keputusan = mysql_fetch_array($sql_keputusan); $keputusan = $row_keputusan['0']; //insert atau lakukan pemangkasan cabang pangkas($N_parent, $kasus, $keputusan); } else { if ($cek == 'heterogen') { //cek jumlah data $jumlah = jumlah_data($kondisi); if ($jumlah < 8) { echo "<br>LEAF "; $Ntinggi = $kondisi . " AND ipk='tinggi'"; $Nrendah = $kondisi . " AND ipk='rendah'"; $jumlahTinggi = jumlah_data("{$Ntinggi}"); $jumlahRendah = jumlah_data("{$Nrendah}"); if ($jumlahTinggi <= $jumlahRendah) { $keputusan = 'Rendah'; } else { $keputusan = 'Tinggi'; } //insert atau lakukan pemangkasan cabang pangkas($N_parent, $kasus, $keputusan); } else { //jika kondisi tidak kosong kondisi_ipk=tambah and $kondisi_ipk = ''; if ($kondisi != '') { $kondisi_ipk = $kondisi . " AND "; } $jml_tinggi = jumlah_data("{$kondisi_ipk} ipk='Tinggi'"); $jml_rendah = jumlah_data("{$kondisi_ipk} ipk='Rendah'"); $jml_total = $jml_tinggi + $jml_rendah; echo "Jumlah data = " . $jml_total . "<br>"; echo "Jumlah tinggi = " . $jml_tinggi . "<br>"; echo "Jumlah rendah = " . $jml_rendah . "<br>"; //hitung entropy semua $entropy_all = hitung_entropy($jml_tinggi, $jml_rendah); echo "Entropy = " . $entropy_all . "<br>"; //cek berapa nilai setiap atribut $nilai_instansi = array(); $nilai_instansi = cek_nilaiAtribut('instansi', $kondisi); $jmlInstansi = count($nilai_instansi); $nilai_status = array(); $nilai_status = cek_nilaiAtribut('status', $kondisi); $jmlStatus = count($nilai_status); $nilai_jurusan = array(); $nilai_jurusan = cek_nilaiAtribut('jurusan', $kondisi); $jmlJurusan = count($nilai_jurusan); $nilai_kerja = array(); $nilai_kerja = cek_nilaiAtribut('kerja', $kondisi); $jmlKerja = count($nilai_kerja); $nilai_motivasi = array(); $nilai_motivasi = cek_nilaiAtribut('motivasi', $kondisi); $jmlMotivasi = count($nilai_motivasi); //hitung gain atribut mysql_query("TRUNCATE gain"); //instansi if ($jmlInstansi != 1) { $NA1Instansi = "instansi='{$nilai_instansi['0']}'"; $NA2Instansi = ""; $NA3Instansi = ""; if ($jmlInstansi == 2) { $NA2Instansi = "instansi='{$nilai_instansi['1']}'"; } else { if ($jmlInstansi == 3) { $NA2Instansi = "instansi='{$nilai_instansi['1']}'"; $NA3Instansi = "instansi='{$nilai_instansi['2']}'"; } } hitung_gain($kondisi, "instansi", $entropy_all, $NA1Instansi, $NA2Instansi, $NA3Instansi, "", ""); } //status if ($jmlStatus != 1) { $NA1Status = "status='{$nilai_status['0']}'"; $NA2Status = "status='{$nilai_status['1']}'"; hitung_gain($kondisi, "status", $entropy_all, $NA1Status, $NA2Status, "", "", ""); } //jurusan if ($jmlJurusan != 1) { $NA1Jurusan = "jurusan='{$nilai_jurusan['0']}'"; $NA2Jurusan = ""; $NA3Jurusan = ""; $NA4Jurusan = ""; $NA5Jurusan = ""; if ($jmlJurusan == 2) { $NA2Jurusan = "jurusan='{$nilai_jurusan['1']}'"; } else { if ($jmlJurusan == 3) { $NA2Jurusan = "jurusan='{$nilai_jurusan['1']}'"; $NA3Jurusan = "jurusan='{$nilai_jurusan['2']}'"; } else { if ($jmlJurusan == 4) { $NA2Jurusan = "jurusan='{$nilai_jurusan['1']}'"; $NA3Jurusan = "jurusan='{$nilai_jurusan['2']}'"; $NA4Jurusan = "jurusan='{$nilai_jurusan['3']}'"; } else { if ($jmlJurusan == 5) { $NA2Jurusan = "jurusan='{$nilai_jurusan['1']}'"; $NA3Jurusan = "jurusan='{$nilai_jurusan['2']}'"; $NA4Jurusan = "jurusan='{$nilai_jurusan['3']}'"; $NA5Jurusan = "jurusan='{$nilai_jurusan['4']}'"; } } } } hitung_gain($kondisi, "jurusan", $entropy_all, $NA1Jurusan, $NA2Jurusan, $NA3Jurusan, $NA4Jurusan, $NA5Jurusan); } //kerja if ($jmlKerja != 1) { $NA1Kerja = "kerja='{$nilai_kerja['0']}'"; $NA2Kerja = "kerja='{$nilai_kerja['1']}'"; hitung_gain($kondisi, "kerja", $entropy_all, $NA1Kerja, $NA2Kerja, "", "", ""); } //motivasi if ($jmlMotivasi != 1) { $NA1Motivasi = "motivasi='{$nilai_motivasi['0']}'"; $NA2Motivasi = ""; $NA3Motivasi = ""; if ($jmlMotivasi == 2) { $NA2Motivasi = "motivasi='{$nilai_motivasi['1']}'"; } else { if ($jmlMotivasi == 3) { $NA2Motivasi = "motivasi='{$nilai_motivasi['1']}'"; $NA3Motivasi = "motivasi='{$nilai_motivasi['2']}'"; } } hitung_gain($kondisi, "motivasi", $entropy_all, $NA1Motivasi, $NA2Motivasi, $NA3Motivasi, "", ""); } //hitung gain atribut Numerik hitung_gain($kondisi, "rata UN posisi 6.5", $entropy_all, "rata_un<=6.5", "rata_un>6.5", "", "", ""); hitung_gain($kondisi, "rata UN posisi 6.75", $entropy_all, "rata_un<=6.75", "rata_un>6.75", "", "", ""); hitung_gain($kondisi, "rata UN posisi 7", $entropy_all, "rata_un<=7", "rata_un>7", "", "", ""); hitung_gain($kondisi, "rata UN posisi 7.25", $entropy_all, "rata_un<=7.25", "rata_un>7.25", "", "", ""); hitung_gain($kondisi, "rata UN posisi 7.5", $entropy_all, "rata_un<=7.5", "rata_un>7.5", "", "", ""); hitung_gain($kondisi, "rata UN posisi 7.75", $entropy_all, "rata_un<=7.75", "rata_un>7.75", "", "", ""); hitung_gain($kondisi, "rata UN posisi 8", $entropy_all, "rata_un<=8", "rata_un>8", "", "", ""); hitung_gain($kondisi, "rata UN posisi 8.25", $entropy_all, "rata_un<=8.25", "rata_un>8.25", "", "", ""); hitung_gain($kondisi, "rata UN posisi 8.5", $entropy_all, "rata_un<=8.5", "rata_un>8.5", "", "", ""); hitung_gain($kondisi, "rata UN posisi 8.75", $entropy_all, "rata_un<=8.75", "rata_un>8.75", "", "", ""); //ambil nilai gain tertinggi $sql_max = mysql_query("SELECT MAX(gain) FROM gain"); $row_max = mysql_fetch_array($sql_max); $max_gain = $row_max['0']; $sql = mysql_query("SELECT * FROM gain WHERE gain={$max_gain}"); $row = mysql_fetch_array($sql); $atribut = $row['1']; echo "Atribut terpilih = " . $atribut . ", dengan nilai gain = " . $max_gain . "<br>"; echo "<br>================================<br>"; //percabangan jika nilai atribut lebih dari 2 hitung rasio terlebih dahulu //INSTANSI TERPILIH if ($atribut == "instansi") { //jika nilai atribut 3 if ($jmlInstansi == 3) { //hitung rasio $cabang = array(); $cabang = hitung_rasio($kondisi, 'instansi', $max_gain, $nilai_instansi[0], $nilai_instansi[1], $nilai_instansi[2], '', ''); $exp_cabang = explode(" , ", $cabang[1]); proses_DT($kondisi, "({$atribut}='{$cabang['0']}')", "({$atribut}='{$exp_cabang['0']}' OR {$atribut}='{$exp_cabang['1']}')"); } else { if ($jmlInstansi == 2) { proses_DT($kondisi, "({$atribut}='{$nilai_instansi['0']}')", "({$atribut}='{$nilai_instansi['1']}')"); } } } else { if ($atribut == "status") { proses_DT($kondisi, "({$atribut}='Negeri')", "({$atribut}='Swasta')"); } else { if ($atribut == "jurusan") { //jika nilai atribut 5 if ($jmlJurusan == 5) { //hitung rasio $cabang = array(); $cabang = hitung_rasio($kondisi, 'jurusan', $max_gain, $nilai_jurusan[0], $nilai_jurusan[1], $nilai_jurusan[2], $nilai_jurusan[3], $nilai_jurusan[4]); $exp_cabang = explode(" , ", $cabang[1]); proses_DT($kondisi, "({$atribut}='{$cabang['0']}')", "({$atribut}='{$exp_cabang['0']}' OR {$atribut}='{$exp_cabang['1']}' OR {$atribut}='{$exp_cabang['2']}' OR {$atribut}='{$exp_cabang['3']}')"); } else { if ($jmlJurusan == 4) { //hitung rasio $cabang = array(); $cabang = hitung_rasio($kondisi, 'jurusan', $max_gain, $nilai_jurusan[0], $nilai_jurusan[1], $nilai_jurusan[2], $nilai_jurusan[3], ''); $exp_cabang = explode(" , ", $cabang[1]); proses_DT($kondisi, "({$atribut}='{$cabang['0']}')", "({$atribut}='{$exp_cabang['0']}' OR {$atribut}='{$exp_cabang['1']}' OR {$atribut}='{$exp_cabang['2']}')"); } else { if ($jmlJurusan == 3) { //hitung rasio $cabang = array(); $cabang = hitung_rasio($kondisi, 'jurusan', $max_gain, $nilai_jurusan[0], $nilai_jurusan[1], $nilai_jurusan[2], '', ''); $exp_cabang = explode(" , ", $cabang[1]); proses_DT($kondisi, "({$atribut}='{$cabang['0']}')", "({$atribut}='{$exp_cabang['0']}' OR {$atribut}='{$exp_cabang['1']}')"); } else { if ($jmlJurusan == 2) { proses_DT($kondisi, "({$atribut}='{$nilai_jurusan['0']}')", "({$atribut}='{$nilai_jurusan['1']}')"); } } } } } else { if ($atribut == "rata UN posisi 6.5") { proses_DT($kondisi, "(rata_un<=6.5)", "(rata_un>6.5)"); } else { if ($atribut == "rata UN posisi 6.75") { proses_DT($kondisi, "(rata_un<=6.75)", "(rata_un>6.75)"); } else { if ($atribut == "rata UN posisi 7") { proses_DT($kondisi, "(rata_un<=7)", "(rata_un>7)"); } else { if ($atribut == "rata UN posisi 7.25") { proses_DT($kondisi, "(rata_un<=7.25)", "(rata_un>7.25)"); } else { if ($atribut == "rata UN posisi 7.5") { proses_DT($kondisi, "(rata_un<=7.5)", "(rata_un>7.5)"); } else { if ($atribut == "rata UN posisi 7.75") { proses_DT($kondisi, "(rata_un<=7.75)", "(rata_un>7.75)"); } else { if ($atribut == "rata UN posisi 8") { proses_DT($kondisi, "(rata_un<=8)", "(rata_un>8)"); } else { if ($atribut == "rata UN posisi 8.25") { proses_DT($kondisi, "(rata_un<=8.25)", "(rata_un>8.25)"); } else { if ($atribut == "rata UN posisi 8.5") { proses_DT($kondisi, "(rata_un<=8.5)", "(rata_un>8.5)"); } else { if ($atribut == "rata UN posisi 8.75") { proses_DT($kondisi, "(rata_un<=8.75)", "(rata_un>8.75)"); } else { if ($atribut == "kerja") { proses_DT($kondisi, "({$atribut}='Sudah')", "({$atribut}='Belum')"); } else { if ($atribut == "motivasi") { //jika nilai atribut 3 if ($jmlMotivasi == 3) { $cabang = array(); $cabang = hitung_rasio($kondisi, 'motivasi', $max_gain, $nilai_motivasi[0], $nilai_motivasi[1], $nilai_motivasi[2], '', ''); $exp_cabang = explode(" , ", $cabang[1]); proses_DT($kondisi, "({$atribut}='{$cabang['0']}')", "({$atribut}='{$exp_cabang['0']}' OR {$atribut}='{$exp_cabang['1']}')"); } else { if ($jmlMotivasi == 2) { proses_DT($kondisi, "({$atribut}='{$nilai_motivasi['0']}')", "({$atribut}='{$nilai_motivasi['1']}')"); } } } } } } } } } } } } } } } } } } } } }
function hitung_gain($kasus, $atribut, $ent_all, $kondisi1, $kondisi2, $kondisi3, $kondisi4, $kondisi5) { $data_kasus = ''; if ($kasus != '') { $data_kasus = $kasus . " AND "; } //untuk atribut 2 nilai atribut if ($kondisi3 == '') { $j_tinggi1 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi1}"); $j_rendah1 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi1}"); $jml1 = $j_tinggi1 + $j_rendah1; $j_tinggi2 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi2}"); $j_rendah2 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi2}"); $jml2 = $j_tinggi2 + $j_rendah2; //hitung entropy masing-masing kondisi $jml_total = $jml1 + $jml2; $ent1 = hitung_entropy($j_tinggi1, $j_rendah1); $ent2 = hitung_entropy($j_tinggi2, $j_rendah2); $gain = $ent_all - ($jml1 / $jml_total * $ent1 + $jml2 / $jml_total * $ent2); } else { if ($kondisi4 == '') { $j_tinggi1 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi1}"); $j_rendah1 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi1}"); $jml1 = $j_tinggi1 + $j_rendah1; $j_tinggi2 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi2}"); $j_rendah2 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi2}"); $jml2 = $j_tinggi2 + $j_rendah2; $j_tinggi3 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi3}"); $j_rendah3 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi3}"); $jml3 = $j_tinggi3 + $j_rendah3; //hitung entropy masing-masing kondisi $jml_total = $jml1 + $jml2 + $jml3; $ent1 = hitung_entropy($j_tinggi1, $j_rendah1); $ent2 = hitung_entropy($j_tinggi2, $j_rendah2); $ent3 = hitung_entropy($j_tinggi3, $j_rendah3); $gain = $ent_all - ($jml1 / $jml_total * $ent1 + $jml2 / $jml_total * $ent2 + $jml3 / $jml_total * $ent3); } else { if ($kondisi5 == '') { $j_tinggi1 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi1}"); $j_rendah1 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi1}"); $jml1 = $j_tinggi1 + $j_rendah1; $j_tinggi2 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi2}"); $j_rendah2 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi2}"); $jml2 = $j_tinggi2 + $j_rendah2; $j_tinggi3 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi3}"); $j_rendah3 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi3}"); $jml3 = $j_tinggi3 + $j_rendah3; $j_tinggi4 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi4}"); $j_rendah4 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi4}"); $jml4 = $j_tinggi4 + $j_rendah4; //hitung entropy masing-masing kondisi $jml_total = $jml1 + $jml2 + $jml3 + $jml4; $ent1 = hitung_entropy($j_tinggi1, $j_rendah1); $ent2 = hitung_entropy($j_tinggi2, $j_rendah2); $ent3 = hitung_entropy($j_tinggi3, $j_rendah3); $ent4 = hitung_entropy($j_tinggi4, $j_rendah4); $gain = $ent_all - ($jml1 / $jml_total * $ent1 + $jml2 / $jml_total * $ent2 + $jml3 / $jml_total * $ent3 + $jml4 / $jml_total * $ent4); } else { $j_tinggi1 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi1}"); $j_rendah1 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi1}"); $jml1 = $j_tinggi1 + $j_rendah1; $j_tinggi2 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi2}"); $j_rendah2 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi2}"); $jml2 = $j_tinggi2 + $j_rendah2; $j_tinggi3 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi3}"); $j_rendah3 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi3}"); $jml3 = $j_tinggi3 + $j_rendah3; $j_tinggi4 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi4}"); $j_rendah4 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi4}"); $jml4 = $j_tinggi4 + $j_rendah4; $j_tinggi5 = jumlah_data("{$data_kasus} ipk='tinggi' AND {$kondisi5}"); $j_rendah5 = jumlah_data("{$data_kasus} ipk='rendah' AND {$kondisi5}"); $jml5 = $j_tinggi5 + $j_rendah5; //hitung entropy masing-masing kondisi $jml_total = $jml1 + $jml2 + $jml3 + $jml4 + $jml5; $ent1 = hitung_entropy($j_tinggi1, $j_rendah1); $ent2 = hitung_entropy($j_tinggi2, $j_rendah2); $ent3 = hitung_entropy($j_tinggi3, $j_rendah3); $ent4 = hitung_entropy($j_tinggi4, $j_rendah4); $ent5 = hitung_entropy($j_tinggi5, $j_rendah5); $gain = $ent_all - ($jml1 / $jml_total * $ent1 + $jml2 / $jml_total * $ent2 + $jml3 / $jml_total * $ent3 + $jml4 / $jml_total * $ent4 + $jml5 / $jml_total * $ent5); } } } //desimal 3 angka dibelakang koma $gain = round($gain, 3); if ($gain > 0) { echo "Gain " . $atribut . " = " . $gain . "<br>"; } mysql_query("INSERT INTO gain VALUES ('','{$atribut}','{$gain}')"); }