Middle
k-ближайших көршілер алгоритмі (kNN) дегеніміз не?
sobes.tech AI
AI-дан жауап
kNN (k-жағындағы ең жақын көршілер) — бұл классификация және регрессия үшін қолданылатын параметрлік емес әдіс. Идеясы қарапайым: объект оның көршілерінің көп дауысымен жіктеледі, мұнда объект ең көп таралған класты оның k ең жақын көршілерінің арасында алады. Регрессия үшін, k ең жақын көршілердің белгілерінің орташа мәні болжау жасалады.
Негізгі аспектілер:
- 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):
distances = []
for data_point in training_data:
dist = distance_metric(new_data_point, data_point['features'])
distances.append((dist, data_point['label']))
# Қашықтық бойынша сұрыптау және `k` жақын таңдау
distances.sort(key=lambda x: x[0])
k_nearest = distances[:k]
# Кластарға дауыс беру
class_votes = {}
for dist, label in k_nearest:
class_votes[label] = class_votes.get(label, 0) + 1
# Ең көп дауыс алған класты анықтау
predicted_class = max(class_votes, key=class_votes.get)
return predicted_class