KNN ha una funzione di perdita?


12

Non ho trovato una definizione della funzione di perdita su wiki nel contesto dell'apprendimento automatico.

questo però è meno formale, è abbastanza chiaro.

Alla base, una funzione di perdita è incredibilmente semplice: è un metodo per valutare quanto bene il tuo algoritmo modella il tuo set di dati. Se le previsioni sono totalmente disattivate, la funzione di perdita genererà un numero più elevato. Se sono abbastanza buoni, produrrà un numero inferiore. Man mano che cambi pezzi del tuo algoritmo per cercare di migliorare il tuo modello, la tua funzione di perdita ti dirà se stai arrivando ovunque.

sembra che il tasso di errore di KNN non sia la funzione che potrebbe guidare l'ottimizzazione del modello stesso, come la discesa del gradiente.

quindi, KNN ha una funzione di perdita?

Risposte:


12

k-NN non ha una funzione di perdita che può essere minimizzata durante l'allenamento. In realtà, questo algoritmo non è stato addestrato affatto. L'unico "allenamento" per cui accadek-NN, sta memorizzando i dati (creando una copia locale), in modo che durante la previsione sia possibile effettuare una ricerca e votare a maggioranza. Tecnicamente, nessuna funzione è adattata ai dati, quindi non viene eseguita alcuna ottimizzazione (non può essere addestrata usando la discesa gradiente).


5
kNN non utilizza una funzione di perdita durante la "formazione", ma questo non significa che c'è non è una funzione di perdita che definisce kNN. Ad esempio: è noto che la mediana riduce al minimo la perdita di differenza assoluta media. Ma non calcoli mai la perdita media di addominali e non usi nemmeno l'ottimizzazione come la discesa del gradiente per calcolare la mediana. È comunque un fatto utile che a volte minimizza la perdita media di addominali. Allo stesso modo, potresti probabilmente costruire una funzione di perdita che kNN minimizza sempre
nikie

1
@nikie è vero, ma in kNN li usa proprio come funzioni di aggregazione locale tra i vicini (difficile da tradurre in perdita complessiva per minimizzare). Anche per k = 1 non usi nessuna di queste funzioni. Inoltre non viene utilizzato per l'allenamento. Chiamarla funzione di perdita è semplicemente un esercizio mentale per forzare kNN ad adattarsi a qualche definizione di classificatore, non trovo validi motivi per definirlo in quel modo.
Tim

@nikie: ho aggiunto la funzione di perdita in una nuova risposta. Tim: il vantaggio di scriverlo in questo modo è che è più facile vedere come si può rendere "più morbido" l'obiettivo passando da un kernel top hat (contando il numero di punti - il solito kNN) a un kernel gaussiano (ponderando i punti di prossimità).
Miglia

@Miles è vero, ma non è comunque utile oltre alla discussione teorica, accademica. In termini pratici, l'algoritmo non viene allenato utilizzando la funzione di perdita e non sarebbe pratico farlo. Direi che parlare della funzione di perdita per kNN è più confuso che utile nella maggior parte dei casi.
Tim

1
Pensavo che la domanda sembrasse teorica in natura, ma hai ragione sul fatto che non c'è alcun uso pratico nel conoscere la perdita. Forse OP stava cercando qualcosa come l'analisi della componente di quartiere? L'ho collegato nella risposta.
Miglia

4

In alternativa alla risposta accettata:

Ogni algoritmo statistico sta minimizzando esplicitamente o implicitamente qualche obiettivo, anche se non ci sono parametri o iperparametri, e anche se la minimizzazione non viene eseguita in modo iterativo. Il kNN è così semplice che in genere non lo si pensa in questo modo, ma si può effettivamente scrivere una funzione obiettivo esplicita:

t^=argmaxCi:xiNk({x},x^)δ(ti,C)

Cosa dice questo che la classe prevista t^ per un punto x^ è uguale alla classe C che massimizza il numero di altri punti xi che sono nel set di k punti vicini Nk({x},x^) che hanno anche la stessa classe, misurata da δ(ti,C) che è 1 quando xi è in classe C, 0 altrimenti.

Il vantaggio di scriverlo in questo modo è che si può vedere come rendere l'obiettivo "più morbido" ponderando i punti per prossimità. Per quanto riguarda l '"allenamento", non ci sono parametri qui adatti. Ma si potrebbe sintonizzare la metrica della distanza (che viene utilizzata per definireNk) o la ponderazione dei punti in questa somma per ottimizzare alcuni obiettivi di classificazione aggiuntivi. Questo porta all'analisi dei componenti di vicinato: https://www.cs.toronto.edu/~hinton/absps/nca.pdf che apprende una metrica della distanza.


Hai scritto la regola decisionale per un classificatore KNN come problema di ottimizzazione. Questo è un punto valido, ma sembra in qualche modo diverso nello spirito di quello che la domanda sta ponendo. Tipicamente, definiamo uno spazio di ipotesi di possibili classificatori e la funzione di perdita è definita su questo spazio. Vale a dire che mappa ogni possibile classificatore su un valore che misura quanto è buono / cattivo. L'apprendimento quindi consiste nel selezionare il classificatore con una perdita minima. La tua funzione oggettiva non è definita nello spazio dei classificatori, ma nello spazio delle etichette delle classi per un dato punto di input.
user20160

Sono d'accordo - per problemi reali, si vuole usare un obiettivo di classificazione. Ma questa è la perdita che ci dà un kNN, proprio come, diciamo, significa errore assoluto come una perdita ci dà la mediana. È ambiguo ciò che il poster originale stava effettivamente cercando; questa risposta è la mia interpretazione (ma potrebbe essere sbagliata).
Miglia

-3

Non sono d'accordo con la risposta accettata (in qualche modo).

KNN è un algoritmo di classificazione e non ha senso eseguire un algoritmo di classificazione senza una funzione di perdita: saresti interessato a quanto bene ha funzionato l'algoritmo. Nel caso di KNN, ad esempio, è possibile valutare la qualità delle classificazioni osservando la somma delle accuratezze medie in ciascuna classe. Oppure, potresti concentrarti esclusivamente sulla precisione dell'algoritmo.

Il metodo di ottimizzazione che alimenta KNN non dipende dalla funzione di perdita, quindi durante l'allenamento non fa mai appello alla funzione di perdita e non usa nemmeno la pendenza gradiente per allenarsi.

Contrastare questo con il seguente "classificatore del vicino più vicino K": per K lezioni, primo treno Ksignifica, quindi definire la classe di ciascun punto per il numero dominante di punti appartenenti a ciascun centroide. Ad esempio, potresti allenare questo algoritmo con una minimizzazione graduale sull'errore del minimo quadrato di ciascun centroide (ricalcolo dei centroidi basati sui vicini più vicini), ma al momento del test, la tua funzione di perdita sarebbe di nuovo una qualche forma di precisione su ogni classe, nonostante l'algoritmo originale non abbia alcuna dipendenza da questo.


6
Una metrica per valutare le prestazioni dell'algoritmo e la perdita da minimizzare sono due cose diverse. In effetti, puoi ridurre al minimo le perdite che differiscono dalla metrica che stai cercando (ad es. Per motivi computazionali).
Tim

@ Tim: Penso che siamo sulla stessa pagina in quanto è esattamente il punto che sto cercando di chiarire nell'ultimo paragrafo, in cui viene utilizzata una metrica per allenarsi. Tuttavia, si desidera comunque una funzione di perdita dopo l'allenamento per valutare l'algoritmo. Un algoritmo di classificazione addestrato senza fare appello a qualche tipo di funzione di perdita (durante o dopo) sulle classi è per definizione non supervisionato.
Alex R.
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.