KNN Algoritmasına Giriş
K-en yakın komşu (KNN) algoritması, denetimli bir öğrenme yöntemi olarak, sınıflandırma ve regresyon problemlerin çözümünde yaygın olarak kullanılır. Bu algoritma, bir veri noktasının sınıfını tahmin etmek için, eğitim setindeki en yakın K tane komşunun sınıf bilgilerini kullanır. KNN, uygulaması ve anlaşılması kolay bir algoritma olmasının yanı sıra, birçok pratik uygulama alanına da sahiptir.
KNN, özellikle özelliklerine göre benzer bir noktayı bulmak için mesafe ölçümleri kullanarak çalışır. Genellikle, en yaygın mesafe ölçümü olarak Öklid mesafesi (Euclidean Distance) kullanılır, ancak Manhattan mesafesi (Manhattan Distance) ve Minkowski mesafesi gibi alternatifler de mevcuttur. Mesafe ölçümü ile birlikte, K’nin seçimi de dikkat edilmesi gereken önemli bir unsur olarak karşımıza çıkar. Genel olarak, K küçük bir değer olduğu zaman model çok fazla aşırı uyum gösterirken, K büyük bir değer olduğunda ise model genelleştirmede zorluk yaşayabilir.
Python programlama dili ve Scikit-learn kütüphanesi ile KNN algoritmasını uygulamak oldukça zahmetsizdir. Scikit-learn, hem veri setini hazır hale getirmenize hem de KNN algoritmasını en verimli şekilde kullanmanıza yardımcı olan birçok araç sunmaktadır. Bu yazıda, KNN algoritmasının nasıl çalıştığına dair derinlemesine bilgi edinecek ve Python ile pratik bir örnek gerçekleştireceğiz.
KNN Algoritmasının Çalışma Mantığı
KNN algoritması, genellikle aşağıdaki adımlar doğrultusunda çalışır:
- Veri Hazırlığı: Veri setinizin temizlenmesi ve uygun hale getirilmesi gerekir. Eksik verilerin yerine konması (impute edilmesi) ve özelliklerin ölçeklendirilmesi (normalizasyon ve standartizasyon) önemli adımlardandır.
- Koşulları Belirleme: K değeri seçimi ve mesafe ölçüm tipinin belirlenmesi; bu aşamada modelin performansını etkileyen önemli faktörlerdir.
- Model Eğitimi: Eğitim veri seti üzerinde KNN modelini eğitmek için en yakın komşuları belirleyerek sınıf tahmini yapılır.
- Sınama: Test veri seti ile modelin başarısını değerlendirerek doğru tahmin yüzdesi belirlenir.
Bu süreçte, verilerin yeterince temsili olmasına dikkat etmek, modelin doğruluğunu ve genellenebilirliğini artıracaktır. Özellikle K değerinin seçiminde çapraz doğrulama (cross-validation) yöntemi ile denemeler yaparak en uygun K değerini belirlemek oldukça faydalıdır.
Ayrıca, KNN algoritmasının kendi sınıflandırma performansını etkileyen bir diğer faktör ise ‘ağırlıklar’ (weights) olarak adlandırılan parametrelerdir. Ağırlıklar, komşuların etkisinin ne kadar hissedileceğini belirler. Örneğin, daha yakın komşulara daha fazla ağırlık vererek sınıflandırma yaptığınızda, modelinizin başarısını artırabilir. ‘uniform’ yani eşit ağırlık veya ‘distance’ yani mesafeye dayanan ağırlıklar kullanabilirsiniz.
Python ile KNN Uygulaması
Şimdi KNN algoritmasını Python’da nasıl uygulayabileceğimize dair adım adım bir rehber sunalım. Öncelikle gerekli kütüphaneleri yükleyelim:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report, confusion_matrix
İlk olarak bir veri seti oluşturacağız. Örnek olarak, iris veri setini kullanarak çiçeklerin türünü sınıflandıracağız. Iris veri seti, botanikte yaygın olarak kullanılan bir veri setidir ve 3 farklı iris türünü tanımlayan özellikleri içerir. Veri setini yüklemek için Scikit-learn kütüphanesini kullanabiliriz:
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
Burada ‘X’ bağımsız değişkenlerimizi, ‘y’ ise bağımlı değişkenimizi temsil etmektedir. Şimdi verimizi eğitim ve test setlerine ayırarak modelimizi inşa etmeye başlayalım:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Veri setimiz %80 eğitim ve %20 test olarak ayrıldı. Sonraki adımda, özellikleri standart hale getireceğiz. KNN algoritması, mesafeleri hesaplamak için ölçeklendirilmiş verilere ihtiyaç duyar:
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
Artık verilerimizi ölçeklendirdikten sonra, KNN algoritmasında modelimizi oluşturma ve verilerin eğitimini gerçekleştirme aşamasına geçebiliriz:
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train_scaled, y_train)
Burada ‘n_neighbors’ parametresini 3 olarak ayarladık. Şimdi modelimizi test ederek başarısını değerlendirelim:
y_pred = knn.predict(X_test_scaled)
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
Bu kod parçaları, karmaşıklık matrisini ve sınıflandırma raporunu yazdırarak modelimizin performansını değerlendirecektir. Karmaşıklık matrisi, hangi sınıfların doğru tahmin edildiğini ve olanların ne kadar yanlış tahmin edildiğini gösterir. Sınıflandırma raporu ise kesinlik, geri çağırma ve F1 puanı gibi metrikleri sunar.
KNN Algoritmasının Avantajları ve Dezavantajları
KNN algoritmasının en büyük avantajlarından biri, oldukça basit ve anlaşılır bir yapıya sahip olmasıdır. Veri setinizi anladıktan sonra, sadece komşuları sayarak sınıflandırma yapabilirsiniz. Ayrıca, KNN’nin parametre ayarlaması sınırlıdır, bu da kullanımı kolaylaştırmaktadır. Aynı zamanda, KNN algoritması, eğitim aşamasında veri noktalarını hatırlayarak çalışır, bu nedenle dolaylı olarak büyük veri setleri üzerinde etkili sonuçlar verir.
Diğer bir avantaj, KNN’nin birçok problem türü üzerinde etkili bir şekilde çalışabilmesidir. Örneğin, hem ikili hem de çok sınıflı sınıflandırma problemleri için etkili sonuçlar elde etme kapasitesine sahiptir. Ancak, KNN’nin performansı büyük ölçüde veri setinin boyutuna ve K değerinin ayarına bağlıdır.
Her ne kadar avantajları bulunsa da, KNN algoritması bazı dezavantajlara da sahiptir. Özellikle, büyük veri setlerinde, modelin tahmin yaparken tüm veri setine bakması gerektiği için işlem süresi uzar. Bu nedenle, veri seti büyüdükçe KNN modeli yavaşlayabilir. Ayrıca, K’nin yanlış ayarlanması da model başarısını etkileyebilir; örneğin, aşırı düşük K değerleri modelin gürültüden etkilenmesine neden olabilirken, aşırı büyük bir K ise veri noktalarının ayrım düzeyini azaltabilir.
Sonuç
KNN algoritması, Python ile birlikte kullanıldığında oldukça güçlü ve verimli bir sınıflandırma aracı haline gelir. Bu yazıda KNN’nin temel işleyişi, Python kullanarak bir örnek uygulaması ve avantajları ile dezavantajlarını detaylı bir şekilde ele aldık. KNN, her seviyeden yazılımcıya ve veri bilimciye hitap eden bir algoritma olarak, veri analizi ve modelleme süreçlerinde önem arz etmektedir.
Unutmayın ki makine öğrenimi uygulamalarında, modelin başarısı ve doğruluğu bir dizi faktöre bağlıdır. Veri setinizin özellikleri, kullandığınız algoritma ve ayarları, modelin genel başarısını etkileyen en önemli unsurlardır. Bu nedenle, farklı modeller ile deneyler yapmak ve en iyi sonuçları elde edene kadar sürek pekiştirmek her zaman faydalıdır.
Umarım bu yazı KNN algoritması ile Python’da sınıflandırma yapma konusunda size faydalı olmuştur. Ayrıca, kendi projelerinizde KNN’yi deneyerek öğrendiklerinizi pratiğe dökmenizi tavsiye ediyorum!