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:
- K ni tanlash: Eng yaqin qo'shni sonini (K) aniqlash.
- Masofani hisoblash: Yangi ob'ekt bilan trening to'plamidagi har bir ob'ekt o'rtasidagi masofani hisoblash (masalan, Evklid masofasi).
- K yaqin qo'shni topish: Ob'ektlarni masofaga qarab tartibga solish va K yaqinlarini tanlash.
- 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]}")