Bu proje, Makine Öğrenmesi dersi kapsamında, K-En Yakın Komşuluk (KNN) algoritmasının sıfırdan (knn_classifier.py) implemente edilmesini ve Scikit-learn kütüphanesindeki MNIST Digitsveri seti üzerinde test edilmesini içermektedir.
Tüm deneyler, yerel kurulum sorunlarını aşmak için Google Colab üzerinde çalıştırılmıştır.
Sıfırdan kodlanan KNNClassifier sınıfı, bir KNN modelinin temel fonksiyonlarını içerir :
fit(X, y): KNN "tembel öğrenen" bir algoritma olduğu için, bu fonksiyon sadece eğitim verisini ve etiketlerini hafızaya alır.compute_distances(X): L1 (Manhattan) ve L2 (Euclidean)mesafe metriklerini destekler.predict(X): Her test örneği için en yakın 'k' komşuyu bulur vecollections.Counterkullanarak bir "çoğunluk oylaması" (majority voting) yapar.score(X, y): Modelin doğruluk (accuracy) skorunu hesaplar.
main.ipynb dosyasında çalıştırılan deneylerin sonuçları aşağıdadır.
Model, k=3 ve L2 metriği ile test edildiğinde %98.61 doğruluk elde etmiştir.
Karmaşıklık Matrisi (Confusion Matrix):
Modelin '8' rakamını 3 kez '1' olarak ve '9' rakamını 1 kez '1' olarak karıştırdığı görülmektedir.

Örnek Tahminler:
Rastgele seçilen 10 örnekten 9'u doğru (yeşil), 1'i yanlış (kırmızı) tahmin edilmiştir.

L2 metriği için en iyi doğruluk (%98.61) k=1 ve k=3 değerlerinde elde edilmiştir. k değeri arttıkça modelin fazla genelleme (underfitting) yaptığı ve doğruluğun düştüğü gözlemlenmiştir.
Tüm deneydeki en yüksek tekil skor (%98.89), L1 (Manhattan) metriği ile k=5 değerinde elde edilmiştir. Ancak genel olarak L2 metriğinin daha geniş bir k aralığında daha istikrarlı sonuçlar verdiği görülmektedir.
Kendi implementasyonumuz, scikit-learn kütüphanesi ile doğruluk ve hız bakımından karşılaştırılmıştır.
- Doğruluk: Her iki model de %98.61 accuracy alarak kendi kodumuzun mantıksal olarak doğru çalıştığını kanıtlamıştır.
- Hız: Optimize edilmiş
scikit-learnkütüphanesi (0.0818s), saf Python döngüleri kullanan kendi kodumuzdan (0.1867s) yaklaşık 2.3 kat daha hızlı çalışmıştır.
| Kriter | Sklearn KNN | Kendi KNN'imiz |
|---|---|---|
| Accuracy | 0.9861 | 0.9861 |
| Çalışma Süresi (s) | 0.0818 | 0.1867 |
- Google Colab'da yeni bir not defteri açın.
- Sol paneldeki "Dosyalar" (🗂️) sekmesinden
knn_classifier.pydosyasını yükleyin. main.ipynbdosyasını Colab'a yükleyin (File > Upload notebook).- Tüm hücreleri sırayla çalıştırın (
Runtime > Run all).

