Dalam dunia machine learning, banyak algoritma yang dapat digunakan untuk memprediksi data baru berdasarkan data yang sudah ada. Salah satu algoritma yang sederhana namun kuat adalah K-Nearest Neighbor (KNN). Kelebihan yang paling menonjol dari algoritma ini adalah sifatnya yang mudah dipahami. Meskipun demikian, algoritma ini tetap efektif pada sejumlah kasus klasifikasi. Pada artikel ini, kita akan membahas konsep dasar KNN, cara kerjanya, dan kemudian menerapkannya menggunakan dataset Iris.
Mengenal K-Nearest Neighbor (KNN)
K-Nearest Neighbor adalah algoritma yang mengklasifikasikan sebuah data baru berdasarkan kemiripannya dengan data yang sudah ada. Misalnya kita memiliki sekelompok data yang sudah dikategorikan, dan kemudian kita ingin mengkategorikan data baru. KNN akan mencari data yang paling mirip dengan data baru ini dan menggunakan informasi tersebut untuk menentukan kategori data baru. Berikut adalah tahapan yang terjadi dalam KNN:
Pilih jumlah tetangga (k): Jumlah tetangga yang akan digunakan untuk menentukan kategori data baru. Biasanya, k adalah angka ganjil untuk menghindari hasil yang setara dalam klasifikasi.
Hitung jarak: Hitung jarak antara data baru dan semua data dalam dataset yang sudah ada. Jarak ini biasanya dihitung menggunakan rumus Euclidean.
Pilih tetangga terdekat: Pilih k data terdekat yang memiliki jarak terkecil dengan data baru.
Tentukan kategori: Lihat kategori dari k tetangga terdekat. Kategori yang paling sering muncul di antara tetangga terdekat akan menjadi kategori untuk data baru.
Rumus Euclidean merupakan metode yang paling umum digunakan untuk menghitung jarak antara dua titik dalam ruang berdimensi n. Misalnya, jika kita memiliki dua titik \(A\) dan \(B\) dengan koordinat masing-masing \((x_1, y_1)\) dan \((x_2, y_2)\), maka jarak Euclidean antara keduanya adalah:
\(\text{Euclidean Distance} = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}\)
Rumus ini bisa diperluas untuk data dengan lebih banyak dimensi.
Kelebihan dari KNN antara lain adalah prosesnya yang dipahami dan diimplementasikan. KNNjuga tidak memerlukan pelatihan model, karena ia hanya menyimpan data. Selain itu, ia juga dapat menangani data dengan kategori yang banyak.
KNN juga memiliki sejumlah kekurangan seperti diperlukannya banyak memori karena harus menyimpan semua data. Waktu prediksi KNN bisa berlangsung lama ketika dataset sangat besar. KNN juga sensitif terhadap fitur yang tidak relevan atau skala yang berbeda.
Studi Kasus Klasifikasi Bunga Iris
Setelah memahami dasar-dasar K-Nearest Neighbor (KNN) pada bagian sebelumnya, mari kita lanjutkan dengan studi kasus penerapan KNN. Kita akan menggunakan dataset Iris yang berisi informasi tentang tiga jenis bunga Iris: Iris-setosa, Iris-versicolor, dan Iris-virginica. Setiap jenis bunga memiliki empat fitur:
Panjang sepal (sepal_length)
Lebar sepal (sepal_width)
Panjang petal (petal_length)
Lebar petal (petal_width)
Dataset Iris yang digunakan pada artikel ini berasal dari kaggle dan bisa dilihat pada link berikut.
import warnings
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.preprocessing import LabelEncoder
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
warnings.filterwarnings('ignore')
Pertama kita mengimpor library yang diperlukan terlebih dahulu. Library-library ini mencakup tools untuk manipulasi data (pandas), visualisasi data (seaborn dan matplotlib), preprocessing (LabelEncoder), algoritma KNN, dan evaluasi model (accuracy_score, confusion_matrix, classification_report).
data = pd.read_csv('/kaggle/input/iris-flower-dataset/IRIS.csv')
data.head()
Selanjutnya kita memuat Dataset Iris dengan pd.read_csv
lalu menampilkan lima baris pertama untuk memastikan data telah dimuat dengan benar.
data['species'].value_counts()
Selanjutnay kita lihat berapa banyak contoh setiap jenis bunga dalam dataset.
label_encoder = LabelEncoder()
data['species'] = label_encoder.fit_transform(data['species'])
data['species'].value_counts()
LabelEncoder digunakan untuk mengubah label kategori (Iris-setosa, Iris-versicolor, Iris-virginica) menjadi angka (0, 1, 2). Selanjutnya kita jalankan kembali data['species'].value_counts()
untuk melihat apakah kolom species sudah berubah menjadi angka.
Visualisasi Data
Selanjutnya adalah melakukan visualisasi pada data yang ada di dalam dataset. Di sini kita akan menampilkan pairplot dan heatmap.
sns.pairplot(data, hue='species', markers=["o", "s", "D"])
plt.show()
plt.figure(figsize=(8, 6))
sns.heatmap(data.corr(), annot=True, cmap='coolwarm', linewidths=0.5)
plt.title('Correlation Matrix')
plt.show()
Pair plot menunjukkan hubungan antara setiap fitur dan bagaimana mereka dipisahkan berdasarkan kelas. Heatmap menunjukkan korelasi antara fitur-fitur dalam dataset.
Menentukan Fitur dan Target
X = data.drop('species', axis=1)
y = data['species']
Fitur (X) mencakup semua kolom kecuali 'species', dan target (y) adalah kolom 'species'.
Membagi Data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
Selanjutnya adalah membagi data menjadi data latih dan data uji. Di sini kita membagi data latih dan data uji dengan rasio 80:20.
Inisialisasi dan Pelatihan Model KNN
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
Model KNN diinisialisasi dengan k=3 dan dilatih menggunakan data latih.
Evaluasi Model
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)
print("Accuracy:", accuracy)
print("Confusion Matrix:\n", conf_matrix)
print("Classification Report:\n", class_report)
Model dievaluasi menggunakan metrik akurasi, confusion matrix, dan classification report untuk melihat performa model.
plt.figure(figsize=(8, 6))
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', cbar=False)
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.title('Confusion Matrix')
plt.show()
Selamat kita telah berhasil menerapkan KNN untuk melakukan prediksi data iris. Kita bisa melihat bahwa model yang kita buat bisa melakukan prediksi dengan akurasi 100%.
Kesimpulan
K-Nearest Neighbor (KNN) adalah algoritma yang sangat berguna dan mudah diimplementasikan untuk berbagai tugas klasifikasi. Melalui studi kasus menggunakan dataset Iris, kita telah melihat bagaimana KNN dapat digunakan untuk mengkategorikan jenis bunga berdasarkan fitur-fiturnya. Dengan visualisasi data yang tepat dan evaluasi model yang baik, kita dapat memastikan bahwa model KNN bekerja dengan optimal.
Meskipun memiliki beberapa kekurangan, seperti kebutuhan memori yang besar dan sensitivitas terhadap fitur yang tidak relevan, KNN tetap menjadi pilihan yang populer dalam dunia machine learning karena kesederhanaannya dan kemampuannya untuk menangani berbagai jenis data. Namun perlu diketahui juga, dataset iris yang kita gunakan terbilang sebagai data yang 'sangat bersih', sehingga tidak mengherankan hasilnya akan sangat bagus ketika menggunakan sejumlah metode. Sehingga kita tidak perlu terkejut ketika menerapkan KNN pada dataset lain, hasilnya tidak sebagus menggunakan dataset iris. Oleh karena itu, diharapkan kita bisa terus belajar dan melakukan eksplorasi terhadap metode-metode baru yang senantiasa berkembang. Terima kasih sudah membaca artikel ini, semoga bermanfaat dan selamat belajar!.
Source Code : Kaggle