In questo articolo presenterò dei libri che ho trovato ottimi per iniziare o migliorare nel mondo del machine learning. Come ben si sa non è facile iniziare in questo campo da 0 senza avere una conoscenza della matematica e in parte degli argomenti propri del settore, con questa lista spero di aiutarvi a iniziare in questo mondo. Partiamo con la lista!


Machine Learning for Hackers

★★★★★



Questo libro tratta le tematiche di machine learning con molta semplicità, prima viene esposta la teoria e poi viene corredato l’esempio con Python o R. Gli esempi sono semplici e molto bene commentati, non è difficile seguire l’ordine degli argomenti proposti dal libro. I capitoli che lo compongono si basano su argomenti sia teorici che pratici e si va dai problemi di classificazione a metodi di visualizzazione.
Il libro è molto basilare ed è adatto a un programmatore che inizialmente vuole approcciarsi a questo mondo e avere una infarinatura senza finire in pura teoria. Gli esempi sono corredati da codice su Github e vengono offerti alcuni spunti per sistemi in produzione che utilizzano questi algoritmi.


Hands-On Machine Learning With Scikit-Learn and Tensorflow: Concepts, Tools, and Techniques to Build Intelligent Systems

★★★★★



Questo libro è molto più pratico del precedente. Esso illustra gli algoritmi più importanti e copre sia la parte di machine learning classica, che di Deep learning. I modelli di machine learning trattati sono: Classificatori con Stocastic Gradient Descent, Regressione Semplice e regressione Logistica, Support Vector Machine, Decision Tree, Ensamble, Random Forest, Riduzione delle dimensionalità e infine reti neurali feed forward e recurrent utilizzando Tensorflow. Il libro usa Python come linguaggio di riferimento, è molto chiaro e semplice comprendendo tutti i punti che sono richiesti in un progetto vero e proprio come l’ottimizzazione dei modelli e la loro valutazione.
Il libro è più avanzato del precedente, espone gli algoritmi piu’ richiesti in questo campo e la loro applicazione. Lo consiglio per chi vuole avere una panoramica generale.


Pattern Recognition And Machine Learning

★★★★★



Questo libro è un vero classico del Machine Learning, all’interno è contenuta tutta la teoria matematica sottostante a ogni modello ed algoritmo più usato. L’approccio dell’autore è puramente probabilistico basato sulla teoria bayesiana.
Viene trattato il tutto partendo dalle basi: si inizia dalla teoria della probabilità, poi la teoria dell’informazione e la statistica per arrivare ai modelli lineari, alle reti neurali e ai metodi kernel. Purtroppo questo libro manca di applicazioni a livello di codice rimanendo di teoria, tuttavia è una base fondamentale per chiunque voglia approndire queste tematiche.
Il sito web del libro è disponibile a questo link: https://goo.gl/uFpD7i


Machine Learning: An Algorithmic Perspective, Second Edition

★★★★★



In questo volume vengono trattati elementi di machine learning e data mining dal punto di vista algoritmico e pratico. È molto più diretto del libro di Bishop e più complesso dei primi due in quanto tratta sì le formule matematiche nello specifico, ma non va a spiegarne ogni punto ed è secondo me molto utile per completare la conoscenza della teoria con gli algoritmi.
È un libro consigliato, la qualità dell’esposizione del libro rimane alta ed è per questo molto utile per integrare le conoscenze.

In questo articolo spiegherò come fare una analisi basilare di un dataset da me creato e di come applicare il modello di Decision Tree con Python. Ho utilizzato Scikit e Pandas per la parte di analisi dati e dataframe, per la parte relativa ai grafici ho scoperto ultimamente questa libreria Seaborn che va a sostituire a matplotlib.

Il dataset che prendo in considerazione è stato costruito da me facendo un semplice scraping della pagina di ogni regione di Booking.com . Dopo avere effettuato lo scraping, fatto a mano dal sito, ho preso ogni singola città e ne ho categorizzato un tipo possibile di turismo.
Esso è costituito da: Nome città, regione, Hotel, Latitudine, Longitudine, tipo di turismo
Nella pratica considero tutte le regioni italiane e elenco le prime 25 città per numero di hotel. Il dataset è disponibile in fondo al blogpost.

L’analisi che farò sarà quella di creare dei Decision Tree sul dataset in base al tipo di turismo, usando più o meno diverse feature in tre casi differenti e vedendo quale dei tre casi funziona meglio. Infine userò le funzioni interne delle librerie di scikit per creare la grafica.
Ecco il gist contenente tutti procedimenti commentati passo passo.

Ecco ora il dataset che ho usato per la mia analisi dei dati. Lo potete usare sotto licenza GPL v2

I Decision Tree o Alberi Decisionali sono uno strumento di apprendimento supervisionato, essi risolvono principalmente tematiche di classificazione o regressione. Sono molto facili da interpretare e da applicare, non basandosi su un modello lineare sono capaci di apprendere anche associazioni non lineari. Funzionano sia su dati numerici che categorici.

I Decision Tree si categorizzano rispetto alla variabile in output come:

  • Categorical Decision Tree
  • Continuous Decision Tree

Nella figura seguente si vede un esempio di Decision Tree sul dataset di Iris.

  • Il nodo principale si chiama Root Node o Radice
  • Quando un nodo porta a una divisione in rami nei sottonodi l’operazione si chiama Splitting
  • Quando un nodo si divide in più sottonodi senza arrivare a quello finale, i sottonodi si chiamano Decision Node o Nodo di decisione
  • Una intera sezione dell’albero si chiama Branch o Ramo

Vantaggi dei Decision Tree

  • Sono facili da capire: Siccome essi offrono una rappresentazione grafica molto facile da interpretare, i Decision Tree sono anche interpretabili dalla gente non propria del campo informatico.
  • Utili nell’analisi del dataset: Siccome sono un algoritmo molto veloce e semplice da applicare, è utile applicarlo per vedere le relazioni fra le variabili

Svantaggi dei Decision Tree

  • Sono proni all’overfitting: È il problema più frequente con i Decision Tree, il metodo migliore per risolverlo è settare dei vincoli o fare Pruning dei rami

Divisione in rami

Il criterio secondo il quale l’algoritmo divide in più rami i vari nodi dell’albero è critico per la precisione deloritmo. Esso poi è differente nel caso si scelga un ambito di regressione o un ambito di classificazione. In base ai criteri disponibili abbiamo i seguenti approcci:

  • Gini Index (o indice Gini): L’indice Gini dice calcola se gli elementi considerati fanno parte della stessa popolazione. Se la popolazione è pura essi devono essere della stessa classe e la probabilità associata a questo evento è 1 (cioè non contiene elementi di classe diverse)
  • Chi-Square (o Chi quadrato): L’algoritmo Chi Square si preoccupa di trovare una significanza statistica fra i sotto nodi e il nodo padre. Questa la misuriamo sommando il quadrato delle differenze standardizzate fra i valori osservati e i valori che ci aspettiamo
  • Information Gain: L’algoritmo Information Gain si basa sul principio di entropia di un insieme di dati, e usa questo per calcolare la divisione in rami.
  • Riduzione della varianza: Questo algoritmo utilizza la formula della varianza per decidere il migliore modo per dividere i rami, minore è la varianza maggiore è la probabilità che quell’attributo venga usato per dividere i rami

Overfitting

Il problema principale dei Decision Tree è dovuto all’overfitting. Essi arriveranno a fare tante osservazioni, fino ad arrivare a fare una foglia per ogni osservazione e raggiungere quindi il 100% di precisione. Per ridurre questo problema ci sono i seguenti approcci:

  • Si settano dei vincoli sul numero massimo di foglie o sul numero massimo di nodi finali o sul numero massimo di attributi su cui creare nuove foglie. Allo stesso modo anche sul numero minimo di foglie e sul numero minimo di elementi su cui creare nuove foglie
  • Si fa il Pruning dei rami, cioè si eliminano i rami possibili, attraverso un approccio greedy. Nella pratica si sceglie la strada che attualmente sembra la migliore e si prosegue con quella finchè non se ne trovano di migliori

Quando usiamo un Decision Tree?

Dovremmo usare un Decision Tree quando c’è una relazione complessa fra i vari attributi che è difficile da spiegare, in questo modo l’approccio non lineare del Decision Tree batte l’approccio lineare della Regressione Lineare ad Esempio. Inoltre un Decision Tree è molto utile se dobbiamo spiegare come si effettua una classificazione ai non addetti ai lavori.


Nel prossimo articolo includerò degli esempi in Python con la libreria Scikit per mostrare una implementazione dei Decision Tree su un dataset di Regioni città e Attrazioni.