Dutch National Flag Problem o Problema della bandiera Olandese

Un problema molto divertente da risolvere è quello della Bandiera Olandese o in inglese Dutch National Flag Problem. Il problema e’ stato postulato da Edsger Dijkstra, il famoso informatico per l’algoritmo sui grafi. Questo problema si formula così: Abbiamo un array non ordinato formato da N valori numerici, che sono o 0 o 1 o 2. Il nostro compito è ordinarlo. Quindi mi trovo in una situazione del genere: [0,1,2,0,1,1,2,0,2,1,0,0,1,1,2,2] ...

9 marzo 2018

Machine Learning in Pratica: Decision Tree in Python con Scikit

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. ...

6 ottobre 2017

Decision Tree o Alberi Decisionali

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. ...

3 ottobre 2017

Stochastic Gradient Descent in Python con Sci-kit

Un modo molto semplice di implementare lo Stochastic Gradient Descent nei nostri script è quello di usare l’implementazione di Scikit. La classe SGDClassifier implementa un classificatore che utilizza lo Stochastic Gradient Descent per classificare valori. Il mio script in python applica questo classificatore sul MNIST database, un dataset contente dei numeri scritti a mano e utilizzati come dataset d’esempio nei problemi di classificazione. Ho utilizzato questo semplice script inoltre per gareggiare su Kaggle alla competizione https://www.kaggle.com/c/digit-recognizer, dove si chiede di scrivere un classificatore di cifre e fare il submit del punteggio. ...

29 settembre 2017

Gradient Descent o Discesa del Gradiente

Il Gradient Descent o Discesa del Gradiente è uno dei più popolari algoritmi di ottimizzazione. La discesa del gradiente è un algoritmo molto usato nelle reti neurali in quanto è alla base dell’algoritmo di backpropagation, attualmente sono tantissime le librerie che implementano questo algoritmo. L’idea del Gradiente Descent è quello di minimizzare una funzione obiettivo J(θ) formata da N parametri θ, aggiornando il valore dei parametri in base alla differenza con il gradiente negativo di J(θ) rispetto al parametro considerato. L’aggiornamento del parametro viene aggiornato poi passo passo, secondo un dato valore η, chiamato learning rate. ...

27 settembre 2017

Clustering Gerarchico - Parte prima

L’analisi del cluster è un processo in cui si raggruppano insiemi di oggetti in modale tale da creare insiemi di oggetti i cui elementi siano piu’ simili fra loro rispetto agli elementi negli altri gruppi. I gruppi vengono detti Cluster Il clustering è una tecnica base del data mining e viene usata in altri ambiti molto simili (Machine learning, pattern recognition, analisi immagini,ecc) Per Clustering Gerarchico (Hierarchical Clustering) si intende un metodo di analisi dei cluster che vuole ottenere gerarchie di cluster. Si può effettuare in due modi: ...

27 agosto 2017

Algoritmo A-Priori - Parte seconda

In questo articolo esporrò lo pseudo codice dell’algoritmo A-Priori e una versione funzionante in Go. L’algoritmo A-Priori si può riassumere nel seguente modo: Ammettiamo di avere questo Dataset Transazioni Cestino 1 {“Mela”,“Lampone”,“Ananas”} 2 {“Mela”,“Kiwi”,“Ananas”} 3 {“Lampone”,“Ananas”} 4 {“Banana”,“Kiwi”,“Ananas”} 5 {“Kiwi”} 6 {“Mela”,“Kiwi”} Primo passaggio di Apriori Creiamo un insieme contenente tutti i nostri elementi singoli presi dal Dataset e creiamo una mappa contenete la frequenza dei nostri oggetti Set = {“Mela”,“Kiwi”,“Ananas”,“Lampone”,“Banana”} Frequency Set = {“Mela”: 3, “Kiwi”,4 “Ananas”: 4, “Lampone”: 1, “Banana”: 1} ...

22 agosto 2017

Algoritmo A-Priori - Parte prima

L’algoritmo A-Priori ha un semplice obiettivo, trovare oggetti comprati assieme dentro dei carrelli, cioè trovare le regole di associazione degli elementi all’interno di un insieme di dati. Il nome A-Priori deriva da come l’algoritmo opera, cioè senza avere nessuna conoscenza effettiva dei dati, ma lavorando sull’intuizione delle associazioni fra gli elementi. Quando un cliente compra in un supermercato ha di solito una lista delle cose che vuole comprare. Ogni cliente ha bisogni diversi, dalla casalinga al lavoratore single, ma dietro questi clienti ci sono pattern di oggetti comprati spesso assieme. Scoprire questi pattern è molto utile in quanto permette di fare promozioni questi oggetti quando sono comprati assieme. ...

21 agosto 2017