Middle
K-yaxın qonşular alqoritmi (kNN) nədir?
sobes.tech Süni İntellekt
AI-dan cavab
kNN (k-yaxın qonşular) parametrik olmayan metod olub, təsnifat və reqressiya üçün istifadə olunur. Fikir sadədir: obyekt onun qonşularının çox səs çoxluğu ilə təsnif edilir, burada obyekt onun ən yaxın k qonşusunun ən çox yayılmış sinifinə təyin edilir. Reqressiya üçün, ən yaxın k qonşunun nişanlarının orta qiyməti proqnozlaşdırılır.
Əsas aspektlər:
- k parametri: Qərar qəbul edilərkən nəzərə alınan ən yaxın qonşuların sayı.
kseçimi nəticəyə çox təsir edir. Kiçikksəs-küyə həssas ola bilər, böyükkyerli strukturları nəzərə almaya bilər. - Məsafa metriyi: Məlumat nöqtələri arasındakı "yaxınlığı" müəyyən etmək üçün istifadə olunur. Ən çox yayılmışlar: Euklid məsafəsi, Manhattan məsafəsi.
- Xüsusiyyətlər:
- "Tənbəl" alqoritm: öyrənmə yoxdur və ya minimaldır (sadəcə öyrədici məlumatların saxlanması). Proqnoz yalnız sorğu zamanı həyata keçirilir.
- Asan tətbiq və anlamaq asandır.
- Böyük məlumat dəstləri üçün proqnoz performansı aşağı ola bilər, çünki bütün öyrədici nümunələrə məsafələrin hesablanması tələb olunur.
- Xüsusiyyətlərin ölçüsünə həssasdır.
- Yüksək səs-küy səviyyəsinə malik məlumatlarda pis işləyə bilər.
İş mərhələləri (sınıflandırma üçün):
kdəyərini seçin.- Məsafa metriyasını seçin.
- Yeni obyekt üçün, onun proqnoz ediləcəyi halda:
a. Bu obyekt və öyrədici dəstədəki bütün obyektlər arasındakı məsafəni hesablayın.
b. Öyrədici dəstədən ən yaxın
kobyektləri seçin. c. Bukobyekt arasında ən çox rast gəlinən sinfi müəyyən edin. d. Bu sinfi yeni obyektə təyin edin.
Nümunə (pseudokod):
# Euklid məsafəsini hesablamaq funksiyası
def euclidean_distance(p1, p2):
# ... məsafənin hesablanması ...
# Ən yaxın k qonşunu tapmaq və sinfi proqnozlaşdırmaq funksiyası
def predict(training_data, new_data_point, k, distance_metric):
məsafələr = []
for data_point in training_data:
dist = distance_metric(new_data_point, data_point['features'])
məsafələr.append((dist, data_point['label']))
# Məsafəyə görə sıralama və ən yaxın k-ni seçmə
məsafələr.sort(key=lambda x: x[0])
k_yaxın = məsafələr[:k]
# Sinif səs çoxluğunun hesablanması
sinif_səs = {}
for dist, label in k_yaxın:
sinif_səs[label] = sinif_səs.get(label, 0) + 1
# Ən çox səs alan sinfi müəyyən edin
proqnozlaşdırılan_sinif = max(sinif_səs, key=sinif_səs.get)
return proqnozlaşdırılan_sinif