Hello fellows…👋👋👋
Hari ini saya mau menjelaskan mengenai salah satu metode machine studying yang sangat mudah untuk dipahami. Metode ini adalah Okay-Nearest Neighbor atau disingkat KNN. Metode ini biasa disebut juga metode lazy studying karena memang metode ini malas. Bayangin kalo kalian lagi ujian terus ada temen yang bilang “datang-kerjakan-lupakan”. Sama seperti lazy studying, metode ini tidak belajar apapun dari check yang telah dijalankan sebelumnya. Dia akan belajar ulang dari knowledge yang ada dan melupakan pengalaman tersebut.
Metode Okay-Nearest Neighbor (Okay-NN) adalah salah satu dari kategori metode supervised studying dalam machine studying yang biasanya digunakan untuk kasus regresi dan klasifikasi. KNN beranggapan bahwa sesuatu yang dianggap mirip akan berdekatan dengan tetangganya secara jarak yang telah ditentukan. Artinya, data-data yang serupa akan dekat satu sama lain.
Metode KNN bersifat non-parametric yaitu metode yang tidak membuat asumsi apapun atas distribusi knowledge yang mendasarinya. KNN yang memiliki sifat non-parametric menggunakan sejumlah parameter yang fleksibel, dan jumlah parameter seringkali bertambah seiring knowledge yang semakin banyak. KNN memiliki komputasi yang lebih lambat seiring bertambahnya knowledge yang ada.
Metode KNN juga bersifat lazy studying seperti yang telah saya jelaskan di awal. Sebenernya tidak ada fase pelatihan yang digunakan untuk membuat mannequin. Semua knowledge coaching digunakan pada tahap testing. Itulah mengapa KNN cenderung ‘mahal’ atau membutuhkan banyak value dari sisi waktu dan memori.
Pada Determine 1 kita dapat melihat bahwa diberikan dataset sebanyak 11 knowledge yang terdiri dari 6 knowledge berbentuk segilima dan 5 knowledge berbentuk segitiga. Jika terdapat 1 knowledge uji yang dapat dilihat pada warna hijau, maka knowledge tersebut diklasifikasikan sebagai segitiga atau segilima? Jika kita memakai metode KNN, maka secara intuitif kita dapat melihat tetangga dari knowledge uji. Misalkan kita akan melihat 5 tetangga terdekat. Jika dilihat, 5 tetangga terdekat dari knowledge uji adalah 3 segitiga dan 2 segilima. Jadi, jika kita melihat 5 tetangga terdekat, knowledge uji tersebut dapat diklasifikasikan sebagai segitiga. Bagaimana jika kita memperluas jarak tetangganya. Misalnya, kita mengambil 11 tetangga terdekat. Maka kita dapat mengetahui bahwa 11 tetangga terdekat dari knowledge uji adalah 5 segitiga dan 6 segilima. Jadi, dapat dikategorikan bahwa knowledge uji tersebut diklasifikasikan sebagai segilima.
Mari kita mempelajari lebih element mengenai langkah-langkah metode KNN. Berikut adalah langkah-langkahnya:
1. Tentukan nilai Okay
Tentukan nilai Okay dimana Okay adalah jumlah tetangga yang akan kita pakai untuk mengklasifikasikan knowledge terbaru. Tidak ada kepastian dalam memilih Okay dan penentuan Okay harus diuji sesuai dengan knowledge. Namun, ideas yang bisa saya bagikan adalah jika kelas nya berjumlah genap maka Okay-nya harus ganjil. Dan sebaliknya, jika kelasnya berjumlah ganjil maka Okay-nya harus genap. Kenapa? Karena, jika sama-sama genap maka akan ada kemungkinan hasil dari klasifikasi mendapatkan kelas dengan jumlah yang sama. Misalkan kelasnya ada 2 yaitu segitiga dan segilima. Okay yang kita pilih yaitu 4. Bagaimana jika di dalam 4 tetangga (Okay) yang kita pilih terdapat 2 segitiga dan 2 segilima? Maka tidak ada yang lebih dominan dari keduanya.
2. Hitung jarak antara knowledge uji dengan keseluruhan knowledge latih
Perhitungan jarak digunakan untuk mengetahui jarak terdekat dari knowledge uji dari keseluruhan knowledge latih. Untuk menghitung jarak antara knowledge uji dengan keseluruhan knowledge, maka kita perlu algoritma perhitungan jarak. Algoritma perhitungan jarak yang sangat umum digunakan yaitu Euclidean Distance atau Manhattan Distance. Berikut rumus keduanya:
dimana x adalah titik vector dari sumbu x dan y adalah titik vector dari sumbu y.
3. Ambil Sejumlah Okay dengan jarak terdekat
Setelah mendapatkan jarak dari knowledge uji dengan keseluruhan knowledge latih, urutkan keseluruhan knowledge berdasarkan jarak yang paling dekat. Jika kita pakai metode Manhattan atau Euclidean distance, maka kita urutkan berdasarkan nilai yang paling kecil. Terakhir, ambil Okay teratas dari keseluruhan knowledge.
4. Kelompokkan Okay teratas dataset ke dalam masing-masing kelas
Terakhir, kelompokkan Okay teratas dari dataset ke dalam masing-masing kelas. Mari kita kembali pada Determine 1. dimana jika kita tentukan 5 tetangga terdekat, maka jika kita kelompokkan menjadi 3 segitiga dan 2 bintang. Dapat kita simpulkan bahwa knowledge uji tersebut dikategorisasikan sebagai segitiga.
Sekarang, mari kita menuju ke contoh kasus yaitu klasifikasi bunga Iris. Bunga Iris adalah salah satu bunga yang berasal dari Afrika Barat dan Amerika Selatan. Bunga ini mempunyai tiga jenis yaitu Iris Setosa, Iris Versicolour dan Iris Virginica.
Untuk mengetahui perbedaan jenis diantara ketiganya dengan cara melihat panjang dan lebar dari Sepal dan Petal seperti yang terlihat pada Determine 2. Dari penjelasan tersebut maka kita dapat merumuskan fitur-fitur yang digunakan untuk mengklasifikasi bunga Iris adalah Sepal Size, Sepal Width, Petal Size, Petal Width. Berikut adalah contoh dataset yang diambil dari UCI Machine Learning Dataset.
Dari Tabel 1, kita dapat melihat bahwa kita punya 6 knowledge latih dan 1 knowledge uji. Dari 6 knowledge latih tersebut terdapat masing-masing 2 kelas yaitu Setosa, Versicolor dan Virginica. Tugas kita diminta untuk mengklasifikasi 1 knowledge uji yang belum diketahui kelasnya. Apa kelas dari knowledge uji tersebut? Sekarang mari ikuti langkah-langkah dari Okay-NN yang telah dijelaskan pada part sebelumnya:
1. Tentukan nilai Okay
Mari kita tentukan nilai Okay adalah 3. Alasan saya menggunakan Okay=3 adalah karena kita mempunyai 6 knowledge latih dengan 3 kelas. Okay=3 paling cocok kita gunakan agar kelompok yang dihasilkan akan mempunyai 2 kelas dominan dan 1 kelas tidak dominan. Jika kita menggunakan Okay=4 akan ada kemungkinan 2 kelas sama-sama berjumlah 2 (Misal Virginica=2 dan Setosa=2). Jadi Okay=4 tidak cocok untuk kasus ini karena knowledge latih hanya berjumlah 6.
2. Hitung jarak antara knowledge uji dengan keseluruhan knowledge latih
Sekarang, kita hitung jarak antara knowledge uji dengan keseluruhan knowledge latih yang ada menggunakan Euclidean Distance.
3. Ambil Sejumlah Okay dengan jarak terdekat
Kita telah menghitung jarak antara knowledge uji dengan keseluruhan knowledge latih. Mari kita urutkan hasilnya mulai yang paling kecil sampai yang terbesar.
4. Kelompokkan Okay teratas dataset ke dalam masing-masing kelas
Mari kita lihat 3 Okay teratas terdapat kelas Setosa dengan jumlah 2 dan Versicolor dengan Jumlah 1. Oleh karena itu maka dapat kita simpulkan bahwa knowledge uji tersebut dapat diklasifikasikan sebagai kelas Setosa.
Sebelumnya kita telah mengklasifikasikan bunga iris dengan langkah-langkah yang element. Di part ini, kita akan belajar bagaimana cara membuat code klasifikasi bunga iris menggunakan bahasa python. Saya telah membuat code menggunakan Google Colab. Silahkan kunjungi hyperlink berikut ini.
1. Inisialisasi Information Latih dan Information Uji
Pertama tama, kita mengimport library yang kita butuhkan yaitu pandas dan numpy. Lalu kita inisialisasi knowledge latih dan knowledge uji. Masing-masing knowledge latih dan knowledge uji kita pecah menjadi 2 yaitu fitur dan label.
import pandas as pd
import numpy as npX_train = {
'Sepal Size': [4.3, 4.7, 6.4, 5.9, 7.7, 7.7],
'Sepal Width': [3.0, 3.2, 3.2, 3.0, 3.8, 2.6],
'Petal Size': [1.1, 1.3, 4.5, 4.2, 6.7, 6.9],
'Petal Width': [0.1, 0.2, 1.5, 1.5, 2.2, 2.3],
}
y_train = {
'Kelas': ['setosa', 'setosa', 'versicolor', 'versicolor', 'versicolor', 'virginica', 'virginica']
}
X_test = {
'Sepal Size': [4.9],
'Sepal Width': [3.1],
'Petal Size': [1.5],
'Petal Width': [0.1],
}
X_train = pd.DataFrame(X_train)
y_train = pd.DataFrame(y_train)
X_test = pd.DataFrame(X_test)
y_test = pd.DataFrame(y_test)
Seperti yang kita lihat diatas, terdapat variabel X_train dan y_train yang berisi fitur pada knowledge latih dan kelas pada knowledge latih, sedangkan X_test dan y_test adalah fitur dari knowledge uji dan kelas pada knowledge uji. Keseluruhan knowledge diubah menjadi dataframe menggunakan pandas untuk mempermudah membuat visualisasi dan kalkulasi.
2. Tentukan Nilai Okay dan Hitung Jarak
Tentukan nilai Okay dengan membuat variabel Okay=3
Okay= 3
Buat fungsi baru untuk menghitung jarak menggunakan euclidean distance
def euclideanDistance(x, y):
res = np.sqrt(np.energy(x-y, 2).sum())
return res
Inisialisasi variabel bernama resDistance dengan nilai awal 0. Lalu hitung jarak antara knowledge uji dengan keseluruhan knowledge latih
resDistance = pd.DataFrame({'distance': np.zeros(len(X_train))})
for j, prepare in enumerate(X_train.iloc):
resDistance['distance'][j] = euclideanDistance(X_test.iloc[0], prepare)
3. Ambil Sejumlah Okay dengan jarak terdekat
Urutkan knowledge dengan jarak yang paling kecil lalu ambil Okay terdekat
resDistanceConcat = pd.concat([resDistance, y_train], axis=1)sortDistance = resDistanceConcat.sort_values('distance')
pred = sortDistance.iloc[:K]['Label'].mode()[0]
Silahkan print variabel pred, hasilnya adalah Setosa.
Gimana? Mudah kan? hehe jika ada yang kurang paham silahkan bertanya pada kolom komentar. Subsequent artikel kita akan menggunakan metode ini untuk klasifikasi wajah. Kita akan mendeteksi wajah tersebut dengan nama tertentu. Menarik kan? Simak terus artikel selanjutnya….
Glad Coding 🙂