Quando fai kNN devi tenere a mente una cosa, vale a dire che non è un algoritmo rigorosamente derivato matematicamente, ma piuttosto un semplice classificatore / regressore basato su un'intuizione: la funzione sottostante non cambia molto quando gli argomenti non cambiano tanto. O in altre parole, la funzione sottostante è localmente quasi costante. Con questa ipotesi, puoi stimare il valore della funzione sottostante in un dato punto, con una media (possibilmente ponderata) dei valori dei punti k più vicini.
Tenendo presente questo, puoi capire che non c'è un imperativo chiaro su cosa fare quando non c'è un chiaro vincitore nel voto a maggioranza. È sempre possibile utilizzare un k dispari o utilizzare una ponderazione iniettiva.
Nel caso in cui i vicini da 3 a 5 siano alla stessa distanza dal punto di interesse, è possibile utilizzare solo due o utilizzare tutti 5. Ancora una volta, tenere presente che kNN non è un algoritmo derivato da complesse analisi matematiche, ma solo un intuizione semplice. Sta a te decidere come affrontare questi casi speciali.
1| | x-y| |2o qualsiasi altro che sia relativamente grande quando la distanza è piccola e relativamente piccolo quando la distanza tra i punti è grande (quindi probabilmente un inverso di alcune funzioni metriche continue).
C'è stato anche un bel documento di Samory Kpotufe e Abdeslam Boularias quest'anno su NIPS che tocca il problema di trovare la giusta ponderazione. La loro intuizione generale, è che la funzione sottostante varia in modo diverso in direzioni diverse (cioè, le sue diverse derivate parziali sono di diversa grandezza), quindi sarebbe saggio in un certo senso cambiare la metrica / ponderazione secondo questa intuizione. Sostengono che questo trucco generalmente migliora le prestazioni di kNN e la regressione del kernel, e penso che abbiano anche dei risultati teorici per sostenere questa affermazione (anche se non sono sicuro di cosa sostengano effettivamente quei risultati teorici, non ho avuto il tempo di andare attraverso l'intero documento). Il documento può essere scaricato gratuitamente dai loro siti o dopo aver cercato su Google "I pesi del gradiente aiutano i regressori non parametrici".
Ora, probabilmente vorrai sapere come trovare la giusta k, metrica, ponderazione, azione da eseguire quando ci sono pareggi e così via. La cosa triste è che è fondamentalmente difficile arrivare agli iperparametri giusti dopo aver riflettuto a fondo, probabilmente dovrai testare diversi gruppi di iperparametri e vedere quali funzionano bene su alcuni set di validazione. Se disponi di alcune risorse computazionali e desideri arrivare automaticamente ai parametri giusti in un buon set di iperparametri, c'è un'idea recente (che mi piace moltissimo) di utilizzare i processi gaussiani per l'ottimizzazione senza derivati in quell'impostazione.
Consentitemi di elaborare: trovare l'insieme di iperparametri (ovvero minimizzare l'errore sui dati di validazione) può essere visto come un problema di ottimizzazione. Sfortunatamente, in questa impostazione non possiamo ottenere il gradiente della funzione che cerchiamo di ottimizzare (che è ciò che di solito vogliamo fare, per eseguire la discesa del gradiente o alcuni metodi più avanzati). I processi gaussiani possono essere usati in questa impostazione, per trovare gruppi di iperparametri, che hanno grandi possibilità, di funzionare meglio dei migliori che abbiamo trovato fino al punto. Quindi è possibile eseguire in modo iterativo l'algoritmo con una serie di iperparametri, quindi chiedere al processo gaussiano per quali sarebbe meglio provare dopo, provare quelli e così via.
Per i dettagli, cerca il documento "Ottimizzazione bayesiana pratica degli algoritmi di apprendimento automatico" di Jasper Snoek, Hugo Larochelle e Ryan P Adams (che puoi trovare anche sui loro siti Web o tramite Google).