Middle
K-yaqin qo'shni algoritmi (kNN) nima?
sobes.tech AI
AIdan javob
kNN (k-eng yaqin qo'shni) parametrik bo'lmagan usul bo'lib, tasniflash va regressiya uchun ishlatiladi. G'oyasi oddiy: ob'ekt uning yaqinlarining ko'p ovozi bilan tasniflanadi, bu yerda ob'ekt uning k eng yaqin yaqinlar orasida eng keng tarqalgan sinfga beriladi. Regressiya uchun, k eng yaqin yaqinlarning belgilari o'rtacha qiymati prognoz qilinadi.
Asosiy jihatlar:
- k parametri: Qaror qabul qilishda hisobga olinadigan yaqinlar soni.
ktanlovi natijaga katta ta'sir qiladi. Kichikkshovqinlarga sezgir bo'lishi mumkin, kattakmahalliy tuzilmalarni e'tiborsiz qoldirishi mumkin. - Masofa metrikasi: Ma'lumot nuqtalari orasidagi "yaqinlik"ni aniqlash uchun ishlatiladi. Eng keng tarqalganlar: Euklid masofasi, Manhattan masofasi.
- Xususiyatlar:
- "Lazzat" algoritmi: o'qitish yo'q yoki minimal (faqat o'qitish ma'lumotlarini saqlash). Prognoz so'rov vaqtida amalga oshiriladi.
- Oson amalga oshirish va tushunish.
- Katta ma'lumotlar to'plamlarida prognoz qilishda ishlash tezligi pasayishi mumkin, chunki barcha o'qitish misollariga masofalarni hisoblash talab qilinadi.
- Xususiyatlarning o'lchoviga sezgir.
- Yuqori shovqin darajasiga ega ma'lumotlarda yaxshi ishlamasligi mumkin.
Ish jarayonlari (tasniflash uchun):
kqiymatini tanlang.- Masofa metrikasini tanlang.
- Yangi ob'ekt uchun, unga prognoz qilish kerak bo'lsa:
a. Bu ob'ekt va o'qitish to'plamidagi barcha ob'ektlar orasidagi masofani hisoblang.
b. O'qitish to'plamidan eng yaqin
kob'ektni tanlang. c. Bukob'ekt orasida eng ko'p uchraydigan sinfni aniqlang. d. Bu sinfni yangi ob'ektga tayinlang.
Misol (pseudokod):
# Euklid masofasini hisoblash funktsiyasi
def euclidean_distance(p1, p2):
# ... masofa hisoblash ...
# Eng yaqin k qo'shni topish va sinfni prognoz qilish funktsiyasi
def predict(training_data, new_data_point, k, distance_metric):
masofalar = []
for data_point in training_data:
dist = distance_metric(new_data_point, data_point['features'])
masofalar.append((dist, data_point['label']))
# Masofaga qarab tartiblash va eng yaqin k ni tanlash
masofalar.sort(key=lambda x: x[0])
k_eng_yaqin = masofalar[:k]
# Sinf ovozlarini hisoblash
ovozlar = {}
for dist, label in k_eng_yaqin:
ovozlar[label] = ovozlar.get(label, 0) + 1
# Eng ko'p ovoz olgan sinfni aniqlash
prognozlangan_sinf = max(ovozlar, key=ovozlar.get)
return prognozlangan_sinf