Middle
Ի՞նչ է k-մոտիկ հարևանների ալգորիթմը (kNN):
sobes.tech AI
Պատասխան AI-ից
kNN (k-մոտիկ հարևաններ) — դա անպարամետրական մեթոդ է, որը օգտագործվում է դասակարգման և ռեգրեսիայի համար: Իդեան պարզ է. օբյեկտը դասակարգվում է նրա հարևանների մեծամասնության ձայներով, որտեղ օբյեկտը վերագրվում է այն դասին, որը առավել տարածված է նրա k ամենամոտ հարևանների շրջանում: Ռեգրեսիայի համար կանխատեսվում է k ամենամոտ հարևանների նշումների միջին արժեքը:
Հիմնական կողմնորոշումներ:
- k պարամետր: Բազմաթիվ հարևանների թիվը, որոնք հաշվի են առնվում որոշում կայացնելիս:
kընտրությունը շատ ազդում է արդյունքի վրա: Փոքրkկարող է լինել զգայուն աղմուկի նկատմամբ, մեծkկարող է անտեսել տեղական կառուցվածքները: - Հեռավորության մետրիկա: Օգտագործվում է տվյալների կետերի միջև "մոտության" որոշման համար: Առավել տարածվածները՝ էվկլիդյան հեռավորություն, մանհեթենյան հեռավորություն:
- Հատկություններ:
- "Ազդակիր" ալգորիթմ՝ ուսուցում չկա կամ նվազագույնը (պարզապես պահպանում է ուսուցողական տվյալները): Նախագուշակությունը կատարվում է միայն հարցման ժամանակ:
- Հեշտ է իրականացնել և հասկանալ:
- Նախագուշակության ժամանակ կատարած աշխատանքը կարող է տուժել մեծ տվյալների հավաքածուներում, քանի որ անհրաժեշտ է հաշվել հեռավորությունները բոլոր ուսուցողական օրինակների համար:
- Զգայուն է հատկությունների չափաբաժնին:
- Կարող է վատ աշխատել բարձր աղմուկ ունեցող տվյալների վրա:
Աշխատանքի փուլեր (դասակարգման համար):
- Ընտրել
kարժեքը: - Ընտրել հեռավորության մետրիկան:
- Նոր օբյեկտի համար, որի համար պետք է կատարել կանխատեսում:
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)
վերադարձնել կանխատեսված_դաս