K-najbližší susedia

K-najbližší susedia (KNN) je jednoduchý, neparametrický algoritmus na klasifikáciu a regresiu, ktorý predpovedá výsledky na základe blízkosti dátových bodov.

Algoritmus k-najbližších susedov (KNN) je neparametrický, supervidovaný algoritmus učenia používaný na klasifikáciu a regresiu v strojovom učení. Je založený na koncepte blízkosti a predpokladá, že podobné dátové body sa nachádzajú blízko seba. KNN je tzv. “lenivý” algoritmus učenia, čo znamená, že nevyžaduje fázu trénovania a predpovede vytvára uložením celého trénovacieho datasetu, ktorý slúži na určenie triedy alebo hodnoty nových dátových bodov. Algoritmus predikuje výsledok pre testovací dátový bod identifikovaním ‘k’ trénovacích bodov, ktoré sú k nemu najbližšie, a odvodením výstupu na základe týchto susedov. Táto metóda je veľmi intuitívna a napodobňuje ľudské stratégie vnímania, ktoré sa zakladajú na porovnávaní nových údajov s už známymi príkladmi.

Ako KNN funguje

KNN pracuje na princípe identifikácie ‘k’ najbližších dátových bodov k zadanému dopytovanému bodu a tieto susedia slúžia na vytvorenie predikcie.

  • Pri klasifikačných úlohách algoritmus priraďuje dopytovaný bod k triede, ktorá je najčastejšia medzi jeho ‘k’ najbližšími susedmi, čo sa nazýva väčšinové hlasovanie. Väčšinové hlasovanie v KNN možno chápať ako “pluralitné hlasovanie” v prípade viacerých tried, kde sa dopytovaný bod priradí k triede s najväčším počtom výskytov medzi najbližšími susedmi, aj keď to nepredstavuje absolútnu väčšinu.
  • Pri regresii predpovedá hodnotu spriemerovaním hodnôt ‘k’ najbližších susedov.

Princípy blízkosti a podobnosti, ktoré sú jadrom ľudského vnímania, sú tiež základom fungovania KNN, pretože sa predpokladá, že dátové body, ktoré sú blízko v priestore príznakov, sú si podobné a majú podobné výsledky.

Metriky vzdialenosti

Na určenie najbližších susedov využíva KNN rôzne metriky vzdialenosti, ktoré sú kľúčové pre jeho výkon:

  • Euklidovská vzdialenosť: Priama vzdialenosť medzi dvoma bodmi v multidimenzionálnom priestore, často používaná pre spojité premenné. Je to najbežnejšia metrika vzdialenosti pre KNN a je obzvlášť užitočná pri hustých a spojitých dátach.
  • Manhattanská vzdialenosť: Nazývaná aj taxikárska vzdialenosť, vypočítava sa súčtom absolútnych rozdielov medzi súradnicami dvoch bodov. Je vhodná v scenároch s pohybom po mriežke, kde je pohyb obmedzený na ortogonálne smery.
  • Minkowskiho vzdialenosť: Všeobecná forma euklidovskej a manhattanskej vzdialenosti, parametrizovaná ‘p’. Ak p=1, ide o manhattanskú vzdialenosť, ak p=2, ide o euklidovskú vzdialenosť. Táto metrika poskytuje flexibilitu v závislosti od zvolenej hodnoty ‘p’.
  • Hammingova vzdialenosť: Používaná pre kategorizované údaje, počíta počet rozdielnych bitov medzi dvoma binárnymi vektormi. Je výhodná najmä pri binárnych klasifikačných úlohách, kde atribúty nadobúdajú binárne hodnoty.

Voľba správnej hodnoty ‘k’

Parameter ‘k’ v KNN predstavuje počet susedov, ktorých treba brať do úvahy. Výber správnej hodnoty ‘k’ je zásadný:

  • Malé ‘k’ môže viesť k preučeniu, kedy je model príliš citlivý na šum v trénovacích dátach a zachytáva náhodné vzory, ktoré sa nedajú zovšeobecniť.
  • Veľké ‘k’ môže viesť k podučeniu, kedy je model príliš všeobecný a prehliada dôležité vzory, čo vedie k slabej predikčnej presnosti.
  • ‘k’ sa zvyčajne volí pomocou krížovej validácie a malo by byť nepárne, aby sa pri rozhodovaní v klasifikácii predišlo remíze. Voľba ‘k’ môže výrazne ovplyvniť presnosť modelu a často sa určuje empiricky.

Výhody a nevýhody

Výhody

  • Jednoduchosť a intuitívnosť: Ľahké na pochopenie a implementáciu, čo z KNN robí vhodnú voľbu pre začiatočníkov. Jednoduchosť KNN spočíva v priamočiarom porovnávaní testovacích prípadov s uloženými príkladmi.
  • Bez tréningovej fázy: KNN nevyžaduje explicitnú tréningovú fázu, pretože predpovede realizuje priamo na základe uloženého datasetu. Model sa dá aktualizovať jednoducho pridaním nových dátových bodov do datasetu.
  • Univerzálnosť: Možno ho použiť na klasifikáciu aj regresiu, pričom jeho využitie je široké naprieč rôznymi doménami. Je vhodný aj pre úlohy s viacnásobnou klasifikáciou (multi-label).

Nevýhody

  • Výpočtová náročnosť: Keďže je potrebné ukladať a porovnávať každý nový dátový bod s celým datasetom, môže byť pomalý a náročný na zdroje, najmä pri veľkých datasetoch. Časová zložitosť KNN je O(n), kde n je počet trénovacích vzoriek.
  • Citlivosť na odľahlé hodnoty: Prítomnosť odľahlých hodnôt môže výrazne ovplyvniť predikcie, pretože takéto anomálne body môžu skresliť výsledky, najmä keď je ‘k’ malé.
  • Prekliatie dimenzionality: Vo vysokorozmerných priestoroch môže výkon algoritmu klesať, pretože vzdialenosti medzi bodmi strácajú význam. S rastúcou dimenzionalitou narastá aj objem priestoru, čo spôsobuje, že dáta sú riedke. Táto riedkosť sťažuje KNN efektívne vyhľadávanie najbližších susedov.

Príklady použitia

KNN sa využíva v rôznych oblastiach vďaka svojej jednoduchosti a efektívnosti:

  • Odporúčacie systémy: Používa sa na odporúčanie produktov alebo obsahu používateľom na základe preferencií podobných používateľov. KNN vie identifikovať podobných používateľov alebo položky porovnávaním príznakov.
  • Rozpoznávanie vzorov: Uplatňuje sa pri rozpoznávaní rukopisu a iných úlohách rozpoznávania vzorov, kde dokáže klasifikovať obrázky na základe podobnosti hodnôt pixelov.
  • Imputácia dát: Užitočný pri dopĺňaní chýbajúcich hodnôt v datasetoch ich odhadom na základe podobných dátových bodov, čím sa zachováva integrita datasetu.
  • Financie a zdravotníctvo: Uplatňuje sa pri predikciách na burze, hodnotení rizika a lekárskej diagnostike analýzou podobností v historických dátach. V zdravotníctve vie predpovedať diagnózy pacientov porovnávaním symptómov s už známymi prípadmi.

Implementácia v Pythone

KNN možno implementovať pomocou knižníc ako scikit-learn v Pythone. Tu je základný príklad použitia KNN na klasifikáciu:

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score

# Načítanie datasetu
iris = load_iris()
X, y = iris.data, iris.target

# Rozdelenie dát na trénovaciu a testovaciu množinu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Inicializácia KNN klasifikátora s k=3
knn = KNeighborsClassifier(n_neighbors=3)

# Natrénovanie modelu
knn.fit(X_train, y_train)

# Vytvorenie predikcií
y_pred = knn.predict(X_test)

# Vyhodnotenie presnosti
accuracy = accuracy_score(y_test, y_pred)
print(f"Presnosť: {accuracy:.2f}")

K-najbližší susedia (KNN) vo vedeckom výskume

K-najbližší susedia (KNN) je základný algoritmus používaný v rôznych oblastiach, ako je vyhľadávanie multimediálnych informácií, data mining a strojové učenie, najmä v kontexte veľkých datasetov.

Významné vedecké práce:

  • „Approximate k-NN Graph Construction: a Generic Online Approach“ — Wan-Lei Zhao a kol.:
    Predstavuje efektívnu metódu pre aproximatívne vyhľadávanie k-najbližších susedov a konštrukciu grafov. Práca ukazuje dynamické a uskutočniteľné riešenie pre spracovanie rôznych mierok a dimenzií dát s podporou online aktualizácií, čo nie je možné u mnohých existujúcich metód. Čítajte viac.

  • „Parallel Nearest Neighbors in Low Dimensions with Batch Updates“ — Magdalen Dobson a Guy Blelloch:
    Predstavuje paralelné algoritmy kombinujúce kd-strom a Mortonovo radenie do štruktúry zd-stromu, optimalizované pre nízkorozmerné dáta. Autori ukazujú, že ich prístup je rýchlejší ako existujúce algoritmy a dosahuje výrazné zrýchlenie vďaka paralelnému spracovaniu. Zd-strom ako prvý umožňuje paralelné dynamické aktualizácie v štruktúrach k-najbližších susedov. Čítajte viac.

  • „Twin Neural Network Improved k-Nearest Neighbor Regression“ — Sebastian J. Wetzel:
    Skúma nový prístup k regresii k-najbližších susedov s využitím párových neurónových sietí. Táto metóda sa zameriava na predikciu rozdielov medzi regresnými cieľmi, čo vedie k lepšiemu výkonu oproti tradičným neurónovým sieťam a regresii k-najbližších susedov pri malých a stredne veľkých datasetoch. Čítajte viac.

Najčastejšie kladené otázky

Čo je algoritmus k-najbližších susedov (KNN)?

K-najbližší susedia (KNN) je neparametrický, supervidovaný algoritmus učenia používaný na klasifikáciu a regresiu. Predpovedá výsledky identifikovaním 'k' najbližších dátových bodov k dopytovanému bodu a odvodzuje výsledok na základe týchto susedov.

Aké sú hlavné výhody KNN?

KNN je jednoduchý na pochopenie a implementáciu, nevyžaduje žiadnu explicitnú tréningovú fázu a možno ho použiť na klasifikáciu aj regresiu.

Aké sú nevýhody KNN?

KNN môže byť výpočtovo náročný pri veľkých dátových súboroch, je citlivý na odľahlé hodnoty a jeho výkon sa môže zhoršiť pri vysokorozmerných dátach v dôsledku prekliatia dimenzionality.

Ako si vybrať správnu hodnotu 'k' v KNN?

Optimálna hodnota 'k' sa zvyčajne určuje empiricky pomocou krížovej validácie. Malé 'k' môže spôsobiť preučenie, zatiaľ čo veľké 'k' môže viesť k podučeniu; preferujú sa nepárne hodnoty, aby sa predišlo remíze.

Aké metriky vzdialenosti sa používajú v KNN?

Bežné metriky vzdialenosti zahŕňajú euklidovskú, manhattanskú, Minkowskiho a Hammingovu vzdialenosť, pričom výber závisí od typu dát a požiadaviek úlohy.

Vyskúšajte inteligentné AI nástroje s FlowHunt

Objavte, ako môžu AI nástroje a chatboty FlowHunt vylepšiť vašu analýzu dát a automatizovať pracovné postupy. Vytvárajte, testujte a nasadzujte AI riešenia jednoducho.

Zistiť viac