L'esempio più semplice usato per illustrare questo, è il problema XOR (vedi immagine sotto). Immagina di ricevere dati contenenti e coordinati e la classe binaria da prevedere. Potresti aspettarti che il tuo algoritmo di apprendimento automatico scopra da solo il limite di decisione corretto, ma se hai generato la funzione aggiuntiva , il problema diventa banale poiché ti dà un criterio di decisione quasi perfetto per la classificazione e hai usato solo una semplice aritmetica !Xyz= x yz> 0
Quindi, mentre in molti casi ci si potrebbe aspettare dall'algoritmo per trovare la soluzione, in alternativa, grazie all'ingegnerizzazione delle funzionalità, è possibile semplificare il problema. I problemi semplici sono più facili e veloci da risolvere e richiedono algoritmi meno complicati. Gli algoritmi semplici sono spesso più robusti, i risultati sono spesso più interpretabili, sono più scalabili (meno risorse computazionali, tempo di formazione, ecc.) E portatili. Puoi trovare altri esempi e spiegazioni nel meraviglioso discorso di Vincent D. Warmerdam, tenuto dalla conferenza PyData a Londra .
Inoltre, non credere a tutto ciò che ti dicono i professionisti del machine learning. Nella maggior parte dei casi gli algoritmi non "apprenderanno da soli". Di solito hai tempo, risorse, potenza di calcolo limitati e i dati hanno di solito dimensioni limitate ed è rumoroso, nessuno dei due aiuta.
Portandolo all'estremo, potresti fornire i tuoi dati come foto di note scritte a mano del risultato dell'esperimento e trasmetterle a complicate reti neurali. Prima imparerebbe a riconoscere i dati sulle immagini, poi imparerebbe a capirli e fare previsioni. Per fare ciò, avresti bisogno di un computer potente e un sacco di tempo per l'addestramento e l'ottimizzazione del modello e hai bisogno di enormi quantità di dati a causa dell'utilizzo di complicate reti neurali. Fornire i dati in formato leggibile da computer (come tabelle di numeri), semplifica enormemente il problema, poiché non è necessario il riconoscimento di tutti i caratteri. Puoi pensare all'ingegnerizzazione delle funzionalità come un passaggio successivo, in cui trasformi i dati in modo tale da creare significaticaratteristiche, in modo che l'algoritmo abbia ancora meno da capire da solo. Per fare un'analogia, è come se volessi leggere un libro in lingua straniera, quindi è necessario prima imparare la lingua, anziché leggerla tradotta nella lingua che capisci.
Nell'esempio dei dati Titanic, il tuo algoritmo dovrebbe capire che la somma dei membri della famiglia ha senso, per ottenere la funzione "dimensione della famiglia" (sì, la sto personalizzando qui). Questa è una caratteristica ovvia per un essere umano, ma non è ovvio se vedi i dati come solo alcune colonne dei numeri. Se non sai quali colonne sono significative se considerate insieme ad altre colonne, l'algoritmo potrebbe capirlo provando ogni possibile combinazione di tali colonne. Certo, abbiamo modi intelligenti per farlo, ma è ancora più semplice se le informazioni vengono fornite immediatamente all'algoritmo.