Sobes.tech
Middle

K-yaxın qonşular alqoritmi (kNN) nədir?

sobes.tech Süni İntellekt

AI-dan cavab

K-yaxın qonşular (kNN) alqoritmi sadə və parametrsiz maşın öyrənmə alqoritmidir və həm təsnifat, həm də reqressiya üçün istifadə olunur.

Əsas prinsipi: Yeni obyektə (məlumat nöqtəsinə) təlim dəstində ən çox təmsil olunan sinfə təyin edir. Reqressiya üçün, o, ən yaxın k qonşuların dəyərlərinin orta/mediana dəyərini proqnozlaşdırır.

Təsnifat üçün əsas addımlar:

  1. K seçin: Ən yaxın qonşuların sayını (K) müəyyən edin.
  2. Uzaqlığı hesablayın: Yeni obyekt ilə təlim dəstindəki hər bir obyekt arasındakı məsafəni hesablayın (məsələn, Euklid məsafəsi).
  3. K ən yaxın qonşunu tapın: Obyektləri məsafəyə görə sıralayın və K ən yaxın olanları seçin.
  4. Səsvermə: Yeni obyektin sinfini K ən yaxın qonşular arasında çoxluq səsverməsinə əsasən müəyyən edin.

Üstünlüklər:

  • Asan tətbiq və anlama.
  • Modelin öyrədilməsini tələb etmir (tələsməz alqoritm).
  • Yeni məlumatlara uyğunlaşır.

Çatışmazlıqlar:

  • Böyük məlumat dəstləri ilə hesablama xərci çox olur (tahmin mərhələsində).
  • K və məsafə metrikasının seçimi çox vacibdir.
  • Xüsusiyyətlərin ölçüsünə və "ölçü lənətinə" həssasdır.
  • Birbaşa kateqorik xüsusiyyətlərlə yaxşı işləməz (kodlaşdırma tələb edir).

Tətbiqlər:

  • Nümunə tanıma.
  • Tövsiyə sistemləri.
  • Tibbi diaqnostika.
  • Oxşar sənədlərin axtarışı.
# scikit-learn istifadə edərək kNN təsnifat nümunəsi

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np

# Demo məlumatlar yaradın
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]) # Sinif etiketləri

# Məlumatları təlim və test dəstlərinə bölün
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# KNN modelini yaradın və təlim keçirin
# K=3, yəni 3 ən yaxın qonşu
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Test dəstində proqnoz
y_pred = knn.predict(X_test)

# Dəqiqliyi qiymətləndirin
accuracy = accuracy_score(y_test, y_pred)
# print(f"Modelin dəqiqliyi: {accuracy}")

# Yeni nöqtə üçün proqnoz
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Yeni nöqtənin proqnozlaşdırılan sinfi: {predicted_class[0]}")