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:
- K seçin: Ən yaxın qonşuların sayını (K) müəyyən edin.
- 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).
- 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.
- 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]}")