Come eseguire l'ingegnerizzazione di funzionalità su funzionalità sconosciute?


19

Sto partecipando a una competizione kaggle. Il set di dati ha circa 100 funzionalità e tutte sono sconosciute (in termini di ciò che effettivamente rappresentano). Fondamentalmente sono solo numeri.

Le persone stanno eseguendo molta ingegneria di funzionalità su queste funzionalità. Mi chiedo come esattamente si è in grado di eseguire l'ingegnerizzazione delle funzionalità su funzionalità sconosciute? Qualcuno può aiutarmi a capire questo e alcuni suggerimenti su come posso eseguire l'ingegnerizzazione di funzionalità su funzionalità sconosciute?

Risposte:


19

Non è necessaria la conoscenza del dominio (la conoscenza di cosa significano i tuoi dati ) al fine di fare ingegneria delle caratteristiche (trovare modi più espressivi per inquadrare i tuoi dati).


Come spiegato da Tu N. , puoi trovare combinazioni "veloci e sporche" di funzionalità che potrebbero essere utili abbastanza facilmente. Dato un output e una singola funzione x , puoi prendere le seguenti trasformazioni, x { e x , log ( x ) , x 2 , x 3 , tanh ( x ) } . Un rapido controllo dell'utilità della trasformazione è se la correlazione tra { y , x } è superiore alla correlazione trayxx{ex,log(x),x2,x3,tanh(x)}{y,x} .{y,x}

Avviso sulla correlazione: la correlazione non mostra tutto e, a seconda del modello che si sta utilizzando (altamente non lineare come NN o RF) e l'interazione con altre variabili, un cambiamento nella correlazione potrebbe non significare nulla.

Tuttavia, se si utilizza un modello lineare semplice come la regressione logistica, è un indicatore OK di prestazione. Il modo migliore per valutare tale trasformazione, tuttavia, come notato da Fokhruz Zaman , sarebbe quello di costruire un modello con e senza la tua caratteristica trasformata e vedere come si evolve l'errore di validazione (sulle tue pieghe Cross-Validation).

È piuttosto semplice individuare trasformazioni a funzionalità singola in questo modo. Questi si applicano a molti dati, in cui una relazione più espressiva tra input e output potrebbe essere su una scala diversa. Ad esempio, la relazione tra reddito e "felicità" sembra essere logaritmica, ma non si registrerebbe mai direttamente il registro di un reddito di un partecipante.


DD2

Può essere difficile interpretare la rappresentazione interna di un NN o persino interpretare l'importanza delle caratteristiche in una foresta casuale. Un metodo più semplice e probabilmente più adatto a questo scopo, modello sarebbe Incrementare con alberi di decisione. Ci sono molte biblioteche che implementano Boosting e se sei interessato alla competizione Kaggle come sembra suggerire il tuo post, XGBoost sembra usato da molti partecipanti, quindi potresti trovare un aiuto / tutorial su ciò che ho intenzione di descrivere.

Innanzitutto, esegui il tuo algoritmo di potenziamento usando solo ceppi , alberi decisionali di 1 livello. I ceppi sono molto deboli, ma Boosting lo rende un modello ragionevole. Questo fungerà da base. A seconda della libreria che stai utilizzando, dovresti essere in grado di visualizzare abbastanza facilmente quali sono le funzionalità più utilizzate e dovresti tracciarle sulla risposta (o fare un istogramma se la risposta è categorica) per identificare un modello. Questo potrebbe darti un'intuizione su quale sarebbe una buona trasformazione di singole funzionalità.

Quindi, esegui l'algoritmo Boosting con alberi decisionali a 2 livelli. Questo modello è molto più complesso del precedente; se due variabili messe insieme hanno più potenza di quella presa individualmente, questo modello dovrebbe superare quello precedente (di nuovo, non in termini di errore di addestramento, ma di errore di validazione!). Sulla base di questo, dovresti essere in grado di estrarre quali variabili sono spesso usate insieme e questo dovrebbe portare a potenziali trasformazioni multi-funzione.


Sul materiale correlato, consiglierei i seguenti video in quanto sono facili da seguire


4

Puoi prendere diverse combinazioni di funzionalità come la somma di funzionalità: feat_1 + feat_2 + feat_3... o prodotto di quelle. Oppure puoi trasformare le caratteristiche in base al log, o esponenziale, sigmoide ... o persino discretizzare la funzione numerica in una categoriale. È uno spazio infinito da esplorare.

Qualunque combinazione o trasformazione che aumenti le prestazioni di convalida incrociata o set di test, è necessario utilizzarlo.


2
Vorrei prendere un po 'di problemi con "Qualunque combinazione o trasformazione che aumenti le prestazioni di convalida incrociata o set di test, allora dovresti usarlo". Provare ciecamente cose fino a quando qualcosa non migliora la tua metrica delle prestazioni potrebbe portare a scoprire una relazione che non ha senso e causa un eccesso di adattamento. Questo potrebbe davvero danneggiare le prestazioni su nuove osservazioni lungo la strada.
Hersheezy,

1

Potresti spiegare di più con esempi specifici sulla seguente dichiarazione?

The dataset has around 100 features and all are unknown (in terms of what actually they represent). Basically they are just numbers.

Non sono sicuro di come si possa fare l'ingegnerizzazione delle funzionalità senza una buona comprensione del set di dati e degli attributi forniti !!

I dati tabulari sono descritti in termini di osservazioni o istanze (righe) costituite da variabili o attributi (colonne). Un attributo potrebbe essere una funzionalità.

"L'idea di una caratteristica, separata da un attributo, ha più senso nel contesto di un problema. Una caratteristica è un attributo utile o significativo per il tuo problema. È una parte importante di un'osservazione per conoscere la struttura di il problema che si sta modellando ... ... ...

Nella visione artificiale, un'immagine è un'osservazione, ma una caratteristica potrebbe essere una linea nell'immagine.

Nell'elaborazione del linguaggio naturale, un documento o un tweet potrebbe essere un'osservazione e una frase o un conteggio delle parole potrebbe essere una caratteristica.

Nel riconoscimento vocale, un enunciato potrebbe essere un'osservazione, ma una caratteristica potrebbe essere una sola parola o fonema. "

Per ulteriori informazioni, visitare il seguente URL:

Scopri l'ingegnerizzazione delle funzionalità, come ingegnerizzare le funzionalità e come utilizzarla al meglio


Gli attributi nel caso del PO sono stati resi anonimi al punto in cui non è possibile utilizzare la conoscenza del dominio. Questo è abbastanza comune nelle competizioni Kaggle, ma sono ancora possibili forme limitate di ingegneria delle caratteristiche. In genere nuove funzionalità vengono create in blocco, quindi testate, anziché utilizzare la conoscenza della materia per guidare la loro generazione. Un esempio: kaggle.com/c/bnp-paribas-cardif-claims-management/data
Neil Slater

come ha detto Neil, le caratteristiche sono anonime, questo è ciò che intendo dalla mia affermazione.
user2409011
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.