Sobes.tech
Middle

Ի՞նչ է k-մոտիկ հարևանների ալգորիթմը (kNN):

sobes.tech AI

Պատասխան AI-ից

K-բClosest հարազատների ալգորիթմը (kNN) պարզ, ոչ պարամետրային մեքենայական ուսուցման ալգորիթմ է, որը օգտագործվում է ինչպես դասակարգման, այնպես էլ ռեգրեսիայի համար:

Արդյունք: Նոր օբյեկտը (տվյալների կետը) դասվում է այն դասին, որը առավել ներկայացված է նրա մոտ գտնվող k ամենամոտ օբյեկտների միջից ուսուցողական հավաքածուում: Ռեգրեսիայի համար կանխատեսում է արժեքը որպես k ամենամոտ հարազատների միջին/մեդիանային արժեք:

Հիմնական քայլեր դասակարգման համար:

  1. K-ի ընտրություն: Հստակեցնել մոտակա հարազատների քանակը (K):
  2. Հեռավորության հաշվարկ: Հաշվել հեռավորությունը նոր օբյեկտի և յուրաքանչյուր օբյեկտի միջև ուսուցողական հավաքածուում (օրինակ՝ Եւկլիդյան հեռավորություն):
  3. K ամենամոտների որոնում: Սորտավորել օբյեկտները հեռավորության ըստ և ընտրել K ամենամոտը:
  4. Քվեարկություն: Հիմնվելով K ամենամոտ հարազատների մեծամասնության քվեարկության վրա՝ որոշել նոր օբյեկտի դասը:

Առավելություններ:

  • Պարզեցում և հեշտություն։
  • Չպահանջում է մոդելի ուսուցում (սպառող ալգորիթմ):
  • Աдапտացվում է նոր տվյալների վրա՝ ըստ դրանց հայտնվելու:

Կոմպրոմիսներ:

  • Հաշվարկային ծախսատար է մեծ տվյալների ծավալների դեպքում (նախատեսման փուլում):
  • K-ի ընտրությունն ու հեռավորության մետрика կարևոր են:
  • Հասանելի է չափանիշների և "չափման դառնության" նկատմամբ զգայուն:
  • Չաշխատում է լավ կատեգորიული նշանների հետ ուղղակի (պահանջվում է կոդավորում):

Կիրառում:

  • Նմուշների ճանաչում:
  • Խորհուրդների համակարգեր:
  • Բժշկական ախտորոշում:
  • Դոկումենտների նմանությունների որոնում:
# KNN-ի իրականացման օրինակ՝ scikit-learn օգտագործելով

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)

# Մոդելի ստեղծում և ուսուցում՝ 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]}")