Anda di halaman 1dari 7

2.

K-Nearest Neighbor
Merupakan algoritma dari jenis Machine Learning Supervised Learning yang bertujuan untuk
klasifikasi data suatu objek berdasarkan sejumlah k-data training yang memiliki jarak yang paling
dekat (nearest neighbor) dengan objek tersebut.

Jauh dekatnya tetangga biasanya dihitung berdasarkan jarak Euclidean(d).

CONTOH:
Memprediksi apakah seseorang bisa lulus S2 tepat waktu berdasarkan variabel IPK
S1 dan usia masuk kuliah S2.
Ada 2 variabel yaitu IPK S1 dan usia masuk kuliah S2, variabel ini
akan digunakan untuk memprediksi apakah seseorang dapat lulus tepat waktu atau tidak
dengan metode KNN.

Catatan: untuk neighbor nya diusahakan jumlah nya tidak genap, karena dapat mengeluarkan
hasil 50%-50%.

Langkah-langkah KNN:
1. Menentukan parameter K, bilangan bulat positif sebagai nearest neighbor (banyaknya
tetangga terdekat).
2. Hitung jarak antara data baru dan semua data yang ada di data training.
3. Menentukan K tetangga terdekat berdasarkan jarak minimum.
4. Tetangga yang memiliki frekuensi terbanyak diambil sebagai nilai prediksi atau hasil
klasifikasi dari data yang baru tersebut.

Contoh kasus lain


Terdapat 3 jenis bunga iris yang susah untuk dikenali, yaitu bunga sentosa, bunga versicolor
dan bunga virginica. Agar mempermudah mengetahui bunga iris itu jenisnya apa, maka
dibuatlah sebuah program dengan menggunakan metode KNN untuk memprediksi jenis bunga
iris masuk dalam jenis yang mana.

Pada praktikum ini, kita akan menggunakan dataset Iris. Dataset Iris merupakan dataset
multivariate yang diperkenalkan oleh ahli statistika dan biologi inggris, Ronald Fisher, pada
tahun 1936. Dataset bunga Iris ini sangat terkenal di dunia Machine Learning yang digunakan
untuk ujicoba berbagai metode klasifikasi.

Dataset ini terdiri dari 3 spesies Iris yaitu Iris Setosa, Iris Virginica, dan Iris Versicolor dan tiap
spesiesnya memiliki 50 sampel. Dalam data Iris terdapat 4 atribut yang dapat mempengaruhi
klasifikasi yaitu, sepal length (panjang kelopak), sepal width (lebar kelopak), petal length
(panjang bunga), dan petal width (lebar bunga) dalam centimeter yang berbeda-beda.

import pandas as pd

import matplotlib.pyplot as plt

from sklearn import datasets

bunga = datasets.load_iris()

bunga

[5.7, 2.9, 4.2, 1.3],

[6.2, 2.9, 4.3, 1.3],

[5.1, 2.5, 3. , 1.1],

[5.7, 2.8, 4.1, 1.3],

[6.3, 3.3, 6. , 2.5],

[5.8, 2.7, 5.1, 1.9],

[7.1, 3. , 5.9, 2.1],

[6.3, 2.9, 5.6, 1.8],

[6.5, 3. , 5.8, 2.2],

[7.6, 3. , 6.6, 2.1],

[4.9, 2.5, 4.5, 1.7],

[7.3, 2.9, 6.3, 1.8],

[6.7, 2.5, 5.8, 1.8],

[7.2, 3.6, 6.1, 2.5],

[6.5, 3.2, 5.1, 2. ],

[6.4, 2.7, 5.3, 1.9],

[6.8, 3. , 5.5, 2.1],

[5.7, 2.5, 5. , 2. ],

[5.8, 2.8, 5.1, 2.4],

[6.4, 3.2, 5.3, 2.3],

[6.5, 3. , 5.5, 1.8],

[7.7, 3.8, 6.7, 2.2],

[7.7, 2.6, 6.9, 2.3],

[6. , 2.2, 5. , 1.5],

[6.9, 3.2, 5.7, 2.3],

[5.6, 2.8, 4.9, 2. ],

[7.7, 2.8, 6.7, 2. ],

[6.3, 2.7, 4.9, 1.8],

[6.7, 3.3, 5.7, 2.1],

[7.2, 3.2, 6. , 1.8],

[6.2, 2.8, 4.8, 1.8],

[6.1, 3. , 4.9, 1.8],

[6.4, 2.8, 5.6, 2.1],

[7.2, 3. , 5.8, 1.6],

[7.4, 2.8, 6.1, 1.9],

[7.9, 3.8, 6.4, 2. ],

[6.4, 2.8, 5.6, 2.2],

[6.3, 2.8, 5.1, 1.5],

[6.1, 2.6, 5.6, 1.4],

[7.7, 3. , 6.1, 2.3],

[6.3, 3.4, 5.6, 2.4],

[6.4, 3.1, 5.5, 1.8],

[6. , 3. , 4.8, 1.8],

[6.9, 3.1, 5.4, 2.1],

[6.7, 3.1, 5.6, 2.4],

[6.9, 3.1, 5.1, 2.3],

[5.8, 2.7, 5.1, 1.9],

[6.8, 3.2, 5.9, 2.3],

[6.7, 3.3, 5.7, 2.5],

[6.7, 3. , 5.2, 2.3],

[6.3, 2.5, 5. , 1.9],

[6.5, 3. , 5.2, 2. ],

[6.2, 3.4, 5.4, 2.3],

[5.9, 3. , 5.1, 1.8]]),

'data_module': 'sklearn.datasets.data',

'feature_names': ['sepal length (cm)',

'sepal width (cm)',

'petal length (cm)',

# Lihat informasi dari data bunga
bunga.data.shape

(150, 4)

# Cari tau jenis-jenis bunga ada apa saja

bunga.target_names

array(['setosa', 'versicolor', 'virginica'], dtype='<U10')

# Buat data frame
data = bunga.data # Karena data berupa array maka ambil datanya saja

df = pd.DataFrame(data, columns=bunga.feature_names)
df

sepal length sepal width petal length petal width


(cm) (cm) (cm) (cm)

0 5.1 3.5 1.4 0.2

1 4.9 3.0 1.4 0.2

2 4.7 3.2 1.3 0.2

3 4.6 3.1 1.5 0.2

4 5.0 3.6 1.4 0.2

... ... ... ... ...

145 6.7 3.0 5.2 2.3

146 6.3 2.5 5.0 1.9

147 6.5 3.0 5.2 2.0

148 6.2 3.4 5.4 2.3

149 59 30 51 18

#Membagi dataset menjadi 50% data training dan 50% testing
X = bunga['data']
y = bunga['target']

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.50)
# Jenis bunga iris dapat diketahui berdasarkan sepal dan petalnya.
#Sepal adalah kelopak bunga yang besar sedangkan petal adalah kelopak bunga yang kecil

from sklearn.neighbors import KNeighborsClassifier

# Cari tetangganya dulu, misal kita gunakan n_neighbors=7
# weights adalah satuan berat yang digunakan untuk prediksi, default nya uniform yaitu bob
# algorithm digunakan untuk menghotung tetangga terdekat nanti
# auto berarti nanti dia akan memutuskan logaritma yang paling tepat berdasarkan nilai yg 

knn = KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', metric='euc

knn.fit(x_train, y_train) # Machine belajar

KNeighborsClassifier(metric='euclidean')

##gunakan model yang sudah dibuat untuk memprediksi nilai perkiraan y - dari data testing

y_pred = knn.predict(x_test)

#Melihat hasil dan menampilkan evaluasi untuk ukuran baik buruknya hasil klasifikasi mengg

from sklearn.metrics import classification_report, confusion_matrix, accuracy_score

result = confusion_matrix(y_test, y_pred)

print("Confusion Matrix:")

print(result)

result1 = classification_report(y_test, y_pred)

print("Classification Report:",)

print (result1)

result2 = accuracy_score(y_test,y_pred)

print("Accuracy:",result2)

Confusion Matrix:

[[31 0 0]

[ 0 21 4]

[ 0 0 19]]

Classification Report:

precision recall f1-score support

0 1.00 1.00 1.00 31

1 1.00 0.84 0.91 25

2 0.83 1.00 0.90 19

accuracy 0.95 75

macro avg 0.94 0.95 0.94 75

weighted avg 0.96 0.95 0.95 75

Accuracy: 0.9466666666666667

#Kita uji dengan data baru

dataBaru = [[6.2, 1.5, 4.2, 2.6]] # 6.2 utk sepal length, 1.5 sepat width, 4.2 petal lengt

prediksi = knn.predict(dataBaru)

prediksi

array([2])

if(prediksi == 0):

    print("Ini adalah bunga sentosa")

elif(prediksi == 1):

    print("Ini adalah bunga versicolor")

else:

    print("Ini adalah bunga virginica")

Ini adalah bunga virginica

MODEL NAIVE BAYES

Praktikum ini bertujuan untuk memberikan pemahaman praktis mengenai salah satu metode
klasifikasi Naive Bayes Classifier (NBC). NBC merupakan metode klasifikasi tersupervisi yang
berbasis statistik probabilitas dari dataset. NBC pada dasarnya diperuntukkan untuk jenis
atribut kategorikal, namun untuk data numerik bisa disiasati dengan menerapkan metode
Gaussian, sehingga sering disebut sebagai *Gaussian Naive Bayes. *

Untuk librarynya digunakan library GaussianNB dari sklearn. Jadi kita menggunakan libary naive
bayes yang sudah ada

from sklearn.naive_bayes import GaussianNB

Pertama, lakukan train dengan model NBC:

model = GaussianNB()

model.fit(x_train,y_train)

GaussianNB()

Predicting

Kita sudah dapat menggunakan model yang terbentuk untuk memprediksikan data

y_pred = model.predict(x_test)

print(y_pred[0:5])

print(y_test[0:5])

[0 0 0 1 0]

[0 0 0 1 0]

Perhitungan Akurasi

Pada klasifikasi, nilai akurasi klasifikasi secara sederhana dapat dihitung dengan
memperbandingkan kelas hasil prediksi algoritma dengan kelas sebenarnya / actual class.

from sklearn import metrics

print("Test set Accuracy: ", metrics.accuracy_score(y_pred, y_test))

Test set Accuracy: 0.9733333333333334

result = confusion_matrix(y_test, y_pred)

print("Confusion Matrix:")

print(result)

result1 = classification_report(y_test, y_pred)

print("Classification Report:",)

print (result1)

result2 = accuracy_score(y_test,y_pred)

print("Accuracy:",result2)

Confusion Matrix:

[[31 0 0]

[ 0 24 1]

[ 0 1 18]]

Classification Report:

precision recall f1-score support

0 1.00 1.00 1.00 31

1 0.96 0.96 0.96 25

2 0.95 0.95 0.95 19

accuracy 0.97 75

macro avg 0.97 0.97 0.97 75

weighted avg 0.97 0.97 0.97 75

Accuracy: 0.9733333333333334

prediksi = model.predict(dataBaru)

prediksi

array([2])

if(prediksi == 0):

    print("Ini adalah bunga sentosa")

elif(prediksi == 1):

    print("Ini adalah bunga versicolor")

else:

    print("Ini adalah bunga virginica")

Ini adalah bunga virginica

Tugas1 : :Modifikasi contoh di atas

1. dengan merubah komposisi data training dan testing menjadi 60-40%


2. uji coba dengan menggunakan untuk klasifier KNN dengan nilai k=3 dan k=5
3. Uji coba hasil untuk model Naive Bayes

Tugas2 : :Modifikasi contoh di atas

1. dengan merubah komposisi data training dan testing menjadi 50-50%


2. uji coba dengan menggunakan untuk klasifier KNN dengan nilai k=3 dan k=5
3. Uji coba hasil untuk model Naive Bayes

Tugas3 : :Jelskan nilai akurasi yang paling besar yang didapatkan dari seluruh model

check 0s completed at 12:32 AM

Anda mungkin juga menyukai