Machine learning con Python
Cosa non è il machine learning
Prima di parlare di cosa sia il Machine Learning, chiariamo cosa non è:
- Un algoritmo che su base di informazioni specifiche agisce:
immaginiamo di avere un negozio che vende migliaia di prodotti al mese, e che la maggior parte
del fatturato venga da un numero limitato di acquisti. Si potrebbe classificare gli acquisti di
dimensione (x) volte l’acquisto medio, per poi studiarli per capire cosa abbia portato ad essi
- Un algoritmo che sulla base delle informazioni, reagisce in modo diverso in base ai diversi input,
date regole specifiche precedentemente assegnate:
Immaginiamo di creare un algoritmo sui mercati e di dover testare una strategia di acquisto long-
term sul Nasdaq. Mettiamo che stiamo cercando di testare una strategia dove ogni volta che il
prezzo superi la 2ª deviazione del prezzo in negativo (per chi non è comune al settore lo
potremmo semplificare come un movimento insolito del prezzo verso il basso) si acquisti.
Potremmo usare come etichetta il raggiungimento della seconda deviazione da parte del prezzo, e
impostare un acquisto proporzionale alla “discesa” del prezzo.
1-80
I tre tipi di machine learning
Quando ci riferiamo al Machine Learning, necessitiamo di conoscere i 3 macro tipi di machine
learning:
1) apprendimento con supervisione
2) apprendimento senza supervisione
3) reinforcement learing
1 – Apprendimento con supervisione:
Lo scopo nell’apprendimento con supervisione, è quello di istruire un modello, partendo da dati di
addestramento etichettati, per riconoscere dati futuri mai visti prima.
Esempio: Date migliaia di mail, che noi etichettiamo come spam o non spam, il sistema cercherà dei
pattern tra mail e etichetta, e cercherà delle correlazioni tra i 2, cercando di classificare i nuovi dati (in
questo caso le nuove mail. Ancora immaginiamo di dare 1000 foto di frutta come input, classificandole con
le etichette come: ”mele”, “pere”, ecc.., cercherà dei pattern tra i dati e le rispettive etichette, in tal modo
da riconoscere in base a determinate caratteristiche, di che frutto si tratti.
Il lavoro del modello è quindi imparare la relazione tra input (dato grezzo) e output (etichette)
2 – Apprendimento senza supervisione:
Lo scopo nell’apprendimento senza supervisione, è quello di istruire un modello che cerchi pattern o
strutture nascoste tra i dati
Esempio: Date informazioni su clienti, come età, spese e preferenze, il modello potrà creare cluster di
clienti con comportamenti simili per poi fare campagne marketing mirate (Giovani con interessi per
tecnologia, adulti che comprano alimentari online ecc…). Ancora, prendendo le stesse 1000 immagini di
frutta usate in precedenza, questa volta non etichettate, il modello organizzerà le immagini in gruppi simili
in base a caratteristiche visive (forma colore ecc), trovando pattern che permetteranno di distinguere
quale frutto sia quale.
3 – Reinforcement learning:
Un altro tipo di machine learing è il reinforcement learing, qui l’obbiettivo è di sviluppare un sistema
che migliora le proprie interazioni in base alle interazioni con l’ambiente. A ogni stato sarà attribuita
una ricompensa positiva o negativa, che aiuterà a determinare il tipo di comportamento necessario.
Esempio: Immaginiamo di utilizzare un modello che ci aiuti nel creare gli script per dei video da postare
nei social media. Una volta pubblicati i video, potremmo immaginare di inserire i risultati nel modello,
cosi che capisca cosa sta funzionando di più o di meno, e cosa ottenga un determinato tipo di risultati e
cosa no. Un altro esempio può essere una partita a scacchi, dove determinate mosse danno più o meno
possibilità di vittoria ecc…
Il raggruppamento che viene fatto dai modelli viene chiamato Clustering:
Il clustering è una tecnica di analisi esplorativa dei dati che ci consente di organizzare una massa di
informazioni in sottogruppi significativi, i cluster, senza alcuna precedente conoscenza della loro
appartenenza ai gruppi. Questo è particolarmente utile nel marketing per raggruppare i
consumatori in base ai loro interessi, con lo scopo di sviluppare campagne specifiche di Marketing.
Come vengono mantenuti i dati dentro i database ML:
- Un dataset, rappresenta una raccolta di informazioni, che viene suddiviso in caratteristiche (le
attribuzioni, misurazioni, le dimensioni)
- Le informazioni sono generalmente raccolte in Matrici, dove il numero di righe sono i campioni, e
il numero di colonne sono le caratteristiche. Vedi immagine sotto
Fasi di una costruzione di sistemi Machine Learning
1) Pre elaborazione/uniformazione dei dati: raramente i dati grezzi sono disponibili nel
formato necessario per permettere ad un algoritmo di apprendimento di operare in modo
ottimale, bisognerà quindi rimuovere se necessario gli spazi vuoti, eseguire One-hot
encoding dove necessario (una matrice può leggere solo numeri, quindi se ho una tabella
con ad esempio località geografiche non potrà esserci scritta ogni singola località, ma dovrà
essere trasformata in “versione numerica), qua ne vediamo un semplice esempio:
Città Torino Firenze Roma
Torino 1 0 0
Torino 1 0 0
Firenze 0 1 0
Altro problema da affrontare in pre-elaborazine sono i dati di diverso calibro. Immaginiamo
di avere come categorie nella stessa raccolta dati “età” e “salario annuale”. Quando il
modello calcola i dati per esempio per “fare predizioni” come si fa nei modelli di
apprendimento con supervisione, il valore dei dati come in questo caso il reddito,
renderebbe invisibili i dati minori come età (immaginiamo debba fare delle medie per
calcolare dei valori per ogni caso esaminato). Bisognerà quindi con delle formule apposite
standardizzare il valore perché ogni colonna pesi in modo proporzionato al calcolo e perché
e varie categorie siano numericamente comparabili.
(nel caso dell’età e del salario, al posto di avere valori come 50 e 100.000 avremo qualcosa
come “50” e “2,3 “dove “2,3 potrebbe essere la proporzione con un salario medio
2) Addestramento e scelta di un modello predittivo: Dato che non tutti i modelli devono
risolvere lo stesso tipo di problemi, sarà necessario addestrarlo rispetto uno specifico
problema. Possiamo mettere in relazione questo concetto a un detto popolare “suppongo
sia normale avendo a disposizione solo un martello, trattare ogni cosa come un chiodo”
(Abraham Maslow, 1966). Sarà necessario quindi confrontare differenti algoritmi col fine di
trovare l’algoritmo che offre il comportamento migliore.
3) Misurazione dell’errore e predizioni su istanze mai viste: Per costruire un modello
predittivo si parte da dati puliti e numerici, trasformati in una matrice equilibrata; si sceglie
la forma del modello (lineare, ad albero, rete, ecc.), si definisce come misurare l’errore
(cosa definiamo come giusto e cosa come sbagliato), e si ottimizzano i parametri affinché
l’errore sia minimo. Durante l’addestramento si controlla che il modello non impari solo i
dati visti, ma che riesca a operare anche su dati nuovi (overfitting) e, confrontando diverse
opzioni, si sceglie quello che funziona meglio sui dati nuovi, pronto per fare predizioni
affidabili.
Neuroni Artificiali
Un neurone artificiale è un piccolo calcolatore che prende dei numeri in input e produce un
numero in output. Si ispira vagamente ai neuroni biologici, ma in realtà è solo matematica.
Ogni input ha un “peso” [w] che dice quanto è importante.
Esempio: se il neurone riceve Età e Reddito, potrebbe pesare di più il Reddito se è più rilevante, un
esempio potrebbe essere: input1×peso1 + input2×peso2 + …
Il Perceptron è un tipo di neurone artificiale semplice, inventato da Frank Rosenblatt negli anni ’50.
Questo è usato per classificare i dati in due categorie (ad esempio “sì” o “no”, “rosso” o “blu”), e
attualmente è la base delle reti neurali moderne, anche se molto più semplice.
Provando a dividere il funzionamento a fasi uscirebbe una cosa di questo tipo:
1️) Il perceptron riceve diversi numeri come informazioni in ingresso. Ogni numero rappresenta
una caratteristica del problema. Ad esempio, se vuoi decidere se portare l’ombrello, gli input
potrebbero essere: “probabilità di pioggia” e “nuvolosità”.
2️) Dare peso agli input. Non tutti gli input sono uguali. Il perceptron assegna un peso a ciascun
input, cioè quanto quell’informazione conta nella decisione. Più il peso è grande, più
quell’informazione “spinge” la decisione.
Ad esempio, la probabilità di pioggia potrebbe avere peso alto, la nuvolosità un po’ meno.
3️) Il perceptron fa una somma di tutti gli input moltiplicati per i loro pesi, e aggiunge una sorta di
“spinta extra” chiamata bias. Questo totale indica quanto il perceptron è “convinto” di dire sì o no.
Poi confronta questo totale con una soglia:
Se supera la soglia → output = 1 (ad esempio: “porto l’ombrello”)
Se non supera la soglia → output = 0 (“non lo porto”)
In altre parole, decide come una bilancia: pesa tutto, somma, e decide se l’equilibrio pende da una
parte o dall’altra.
4) imparare dagli errori
Se il perceptron sbaglia la decisione: Guarda quanto si è sbagliato
Aggiusta i pesi degli input in modo che la prossima volta possa fare meglio
Ripete questo processo molte volte con dati diversi finché non impara a classificare correttamente
tutti i casi se possibile.
È da notare che il perceptron può risolvere solo problemi lineari, cioè quelli che se posti
graficamente è possibile tracciare una linea che divide le due categorie, come nella seconda foto.
Implementazione di un algoritmo di apprendimento perceptron in Python
s