Middle
K-en yakın komşu algoritması (kNN) nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
K-en yakın komşular (kNN) algoritması, hem sınıflandırma hem de regresyon için kullanılan basit ve parametrik olmayan bir makine öğrenimi algoritmasıdır.
Öz: Yeni bir nesneyi (veri noktası) eğitim kümesinde en yakın k nesne arasında en çok temsil edilen sınıfa atar. Regresyon için, k en yakın komşuların değerlerinin ortalaması/medyanı olarak bir değer tahmin eder.
Sınıflandırma için temel adımlar:
- K'yı Seçin: En yakın komşu sayısını (K) belirleyin.
- Uzaklığı Hesapla: Yeni nesne ile eğitim kümesindeki her nesne arasındaki uzaklığı hesaplayın (örneğin, Öklid uzaklığı).
- K en yakın komşuyu bul: Nesneleri uzaklığa göre sıralayın ve K en yakın olanları seçin.
- Oy kullanma: Yeni nesnenin sınıfını, K en yakın komşular arasındaki çoğunluk oyuna göre belirleyin.
Avantajlar:
- Uygulaması ve anlaşılması kolaydır.
- Model eğitimi gerektirmez (tembel algoritma).
- Yeni verilere uyum sağlar.
Dezavantajlar:
- Büyük veri hacimlerinde hesaplama maliyetlidir (tahmin aşamasında).
- K ve uzaklık metriği kritik öneme sahiptir.
- Özelliklerin ölçeğine ve "boyut laneti"ne duyarlıdır.
- Doğrudan kategorik özelliklerle iyi çalışmaz (kodlama gerekir).
Uygulamalar:
- Desen tanıma.
- Tavsiye sistemleri.
- Tıbbi teşhis.
- Benzer belgelerin aranması.
# scikit-learn kullanarak kNN sınıflandırma örneği
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np
# Demo verisi oluşturma
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
y = np.array([0, 0, 1, 1, 0, 1]) # Sınıf etiketleri
# Veriyi eğitim ve test setlerine ayırma
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# KNN modelini oluşturma ve eğitme
# K=3, yani 3 en yakın komşu
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# Test seti üzerinde tahmin
y_pred = knn.predict(X_test)
# Doğruluğu değerlendirme
accuracy = accuracy_score(y_test, y_pred)
# print(f"Model doğruluğu: {accuracy}")
# Yeni bir nokta için tahmin
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Yeni nokta için tahmin edilen sınıf: {predicted_class[0]}")