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, registro( 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