VIDEO: cos’è il Machine Learning?

In questo bel video introduttivo prodotto da Syncfusion (in inglese) viene ben introdotto il tema “Machine Learning”. Il video è introduttivo e dura pochi minuti, ma è ben fatto.

Il video fa parte di una serie, prodotta da Syncfusion, chiamata “Data Driven“. Questa serie è stata prodotta per stimolare l’interesse sulla piattaforma software Big Data prodotta dalla stessa azienda. Citando il sito:

The Syncfusion Big Data Platform is the first and the only complete Hadoop distribution designed for Windows. Develop on Windows using familiar tools, and deploy on Windows.

È disponibile anche una Community Edition che include questa piattaforma gratuitamente! Credo che un giretto ce lo farò e voi?

Corso di Machine Learning a Bologna

Il 10 ottobre 2016, a Bologna, presso la sede di IConsulting si terrà un corso di “Machine Learning and Optimization for predictive and prescriptive data analytics“.

Il corso, tenuto dalla Prof.ssa Michela Milano, promette di presentare gli “strumenti di apprendimento automatico (regressivi, di classificazione e di clustering) come reti neurali profonde, alberi decisionali e random forests, strumenti di analisi e predizione di serie temporali e strumenti di ottimizzazione combinatoria, deterministica e probabilistica.”

Verranno portati esempi e case study e, in particolare, verrà analizzato il caso della manutenzione predittiva, applicazione molto interessante per questo genere di materia.

Il corso dura un giorno, dalle 9.30 alle 17.30, ed ha un costo, scontato fino al 23 settembre, di 390€ + IVA.

Per maggiori informazioni e iscrizioni in Early Bird, seguire per BetterDecisions.it

561c580ddd089585768b46be-1499

Può un computer diventare conscio?

Da tempo gli scienziati (o, forse, in questo caso bisognerebbe riguardarli come filosofi!) si stanno interrogando su questo punto. Ho scovato un interessantissimo articolo, che rimanda a sua volta al punto di vista di Scott Aaronson, docente al MIT.

L’intervento del Prof. Aaronson inizia così:

I should start by explaining that, in the circles where I hang out—computer scientists, software developers, AI and machine learning researchers, etc.—the default answer to the title question would be “obviously yes.

Ecco l’intervento completo. Da leggere!

Print

I 5 algoritmi di Machine Learning più utilizzati

Prendendo spunto da un recente articolo, elenco in rassegna i 5 algoritmi più utilizzati nell’ambito del machine learning, secondo l’autore. È importante conoscere e “sporcarsi le mani” con questi algoritmi, poiché si presume che nel prossimo futuro, oltre il 25% degli attuali lavori sarà soppiantato da algoritmi di machine learning.

Eccoli, riassunti in pochissime parole. Per una trattazione più dettagliata, vi rimando all’articolo originale in lingua inglese.

Naïve Bayes Classifier Algorithm

Algoritmo di classificazione di contenuti testuali. Un filtro antispam, ad esempio, fa un uso di un classificatore che, al suo interno, può implementare questo algoritmo. Attraverso questo, sarà in grado di determinare se una email in ingresso sia o meno spam.

Questo algoritmo viene anche utilizzato per la Sentiment Analysis (es. dai tweet pubblicati, capire se siano “positivi” oppure “negativi”) o anche per la classificazione automatica dei documenti (es. Google News).

K-Means Clustering Algorithm

Questo è un algoritmo iterativo, che si occupa di suddividere una popolazione in k gruppi determinati a priori. Ad esempio, una ricerca effettuata su un motore come Google, può ritornare risultati affini alla parola chiave inserita, ma non necessariamente legati ad un unico argomento. In questo caso, quindi, è necessario suddividere i risultati in k gruppi diversi, in modo che tutti quelli che appartengono ad un gruppo siano correlati.

Support Vector Machine (SVM)

Algoritmo di apprendimento supervisionato utilizzato sia per problemi di classificazione che di regressione. L’algoritmo ha come risultato quello di dividere i dati di apprendimento in classi, in modo tale che la distanza tra queste sia la massima possibile.

Viene utilizzato per la previsione degli andamenti borsistici, ad esempio comparando l’andamento di un titolo rispetto all’andamento globale degli altri titoli nello stesso settore.

Apriori Machine Learning Algorithm

Questo algoritmo di apprendimento non supervisionato, genera delle regole di associazione a partire da un insieme di dati. Queste regole sono nella forma “se… allora” (if… then). Ad esempio, questo algoritmo potrebbe determinare che chi ha comprato un iPad, ha acquistato poi una cover.

Questo algoritmo, quindi, può essere utilizzato per suggerire a potenziali clienti altri prodotti da acquistare, sulla base degli acquisti effettuati da altri utenti precedentemente.

Regressione lineare

Già trattata in questo articolo, la regressione lineare permette di stimare il valore di una variabile dipendente da tante altre. Può essere utile per stimare le vendite, in funzione del periodo dell’anno.

 

Ovviamente gli algoritmi sono numerosi e con prestazioni e applicazioni molto diverse, ma vi ricordo che prima di tutto vengono i dati! Se non avete quelli e se non sapete come maneggiarli, non ci sarà algoritmo che vi potrà dare le risposte che cercate!

Iniziate, quindi, a raccogliere ciò che riuscite: i dati sono l’oro del futuro!

A presto!
Marco

60d9d48a-ef90-4032-9336-475eb5b179b1

Un po’ di gergo del Machine Learning

Proprio oggi mi sono imbattuto in un interessantissimo articolo su Linkedin Pulse che aveva come argomento il gergo che viene solitamente utilizzato nell’ambito del machine learning.

Trovo necessario che, chiunque decida di avvicinarsi a questa branca interessantissima della matematica/informatica, debba necessariamente avere padronanza del linguaggio tecnico per poter comprendere a fondo la vastità del materiale disponibile in rete. Mi permetto, dunque, di prendere spunto da quell’articolo e “farlo mio”, traducendo in italiano la prima parte di vocabolario che l’autore, , ha deciso di illustrare. Iniziamo!

Distribuzione (Distribution): un modo per spiegare come i dati sono distribuiti in funzione del tempo, dei clienti, altro…

Modello (Model): una struttura matematica che possiede informazioni su ciò che è contenuto in un insieme di dati storici e come sono correlati fra di loro. Un algoritmo si occupa di creare questo modello analizzando questo insieme di dati storici.

Addestramento (Training): il processo di creazione di un modello, a partire da un insieme di dati storici.

Predizione (Prediction): gli algoritmi valutano i dati nuovi facendo uso del modello precedentemente addestrato e generano un “punteggio”/”valore” o una “categoria” (es. cane, gatto). Questo punteggio/valore/categoria è la predizione effettuata sulla base dei nuovi dati.

Classificazione (Classification): il processo che si occupa di associare ai dati in ingresso una fra 2 o più categorie utilizzando del modello addestrato.

Classificatore (Classifier): un algoritmo che effettua una classificazione

Regressione (Regression): l’operazione che cerca di associare una funzione matematica (tipicamente una retta) a partire da un insieme di dati.

Sequenza (Sequence): dati ordinati temporalmente come, ad esempio, log temporali, transazioni economiche ecc. Potrebbero essere importanti, oltre al contenuto, anche la sequenza degli eventi!

Lista di parole (Bag of words): dati non ordinati, ovvero dati il cui ordine non ha importanza.

Caratteristiche (Features): colonne di dati, come “età”, “altezza”, “codice postale”, ecc.

Categorica / Numerica / Testuale / Booleana: tipo di dato contenuto in una determinata caratteristica. Se è categorica, la caratteristica può assumere un valore in un determinato insieme (es. la caratteristica “giorno della settimana” può assumere uno fra i valori “Lunedì”, “Martedì”, “Mercoledì”, “Giovedì”, “Venerdì”, “Sabato” e “Domenica”), se è numerica può assumere un numero reale, intero o altro, se è testuale può essere una sequenza qualunque di caratteri, mentre se è booleana può assumere valore “vero” o “falso”.

Riduzione della dimenzione (Dimension reduction): processo di rimozione di caratteristiche che non accrescono il valore del nostro modello. Tale processo permette di ottenere un addestramento e previsioni più rapide e, magari, addirittura migliori!

 

wallpaper-2870969

Reti neurali: cosa sono?

Abbiamo visto come alcuni problemi di machine learning non siano tanto volti a trovare come soluzione una funzione (es. stima del prezzo di una casa), ma ad associare una fra un insieme di classi. Questi problemi vengono genericamente detti problemi di classificazione.

Supponiamo, ad esempio, di voler scrivere un software in grado di riconoscere un numero scritto a mano: quello che il nostro software deve fare è prendere l’immagine (supponiamo che sia un’immagine da 50×50 pixel) e “capire” che cosa ci sia scritto dentro, ovvero associare una delle 10 classi numeriche (0, 1, 2, 3, 4, 5, 6, 7, 8 o 9).

Per un software, un’immagine non è altro che una matrice di numeri, nel nostro caso una matrice 50×50, ovvero 2.500 numeri per descrivere un’immagine. È possibile immaginare come risolvere un problema di questo tipo con le tecniche, ad esempio, di regressione logistica, non sia affatto semplice. La nostra funzione ipotesi è funzione di tantissimi parametri diversi!

Il cervello umano

Negli anni ’80-’90 un primo approccio teorico all’intelligenza artificiale è stato, appunto, quello delle reti neurali. Questo approccio tenta di replicare il funzionamento del meraviglioso cervello umano, una incredibile “macchina biologica” in grado di apprendere e migliorare continuamente (in certe persone, purtroppo, pare non funzionare ahimè così tanto bene…).

Il cervello umano, per descriverlo in maniera molto approssimativa, è formato da cellule denominate neuroni. Tali cellule hanno dei “sensori”, che ricevono degli stimoli, chiamati dendriti. Il neurone riceve gli stimoli captati dai dendriti, esegue una qualche operazione (di tipo biochimico) e produce un risultato che viene incanalato su un conduttore chiamato assone.

Rappresentazione di un neurone
Vengono mostrati i dendriti (dendrites), il neurone (cell body + nucleus) e l’assone (axon). fonte: leavingbio.net

I neuroni sono connessi tra di loro attraverso le sinapsi, ovvero la parte terminali dell’assone. L’insieme dei neuroni costituisce, appunto, una rete in grado di trasmettere messaggi elettrici. Ogni neurone, quindi, esegue una operazione e passa il risultato di questa operazione al neurone successivo che utilizzerà, appunto, questo e altri risultati provenienti da altri neuroni.

Questa catena permette di risolvere problemi complessi sostanzialmente suddividendoli in problemi più piccoli. È il tipico approccio del divide et impera.

Le reti neurali

L’approccio delle reti neurali è, sostanzialmente, il medesimo. I neuroni sono sostituiti da degli operatori matematici che eseguono calcoli in funzione degli input precedentemente ricevuti e passano il risultato agli operatori successivi, fino a giungere all’ultimo stadio, ovvero il livello (o strato) di uscita.

Le reti neurali sono tornate in voga nei recenti anni in quanto la potenza di calcolo richiesta per poterle far funzionare è diventata alla portata di più o meno tutti, aprendo scenari veramente incredibili.

220px-neural_network_example_it-svg
fonte: wikipedia.org

L’aspetto interessante delle reti neurali è che il funzionamento interno non è stabilito a priori, ma viene sostanzialmente autodeterminato durante la fase di addestramento pilotata dai dati di apprendimento. Questa fase di addestramento è solitamente lunga e dispendiosa, in termini di potenza di calcolo richiesta.

Il “contro” è che la rete neurale non è in grado di descriverci perché funziona così. Sapere che ha imparato a funzionare così è l’unica risposta che possiamo darci.

Infine vi segnalo che, su Microsoft Azure ML, le reti neurali sono ovviamente disponibili all’uso.

Kaggle: la comunità degli analisti di dati

Per puro caso mi sono imbattuto in kaggle.com, la comunità online di data scientist più grande al mondo.

Il bello di questa comunità è che vengono proposti problemi di analisi dati e i partecipanti cercano di trovare le soluzioni migliori. I migliori, poi, vengono invitati a partecipare a competizioni speciali, indette dalle aziende più blasonate del mondo!

Ecco la geolocalizzazione degli utenti:

about-submissions

Io mi sono già iscritto! E voi?

medical-563427_1280

Classificazione: come perdere il lavoro in 5 minuti usando la regressione lineare

Gli algoritmi di classificazione non hanno come obiettivo quello di individuare una funzione che ci permetta di stimare un valore continuo di una variabile dipendente da n altre variabili indipendenti, ma quello di stimare un valore di verità (vero / falso) o di appartenenza ad una determinata classe.

Alcuni esempi di problemi di classificazione:

  • determinare se una email è o meno spam
  • determinare se una transazione è fraudolenta o meno
  • determinare la malignità di un tumore

Le classi in cui vogliamo “inserire” la nostra variabile possono essere due (problemi di classificazione binaria), oppure maggiori di due (problemi di classificazione multipla).

Regressione lineare applicata a problemi di classificazione: una brutta idea

È possibile mostrare come, generalmente, non sia una buona idea quella di applicare una regressione lineare ai problemi di classificazione.

Vediamo subito un esempio che renderà chiaro questo fatto con un esempio.
Disclaimer: poiché il tema dell’esempio è piuttosto brutto, ho preferito adottare un linguaggio scanzonato. Non me ne vogliano le persone che hanno passato o passano veramente situazioni simili: non è mia intenzione sminuire la criticità del tema tumorale.

Il dottor Fiducioso, primario dell’ospedale di Sanilandia, ci contatta perché ha sentito parlare della nostra forte esperienza sul machine learning e ci chiede di sviluppare un software che gli permetta di identificare facilmente se un tumore è “benigno” o “maligno”. Il dottore ci comunica che l’appartenenza a una o all’altra classe è dipendente solamente da una variabile, facilmente misurabile, ovvero la dimensione del tumore. Stiamo affrontando un caso di classificazione binaria (benigno / maligno) monovariata (dipendente dalla sola dimensione del tumore).
Dopo qualche tempo trascorso a raccogliere i dati in ospedale, disponiamo del seguente set di informazioni iniziale:

Dimensione (cm) Classe
1 benigno
7 maligno
3 benigno
1.5 benigno
2.5 benigno
7.2 maligno

Per renderci conto meglio del nostro set, grafichiamo questi dati inserendo, sull’asse delle x, la dimensione in cm, mentre sull’asse delle y un valore pari a 1 se il tumore è maligno o un valore pari a 0 se il tumore è benigno.
Otteniamo questa distribuzione:

tumore1

Ad occhio è ben evidente una “suddivisione” poiché pare proprio che i tumori di dimensione inferiore ai 5 cm siano certamente benigni, mentre superiori a 5 cm siano certamente maligni.

Le nostre competenze, quindi, ci porterebbero a pensare di utilizzare una regressione lineare. Se utilizzassimo la regressione lineare, otterremmo questa retta:

tumore2

Tutto parrebbe funzionare. Potremmo individuare un valore di soglia della stima oltre il quale classifichiamo il nostro tumore come maligno, mentre sotto al quale lo classificheremmo come benigno. Nell’esempio ho mostrato un valore di soglia pari a 0.5.

Ad esempio, prendendo un tumore da 3cm, otterremmo una stima pari a 0.2 che, essendo minore di 0.5, ci permetterebbe di classificarlo come “benigno”. Prendendo un tumore da 6 centimetri, invece, avremmo una stima di oltre 0.7 e quindi lo classificheremmo come “maligno”.

Fieri del nostro operato, implementiamo questa soluzione in un software che consegnamo al dottor Fiducioso: il software prende in ingresso la dimensione del tumore e restituisce al dottore la classificazione che abbiamo determinato secondo l’algoritmo appena descritto.

Tutto pare funzionare bene, fintantoché arriva un nuovo caso, leggermente diverso da quelli che avevamo raccolto fino a quel momento:

Dimensione (cm) Classe
30 maligno

“Perfetto!”, diciamo. Il tumore ha dimensione maggiore dei fatidici 5 centimetri ed è maligno e il software l’ha correttamente diagnosticato come tale. “Il nostro algoritmo funziona alla grande!”. Così decidiamo di inserire questo nuovo valore nel sistema, “d’altronde – pensiamo – è una nuova esperienza che non farà altro che rendere più affidabile le previsioni”.

Comunichiamo al dottor Fiducioso questa nostra nuova versione, con tanto di strette di mano e sorrisi. Il giorno dopo, però, quando ormai stavamo spendendo i soldi appena guadagnati, il dottore ci chiama urgentemente, segnalandoci che il software è impazzito e sta iniziando a diagnosticare come benigni dei tumori che non lo sono per niente. Gravissimo!

Come mai questa figuraccia? Semplice: non abbiamo pensato bene a cosa sia successo alla nostra retta di regressione inserendo quel nuovo dato all’interno del set di apprendimento. Ecco mostrato:

tumore3

Quel nuovo valore ha “sbilanciato” la nostra retta di regressione, cambiandone profondamente la pendenza. Il problema è che questo singolo dato ha fatto sì che tutti i tumori che precedentemente erano diagnosticati come “maligni” (per via del fatto che la stima era superiore alla nostra soglia di 0.5), ora vengono classificati come “benigni”.

La realtà è che prima siamo stati fortunati: la regressione lineare funzionava per puro caso. È bastato un solo valore, un po’ fuori dalla normalità, per sconvolgere tutto e rovinare tutto il nostro operato.

È scontato, a questo punto, che la regressione lineare non sia da usare per i problemi di classificazione (così come è scontato che il Dottor Fiducioso ci abbia immediatamente licenziato, chiedendoci pure indietro i soldi che ci aveva dato – e che noi avevamo già speso).

Regressione logistica

La regressione logistica è, in realtà, l’algoritmo che avremmo dovuto utilizzare per non perdere il nostro posto di lavoro e, ancor più importante, permettere di salvare più vite. Tale algoritmo non ha niente da spartire con la canonica regressione lineare, ma è un algoritmo che ci permette di risolvere problemi di questo tipo, ovvero problemi di classificazione.

A differenza della funzione (normalmente una retta) che ci permetteva di stimare la nostra variabile dipendente nel caso di regressione lineare, ora facciamo uso della cosiddetta funzione logisticasigmoidale. È proprio per via di questa funzione che chiamiamo questo algoritmo “regressione logistica”.

La funzione logistica è una funzione che ha questo andamento:

290px-logistic-curve
Fonte: Wikipedia.org

Come possiamo notare, la variabile dipendente assume valori strettamente compresi tra 0 e 1 che è proprio ciò che serve a noi (nel caso di classificazione binaria).

Nel caso della regressione logistica vogliamo, quindi, che la nostra funzione ipotesi ci dica quale sia la probabilità di appartenenza del nostro elemento ad una particolare classe.
Ovviamente, nel caso di classificazione binaria, la probabilità che l’elemento appartenga alla classe 1 (tumore benigno) sommata alla probabilità che l’elemento appartenga alla classe 2 (tumore maligno) deve sempre e comunque dare 1.

A questo punto, il problema di ottimizzazione da risolvere è identico a quello della regressione lineare, ma ovviamente con una funzione di costo diversa.
Tuttavia questo sarà argomento di un prossimo articolo!

A presto,
Marco

Deep Learning, corso gratuito di Google

Google ha da poco lanciato un corso gratuito sul Deep Learning e ospitato da Udacity, una piattaforma di e-learning che si ritiene talmente forte da rimborsare i propri allievi in caso di mancata assuzione!

Il corso, dalla durata di circa 3 mesi assumendo un impegno di 6 ore alla settimana, è presentato da Google ed in particolare è tenuto da Vincent Vanhoucke, Ph.D. alla Stanford University e ora Principal Research Scientist di Google.

Il corso è considerato di livello avanzato e, si dice che sia richiesto un livello base di comprensione sui temi di apprendimento supervisionato, statistica, algebra lineare e almeno 2 anni di programmazione.

Se riuscirò a frequentarlo, pubblicherò sicuramente qui le mie impressioni!