Sobes.tech
Middle

k-жакын көршү алгоритми (kNN) эмне?

sobes.tech AI

AIден жооп

К-ближайших соседдер алгоритми (kNN) — бул жөнөкөй, параметрсиз машиналык үйрөнүү алгоритми, ал классификация жана регрессия үчүн колдонулат.

Мамлекет: Жаңы объектти (маалымат пункту) анын окшоштугу боюнча эң көп кездешкен класска таандык кылат. Регрессия үчүн, ал эң жакынкы k көршүнүн орточо/медиандык маанисин алдын ала айтат.

Классификация үчүн негизги кадамдар:

  1. K тандоо: Жакынкы көршүнүн санын аныктоо (K).
  2. Аралыктын эсептелиши: Жаңы объект менен тренинг жыйнагынын ар бир объектисинин аралыгын эсептөө (мисалы, Евклид аралыгы).
  3. K жакындарын табуу: Объекттерди аралыктары боюнча сорттоо жана K жакындарын тандоо.
  4. Дауыс берүү: Жаңы объекттин классын 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]}")