Sobes.tech
Middle

K-eng yaqin qo'shni algoritmi (kNN) nima?

sobes.tech AI

AIdan javob

K-ya yaqin qo'shni (kNN) algoritmi oddiy va parametrlarisiz mashina o'qitish algoritmidir, u klassifikatsiya va regressiya uchun ishlatiladi.

Asosiy prinsipi: Yangi ob'ektni (ma'lumot nuqtasini) trening to'plamidagi k yaqin ob'ektlar orasida eng ko'p taqdim etilgan sinfga tayinlaydi. Regressiya uchun, u k yaqin qo'shni qiymatlarning o'rtacha/mediana qiymatini bashorat qiladi.

Klassifikatsiya uchun asosiy bosqichlar:

  1. K ni tanlash: Eng yaqin qo'shni sonini (K) aniqlash.
  2. Masofani hisoblash: Yangi ob'ekt bilan trening to'plamidagi har bir ob'ekt o'rtasidagi masofani hisoblash (masalan, Evklid masofasi).
  3. K yaqin qo'shni topish: Ob'ektlarni masofaga qarab tartibga solish va K yaqinlarini tanlash.
  4. Ovoz berish: Yangi ob'ektning sinfini K yaqin qo'shni orasida ko'p ovoz olgan sinfga asoslangan holda aniqlash.

Afzalliklar:

  • Oson amalga oshirish va tushunish.
  • Modelni o'qitishni talab qilmaydi (uyg'ongan algoritm).
  • Yangi ma'lumotlar paydo bo'ladigan sari moslashadi.

Kamchiliklar:

  • Katta ma'lumotlar hajmida hisoblash xarajatli (bashorat qilish bosqichida).
  • K va masofa metrikasi tanlovi juda muhim.
  • Xususiyatlarning o'lchoviga va "o'lchovli la'nat" ga sezgir.
  • To'g'ridan-to'g'ri kategorik xususiyatlar bilan yaxshi ishlamaydi (kodlash talab qilinadi).

Qo'llanilishi:

  • Shaklni tanib olish.
  • Tavsiya qilish tizimlari.
  • Tibbiy diagnostika.
  • Hujjatlarga o'xshashlarni qidirish.
# scikit-learn yordamida kNN klassifikatsiyasining misoli

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np

# Namuna ma'lumotlar yaratish
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]) # Sinf yorliqlari

# Ma'lumotlarni o'quv va test to'plamlariga bo'lish
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# KNN modelini yaratish va o'qitish
# K=3, ya'ni 3 yaqin qo'shni
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Test to'plamida bashorat qilish
y_pred = knn.predict(X_test)

# Aniqlikni baholash
accuracy = accuracy_score(y_test, y_pred)
# print(f"Model aniqligi: {accuracy}")

# Yangi nuqta uchun bashorat
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Yangi nuqtaning bashorat qilingan sinfi: {predicted_class[0]}")