Codifica di caratteristiche categoriche in numeri per l'apprendimento automatico


14

Molti algoritmi di machine learning, ad esempio le reti neurali, prevedono di gestire i numeri. Pertanto, quando si dispone di dati categorici, è necessario convertirli. Per categorico intendo, ad esempio:

Marche di auto: Audi, BMW, Chevrolet ... ID utente: 1, 25, 26, 28 ...

Anche se gli ID utente sono numeri, sono solo etichette e non significano nulla in termini di continuità, come l'età o la somma di denaro.

Quindi, l'approccio di base sembra utilizzare i vettori binari per codificare le categorie:

Audi: 1, 0, 0 ... BMW: 0, 1, 0 ... Chevrolet: 0, 0, 1 ...

Va bene quando ci sono poche categorie, ma oltre a ciò sembra un po 'inefficiente. Ad esempio, quando hai 10.000 ID utente da codificare, sono 10 000 funzioni.

La domanda è: esiste un modo migliore? Forse uno che coinvolge probabilità?


3
Perché dovresti includere un ID utente in un modello predittivo? Per quanto riguarda le altre variabili categoriali con cardinalità maggiore di quanto desideri quando usi la codifica delle variabili fittizie come descrivi, le eseguo prima attraverso un albero decisionale come unico predittore, al fine di ridurre i livelli. Puoi anche ri-bin raggruppando i livelli "rari" ecc.
B_Miner il

Sembra interessante - come effetti casuali in un modello statistico in cui sei interessato ad effetti particolari per un individuo specifico. Posso immaginare situazioni in cui sarebbe utile, ad esempio se vedi gli stessi individui ancora e ancora e vorresti prevedere cosa farà quel particolare individuo. Se possibile, condividi di più sui tuoi piani. Inoltre, potresti guardare alla modellazione multilivello, sebbene sia tradizionalmente usata in contesti inferenziali piuttosto che nell'apprendimento automatico.
Anne Z.

Ricordo di aver letto di un concorso ML, in cui alcuni ricercatori intelligenti hanno rilevato che gli ID utente nei dati sono stati forniti al momento della creazione dell'account utente. Quindi i timestamp, che sono stati offuscati, sono stati rivelati (influenzando positivamente la previsione della risposta). Accanto a questi casi e quelli menzionati da Anne (sistemi di raccomandazione) non includerei userID.
Steffen,

Anne - Un modello a effetti casuali NON è realmente interessato agli individui - quindi sono considerati un campione da una popolazione?
B_Miner

Non capisco, se il problema di apprendimento è prevedere la categoria binaria ricca / non ricca, perché non avrebbe senso avere una caratteristica per il marchio di auto di un particolare utente. Gli ID utente potrebbero essere utilizzati se si conosce il social network dell'individuo: ad esempio per dimostrare che gli amici dell'utente X sono più inclini ad essere ricchi. C'è qualcosa di sbagliato in questa linea di pensiero?
Vladtn,

Risposte:


6

Puoi sempre trattare i tuoi ID utente come un sacco di parole: la maggior parte dei classificatori di testo può gestire centinaia di migliaia di dimensioni quando i dati sono sparsi (molti zeri che non è necessario archiviare esplicitamente in memoria, ad esempio se si utilizzano le righe sparse compresse rappresentazione per la tua matrice di dati).

Tuttavia la domanda è: ha senso scrivere un problema specifico nel trattare gli ID utente come funzionalità? Non avrebbe più senso denormalizzare i dati della tua relazione e utilizzare le funzionalità dell'utente (età, posizione, grafici del nickname online, cronologia delle transazioni ...) anziché i loro ID?

È inoltre possibile eseguire il clustering dei vettori utente non elaborati e utilizzare gli ID N più vicini ai centri più vicini come funzioni attivate anziché gli ID utente.


OK, sebbene questa sia una domanda più generale, vedo la maggior parte di voi concentrata sul problema degli ID utente, quindi ecco perché vorrei usarli. Diamo un'occhiata a una delle competizioni di Kaggle, su Grockit: kaggle.com/c/WhatDoYouKnow . L'obiettivo è prevedere se un utente risponderà correttamente a una domanda. È un problema simile a mio avviso ai sistemi di raccomandazione, si ottengono solo domande anziché film e si corregge / non si corregge invece di classificazioni, oltre ad alcuni altri dati. I timestamp sono disponibili :)
Nucular

1
In tal caso, puoi supporre che l'utente sia indipendente e puoi creare un classificatore per utente addestrato solo sulla propria cronologia.
Ogisel,

1

La codifica equilatera è probabilmente ciò che stai cercando quando cerchi di codificare le classi in una rete neurale. Tende a funzionare meglio della codifica "1 di n" a cui fa riferimento in altri post. Per riferimento posso suggerire: http://www.heatonresearch.com/wiki/Equilateral


Ciò sembra essere correlato alla codifica dei valori di output, non alla codifica categoriale per i valori di input che è ciò che l'OP richiede.
Alex,
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.