Middle
რა არის k-ახლოს მეზობლების ალგორითმი (kNN)?
sobes.tech AI
პასუხი AI-სგან
kNN (k-ახლოს მეზობლები) — ეს არის პარამეტრიანი მეთოდი, რომელიც გამოიყენება კლასიფიკაციასა და რეგრესიისთვის. იდეა მარტივია: ობიექტი კლასიფიცირებულია მისი მეზობლების უმრავლესობის ხმებით, სადაც ობიექტი მიენიჭება იმ კლასს, რომელიც ყველაზე გავრცელებულია მისი k-ბClosest მეზობელთა შორის. რეგრესიისთვის პროგნოზირებულია k-Closest მეზობელთა ნიშნების საშუალო მნიშვნელობა.
ძირითადი ასპექტები:
- k პარამეტრი: ყველაზე ახლოს მყოფ მეზობელთა რაოდენობა, რომლებიც განიხილება გადაწყვეტილების მიღებისას.
k-ის არჩევანი ძლიერ გავლენას ახდენს შედეგზე. მცირეkშეიძლება იყოს მგრძნობიარე ხმაურზე, დიდიkშეიძლება უგულებელყოს ადგილობრივ სტრუქტურებს. - საშუალების მეტрика: გამოიყენება მონაცემთა წერტილებს შორის "მახლოობის" განსაზღვრისთვის. ყველაზე გავრცელებული: ევკლიდური მანძილი, მანჰეტენის მანძილი.
- საიდუმლოებები:
- "სიცარიელე" ალგორითმი: სწავლება არ არსებობს ან მინიმალურია (უბრალოდ შენახვა სწავლების მონაცემების). პროგნოზი ხდება მხოლოდ მოთხოვნის დროს.
- მარტივია განხორციელება და გაგება.
- შესრულება პროგნოზის დროს შეიძლება დაზარალდეს დიდი მონაცემთა ნაკრებში, რადგან საჭიროა ყველა სწავლების მაგალითზე მანძილების გამოთვლა.
- მგრძნობიარეა ნიშნების მასშტაბზე.
- შეიძლება ცუდად იმუშაოს მონაცემებზე მაღალი ხმაურით.
მუშაობის ეტაპები (კლასიფიკაციისთვის):
- აირჩიეთ
kმნიშვნელობა. - აირჩიეთ მანძილის მეტრიკა.
- ახალი ობიექტისთვის, რომლისთვისაც საჭიროა პროგნოზის გაკეთება:
a. გამოთვალეთ მანძილი ამ ობიექტსა და ყველა მონაცემს შორის.
b. აირჩიეთ
kყველაზე ახლოს მყოფი ობიექტი. c. განსაზღვრეთ ამkობიექტის ყველაზე ხშირად ხილული კლასი. d. მიანიჭეთ ამ ახალი ობიექტს ეს კლასი.
მაგალითი (პსევდოკოდი):
# ევკლიდური მანძილის გამოთვლის ფუნქცია
def euclidean_distance(p1, p2):
# ... მანძილის გამოთვლა ...
# ფუნქცია `k` ყველაზე ახლოს მყოფი ობიექტების მოძიებისა და კლასი პროგნოზისთვის
def predict(training_data, new_data_point, k, distance_metric):
მანძილები = []
თითოეული data_point-ისთვის — training_data:
dist = distance_metric(new_data_point, data_point['features'])
მანძილები.append((dist, data_point['label']))
# სორტირება მანძილის მიხედვით და `k` ყველაზე ახლოს მყოფის არჩევა
მანძილები.sort(key=lambda x: x[0])
k_მახლო = მანძილები[:k]
# კლასების ხმების გამოთვლა
ხმები = {}
თითოეული dist, label — k_მახლო:
ხმები[label] = ხმები.get(label, 0) + 1
# ყველაზე მეტი ხმების მქონე კლასი
პროგნოზირებული_კლასი = max(ხმები, key=ხმები.get)
დაბრუნება პროგნოზირებული_კლასი