[APP REVIEW] Con myCicero® andare in giro è più divertente.

Non importa il mezzo ma il fine. Penso che sia questa l’idea che sta dietro allo sviluppo di myCicero® – l’app che ti porta dove vuoi, con ogni mezzo.

A fare la differenza, sia da un punto di vista tecnico che da un punto di vista pratico, in questo caso non è l’idea in se (che non è poi così originale) ma la realizzazione. Dico questo perché  myCicero® funziona, è semplice da utilizzare e ben disegnata e ben integrata con i principali servizi di trasporto italiani. Insomma, non è finita nella fatidica cartella “TantoPerOccupareSpazio” del mio smartphone.

Queste sono le funzionalità chiave dell’app:

  • Sosta – Con l’app paghi solo i minuti effettivi di sosta, con la possibilità di richiedere la fatturazione mensile. Il servizio è attivo in parecchie città, purtroppo non la mia e quando sono fuori non sono in auto. Peccato.
  • Mezzi pubblici – treni, autobus locali, linee a lunga percorrenza e metropolitana. Tutti i vettori in un’unico strumento che permette anche di pianificare gli spostamenti e acquistare i biglietti in real time. Questa è la cosa più interessante perchè in giro quando non si conoscono linee e orari fa risparmiare molto tempo.

I punti di forza sono l’interfaccia grafica (immediata, gradevole e semplice) e le partnership con i servizi di trasporto pubblico (tante rispetto alla concorrenza). Chi vive o visita le città coperte da myCicero® troverà quest’app molto utile, uno strumento unico per organizzare tutti gli spostamenti quotidiani. Per capire quali sono le città attive e i partner integrati visita il sito ufficiale dell’app.

Visto che ti sei sorbito tutta questa review ti sei guadagnato un codice sconto da € 2,00. Scarica l’app gratuitamente e utilizza il seguente codice promozionale: MYC95875. Potrai utilizzarlo per ricaricare il credito myCicero seguendo questi passaggi: dall’app accedi alla sezione ‘Ricarica Credito’ –> ‘Hai un coupon?’ e inserisci il codice. In questo modo avrai diritto a 2€ di ricarica omaggio, la promo è valida naturalmente solo per i nuovi iscritti!

 

Buzzoole
Buzzoole

Machine Learning: le librerie

Per capire i meccanismi fondamentali del machine learning abbiamo sviluppato un perceptron e una piccola rete neurale direttamente in python. Naturalmente per applicazioni reali in cui è necessario analizzare una notevole quantità di dati complessi non è il caso di reinventare la ruota scrivendo gli algoritmi di machine learning da zero.

La scelta migliore è quella di affidarsi ad una delle librerie per il machine learning disponibili sul web. Per non perdersi tra il mare di alternative disponibili c’è questo articolo: una (personale) valutazione dei framework migliori. Tutti disponibili gratuitamente per l’uso.

 

TensorFlow

Probabilmente la libreria open source più nota. Open Source e sviluppata direttamente da Google. La libreria mette a disposizione una serie di API che semplificano, e di molto, le operazioni di calcolo. La documentazione è completa e i tutorial abbondano, sia per i neofiti che per i sviluppatori con esperienza nel campo.

LINK: https://www.tensorflow.org

 

 

Theano

Questa in realtà non è una libreria per algoritmi di apprendimento. Si tratta piuttosto di un’insieme di strumenti (in python) che permette di elaborare strutture multidimensionali in moto semplice ed efficiente dal punto di vista delle performance. Può sfruttare le risorse di calcolo delle GPU per velocizzare in modo significativo le operazioni.

LINK: http://deeplearning.net/software/theano/

 

Keras

Questa mi piace parecchio.  TensorFlow e  Theano in un’unica libreria di alto livello che ne semplifica l’utilizzo. Modulare, facilmente estendibile e minimalista quanto basta per non perdere di versatilità.

LINK: https://keras.io

 

Blocks

Un elegante wrap per Theano, che lavora benissimo in coppia con fuel per processare i dataset. Molto interessante la funzionalità di Live Plotting che sfrutta  Bokeh per la visualizzazione grafica dei dati.

LINK: https://blocks.readthedocs.io/en/latest/

 

Lasagne

Una libreria di alto livello per Theano che coniuga la leggerezza ad una curva di apprendimento rapida. La libreria è in continua evoluzione, tutto il codice è disponibile in un repository GitHub.

LINK: https://lasagne.readthedocs.io/en/latest/

 

Caffe

Licenza BSD, sviluppata a Berkeley. Veloce, stabile e in grado di utilizzare CPU o GPU per i calcoli. Probabilmente non è la più immediata ma la documentazione e gli esempi disponibili sono sufficienti a prendere dimestichezza con il framework.

LINK: http://caffe.berkeleyvision.org

 

Ne esistono altre ma un’articolo più lungo sarebbe poco utile, basta utilizzare Google per trovarle in breve tempo. Ma quale di queste scegliere? Non esiste la risposta universale a questa domanda perché bisogna conoscerle  e  valutare di volta in volta quale è la più adeguata al progetto che hai in mente..

Machine Learning: una rete neurale minimale per XOR

Del perchè il problema XOR non è risolvibile con un singolo perceptron abbiamo già parlato qui. Adesso non ci resta che trovare la soluzione al problema creando una semplice rete neurale in 2 livelli che sia in grado di fornirci la giusta soluzione.

Per ogni livello verrà calcolato il gradiente che va a correggere il peso calcolato nell’elaborazione del livello superiore. Questa retroazione permette di affinare il risultato ad ogni iterazione per ottenere la classificazione che cerchiamo.

 

Lo schema logico che utilizzeremo per la rete è il seguente

Questo è il codice completo, commentato per essere facilmente comprensibile in ogni sua fase:

 

Il codice è anche disponibile nel repository GitHub dedicato al Machine Learning.

Machine Learning: perceptron, XOR e rete neurale

In questo articolo ho mostrato come simulare il funzionamento di un neurone con python. Questo tipo di applicazione del machine learning è in grado di imparare a dividere i risultati nel piano con una linea retta. Questo non è sufficiente per risolvere problemi appena più complessi di una funzione logica di base. Ad esempio il perceptron descritto non è in grado di prevedere correttamente il funzionamento di una funzione XOR.

Il perchè è davvero semplice da spiegare. Questa è la tabella XOR:

Questo invece è il grafico della stessa funzione logica:

 

Da questa immagine è evidente che è impossibile dividere i risultati utilizzando un’unica retta quindi il nostro perceptron non è in grado di arrivare al risultato corretto dopo la solita elaborazione. Soluzioni? Te ne viene in mente qualcuna?

C’è n’è una molto intuitiva che è anche la più interessante: perché non utilizzare diversi perceptron per elaborare i dati? Con una rete di perceptron possiamo essere in grado di disegnare due linee e dividere l’area in tre porzioni.

Questo è il concetto alla base di una rete neurale. Nel prossimo articolo ne implementeremo una in Python e la testeremo con la funzione XOR.

Machine Learning: emuliamo un neurone in Python

Una delle prime forme di machine learning comparsa nella letteratura di settore, e anche una delle più semplici da implementare è il Perceptron (in italiano possiamo chiamarlo percettrone ma la forma inglese è la più diffusa). Si tratta di una sorta di schematizzazione del funzionamento di un neurone che prevede una serie di ingressi che vengono elaborati per dare in uscita un valore che ne rappresenta la somma pesata. Nello step successivo questo valore viene normalizzato secondo uno schema preciso.

Schematizziamo il concetto con una formula, la prima operazione è la seguente:

Il risultato finale sarà invece elaborato secondo questa funzione (a cui ci riferiremo con step function):

 

Passiamo immediatamente alla pratica per capire come tradurre questo concetto matematico in codice. Creiamo un perceptron in grado di “imparare” ad eseguire la funzione logica AND.  La scelta del linguaggio per queste applicazioni ricade molto spesso su python considerata la sua semplicità, leggibilità ed eleganza. Per prima cosa stabiliamo il set di dati in ingresso, che negli articoli teorici abbiamo sempre definito training data.

Ora c’è da definire la step function.

Serviranno anche alcuni valori di riferimento. Per prima cosa un vettore dei pesi scelti inizializzato con numeri casuali. Inoltre abbiamo bisogno anche di un tasso di apprendimento e del numero di interazioni necessarie al perceptron per “imparare” dai training data.

Adesso passiamo al ciclo di apprendimento.

Dopo le cento iterazioni il percettrone dovrebbe essere sufficientemente istruito per replicare in autonomia la funzione AND. Per testarne il funzionamento bastano poche righe di codice.

Mettendo tutto insieme hai un’algoritmo di machine learning già funzionante. Semplice vero?

Questo è il risultato finale:

Trovi il file sorgente nel nuovo repository :#/ promezio che ho creato su GitHub per riunire tutti i test relativi al machine learning che ritengo possano essere utili da studiare.

Machine learning: PAC learning

Un’applicazione (teoretica al momento) dell’apprendimento automatizzato è il probably approximately correct learning.  Semplificando per quanto possibile cerchiamo di esplorare quest’interessante ragionamento matematico che poi sarà semplice trasformare in un’algoritmo reale.

Penso che sia bene partire da un caso pratico al quale applicare il ragionamento. Proveremo a sviluppare un’algoritmo in grado di determinare pazienti a rischio cancro analizzando i dati sulle loro tive al fumo. Le variabili in gioco che ci interessano sono due:

  • Quantitá media di sigarette fumate ogni giorno
  • Anni trascorsi da fumatore

Il training set dovrà contenere anche un’altro dato fondamentale: un valore booleano che indica se il paziente é o è stato affetto da cancro. Ma come stabilire se un’algoritmo è efficace o meno?

Il nostro problema è PAC learnable se esiste un’ipotesi h che ha un’alta probabilitá di prevedere il rischio cancro con un basso margine di errore basandosi sui due parametri descritti. Matematicamente parlando alto e  basso non significa praticamente nulla quindi chiariamo il concetto trasformandolo in una formula.

 

 

Ok, in realtà per arrivare a questa conclusione abbiamo semplificato parecchio ma l’idea di base del PAC learning non è troppo articolata. Praticamente qualsiasi insieme finito è PAC learnable a patto di avere un training set sufficientemente articolato che contenga tutti i casi necessari. Ora però abbiamo bisogno di pratica . . . dal prossimo articolo sul Machine Learning metteremo le mani al codice. Rispolvera il tuo python.

Machine Learning: quanto può scoprire su di me?

machine learning e privacy

Il funzionamento delle macchine ad apprendimento automatico è molto distante dai classici paradigmi di programmazione a cui siamo abituati, decisioni e risultati non sono frutto di una logica predefinita ma di funzioni elaborate in autonomia. La conseguenza di questo semplice assunto è che non possiamo sapere esattamente come verranno prese alcune decisioni e come verranno calcolati alcuni risultati.

QUANTO CI CONOSCONO LE MACCHINE?
Gli algoritmi di machine learning funzionano davvero bene e hanno a disposizione un’enorme quantità di dati che noi stessi produciamo continuamente interagendo con la rete e con gli smart device. In molti casi la quantità di informazioni che una macchina può interpolare da questi dati va oltre le nostre aspettative.

Sapevi che sono stati elaborati algoritmi in grado di prevedere la possibilità che una persona cada in depressione analizzando dati generati dalle interazioni online? Una previsione che forse nemmeno un’amico sarebbe in grado di fare con la stessa accuratezza, una possibilità che si farebbe fatica ad ammettere anche a se stessi.

COME VENGONO USATE QUESTE ANALISI?   
Questo è stato solo un’esempio, ma ci sono una grande quantità di informazioni sensibili che possono essere usate per advertising mirato o scelte aziendali di tipo diverso. Immaginiamo una situazione: cosa succede se un’azienda usa la previsione di una macchina sulla probabilità che un candidato possa soffrire di depressione in futuro per decidere chi verrà assunto e chi no?

Quando sono in gioco implicazioni etiche l’utilizzo di algoritmi di machine learning per coadiuvare processi decisionali delicati diventa una questione complessa. Non bisogna tenere conto solo della loro efficienza o della loro accuratezza, diventa importante stabilire le conseguenze sul piano morale di un’eventuale valutazione errata.

Le domande che mi hanno fatto scrivere quest’articolo penso siano il modo migliore per concluderlo:  qual’è il limite invalicabile per l’utilizzo del machine learning? Come stabilire quali decisioni possono essere delegate ad un’algoritmo?

 

 

 

Machine learning overfitting: quando è troppo, è troppo.

 

Ma se l’identificazione del modello venisse alterata da un rumore che deriva dall’eccesso di correlazioni ricavate dai training data? In questo caso si parla di overfitting ovvero . . . quando è troppo è troppo.

Quando si va in overfitting?
Se l’algoritmo “memorizza” i dati invece di analizzarli per trovare la funzione che generalizza l’andamento dei training data.  Questo significa che la radice di questo problema non è da ricercare nella quantità/qualità dei training data ma nel modo in cui l’algoritmo è chiamato a studiarli.

Cosa succede quando si va in overfitting?
La macchina non impara ad analizzare correttamente gli input, è poco efficiente e in caso di modelli complessi gli output risultanti possono allontanarsi molto dalla realtà.

Come risolvere il problema?
Esistono diverse tecniche per generalizzare i risultati dell’elaborazione dell’algoritmo evitando così l’overfitting. Alcuni esempi sono la distribuzione di probabilità a priori, la probabilità bayesiana applicata ai parametri, o la convalida incrociata. Ne riparleremo.

 

Pagare con lo smartphone diventa semplice

VodafonePay

Il mio quotidiano è sempre più smartphone centrico e il tuo? Una delle cose in cui nel bel paese siamo parecchio indietro è il pagamento via mobile: ancora si fa molta fatica a completare le microtransazioni anche con una semplice carta, figurarsi un pagamento tramite smartphone.

Vodafone prova a cambiare le cose con un nuovo servizio: Vodafone Pay.
Grazie alla SIM NFC con Vodafone Pay è possibile pagare in modo semplice, pratico e sicuro: basterà scaricare l’app Vodafone Wallet, collegare una MasterCard e avvicinare lo smartphone al POS: semplice vero?

Da Vodafone Wallet è anche possibile monitorare tutte le transazioni. Non serve un POS particolare, basta il classico device NFC che è già presente nella maggior parte degli esercizi commerciali dove acquistiamo.

Parlando di sicurezza invece c’è da dire che le informazioni sensibili non sono salvate nel dispositivo ma direttamente sulla SIM, per renderli quanto più inaccessibili possibile. In caso di perdita/smarrimento della scheda il servizio può essere disabilitato immediatamente chiamando un numero verde e la cosa interessante è che non verranno bloccate le carte fisiche ma solo il servizio Vodafone Pay.

Verso il futuro ci si va un passo alla volta!

#easypay #easylife #VodafonePay
Buzzoole

Machine Learning: come minimizzare il rischio di errore

A questo punto per continuare a parlare con profitto di Machine Learning bisogna passare dalle argomentazioni alla strumentazione matematico-statistica necessaria. Abbiamo già visto qui le tipologie di machine learning implementabili. Qui invece è dove abbiamo visto le potenzialità del machine learning passivo.

Sappiamo che si impara sbagliando e questo vale anche per le macchine, il compito del nostro codice sarò minimizzare il rischio di errore trovando la funzione che meglio rappresenta la relazione tra input e output  dei training set. Il principio che seguiremo per ottenere questo risultato da qui in avanti lo chiameremo ERM che sta per Empirical Risk Minimization.

Il training set che abbiamo a disposizione possiamo definirlo così:
training set machine learning

 

L’obiettivo è quello di analizzare questi dati per trovare una funzione che si avvicini alla distribuzione originale
distribuzione originale machine learning

 

Nel caso ipotetico in cui conoscessimo già questa distribuzione (e quindi la nostra analisi sarebbe inutile) potremmo individuare facilmente il rischio associato all’ipotesi h ricavata dall’algoritmo
rischio associato all'ipotesi - machine learning

 

 

In un caso reale però questa formula è impossibile da risolvere perché non abbiamo a disposizione la distribuzione originale P. In questo caso invece di valutare il rischio reale possiamo valutare il rischio empirico
rischio associato all'ipotesi - machine learning
E cosa possiamo farcene di tutto questo? Semplice . . . arriviamo al principio dell’ERM che ci indica uno degli obiettivi primari da raggiungere, ovvero portare il rischio empirico al valore più basso possibile. Tutto questo si traduce formalmente così:
ERM - machine learning

 

Esiste anche un parametro indispensabile per valutare l’accuratezza dei risultati . . . al prossimo post!