Parlando di cos’è e come funziona la LogistRegression, nello scorso articolo abbiamo avuto modo di incontrare il parametro C che permette di caratterizzare il funzionamento della rete.
Questo parametro è strettamente collegato con uno dei più noti problemi nel campo dell’apprendimento automatico chiamato overfitting.
In questo articolo andiamo a definire cos’è l’overfitting (e l’underfitting) e vediamo come poterlo riconoscere e gestire nei nostri progetti.
Overfitting e Underfitting
L’overfitting, è un problema molto comune nel machine learning e si viene a formare nel momento in cui un modello funziona molto bene sui dati di training ma non riesce a generalizzare a sufficienza su dati mai visti prima.
Un termine analogo per definire un modello che soffre di overfitting è quello di indentificarlo come un modello con alta varianza.
Ciò può essere causato dal fatto di avere molti parametri al punto da generare un modello troppo complesso e ritagliato su misura ai dati di training.
Un problema analogo ma opposto all’overfitting è l’underfitting.
In questo caso il modello si ritrova ad essere troppo poco complesso per catturare il pattern che si cela dietro ai dati di training.
Ciò comporta un’incapacità a predire in modo corretto sui dati di test.
Di seguito mostriamo un esempio di quali sono gli scenari possibili, una volta terminata la fase di addestramento di un modello di dati.
Nel caso di underfitting, vediamo bene come il piano identificato dalla fase di apprendimento è troppo approssimato, generando un comportamento spesso scorretto.
L’overfitting dal canto suo, invece, si ritrova ad aver calcolato una curva perfettamente allineata ai dati di training, ciò causerà predizioni errate su dati mai visti prima.
Un buon compromesso invece, genera delle curve che dividono i dati di training in modo bilanciato, garantendo un comportamento corretto anche su dati non presenti nel training set.
Regularization
Uno strumento utile a combattere i problemi di overfitting e underfitting è quello di regolare la complessità del modello attraverso la regularization.
Grazie a questa tecnica è possibile infatti gestire le eventuali alte correlazioni tra le features, anche nota come collinearity. Il concetto chiave è quello di introdurre un’informazione addizionale (detto bias) in modo da penalizzare quei parametri che hanno pesi estremamente alti.
Esistono diversi metodi per effettuare la regularization, uno fra tutti è la L2 che può essere scritta nel seguente modo:
\frac{\lambda }{2}\left \| \mathbf{w} \right \|^2 = \frac{\lambda}{2}\sum_{j=1}^{m}w_j^2
dove \lambda è il così detto regularization parameter il quale viene aggiunto alla funzione di costo:
J(W) = \sum_{i=1}^{n}[ - y^ilog(\phi(z^i)) - (1 - y^i)log(1-\phi(z^i))] + \frac{\lambda}{2}\left \| w \right \|^2
Attraverso il parametro di regolarizzazione, possiamo controllare quanto stiamo fittando bene i dati di training mantenendo i valori dei pesi bassi.
Conclusioni
Il parametro C visto nello scorso articolo, deriva da una convenzione che trae le sue origini su un altro tipo di reti che avremo modo di studiare: le SVM.
C è direttamente collegato al parametro \lambda, in quanto è il suo inverso. Di conseguenza, decrementando il valore di C stiamo aumentando il valore di \lambda .
Abbiamo discusso come questo parametro rappresenti un ottimo strumento per cercare di evitare fenomeni quali l’overfitting e l’underfitting. Incrementando il valore di regolarizzazione, andiamo a penalizzare i pesi con valori estremi evitando l’overfitting. Viceversa con valori inferiori di \lambda diamo più enfasi a quei pesi aventi valori più grandi, aggiustando il modello su di essi.
Scrivi un commento