Middle
k-жакын көршү алгоритми (kNN) эмне?
sobes.tech AI
AIден жооп
К-ближайших соседдер алгоритми (kNN) — бул жөнөкөй, параметрсиз машиналык үйрөнүү алгоритми, ал классификация жана регрессия үчүн колдонулат.
Мамлекет: Жаңы объектти (маалымат пункту) анын окшоштугу боюнча эң көп кездешкен класска таандык кылат. Регрессия үчүн, ал эң жакынкы k көршүнүн орточо/медиандык маанисин алдын ала айтат.
Классификация үчүн негизги кадамдар:
- K тандоо: Жакынкы көршүнүн санын аныктоо (K).
- Аралыктын эсептелиши: Жаңы объект менен тренинг жыйнагынын ар бир объектисинин аралыгын эсептөө (мисалы, Евклид аралыгы).
- K жакындарын табуу: Объекттерди аралыктары боюнча сорттоо жана K жакындарын тандоо.
- Дауыс берүү: Жаңы объекттин классын K жакын көршүнүн көпчүлүк добушу аркылуу аныктоо.
Артыкчылыктары:
- Ишке ашыруу жана түшүнүү жөнөкөй.
- Модель үйрөтүүнү талап кылбайт (сабырдуу алгоритм).
- Жаңы маалыматтар пайда болгондо адаптацияланат.
Кемчиликтери:
- Үлкен маалыматтар көлөмүндө эсептөө кымбат (предсказание этабында).
- K тандоо жана аралыктын метрикасы маанилүү.
- Мөлөждөшүү жана "өлчөмдүн каапаны" сыяктуу маселелерге сезимтал.
- Категориалдык белгилер менен түздөн-түз иштебейт (коддоо талап кылынат).
Колдонуу:
- Образдарды таануу.
- Турак системалары.
- Медициналык диагностика.
- Документтердин окшоштугун издөө.
# scikit-learn колдонуп, kNNнин мисалы
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np
# Демонстрациялык маалыматтарды түзүү
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]) # Класстар
# Маалыматты үйрөтүү жана тестке бөлүү
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# KNN моделин түзүү жана үйрөтүү
# K=3, яғни 3 жакын көршү
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# Тесттик топтомдо алдын ала айтуу
y_pred = knn.predict(X_test)
# Тактыкты баалоо
accuracy = accuracy_score(y_test, y_pred)
# print(f"Моделдин тактыгы: {accuracy}")
# Жаңы ноктону алдын ала айтуу
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Жаңы ноктонун алдын ала айтылган классы: {predicted_class[0]}")