Description
Le tecniche di Machine Learning (ML) si concentrano sulla definizione di algoritmi per effettuare previsioni a partire dall'analisi dei dati. Le tecniche di ML si distinguono tipicamente in due categorie: tecniche di Apprendimento con Supervisione (i.e., Supervised Learning), e tecniche di Apprendimento senza Supervisione (i.e., Unsupervised Learning).
Indistintamente dalla categoria di appartenenza, le tecniche di ML richiedono l'elaborazione di grandi quantità di dati per poter effettuare delle previsioni che siano veritiere e ragionevolmente affidabili. Pertanto, risulta necessario riportare su larga scala tali elaborazioni, affinché queste siano efficacemente utilizzate e utilizzabili.
Fino a qualche tempo fa, le elaborazioni parallele e distribuite trovavano applicazione in contesti altamente specializzati e di alto profilo.
Tuttavia, la rapida evoluzione delle architetture di calcolo, e l'avvento delle tecnologie di cloud computing, hanno favorito la proliferazione di svariate piattaforme e framework di programmazione parallela facilmente accessibili [Bekkerman et. al.].
Tali fattori hanno notevolmente contribuito al sempre crescente interesse per l'applicazione di tecniche di ML su larga scala. Il tutto motivato anche dal fatto che molteplici dataset (di grandi dimensioni), sono attualmente memorizzati in maniera distribuita su differenti piattaforme di storage (a.k.a. cloud storage).
Scikit-learn è una libreria Python attivamente sviluppata e robusta, costruita sulle solide fondamenta di numpy e scipy.
Scikit-learn (sklearn) rappresenta una soluzione software "tutto incluso", che mette a disposizione l'implementazione di molte delle più note tecniche di ML per l'analisi di dati.
Grazie ad una API semplice ad intuitiva, tale libreria può essere agevolmente integrata in altre soluzioni Python-powered per computazioni parallele e distribuite.
In questo talk saranno presentate differenti soluzioni per l'esecuzione di algoritmi di ML su larga scala, utilizzando Scikit-learn. In particolare, la scalabilità degli algoritmi sarà presentata considerando due differenti livelli di "complessità": (1) "Single Machine with Multiple Cores"; e (2) "Multiple Machines with Multiple Cores".
Durante il talk, saranno discussi diversi esempi di codice, unitamente ad una breve descrizione delle tecniche di ML considerate. Tali esempi avranno lo scopo di mostrare l'utilizzo congiunto di sklearn con librerie quali multiprocessing, e mpi4py (per il primo setting); iPython.parallel e soluzioni basate su Map-Reduce (e.g., disco (per il secondo setting).
In aggiunta, qualche accenno al GPU-computing con pycuda sarà inoltre riportato, a conclusione della presentazione.
Questo talk è pensato per un livello avanzato. Sono richieste competenze di matematica di base e una buona conoscenza del linguaggio Python. Apprezzabile una buona conoscenza di numpy e scipy.