Perché dobbiamo adattare un classificatore k-vicini più vicini?


11

Come ho capito, k-NN è un algoritmo di studente pigro e non ha bisogno di una fase di allenamento. Quindi perché dobbiamo usare .fit()con sklearn e cosa succede quando lo usiamo?

Risposte:


9

A livello concettuale

Montare un classificatore significa prendere un set di dati come input, quindi emettere un classificatore, che viene scelto da uno spazio di possibili classificatori. In molti casi, un classificatore viene identificato, ovvero distinto dagli altri possibili classificatori, da un insieme di parametri. I parametri vengono in genere scelti risolvendo un problema di ottimizzazione o un'altra procedura numerica. Ma, nel caso di knn, il classificatore è identificato dai dati di addestramento stessi. Quindi, a livello astratto, il montaggio di un classificatore Knn richiede semplicemente la memorizzazione del set di allenamento.

A livello di implementazione

La valutazione di un classificatore knn su un nuovo punto dati richiede la ricerca dei vicini più vicini nel set di addestramento, che può essere un'operazione costosa quando il set di addestramento è grande. Come menzionato da RUser, ci sono vari trucchi per accelerare questa ricerca, che in genere funzionano creando varie strutture di dati basate sul set di addestramento. L'idea generale è che parte del lavoro computazionale necessario per classificare nuovi punti sia effettivamente comune tra i punti. Quindi, questo lavoro può essere svolto in anticipo e quindi riutilizzato, anziché essere ripetuto per ogni nuova istanza. Un'implementazione knn usando questi trucchi farebbe questo lavoro durante la fase di addestramento. Ad esempio, scikit-learn può costruire kd-alberi o alberi a sfere durante la chiamata alla fit()funzione.

k

k


11

Puoi implementarlo in modo pigro e fa un esercizio decente quando scopri una lingua. (vedi ad esempio uno dei miei post sul blog ). Ma puoi anche indicizzare i dati, per rendere la previsione (molto più veloce).

Se lo spazio delle caratteristiche aveva una dimensione di uno, l'ordinamento dei punti in base a questa funzione ti aiuterebbe a trovare i vicini molto più velocemente (usando ad esempio la ricerca dicotomica). In una dimensione più ampia, non esiste una generalizzazione naturale dell'ordinamento, ma è possibile indicizzare i punti utilizzando (ad esempio) i quadrifogli .

Guardando la fonte , puoi vedere che vari metodi sono stati implementati in scikit learn. E ci sono alcune ricerche che continuano a migliorare queste domande sui vicini più vicini.


5

Sebbene i punti sollevati dagli altri risponditori siano certamente validi e interessanti, vorrei sottolineare un'altra cosa dal punto di vista strettamente ingegneristico del software:

Per renderlo coerente con la loro API

Gli stimatori di sklearn dovrebbero, tra le altre cose, avere un fitmetodo che accetta uno o due Mi piace di array (a seconda che si tratti di uno stimatore supervisionato / non supervisionato) e un numero di dettagli specifici dell'implementazione ( Fonte ).

Quindi, anche se il fitmetodo di knn non dovesse fare assolutamente nulla, probabilmente esisterebbe comunque, perché knn è uno stimatore e gli sviluppatori di sklearn, così come il codice che contribuiscono, si aspettano che gli stimatori abbiano un fitmetodo.

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.