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!

 

 

Quando il machine learning lo fa meglio

machine learning - macchine stupide
Le macchine sono stupide. Questo è un assioma.

Eppure in alcuni ambiti applicativi con il machine learning si ottengono dei risultati incredibili; matematica e statistica che sfidano la cognizione di un cervello umano trovando link e correlazioni li dove una persona con tutta probabilità non vedrebbe assolutamente nulla.  Quantitativi di dati impossibili da analizzare per qualsiasi team di ricerca tradizionale diventano invece il pane quotidiano degli algoritmi di machine learning.

In molti tipi di analisi l’obiettivo della macchina non è quello  di  cercare nei dati conferma di una teoria, si cerca piuttosto di formularne di nuove basandosi su relazioni causa/effetto che sfuggono alla statistica tradizionale ma possono essere colte da un algoritmo di machine learning ben progettato.

L’approccio migliore per questo tipo di analisi è il machine learning passivo. La macchina non richiede altri input oltre al set di dati iniziali, non ha bisogno di un “istruttore” che indichi se un risultato sia piu’ o meno corretto. Lo scopo proposto è quello di evidenziare relazioni statistiche rilevanti e utilizzarli per trarne conclusioni sulla loro natura.

Un’esempio pratico? L’analisi di dati medici. Un algoritmo di machine learning chiamato ad analizzare cartelle cliniche e referti di migliaia di pazienti può trovare relazioni causa/effetto interessanti che con tutta probabilità sono sfugiti ai medici. Se si rapportano questo genere dati medici a dati genetici complessi l’analisi si fa ancora piu’ interessante e le corrispondenze che ne vengono fuori possono fare la differenza per la ricerca medica in questo ambito.

Ci sono situazioni nelle quali escludendo coscienza e cognizione tradizionale una macchina lo fa meglio!

[ML] Tipologie di Machine Learning

machine Learning - promezio

Tra uno snippet di codice e l’altro un po’ di teoria non può far male quindi oltre ai soliti articoli iniziamo con qualche nozione e qualche esempio pratico in tema machine learning e artificial intelligence; ovvero i temi caldi del momento.

Insegnare ad una macchina ad esaminare dati e trarne conclusioni è uno degli obiettivi più ardui che l’uomo si è proposto. La cognizione/coscienza  nell’intelligenza artificiale può essere considerata marginale (ed è ancora lontana dall’essere realizzata) ma gli algoritmi di analisi analitica degli input con previsioni statistiche sui possibili output è alla base della maggior parte delle tecnologie di intelligenza artificiale oggi in uso.

Machine learning è sinonimo di apprendimento automatico, ovvero si tenta di dare alla macchina la capacità di osservare una serie di dati allo scopo di individuare relazioni e collegamenti utili all’interpretazione degli stessi. In altre parole questo significa che con il giusto algoritmo un computer sarà in grado di analizzare un flusso di dati grezzi e utilizzarli per prendere delle decisionipredire risultati o per estrapolarene informazioni rilevanti.

Qualche applicazione pratica? Riconoscimento della voce, riconoscimento di soggetti o pattern nelle immagini, videogame con personaggi autonomi, sistemi di sicurezza che analizzano grandi quantità di machine data, statistiche in grado di anticipare risultati (sportivi, finanziari, metereologici, ecc.) . . . praticamente campi applicativi infiniti.

Fondamentalmente possiamo distinguere tre diverse tipologie di machine learning che proverò a catalogare nel seguito. Parliamo del supervised learning, dell’unsupervised learning e del reinforcement learning.

 

SUPERVISED LEARNING

L’algoritmo esamina una serie di training data ovvero un vettore di dati in input con relativi output generando una funziona in grado di metterli in relazione e quindi di prevedere i futuri valori di output per input compatibili. Per fare un’esempio pratico proviamo ad immagine uno scenario nel quale bisogna valutare la tipologia di un prodotto. Per semplificare i training case sono soltanto due:

  • Colore uniforme -> prodotto A
  • Colore disomogeneo ->prodotto B

Analizzando i training data l’algoritmo genererà una funzione in grado di riconoscere sia il prodotto A che il prodotto B da un’analisi visiva del colore.

 

UNSUPERVISED LEARNING

L’algoritmo tenta di individuare anomalie, incongruenze o altre strutture statisticamente rilevabili. In questo caso si utilizzano queste rilevazioni come trigger per generare eventi prestabiliti. Come scenario di test immaginiamo un sistema di rilevazione minacce per la sicurezza informatica che analizza il flusso di accessi ad un server. In questo caso su migliaia di dati possono essere individuati anomalie che corrispondono a tentativi di accessi indesiderati o di attacchi mirati a minare la stabilità del servizio.

 

REINFORCEMENT LEARNING

In questo caso l’algoritmo si interfaccia con un sistema in grado di fornire stimoli a seconda delle scelte e delle decisioni che verranno prese nel corso delle elaborazioni. In questo caso non sono necessari training data perché è lo stesso algoritmo a generare i dati che userà per le scelte successive. Anche in questo caso un esempio pratico chiarirà meglio il concetto. Immaginiamo un’aspirapolvere robotizzata che deve orientarsi all’interno della stanza da spazzare. In questo caso l’input proverrà dai sensori di prossimità di cui è dotata mentre l’output atteso è una mappa completa degli ostacoli da evitare e del perimetro della stanza stessa. Ad ogni ostacolo segnalato il robot avrà un’elemento in più per mappare i perimetri dell’ambiente e di conseguenza dopo una serie di ispezioni casuali riuscirà ad ottenere un numero di informazioni utili sufficiente allo scopo.

Sembrano concetti semplici? Spero di si perché questo significa che sono riuscito a fornire una descrizione valida. Naturalmente in ambito applicativo le cose sono più complesse ma . . . questo è un ottimo punto di partenza.

Al TEDxSSC 2016 con GLOBSIT

tedxssc

Tanta pioggia e parecchio freddo a far da cornice ad un TEDx splendidamente organizzato da @NasoLuca e dal suo team alla Scuola Superiore di Catania. Un’esempio di eccellenze tutte siciliane che dimostrano cosa significa davvero innovare per “migliorare” e non soltanto “cambiare” il mondo.

Non voglio fare un riepilogo di tutti gli interventi anche perché riuscire ad essere esaustivi è un’impresa impossibile vista la mole di idee e spunti che l’evento è riuscito a fornire. Comunque ci sono state alcune cose che ho apprezzato più di altre e voglio condividerne tre in particolare

 

#machinelearning
Considerando i progetti ai quali lavoro al momento non potevo non citare per primo l’intervento sulle implicazioni etiche nel #machinelearning. Con il le macchine scelgono e apprendono in un modo che non comprendiamo e controlliamo a pieno. Questo tipo di intelligenza artificiale può fallire in modi che non possiamo prevedere e quindi non possiamo e non dobbiamo affidargli le nostre responsabilità morali.

E se dovesse essere un’algoritmo a decidere chi assumere e chi no? Le macchine possono conoscerci a fondo, catalogando le persone secondo parametri non umani, una catalogazione  crudele. Siamo sicuri di volere un mondo dove una persona valutata da un algoritmo come “a rischio depressione” non venga assunta da nessuna azienda?

E se dovesse essere un’algoritmo a decidere chi muore o chi vive? E’ questo il dilemma etico nell’applicazione del #machinelearning alle armi automatiche sempre più utilizzate anche in scenari con un alta densità di civili. E non è il solo campo applicativo problematico, anche l’algoritmo che controlla un veicolo automatizzato potrebbe trovarsi a decidere se salvare il conducente o investire il pedone. Chi stabilisce cosa dovrà fare?

 

#wikimafia
Mi vergognavo ad essere antimafioso solo una volta l’anno, ogni 23 Maggio. Inizia così l’intervento di @PierpaoloFarina: scrittore, sociologo e fondatore tra le altre di @WikiMafia. Un’altro intervento denso di coraggio, coerenza,  idee e spunti pratici.

Cosa può fare ogni uno di noi per combattere le mafie? Un ragazzino di 17 in 3 mesi ha realizzato la più grande voce al mondo su Maxiprocesso di Palermo. E’ la conoscenza l’arma principale che abbiamo, per fare la differenza basterà fare il proprio dovere e vivere la propria vita alla luce di questa conoscenza.

Ho avuto il piacere di scambiare qualche parola con Pierpaolo subito dopo il suo intervento ed è stato bello vedere che il suo impegno va molto oltre il semplice speak e la sua determinazione traspare da ogni parola e gesto. Chi lotta non può arrendersi se conosce quello che sta lottando e Pierpaolo è riuscito a coinvolgerci nella sua battaglia; anzi, nella nostra battaglia.

 

#bufale
Il 35% degli italiani si informa su facebook e tu . . . pensi prima di cliccare sul tasto condividi? Un viaggio nel mondo delle bufale e dell’informazione farlocca che chiude alla grande il #TEDxSSC. Daniele Virgillito con un’oratoria eccellente ci fa da guida in una giungla sterminata fatta di bufale davvero difficili da distinguere dalla verità.

La responsabilità di verificare le fonti prima di “condividere” è di tutti ma grava soprattutto su chi ha fatto dell’informazione il proprio mestiere. Se a cadere nella trappola delle bufale è anche il giornalista si crea uno scenario nel quale diventa impossibile identificare la realtà, una situazione nella quale gli animi si scaldano per qualcosa che non è mai successo e le opinioni si formano basandosi sul nulla.

 

 

Difficile trovare altrove tanta forza innovatrice e tanta ispirazione . . . il TEDxSSC è promosso quindi speriamo di rivederci alla prossima!

JavaScript Subclass

JavaScript non nasce per rispettare nativamente i paradigmi dell’OOP e questo significa che alcune cose che portebbero essere molto semplici in realta’ non lo sono.

Per creare una sottoclasse che eredita proprieta’ e metodi di una superclasse e’ bene seguire le linee guida di ECMAScript 5.

 

 

Ci sono delle alternative a questo approccio strutturato ma anche se dovessere funzionare con tutta probabilita’ dara’ problemi quando ci sara’ da estendere/modificare il codice.

 

Qui trovi il LIVE CODE su CodePen.

JavaScript Navigator: informazioni sul browser.

Gran parte di quello che conosci di chi usa la tua WebApp o naviga il tuo sito è codificato nell’oggetto Navigator di JavaScript. Tra le tante proprietà ho scelto quelle che ritengo più importanti. Sono tutte elencate, spiegate e illustrate in questo pezzo di codice.

 

Il contenuto di UserAgent è molto completo ma diventa ostico da interpretare. Quando hai bisogno di questi dati utilizza UAParser (faisalman) e diventerà tutto più semplice. Naturalmente è open source.

Per quanto riguarda invece la geolocalizzazione bisogna tener presente il fatto che i browser necessitano dell’autorizzazione dell’utente per permettere ad un determinato sito di accedere ad informazioni sensibili come la posizione geografica. Questo significa che quando proverai la Live Demo CodePen linkata a fine articolo devi attivare questa funzionalità altrimenti vedrai in console soltanto un errore.

 

Trovi il codice con la LIVE DEMO anche su CodePen.