Sobes.tech
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:

  1. K'yı Seçin: En yakın komşu sayısını (K) belirleyin.
  2. Uzaklığı Hesapla: Yeni nesne ile eğitim kümesindeki her nesne arasındaki uzaklığı hesaplayın (örneğin, Öklid uzaklığı).
  3. K en yakın komşuyu bul: Nesneleri uzaklığa göre sıralayın ve K en yakın olanları seçin.
  4. 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]}")