Sobes.tech
Middle

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

sobes.tech AI

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

kNN (k-մոտիկ հարևաններ) — դա անպարամետրական մեթոդ է, որը օգտագործվում է դասակարգման և ռեգրեսիայի համար: Իդեան պարզ է. օբյեկտը դասակարգվում է նրա հարևանների մեծամասնության ձայներով, որտեղ օբյեկտը վերագրվում է այն դասին, որը առավել տարածված է նրա k ամենամոտ հարևանների շրջանում: Ռեգրեսիայի համար կանխատեսվում է k ամենամոտ հարևանների նշումների միջին արժեքը:

Հիմնական կողմնորոշումներ:

  • k պարամետր: Բազմաթիվ հարևանների թիվը, որոնք հաշվի են առնվում որոշում կայացնելիս: k ընտրությունը շատ ազդում է արդյունքի վրա: Փոքր k կարող է լինել զգայուն աղմուկի նկատմամբ, մեծ k կարող է անտեսել տեղական կառուցվածքները:
  • Հեռավորության մետրիկա: Օգտագործվում է տվյալների կետերի միջև "մոտության" որոշման համար: Առավել տարածվածները՝ էվկլիդյան հեռավորություն, մանհեթենյան հեռավորություն:
  • Հատկություններ:
    • "Ազդակիր" ալգորիթմ՝ ուսուցում չկա կամ նվազագույնը (պարզապես պահպանում է ուսուցողական տվյալները): Նախագուշակությունը կատարվում է միայն հարցման ժամանակ:
    • Հեշտ է իրականացնել և հասկանալ:
    • Նախագուշակության ժամանակ կատարած աշխատանքը կարող է տուժել մեծ տվյալների հավաքածուներում, քանի որ անհրաժեշտ է հաշվել հեռավորությունները բոլոր ուսուցողական օրինակների համար:
    • Զգայուն է հատկությունների չափաբաժնին:
    • Կարող է վատ աշխատել բարձր աղմուկ ունեցող տվյալների վրա:

Աշխատանքի փուլեր (դասակարգման համար):

  1. Ընտրել k արժեքը:
  2. Ընտրել հեռավորության մետրիկան:
  3. Նոր օբյեկտի համար, որի համար պետք է կատարել կանխատեսում: a. Հաշվել հեռավորությունը այս օբյեկտի և բոլոր ուսուցողական տվյալների միջև: b. Ընտրել k ամենամոտ օբյեկտները: c. Հիմնվել այդ k օբյեկտների ամենատարածված դասի վրա: d. Նշել նոր օբյեկտին այդ դասը:

Օրինակ (պսևդոկոդ):

# Ֆունկցիա էվկլիդյան հեռավորությունը հաշվարկելու համար
def euclidean_distance(p1, p2):
    # ... հեռավորության հաշվարկը ...

# Ֆունկցիա `k` ամենամոտ հարևաններ գտնելու և դասը կանխատեսելու համար
def predict(training_data, new_data_point, k, distance_metric):
    հեռավորություններ = []
    յուրաքանչյուր data_point-ի համար՝ training_data:
        dist = distance_metric(new_data_point, data_point['features'])
        հեռավորություններ.append((dist, data_point['label']))

    # Սորտավորում հեռավորության ըստ և ընտրում `k` ամենամոտը
    հեռավորություններ.sort(key=lambda x: x[0])
    k_ամենամոտ = հեռավորություններ[:k]

    # Դասերի ձայների հաշվարկ
    ձայներ = {}
    յուրաքանչյուր dist, label՝ k_ամենամոտ:
        ձայներ[label] = ձայներ.get(label, 0) + 1

    # Ամենաշատ ձայներ ստացած դասը
    կանխատեսված_դաս = max(ձայներ, key=ձայներ.get)
    վերադարձնել կանխատեսված_դաս