Trattare con legami, pesi e votazioni in kNN


13

Sto programmando un algoritmo kNN e vorrei sapere quanto segue:

Tie-break:

  1. Cosa succede se non c'è un chiaro vincitore nel voto a maggioranza? Ad esempio, tutti i k vicini più vicini appartengono a classi diverse o per k = 4 ci sono 2 vicini di classe A e 2 vicini di classe B?
  2. Cosa succede se non è possibile determinare esattamente k vicini più vicini perché ci sono più vicini che hanno la stessa distanza? Ad esempio, per l'elenco delle distanze (x1;2), (x2;3.5), (x3;4.8), (x4;4.8), (x5;4.8), (x6;9.2)non sarebbe possibile determinare i vicini più vicini k = 3 o k = 4, poiché i vicini dal 3 ° al 5 ° hanno tutti la stessa distanza.

pesi:

  1. Ho letto che è bene ponderare i vicini k-più vicini prima di selezionare la classe vincente. Come funziona? Vale a dire come vengono ponderati i vicini e come viene determinata la classe?

Alternative di voto a maggioranza:

  1. Esistono altre regole / strategie per determinare la classe vincente oltre al voto a maggioranza?

Risposte:


7

Il modo ideale per rompere un pareggio per a mio avviso, il vicino k più vicino sarebbe quello di ridurre k di 1 fino a quando non avrai rotto il pareggio. Funzionerà sempre indipendentemente dallo schema di ponderazione dei voti, poiché un pareggio è impossibile quando k = 1. Se si aumentasse k , in attesa del proprio schema di ponderazione e del numero di categorie, non si sarebbe in grado di garantire un pareggio.


11
perché il legame è impossibile quando k = 1, cosa succede se ci sono due vicini appartenenti a classi diverse con la stessa distanza, come si determina il vicino più vicino con k = 1?
j5shi,

6

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).


2
Avvertenza: l'ottimizzazione degli iperparametri per avere la massima precisione sul set di validazione è un modo diretto per l'oblio eccessivo. Vuoi un CV nidificato.

Una breve nota che "un k dispari" non risolverà necessariamente il problema del pareggio ... ad esempio k = 3 quando si classificano tre gruppi. Oltre a ciò sono d'accordo. Bella spiegazione.
Pyll,

1

A proposito di questa parte del pareggio, la migliore idea di base per i legami è di solito la rottura casuale, quindi selezionando la classe casuale di tutti vincendo il voto e selezionando casualmente un sottoinsieme di oggetti legati abbastanza grandi da riempire k.

Tale soluzione sottolinea il fatto che si tratta di casi patologici che semplicemente non forniscono informazioni sufficienti per prendere una decisione nel regime kNN. A proposito, se sono comuni ai tuoi dati, forse dovresti provare qualche distanza più differenziata?


0

Un modo possibile è che l'algoritmo aumenti o diminuisca automaticamente k fino ad ottenere un chiaro vincitore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.