Una alternativa di codifica a caldo per grandi valori categorici?


13

Salve, ho un frame di dati con valori categorici elevati su oltre 1600 categorie, esiste un modo per trovare alternative in modo da non avere più di 1600 colonne.

Ho trovato questo link interessante sotto http://amunategui.github.io/feature-hashing/#sourcecode

Ma si stanno convertendo in classe / oggetto che non voglio. Voglio il mio output finale come frame di dati in modo da poter testare con diversi modelli di machine learning? o c'è un modo in cui posso usare la matrice genetrata per addestrare altri modelli di machine learning diversi dalla regressione logistica o XGBoost?

Posso comunque implementare?


Questo è davvero un problema? Supponendo che tu stia utilizzando una rappresentazione a matrice sparsa, la codifica onehot non sarà un vero problema.
Louis T,

@LouisT Ho milioni di record più di 500m record
vinaykva

Tuttavia, se è caldo, non importa se usi la matrice sparsa
Louis T,

@LouisT La complessità aumenterà e anche il tempo del treno aumenterà e i miei dati diventeranno troppo scarsi
vinaykva

1
il tuo post è circa un anno fa e forse non è più interessato, ma nel caso in cui sei ancora interessato hai sentito parlare di Entity Embedding usando le reti neurali? medium.com/@satnalikamayank12/…
TwinPenguins il

Risposte:


10

Un'opzione è mappare valori rari su "altro". Questo è comunemente fatto ad esempio nell'elaborazione del linguaggio naturale - l'intuizione è che le etichette molto rare non hanno molto potere statistico.

Ho anche visto persone mappare i valori categorici 1-hot su vettori di dimensione inferiore, in cui ogni vettore 1-hot è rappresentato nuovamente come un disegno da un gaussiano multivariato. Vedi ad esempio il documento Deep Knowledge Tracing, che afferma che questo approccio è motivato dall'idea del rilevamento compresso:

BARANIUK, R. Rilevamento a compressione. Rivista di elaborazione del segnale IEEE 24, 4 (2007).

In particolare, mappano ogni vettore di lunghezza N su un vettore più corto di lunghezza log2 (N). Non l'ho fatto da solo, ma penso che varrebbe la pena provare.


Mi chiedo come calcolare la distanza con tale codifica?
eric2323223

2

Puoi leggere i dati e ottenere prima un elenco di tutti i valori univoci delle variabili categoriali. Quindi puoi inserire un oggetto di un hot encoder (come sklearn.preprocessing.CategoricalEncoder) sul tuo elenco di valori univoci.

Questo metodo può anche essere utile in un framework di test del treno o quando stai leggendo i tuoi dati in blocchi. Ho creato un modulo Python che fa tutto da solo. Puoi trovarlo in questo repository GitHub - dummyPy

Un breve tutorial su questo - Come si possono codificare a caldo le variabili categoriali in Python?



0

Puoi eseguire il bucketing di valori simili, in modo che i valori (o colonne) che detengono il modello di valore più vicino (o ha molto simili) possano essere sostituiti da un valore (o colonna) e quindi i tuoi 1600 valori possono scendere per dire 400 (o anche Di meno).

Ex. per valori come (nuvola come - Nimbus Nuvole, pioviggine, pioggia leggera, pioggia, pioggia intensa possono essere convertiti in (pioggia leggera, pioggia, pioggia pesante).

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.