Anda di halaman 1dari 25

PENELITIAN DATA UJI PEMODELAN PENGETAHUAN PENGGUNA

(USER KNOWLADGE MODELING) MENGGUNAKAN METODE KNN


DAN METODE NAIVE BAYES CLASSIFIER
Makalah ini disusun guna memenuhi salah satu syarat mengikuti mata kuliah Pengenalan
Pola

Disusun oleh:
1. Angger Ary Priyono (5150411207)
2. Bayu Damar Jati (5150411214)
3. Zainal Arifin (5150411217)
4. Wiliana Arie Munanda (5150411239)
5. Jagad Dewa Vitagi (5150411282)
6. Winarto (5150411300)
7. Ja’far Sodiq (5150411301)
8. Muhammad Suhartono (5150411314)

Program Studi S1 Informatika


Fakultas Teknologi Informasi dan Elektro
Universitas Teknologi Yogyakarta
Yogyakarta
2018
Profile

2
Daftar Isi

Profile ...................................................................................................................................................... 2
Daftar Isi .................................................................................................................................................. 3
BAB I PENDAHULUAN ............................................................................................................................. 4
A. Latar Belakang....................................................................................................................... 4
B. Rumusan Masalah ................................................................................................................. 4
C. Tujuan Penelitian .................................................................................................................. 4
BAB II PEMBAHASAN............................................................................................................................... 5
A. Metode KNN (K-Nearest Neighbour) ...................................................................................... 5
B. Cara Kerja Metode KNN (K-Nearest Neighbour)..................................................................... 5
C. Metode Naive Bayes Classifier .............................................................................................. 11
D. Cara Kerja Metode Naive Bayes Classifier ............................................................................ 12
E. Implementasi Metode Naive Bayes Classifier ....................................................................... 12
F. Pengujian .............................................................................................................................. 19
G. Pengujian .............................................................................................................................. 20
BAB III PENUTUP ................................................................................................................................... 24
A. Kesimpulan............................................................................................................................ 24
B. Saran ..................................................................................................................................... 24
Daftar Pustaka....................................................................................................................................... 25

3
BAB I
PENDAHULUAN

A. Latar Belakang
Pengolahan data memiliki beragam metode, salah satunya machine learning.
Pada pengolahan data dengan machine learning, ada beragam metode yang bisa
digunakan. Beberapa diantaranya adalah K-Nearest Neighbor dan Continuous Naïve
Bayes Classifier. Kedua metode ini merupakan metode pengklasifikasian data
pemebelajaran.

Data yang diolah jumlahnya tak hanya puluhan, bisa berupa ratusan, ribuan
bahkan jutaan jumlah data yang diolah oleh kedua. Karena banyaknya jumlah data itu
maka diperlukan metode pengolahan data untuk mempermudah proses pengolahan
data.

B. Rumusan Masalah
1. Apa itu K-Nearest Neighbor?
2. Apa itu Continuous Naïve Bayes Classifier?
3. Bagaimana cara kerja K-Nearest Neighbor dan implementasinya?
4. Bagaimana cara kerja Continuous Naïve Bayes Classifier dan
implementasinya?

C. Tujuan Penelitian
1. Mengetahui cara kerja dari kedua metode dalam pengolahan data.
2. Mengetahui implementasi dari kedua metode ini dalam pengolahan data.
3. Membandingkan kedua metode dalam pengolahan data.

4
BAB II
PEMBAHASAN

A. Metode KNN (K-Nearest Neighbour)


K-Nearest Neighbor (KNN) adalah suatu metode yang menggunakan algoritma
supervised dimana hasil dari query instance yang baru diklasifikan berdasarkan
mayoritas dari kategori (kelas) pada KNN. Tujuan dari algoritma ini adalah
mengklasifikasikan obyek baru bedasarkan atribut dan training sample. Classifier yang
ada.

B. Cara Kerja Metode KNN (K-Nearest Neighbour)


1. Mencari Jarak
Data baru yang akan diklasifikasikan selanjutnya, dilakukan proses klasifikasi
dengan mencari jarak terdekat. Pada penelitian ini pencarian jarak menggunakan
metode menghitung Euclidean Distance.
Rumus:

Ket:
- X1 = Nilai value data training
- X2 = Nilai value data uji
- Y1 = Nilai value data training2
- Y2 = Nialai value data uji 2

2. Menentukan Tetangga
Untuk menggunakan algoritma k nearest neighbors, perlu ditentukan banyaknya
k tetangga terdekat yang digunakan untuk melakukan klasifikasi data baru. Penentuan
nilai k dipertimbangkan berdasarkan banyaknya data yang ada.

3. Algoritma Metode KNN (K-Nearest Neighbors)


a. Mementukan parameter K (jumlah tetangga terdekat).
b. Menghitung jarak objek, data uji terhadap data training.
c. Urutkan jarak yang terbentuk, dan tentukan jarak terdekat sampai urutan ke
K.
d. Pasangkan kelas yang bersesuaian.
e. Cari jumlah kelas terbanyak dari tetangga terdekat tersebut dan tetapkan
kelas tersebut sebagai kelas data yang diuji.
f. Menggunakan nilai kategori K yang mayoritas maka kelas objek data uji di
temukan.

5
4. Implementasi Metode KNN (K-Nearest Neighbors)
Program dibuat berbasis web dengan bahasa php.
>> koneksi.php
<?php
$server = 'localhost';
$user = 'root';
$pass = '';
$db = 'db_new_knn';

$con = mysqli_connect($server,$user,$pass,$db);

if (mysqli_connect_errno()) {
echo mysqli_connect_error();
}
?>

>> knn.php
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="../index.php">Home</a></li>
<li class="breadcrumb-item active" aria-current="page">KNN</li>
</ol>
</nav>
<?php
include 'koneksi.php';
include '../header0.php';
include 'proses.php';

$query = "select * from tb_latih";


$data = mysqli_query($con, $query);

input_array_latih($data);

$query1 = "select * from tb_uji";


$datauji = mysqli_query($con, $query1);

input_array_uji($datauji);

if (isset($_POST['submit'])) {
$jml_k = $_POST['k'];
hitung($jml_k);
cetak_hasil();
}
?>
<!--EMphty Space-->
<div class="container">

6
<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>
</div>
<!--Menu Pilehan Utama dashboard-->
<div class="container col-6">
<center>
<div class="card-deck col-6">
<div class="card text-white bg-info" style="max-width: 18rem;">
<div class="card-header"> KNN </div>
<div class="card-body">
<form class="form-group" action="" method="post">
<input class="form-control" type="text" name="k" value=""><br>
<input type="submit" name="submit" value="submit" class="btn-primary">
</form>
</div>
</div>
</div>
</center>
</div>
<!--footer-->

<?php include '../footer.php'; ?>

>> proses.php
<link rel="stylesheet" href="../css.css">
<script src="../js.js"></script>
<?php
include 'koneksi.php';
$data_array_latih = array();
$data_array_uji = array();
$data_array_cluster = array();
$data_array_jarak = array();
$data_array_temp = array();
$data_array_temp2 = array();

function input_array_latih($data){
$i = 0;
global $data_array_latih;
while ($input = mysqli_fetch_assoc($data)) {
array_push($data_array_latih, array($input['STG'], $input['SCG'],
$input['STR'], $input['LPR'], $input['PEG'], $input['UNS']));
}
}

function input_array_uji($data){
$i = 0;

7
global $data_array_uji;
while ($input = mysqli_fetch_assoc($data)) {
array_push($data_array_uji, array($input['STG'], $input['SCG'],
$input['STR'], $input['LPR'], $input['PEG']));
}
}

function free_array_temp(){
global $data_array_temp;
foreach ($data_array_temp as $i => $value) {
unset($data_array_temp[$i]);
}
$data_array_temp = array();
}

function free_array_temp2(){
global $data_array_temp2;
foreach ($data_array_temp2 as $i => $value) {
unset($data_array_temp2[$i]);
}
$data_array_temp2 = array();
}

function free_array_jarak(){
global $data_array_jarak;

foreach ($data_array_jarak as $i => $value) {


unset($data_array_jarak[$i]);
}
$data_array_jarak = array();
}

function hitung($jml_k){
global $data_array_latih;
global $data_array_uji;
global $data_array_jarak;

for ($i=0; $i < count($data_array_uji) ; $i++) {


for ($j=0; $j < count($data_array_latih); $j++) {
$n0 = $data_array_uji[$i][0] - $data_array_latih[$j][0];
$n1 = $data_array_uji[$i][1] - $data_array_latih[$j][1];
$n2 = $data_array_uji[$i][2] - $data_array_latih[$j][2];
$n3 = $data_array_uji[$i][3] - $data_array_latih[$j][3];
$n4 = $data_array_uji[$i][4] - $data_array_latih[$j][4];

$jrk = sqrt(pow($n0, 2) + pow($n1, 2) + pow($n3, 2) + pow($n4, 2));

8
array_push($data_array_jarak, $jrk);
}
hitung_cluster($jml_k);
free_array_temp();
free_array_temp2();
free_array_jarak();
// cetak_jarak();
}
}

function hitung_cluster($jml_k){
global $data_array_jarak;
global $data_array_latih;
global $data_array_temp;
global $data_array_temp2;
global $data_array_cluster;

// cetak_jarak();
arsort($data_array_jarak);
// cetak_jarak();

for ($i=0; $i < $jml_k; $i++) {


$inpt = min($data_array_jarak);
// echo $inpt."<br>";
$a = array_keys($data_array_jarak, $inpt);
$a = array_pop($a);
array_push($data_array_temp, $a);
array_pop($data_array_jarak);
}
// cetak_temp();

for ($i=0; $i < $jml_k; $i++) {


$a = $data_array_temp[$i];
$b = $data_array_latih[$a][5];

$data_array_temp[$i] = $b;
}
// cetak_temp();

$data_array_temp2 = array_count_values($data_array_temp);

// cetak_temp2();

$a = max($data_array_temp2);
$b = array_search($a, $data_array_temp2);

9
array_push($data_array_cluster, $b);

// cetak_cluster();
}

function cetak_hasil(){
global $data_array_uji;
global $data_array_cluster;
?>
<section>
<h1>Hasil Pengujian</h1>
<div class="tbl-header">
<table cellpadding="0" cellspacing="0" border="0">
<thead>
<tr>
<td>STG</td>
<td>SCG</td>
<td>STR</td>
<td>LPR</td>
<td>PEG</td>
<td>UNS</td>
</tr>
</thead>
</table>
</div>
<div class="tbl-content">
<table cellpadding="0" cellspacing="0" border="0">
<?php for ($i=0; $i < count($data_array_uji) ; $i++) { ?>
<tr>
<td><?php echo $data_array_uji[$i][0] ?></td>
<td><?php echo $data_array_uji[$i][1] ?></td>
<td><?php echo $data_array_uji[$i][2] ?></td>
<td><?php echo $data_array_uji[$i][3] ?></td>
<td><?php echo $data_array_uji[$i][4] ?></td>
<td><?php echo $data_array_cluster[$i] ?></td>
</tr>
<?php } ?>

</table>
</div>
<?php }

function cetak_latih(){
global $data_array_latih;
echo "<pre>";
print_r($data_array_latih);

10
echo "</pre>";
}

function cetak_uji(){
global $data_array_uji;
echo "<pre>";
print_r($data_array_uji);
echo "</pre>";
}

function cetak_jarak(){
global $data_array_jarak;
echo "<pre>";
print_r($data_array_jarak);
echo "</pre>";
}

function cetak_temp(){
global $data_array_temp;
echo "<pre>";
print_r($data_array_temp);
echo "</pre>";
}

function cetak_temp2(){
global $data_array_temp2;
echo "<pre>";
print_r($data_array_temp2);
echo "</pre>";
}

function cetak_cluster(){
global $data_array_cluster;
echo "<pre>";
print_r($data_array_cluster);
echo "</pre>";
}
?>
C. Metode Naive Bayes Classifier
Bayes merupakan teknik prediksi berbasis probabilitas sederhana yang
berdasarkan pada teorema bayes dengan asumsi independensi variabel atau parameter
yang kuat (naive). Artinya adalah satu variabel dengan variabel lain tidak berkaitan.

11
D. Cara Kerja Metode Naive Bayes Classifier
1. Teorema Bayes
Prediksi bayes ang di dasarkan pada teorema bayes mempunyyai teorema
sebagai berikut:
𝑃 (𝐸 | 𝐻) 𝑥 𝑃 (𝐻)
𝑃(𝐻 | 𝐸) =
𝑃 (𝐸)
Ket:
- P(H | E) = Probabilitas akhir barsyarat hipotesis (H) terjadi jika evidence
(jika (E) terjadi),
- P(E|H) = Probabilitas (E) yang mempengaruhi probabilitas (H).
- P(H) = Probabilitas awal atau prior hipotesis (H) terjadi tana memandang
bukti apapun.
- P(E) = Probabilitas awal atau prior hipotesis (E) tanpa memandang
hioptesis apapun.
Naive bayes bisa digunakan untuk klasiikasi data. Hipotesa dalam teorema
bayes di jadikan label kelas dalam klasifikasi, sedangkan bukti (E) merupakan
variabel atau vitu non kelas.
2. Algoritma Metode Naive Bayes Classifier
a. Melakulan diskritisasi pada setiap fitur kontinue dan mengganti nilai
kontinu dengan nilai interval diskrit.
b. Mengasumsikan bentuk tertentu dari probabilitas fitur kontinue pada data
pelatihan.
Rumus yang digunakan:
1
(𝑥1 − 𝜇𝑖𝑗 )
𝑒𝑥𝑝
2𝜏𝑖𝑗 2
(√2𝜋𝜏)
Ket:
- τ = Tanda deviasi
- μ = rata-rata

E. Implementasi Metode Naive Bayes Classifier


Progarm dibuat berbasis web menggunakan bahasa pemrograman php.
>> bayes.php
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="../index.php">Home</a></li>
<li class="breadcrumb-item active" aria-current="page">Bayes</li>
</ol>
</nav>
<?php
include 'fungsi.php';
include '../header0.php';

12
// Main function
$con = mysqli_connect("localhost","root","","db_new_knn");
$result = mysqli_query($con, 'SELECT * FROM tb_latih');
$data = importToArray($result);
// show2DArray($data);
$kelas=classingTraining($data);
// show1DArray($kelas);
$rataRata=getMeans($data, $kelas);
// show2DArray($rataRata);
$variasi=getVariance($data, $rataRata, $kelas);
// show2DArray($variasi);
$resultuji = mysqli_query($con, 'SELECT * FROM tb_uji');
$datauji = importToArray($resultuji);
// show2DArray($datauji);
$likelihood=getLikelihood($data, $datauji, $rataRata, $variasi,$kelas);

include '../footer.php';
?>

>> fungsi.php
<link rel="stylesheet" href="../css.css">
<script src="../js.js"></script>
<?php
//import data dari db ke Array//
function importToArray($resultFromDB){
$data=array();
while ($row=mysqli_fetch_array($resultFromDB)) {
$column = count($row)/2;
$temp = array();
for ($i=0; $i < $column; $i++) {
$temp[$i]=$row[$i];
}
array_push($data, $temp);
}
return $data;
}
//menampilkan data array//
function show2DArray($data){
?>
<table class="tabel" border="1">
<?php
for ($i=0; $i < count($data); $i++) {
?>
<tr>
<?php
for ($j=0; $j < count($data[$i]); $j++) {

13
?>
<td>
<?php
echo $data[$i][$j];
?>
</td>
<?php
}
?>
</tr>
<?php
}
?>
</table>
<?php
}

//Menampilkan Array 1 Dimensi//


function show1DArray($data){
?>
<table class="tabel" border="1">
<?php
for ($i=0; $i < count($data); $i++) {
?>
<tr>
<td>
<?php
echo $data[$i];
?>
</td>
</tr>
<?php
}
?>
</table>
<?php
}

//menklasifikasi data latih//


function classingTraining($data){
$class = count($data[0])-1;
for ($i=0; $i < count($data); $i++) {
$temp[]=$data[$i][$class];
}
$temp = array_unique($temp);
foreach ($temp as $key => $value)

14
{
$resultClass[]=$value;
}
return $resultClass;
}

//mendapatkan rata-rata tiap kelas//


function getMeans($data, $class){
$fieldClass = count($data[0])-1;
for ($i=0; $i < count($class); $i++) {
${"Class$i"}=null;
for ($j=0; $j < count($data); $j++) {
if ($class[$i]==$data[$j][$fieldClass]) {
${"Class$i"}[]=$data[$j];
}
}
}
$resultOfSeparation=array();
for ($i=0; $i < count($class); $i++) {
array_push($resultOfSeparation, ${"Class$i"});
}
for ($i=0; $i < count($resultOfSeparation); $i++) {
${"Class$i"}=null;
for ($j=0; $j < count($resultOfSeparation[$i]); $j++) {
for ($k=0; $k < $fieldClass; $k++) {

@${"Class$i"}[$k]=${"Class$i"}[$k]+(float)$resultOfSeparation[$i][$j][$k];
}

}
for ($k=0; $k < count(${"Class$i"}); $k++) {

${"Class$i"}[$k]=(float)${"Class$i"}[$k]/count($resultOfSeparation[$i]);
}
}
$result=array();
for ($i=0; $i < count($class); $i++) {
array_push($result, ${"Class$i"});
}
return $result;
}

//mendapatkan nilai variasi//


function getVariance($data, $rata, $class){
$fieldClass = count($data[0])-1;
for ($i=0; $i < count($class); $i++) {

15
${"Class$i"}=null;
for ($j=0; $j < count($data); $j++) {
if ($class[$i]==$data[$j][$fieldClass]) {
${"Class$i"}[]=$data[$j];
}
}
}
$resultOfSeparation=array();
for ($i=0; $i < count($class); $i++) {
array_push($resultOfSeparation, ${"Class$i"});
}
for ($i=0; $i < count($resultOfSeparation); $i++) {
${"Class$i"}=null;
for ($j=0; $j < count($resultOfSeparation[$i]); $j++) {
for ($k=0; $k < $fieldClass; $k++) {

@${"Class$i"}[$k]=${"Class$i"}[$k]+(((float)$resultOfSeparation[$i][$j][$k]
-$rata[$i][$k])*((float)$resultOfSeparation[$i][$j][$k]-$rata[$i][$k]));
}

}
for ($k=0; $k < count(${"Class$i"}); $k++) {

${"Class$i"}[$k]=round((float)${"Class$i"}[$k]/(count($resultOfSeparation[$
i])-1),4);
}
}
$result=array();
for ($i=0; $i < count($class); $i++) {
array_push($result, ${"Class$i"});
}
return $result;
}

//menentukan likelihood//

function getLikelihood($datalatih, $datauji, $rata, $variasi, $kelas){


//echo "<h1>Hasil Pengujian</h1>";
?>
<section>
<h1>Hasil Pengujian</h1>
<div class="tbl-header">
<table cellpadding="0" cellspacing="0" border="0">
<thead>
<tr>
<td>STG</td>

16
<td>SCG</td>
<td>STR</td>
<td>LPR</td>
<td>PEG</td>
<td>UNS</td>
</tr>
</thead>
</table>
</div>
<div class="tbl-content">
<table cellpadding="0" cellspacing="0" border="0">
<?php
for ($i=0; $i < count($datauji); $i++) {

?>
<tr>
<?php

for ($j=0; $j < 5; $j++) {


?>
<td>
<?php
echo $datauji[$i][$j];
?>
</td>
<?php
}

$penghitungan=array();
${"Class$i"}=null;
$result=array();
for ($j=0; $j < count($rata); $j++) {

for ($k=0; $k < count($rata[$j]); $k++) {

${"Class$i"}[$k]=(1/SQRT(2*PI()*$variasi[$j][$k]))*exp((-
((float)($datauji[$i][$k]-(float)$rata[$j][$k]))*((float)($datauji[$i][$k]-
(float)$rata[$j][$k])))/(2*$variasi[$j][$k]));
}
array_push($penghitungan, ${"Class$i"});
$likelihood = getProbality($datalatih, $kelas[$j]);
for ($x=0; $x < count(${"Class$i"}); $x++) {
$likelihood = $likelihood * ${"Class$i"}[$x];
}

17
array_push($result, $likelihood);
// echo "nilai likelihood untuk nilai $kelas[$j] adalah
$likelihood <br>";
$kategori=0;
for ($kesimpulan=0; $kesimpulan < count($result);
$kesimpulan++) {

if ($result[$kesimpulan]==max($result)) {

$kategori=$kesimpulan;
}
}
}
?>
<td>
<?php echo $kelas[$kategori]; ?>
</td>
</tr>
<?php
// echo "Hasil klasifikasinya adalah data uji masuk kedalam klasifikasi
". $kelas[$kategori];
// show2DArray($penghitungan);

// echo "<br>";
// echo "<br>";

}
?>
</table>
</div>
</section>
<?php

function getProbality($datalatih, $kelas){


$classIndex=count($datalatih[0])-1;
$probability=0;
for ($i=0; $i < count($datalatih); $i++) {
if ($datalatih[$i][$classIndex]==$kelas) {
$probability++;
}
}
return $probability/count($datalatih);
}
?>

18
F. Pengujian
1. Data yang digunakan
Data yang digunakan adalah data tentang tentang pemodelan pengetahuan
pengguna, di peroleah dari uci machine learning repository. Data ini terdiri dari 6
atribut, 5 atribut sebagai value input dan 1 atrubut sebagai target. Atrubut target
nantinya akan di klasifikasikan ke 4 jenis klasifikasi.
5 atribut input adalah:
a. STG
b. SCG
c. STR
d. LPR
e. PEG
1 atribut target adalah:
a. UNS
4 klasifikasinya yaitu:
a. Very low
b. Low
c. Middle
d. High

2. Basis Data
>>Tabel Data Trainng
Field key Type Data() Keterangan
STG double
SCG double
STR double
LPR double
PEG double
UNS Varchar(10)

>> Tabel data Uji


Filed key Type data() Keterangan
STG double
SCG double
STR double
LPR double
PEG double

Ket:
>> Input
- STG = The degree of study time for goal object materials = Lama waktu
studi untuk tujuan terkait.
- SCG = The degree of repetiation number of user for goal object materials
= Pengulangan user dengan material tujuan terkait.

19
- STR = The degree of study time of user for related objects with goal
materials = Lama waktu study user untuk objek dengan tujuan terkait.
- LPR = The exam performance of user for related user for related object
with goal object = Performa ujian user untuk objek terkait dengan objek
tujuan.
- PEG = The exam performance of user for goal object = Performa ujian
user.
>> Target
- UNS = The knowlage level of user = Level pengetahuan user.

G. Pengujian
>> home awal

20
1. KNN
>> masukan nilai K

>> klik submit akan langsung di tampilkan hasil

21
2. Bayes
>> Klik bayes pada home
>> maka sistem akan langsung menguji data uji terhadap data training yang ada di
database

3. Uji Keakuratan
Didapatkan hasil sebagai berikut:

22
Hasil yang di dapat adalah:
>> Persentase kesamaan atau kemiripan hasil klasifikasi yang di uji menggunakan
metode knn terhadap klasifikasi data uji yang yang sebenarnya sebesar 90%
>> Persentase kesamaan atau kemiripan hasil klasifikasi yang di uji menggunakan
metode naive bayes classifier terhadap klasifikasi data uji yang yang sebenarnya
sebesar 84%

23
BAB III
PENUTUP
A. Kesimpulan
.....

B. Saran
......

24
Daftar Pustaka

https://kuliahinformatika.wordpress.com/2010/02/13/buku-ta-k-nearest-neighbor-knn/, diakses pada


Rabu, 16 Mei 2018.

https://www.advernesia.com/blog/data-science/pengertian-dan-cara-kerja-algoritma-k-nearest-
neighbours-knn/, diakses pada Rabu, 16 Mei 2018.

https://arfianhidayat.com/algoritma-naive-bayes, diakses pada Rabu, 16 Mei 2018.

http://archive.ics.uci.edu/ml/datasets/user+knowledge+modeling, diakses pada Selasa, 15 Mei 2018.

Buku catatan pengenalan pola.

25

Anda mungkin juga menyukai