Buongiorno!
Tenuto presente che sono le 19:47…
Buonasera!
Dopo 1512 ore di assenza, precise come l’ora di un pendolo su una barca, siamo finalmente tornati!
In questo lungo lasso temporale è successo di tutto. Viaggi tra Milano e Torino. Multe. Piogge. Grigliate. Corsi sul machine learning avanzati. Uccisioni di zanzare, mosche e pappataci. Insomma la routine.
Oggi, volendo partire in modo soft, parliamo di una tecnica propria della statistica, che quindi torna particolarmente utile anche per noi AADS (Ambiziosi Aspiranti Data Scientist) o A2DS.
Standardization: a standardize normal distribution
Potrei fornire fin da subuto una definizione di standardizzazione.
Ma dal momento che siamo anticonformisti, procediamo col capirne il signfiicato in via intuitiva e solo in un secondo momento assimilare, facendo nostre, quelle due righe che ci rendono fighi ai nostri amici.
Perché la standardizzazione ci piace
Ogni qual volta è necessario comparare features i cui valori hanno unità o scale differenti, ecco che abbiamo un problema. Sempre che tu non riesca a processare dati della serie supercoputer spostati proprio.
Facciamo un esempio.
Andrea, e la sua ragazza Chiara, superano entrambi il test di ammissione per entrare nelle facoltà universitarie dei loro sogni.
Andrea totalizza 552 punti, in un test la cui media punti aritmetica è di 502, mentre Chiara 82, in un test con media aritmetica di 75.
Entrambi sostengono di aver avuto una performance migliore, ma chi ha realmente ragione?
Per rispondere alla domanda, noi AADS chiediamo alle Università qualche dato in più sui test: lo scarto tipo (12 e 127) e il numero di test effettuati (15678).
Configuriamo quindi il nostro problema come segue:
Test_1 : (media) μ=75, (scarto tipo) σ=12, n=15678 Test_2 : (media) μ=502, (scarto tipo) σ=127, n= 15678
E tracciamo due semplici istrogrammi:
Perfetto. Non si capisce una cipolla.
Noi però abbiamo un’arma segreta: la standardizzazione.
Applichiamo questo processo a entrambi i test e otteniamo:
Mentre ad una prima vista potrebbe sembrare che la standardizzazione non sia servita ad un c…..eppo, un occhio più attento avrà certamente notato alcune particolarità.
Prendendo un singolo dato infatti:
siamo in grado di ottenere lo z-score (o punti zeta) di Chiara e Andrea, in pratica il loro punteggio standardizzato:
Chiara: 0.50 Andrea: 0.40
Possiamo quindi concludere che sia Chiara ad avere ragione.
La definizione di standardizzazione
Per standardizzazione (in inglese, Z-score normalization o standardization) si suole riferirsi ad un procedimento statistico di manipolazione dei dati che, nel caso di un dataset, modifica i valori di una o più features affinché abbiano le proprietà di una distribuzione Gaussiana con μ=0 e σ=1, leggasi “media zero e scarto tipo uno”.
Ora lo scarto tipo (o scarto quadratico medio), è quello che in tutto il mondo chiamano deviazione standard (standard deviation, std). Noi italiani siamo più fighi.
Riferita ad una variabile casuale, ne indica la dispersione attorno ad un indice di posizione quale ad esempio la media aritmetica.
Una distribuzione Gaussiana, o normale, è una particolare distribuzione associata alle variabili casuali.
Per il momento non entriamo troppo nel merito del discorso. Ci basta sapere che una distribuzione di questo tipo è spesso detta ‘a campana’ o bell distribution, essendo facilmente riconoscibile proprio dal suo aspetto.
Gettate le basi di questo sofisticato discorso, capiamo assieme quando una simile trasformazione torna utile.
Standardization and Machine Learning
La ricetta di un machine learning con i fiocchi è una sola:
- algoritmi
- potenza di calcolo (q.ba)
- dati da analizzare+
Alcuni algoritmi sono schizzinosi e pretendono che i dati da analizzare siano stati processati secondo alcune regole.
Questi sono gli algorimti/campi di machine learning che apprezzano la standardizzazione delle features:
- K-nearest neighbors con misura della distanza euclidea
- Logistic Regression, SVM, perceptrons, Neural Networks
- K-means
Al contrario, ci sono algoritmi per cui la standardizzazione ne migliora le performance, anche se non è strettamente necessaria al loro funzionamento. Di questi, vanno tenuti a mente:
- Naive Bayes
- Decisiom Trees
- Random Forest (Ensemble Decision Trees)
Standardizzazione in Python
Esistono diversi modi per applicare al standardizzazione in Python. In due righe è possibile creare una semplice funzione:
Per soddisfare le dipendenze di questo codice è sufficiente fare un’import di:
import numpy as np
La prima funzione prende come parametro una feature e ne effettua la standardizzazione, applicando la formula base.
La seconda funzione è un bonus tutto per te!
Calcola lo z-score che quindi ci consente di paragonare il valore di due features standardizzate.
Per approfondimenti: