Se hai poca esperienza nell'applicazione di algoritmi di machine learning, avrai scoperto che non richiede alcuna conoscenza preliminare di Statistica.
Tuttavia, conoscere un po' di statistica può essere utile per comprendere il machine learning sia tecnicamente che in modo intuitivo. Un minimo di statistica diventerà necessario quando vorrai iniziare a convalidare e interpretare i tuoi risultati. Dopotutto, dove c'è dato, c'è statistica. Come la matematica è il linguaggio della scienza, la statistica è un linguaggio imprescindibile per Data Science e Machine Learning.
La statistica è un campo della matematica ricco di teorie e risultati. Tuttavia, vari concetti, strumenti, tecniche e notazioni sono stati presi da questo campo per rendere il machine learning ciò che è oggi. Puoi usare metodi statistici descrittivi per trasformare le osservazioni in informazioni utili da comprendere e condividere con gli altri. Puoi usare tecniche statistiche inferenziali per dedurre da piccoli campioni di dati interi domini. Più avanti in questo post, studierai la statistica descrittiva e inferenziale. Quindi, niente panico.
Prima di iniziare, vediamo dieci esempi in cui i metodi statistici sono usati in un progetto applicato di machine learning:
Definizione del problema: richiede analisi esplorativa dei dati e data mining.
Comprensione dei dati: richiede statistiche riassuntive e visualizzazione dei dati.
Pulizia dei dati: richiede rilevamento degli outlier, imputazione e altro.
Selezione dei dati: richiede campionamento dei dati e metodi di feature selection.
Preparazione dei dati: richiede trasformazioni, scaling, encoding e molto altro.
Valutazione del modello: richiede disegno sperimentale e metodi di ricampionamento.
Configurazione del modello: richiede test d'ipotesi e statistiche di stima.
Selezione del modello: richiede test d'ipotesi e statistiche di stima.
Presentazione del modello: richiede statistiche di stima come gli intervalli di confidenza.
Predizioni del modello: richiede statistiche di stima come gli intervalli di previsione.
Questo post ti darà una solida base nelle statistiche essenziali ma necessarie per diventare un buon praticante di machine learning.
In questo post studierai:
Introduzione alla statistica e ai suoi tipi
Statistica per la preparazione dei dati
Statistica per la valutazione dei modelli
Gaussiana e statistiche descrittive
Correlazione tra variabili
Statistica non parametrica
Hai molto da coprire e tutti gli argomenti sono ugualmente importanti. Iniziamo!
Introduzione alla statistica e ai suoi tipi
Vediamo brevemente come definire la statistica in parole semplici.
La statistica è considerata un sottoinsieme della matematica. Riguarda una moltitudine di metodi per lavorare con i dati e usare quei dati per rispondere a molti tipi di domande.
Quando si tratta degli strumenti statistici usati nella pratica, può essere utile dividere la statistica in due grandi gruppi di metodi: statistica descrittiva per riassumere i dati e statistica inferenziale per trarre conclusioni da campioni di dati (Statistics for Machine Learning (7-Day Mini-Course).
Statistica descrittiva: la statistica descrittiva è usata per descrivere le caratteristiche essenziali dei dati in uno studio. Fornisce semplici riassunti sul campione e sulle misure. Insieme a semplici analisi grafiche, costituiscono la base di praticamente ogni analisi quantitativa dei dati. L'infografica qui sotto fornisce un buon riepilogo della statistica descrittiva:
Fonte: IntellSpot
Statistica inferenziale: la statistica inferenziale comprende metodi che aiutano a quantificare proprietà del dominio o della popolazione a partire da un insieme più piccolo di osservazioni ottenute, detto campione. Di seguito un'infografica che descrive in modo efficace la statistica inferenziale:
Fonte: Analytics Vidhya
Nella prossima sezione studierai l'uso della statistica per la preparazione dei dati.
Statistica per la preparazione dei dati
I metodi statistici sono necessari nello sviluppo dei dati di train e test per il tuo modello di machine learning.
Questo include tecniche per:
Rilevamento degli outlier
Imputazione dei valori mancanti
Campionamento dei dati
Scaling dei dati
Codifica delle variabili
Per aiutarti a identificare i metodi da scegliere nello svolgimento di questi compiti è necessaria una conoscenza di base delle distribuzioni dei dati, della statistica descrittiva e della visualizzazione.
Analizziamo brevemente ciascuno dei punti sopra.
Rilevamento degli outlier:
Vediamo prima che cos'è un outlier.
Un outlier è un'osservazione che sembra deviare dalle altre osservazioni del campione. La figura seguente rende la definizione più evidente.
Fonte: MathWorks
Puoi individuare gli outlier nei dati come mostra la figura sopra.
Molti algoritmi di machine learning sono sensibili all'intervallo e alla distribuzione dei valori degli attributi nei dati di input. Gli outlier possono alterare e fuorviare il processo di addestramento, con tempi più lunghi, modelli meno accurati e risultati mediocri.
L'identificazione dei potenziali outlier è fondamentale per i seguenti motivi:
Un outlier potrebbe indicare che i dati sono errati. Ad esempio, i dati potrebbero essere stati codificati in modo non corretto o l'esperimento non è andato a buon fine. Se si determina che un punto anomalo è effettivamente errato, quel valore dovrebbe essere rimosso dall'analisi. Se è possibile correggerlo, questa è un'altra opzione.
In alcuni casi, potrebbe non essere possibile stabilire se un punto anomalo sia un dato errato. Gli outlier potrebbero essere dovuti a variazione casuale o indicare qualcosa di scientificamente interessante. In ogni caso, in genere non vuoi semplicemente eliminare l'osservazione anomala. Tuttavia, se i dati contengono outlier significativi, potresti dover considerare l'uso di tecniche statistiche robuste.
Quindi, gli outlier spesso non sono buoni per i tuoi modelli predittivi (anche se a volte possono essere usati a vantaggio, ma questo esula dallo scopo di questo post). Ti serve il know-how statistico per gestirli in modo efficace.
Imputazione dei valori mancanti:
Molti dataset oggi soffrono del problema dei valori mancanti. Il tuo modello potrebbe non addestrarsi efficacemente se i dati che gli fornisci contengono valori mancanti. Qui vengono in aiuto strumenti e tecniche statistiche.
Molti tendono a scartare le istanze che contengono un valore mancante. Ma non è una buona pratica perché così potresti perdere caratteristiche/rappresentazioni essenziali dei dati. Sebbene esistano metodi avanzati per gestire i valori mancanti, queste sono le tecniche rapide a cui si ricorre: imputazione con la media e imputazione con la mediana.
È fondamentale capire cosa sono media e mediana.
Supponi di avere una caratteristica X1 con questi valori - 13, 18, 13, 14, 13, 16, 14, 21, 13
La media è la solita media aritmetica, quindi sommo e poi divido:
Nota che in questo caso la media non è un valore della lista originale. È un risultato comune. Non dovresti presumere che la media sia uno dei numeri originali.
La mediana è il valore centrale, quindi prima devi riscrivere l'elenco in ordine numerico:
13, 13, 13, 13, 14, 14, 16, 18, 21
I numeri nella lista sono nove, quindi quello centrale sarà il (9 + 1) / 2 = 10 / 2 = 5° numero:
13, 13, 13, 13, 14, 14, 16, 18, 21
Quindi la mediana è 14.
Campionamento dei dati:
I dati sono la valuta del machine learning applicato. Pertanto, raccolta e utilizzo sono entrambi altrettanto importanti.
Il campionamento dei dati si riferisce a metodi statistici per selezionare osservazioni dal dominio con l'obiettivo di stimare un parametro di popolazione. In altre parole, il campionamento è un processo attivo di raccolta di osservazioni con l'intento di stimare una variabile di popolazione.
Ogni riga di un dataset rappresenta un'osservazione indicativa di una determinata popolazione. Quando lavori con i dati, spesso non hai accesso a tutte le possibili osservazioni. Questo può accadere per molte ragioni, ad esempio:
Può essere difficile o costoso effettuare più osservazioni.
Può essere impegnativo raccogliere tutte le osservazioni.
Ci si aspetta di effettuare più osservazioni in futuro.
Spesso non avrai la giusta proporzione dei campioni di dati. Quindi dovrai sotto-campionare o sovra-campionare in base al tipo di problema.
Esegui il sotto-campionamento quando i campioni per una particolare categoria sono molto numerosi rispetto alle altre, cioè scarti alcuni campioni dalla categoria sovrarappresentata. Esegui il sovra-campionamento quando i campioni per un certo tipo sono decisamente inferiori rispetto agli altri. In questo caso, generi campioni.
Questo vale anche per scenari multiclasse.
Il campionamento statistico è un vasto campo di studio, ma nel machine learning applicato potresti usare tre tipi di campionamento: campionamento casuale semplice, campionamento sistematico e campionamento stratificato.
Campionamento casuale semplice: i campioni sono estratti con probabilità uniforme dal dominio.
Campionamento sistematico: i campioni sono estratti seguendo uno schema predefinito, come a intervalli.
Campionamento stratificato: i campioni sono estratti all'interno di categorie predefinite (cioè strati).
Spesso le feature del tuo dataset possono variare ampiamente negli intervalli. Alcune feature possono avere una scala da 0 a 100 mentre altre possono avere intervalli 0,01 - 0,001, 10000- 20000, ecc.
Questo è molto problematico per una modellazione efficiente. Perché una piccola variazione nella feature con un intervallo di valori più basso rispetto a un'altra potrebbe non avere un impatto significativo sulle altre. Ciò influisce sul processo di apprendimento. Affrontare questo problema è noto come scaling dei dati.
Esistono diverse tecniche di scaling come Min-Max scaling, scaling assoluto, standard scaling, ecc.
Codifica delle variabili:
A volte i dataset contengono un mix di dati numerici e non numerici. Molti framework di machine learning come scikit-learn si aspettano che tutti i dati siano in formato numerico. Questo è utile anche per velocizzare il calcolo.
Ancora una volta, la statistica corre in tuo aiuto.
Tecniche come Label encoding, One-Hot encoding, ecc. sono usate per convertire i dati non numerici in numerici.
È il momento di applicare le tecniche!
Per ora hai coperto molta teoria. Ora applicherai alcune di queste tecniche per toccarle con mano.
Partirai applicando alcuni metodi statistici per rilevare gli outlier.
Userai l'indice Z-Score per rilevare gli outlier e, per questo, analizzerai il dataset Boston House Price. Iniziamo importando il dataset dalle utility di sklearn e, man mano, introdurrai i concetti necessari.
import pandas as pd
import numpy as np
from sklearn.datasets import load_boston
# Load the Boston dataset into a variable called boston
boston = load_boston()Offerto da
# Separate the features from the target
x = boston.data
y = boston.target
Offerto da
Per visualizzare il dataset in un formato tabellare standard con tutti i nomi delle feature, lo convertirai in un dataframe pandas.
# Take the columns separately in a variable
columns = boston.feature_names
# Create the dataframe
boston_df = pd.DataFrame(boston.data)
boston_df.columns = columns
boston_df.head()Offerto da
È prassi comune iniziare con un'analisi univariata degli outlier, considerando una sola feature alla volta. Spesso un semplice box-plot di una feature può darti un buon punto di partenza. Creerai un box-plot usando seaborn e userai la feature DIS.
import seaborn as sns
sns.boxplot(x=boston_df['DIS'])import matplotlib.pyplot as plt
plt.show()Offerto da
<matplotlib.axes._subplots.AxesSubplot at 0x8abded0>Offerto da
Per visualizzare il box-plot, hai effettuato il secondo import di matplotlib poiché i grafici di seaborn sono mostrati come normali grafici matplotlib.
Il grafico sopra mostra tre punti tra 10 e 12: questi sono outlier perché non sono inclusi nel box delle altre osservazioni. Qui hai analizzato un outlier univariato, cioè hai usato solo la feature DIS per cercare gli outlier.
Procediamo ora con lo Z-Score.
"Lo Z-score è il numero con segno di deviazioni standard di cui il valore di un'osservazione o punto dati si discosta dalla media di ciò che viene osservato o misurato." - Wikipedia
L'idea alla base dello Z-score è descrivere ogni punto dati in relazione alla deviazione standard e alla media per il gruppo di punti. Lo Z-score consiste nel trovare la distribuzione dei dati in cui la media è 0 e la deviazione standard è 1, cioè la distribuzione normale.
Aspetta! In che modo questo aiuta a identificare gli outlier?
Beh, calcolando lo Z-score riscalibri e centri i dati (media 0 e deviazione standard 1) e cerchi le istanze troppo lontane dallo zero. Questi punti dati molto lontani da zero sono trattati come outlier. Nei casi più comuni si usa la soglia 3 o -3. Ad esempio, se il valore dello Z-score è maggiore di 3 o minore di -3. Questo punto dati verrà identificato come outlier.
Userai la funzione Z-score definita nella libreria scipy per rilevare gli outlier.
from scipy import stats
z = np.abs(stats.zscore(boston_df))print(z)Offerto da
[[0.417713350.284829861.2879095...1.459000380.441051931.0755623][0.415269320.487722360.59338101...0.303094150.441051930.49243937][0.415271650.487722360.59338101...0.303094150.396426991.2087274]...[0.411374480.487722360.11573841...1.176465830.441051930.98304761][0.405688830.487722360.11573841...1.176465830.40322490.86530163][0.412928930.487722360.11573841...1.176465830.441051930.66905833]]Offerto da
Non è possibile rilevare gli outlier semplicemente guardando l'output sopra. Sei più intelligente! Definirai tu la soglia e userai una semplice condizione per rilevare gli outlier che superano la tua soglia.
(array([55,56,57,102,141,142,152,154,155,160,162,163,199,200,201,202,203,204,208,209,210,211,212,216,218,219,220,221,222,225,234,236,256,257,262,269,273,274,276,277,282,283,283,284,347,351,352,353,353,354,355,356,357,358,363,364,364,365,367,369,370,372,373,374,374,380,398,404,405,406,410,410,411,412,412,414,414,415,416,418,418,419,423,424,425,426,427,427,429,431,436,437,438,445,450,454,455,456,457,466], dtype=int32),array([1,1,1,11,12,3,3,3,3,3,3,3,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,5,3,3,1,5,5,3,3,3,3,3,3,1,3,1,1,7,7,1,7,7,7,3,3,3,3,3,5,5,5,3,3,3,12,5,12,0,0,0,0,5,0,11,11,11,12,0,12,11,11,0,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,11],
dtype=int32))Offerto da
Di nuovo, un output poco chiaro! Il primo array contiene l'elenco dei numeri di riga e il secondo contiene i rispettivi numeri di colonna. Ad esempio, z[55][1] ha uno Z-score superiore a 3.
Quindi, il record 55 nella colonna ZN è un outlier. Da qui puoi proseguire.
Hai visto come usare lo Z-Score e impostare una soglia per rilevare i potenziali outlier nei dati. Ora vedrai come fare un po' di imputazione dei valori mancanti.
Userai il famoso dataset Pima Indian Diabetes, noto per contenere valori mancanti. Ma prima di procedere, dovrai caricare il dataset nel tuo workspace.
Caricherai il dataset in un oggetto DataFrame chiamato data.
data = pd.read_csv("https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv",header=None)print(data.describe())Offerto da
012345 \
count 768.000000768.000000768.000000768.000000768.000000768.000000
mean 3.845052120.89453169.10546920.53645879.79947931.992578
std 3.36957831.97261819.35580715.952218115.2440027.884160
min 0.0000000.0000000.0000000.0000000.0000000.00000025%1.00000099.00000062.0000000.0000000.00000027.30000050%3.000000117.00000072.00000023.00000030.50000032.00000075%6.000000140.25000080.00000032.000000127.25000036.600000
max 17.000000199.000000122.00000099.000000846.00000067.100000678
count 768.000000768.000000768.000000
mean 0.47187633.2408850.348958
std 0.33132911.7602320.476951
min 0.07800021.0000000.00000025%0.24375024.0000000.00000050%0.37250029.0000000.00000075%0.62625041.0000001.000000
max 2.42000081.0000001.000000Offerto da
Avrai già notato che i nomi delle colonne sono numerici. Questo perché stai usando un dataset già preprocessato. Ma non preoccuparti, scoprirai presto i nomi.
Ora, questo dataset è noto per avere valori mancanti, ma a una prima occhiata alle statistiche sopra potrebbe sembrare che non ne contenga affatto. Tuttavia, osservando meglio, troverai che in alcune colonne un valore zero è del tutto invalido. Questi sono i valori mancanti.
Nello specifico, le colonne qui sotto hanno come minimo uno zero non valido:
Concentrazione di glucosio plasmatico
Pressione diastolica
Spessore della plica tricipitale
Insulina sierica a 2 ore
Indice di massa corporea
Confermiamolo guardando i dati grezzi: l'esempio stampa le prime 20 righe.
È chiaro che ci sono valori 0 nelle colonne 2, 3, 4 e 5.
Poiché questo dataset ha valori mancanti indicati come 0, potrebbe essere complicato gestirli con i soli mezzi convenzionali. Riassumiamo l'approccio che seguirai per affrontare la cosa:
Ottieni il conteggio degli zeri in ciascuna delle colonne viste prima.
Determina quali colonne hanno più zeri dal passo precedente.
Sostituisci gli zeri in quelle colonne con NaN.
Verifica che i NaN siano stati inseriti correttamente.
Chiama la funzione fillna() con la strategia di imputazione.
# Step 1: Get the count of zeros in each of the columnsprint((data[[1,2,3,4,5]]==0).sum())Offerto da
Puoi vedere che le colonne 1, 2 e 5 hanno solo pochi zeri, mentre le colonne 3 e 4 ne mostrano molti di più, quasi la metà delle righe.
# Step -2: Mark zero values as missing or NaN
data[[1,2,3,4,5]]= data[[1,2,3,4,5]].replace(0, np.NaN)# Count the number of NaN values in each columnprint(data.isnull().sum())Offerto da
Puoi vedere che la marcatura dei valori mancanti ha avuto l'effetto desiderato.
Finora hai analizzato tendenze essenziali quando i dati mancano e come puoi usare semplici misure statistiche per gestirli. Ora imputerai i valori mancanti usando la media, ossia imputando la media della rispettiva colonna al posto dei valori mancanti.
# Step 5: Call the fillna() function with the imputation strategy
data.fillna(data.mean(), inplace=True)# Count the number of NaN values in each column to verifyprint(data.isnull().sum())Offerto da
Questo articolo di DataCamp ti guida efficacemente nell'implementazione dello scaling dei dati come passaggio di preprocessing. Dacci un'occhiata.
Ora farai la codifica delle variabili.
Prima, ti serve un dataset che contenga effettivamente dati non numerici. Userai il famoso dataset Iris per questo.
# Load the dataset to a DataFrame object iris
iris = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data",header=None)Offerto da
# See first 20 rows of the dataset
iris.head(20)Offerto da
0
1
2
3
4
0
5.1
3.5
1.4
0.2
Iris-setosa
1
4.9
3.0
1.4
0.2
Iris-setosa
2
4.7
3.2
1.3
0.2
Iris-setosa
3
4.6
3.1
1.5
0.2
Iris-setosa
4
5.0
3.6
1.4
0.2
Iris-setosa
5
5.4
3.9
1.7
0.4
Iris-setosa
6
4.6
3.4
1.4
0.3
Iris-setosa
7
5.0
3.4
1.5
0.2
Iris-setosa
8
4.4
2.9
1.4
0.2
Iris-setosa
9
4.9
3.1
1.5
0.1
Iris-setosa
10
5.4
3.7
1.5
0.2
Iris-setosa
11
4.8
3.4
1.6
0.2
Iris-setosa
12
4.8
3.0
1.4
0.1
Iris-setosa
13
4.3
3.0
1.1
0.1
Iris-setosa
14
5.8
4.0
1.2
0.2
Iris-setosa
15
5.7
4.4
1.5
0.4
Iris-setosa
16
5.4
3.9
1.3
0.4
Iris-setosa
17
5.1
3.5
1.4
0.3
Iris-setosa
18
5.7
3.8
1.7
0.3
Iris-setosa
19
5.1
3.8
1.5
0.3
Iris-setosa
Puoi convertire facilmente i valori stringa in interi usando il LabelEncoder. I tre valori di classe (Iris-setosa, Iris-versicolor, Iris-virginica) sono mappati ai valori interi (0, 1, 2).
In questo caso, la quarta colonna/feature del dataset contiene valori non numerici. Quindi devi separarla.
# Convert the DataFrame to a NumPy array
iris = iris.values
# Separate
Y = iris[:,4]Offerto da
# Label Encode string class values as integersfrom sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()
label_encoder = label_encoder.fit(Y)
label_encoded_y = label_encoder.transform(Y)Offerto da
Ora studiamo un'altra area in cui è cruciale una conoscenza elementare della statistica.
Statistica per la valutazione dei modelli
Hai progettato e sviluppato il tuo modello di machine learning. Ora vuoi valutarne le prestazioni sui dati di test. A questo scopo ti avvali di varie metriche statistiche come Precision, Recall, ROC, AUC, RMSE, ecc. E ti avvali anche di tecniche di ricampionamento come la k-fold Cross-Validation.
È importante notare che l'ipotesi si riferisce a modelli appresi; i risultati dell'esecuzione di un algoritmo di apprendimento su un dataset. Valutare e confrontare l'ipotesi significa confrontare modelli appresi, cosa diversa dal valutare e confrontare algoritmi di machine learning, che potrebbero essere addestrati su campioni diversi dello stesso problema o su problemi differenti.
Studiamo ora la Gaussiana e le statistiche descrittive.
Introduzione alla Gaussiana e alle statistiche descrittive
Un campione di dati non è altro che un'istantanea di una popolazione più ampia di tutte le potenziali osservazioni che si potrebbero effettuare in un dominio o generare da un processo.
Interessante notare come molte osservazioni seguano un andamento tipico chiamato distribuzione normale, o più formalmente, distribuzione gaussiana. È la distribuzione a campana che probabilmente conosci. La figura seguente rappresenta una distribuzione gaussiana:
Fonte: HyperPhysics
I processi gaussiani e le distribuzioni gaussiane sono a loro volta sotto-campi a sé. Ma ora studierai due degli ingredienti più essenziali che costruiscono l'intero mondo delle distribuzioni gaussiane in generale.
Qualsiasi campione di dati tratto da una distribuzione gaussiana può essere riassunto con due parametri:
Media: la tendenza centrale o il valore più probabile nella distribuzione (il picco della campana).
Varianza: la differenza media che le osservazioni hanno rispetto al valore medio nella distribuzione (la dispersione).
Il termine varianza dà origine anche a un altro termine fondamentale, cioè la deviazione standard, che è semplicemente la radice quadrata della varianza.
Media, varianza e deviazione standard possono essere calcolate direttamente da campioni di dati usando numpy.
Per prima cosa genererai un campione di 100 numeri casuali estratti da una distribuzione gaussiana con media 50 e deviazione standard 5. Calcolerai quindi le statistiche riassuntive.
Per iniziare, importerai tutte le dipendenze.
# Dependenciesfrom numpy.random import seed
from numpy.random import randn
from numpy import mean
from numpy import var
from numpy import std
Offerto da
Successivamente imposti il seed del generatore di numeri casuali in modo che i tuoi risultati siano riproducibili.
Mean:50.049Variance:24.939
Standard Deviation:4.994Offerto da
Abbastanza vicino, eh?
Passiamo ora all'argomento successivo.
Correlazione tra variabili
In generale, le feature contenute in un dataset possono spesso essere correlate tra loro, cosa piuttosto ovvia nella pratica. In termini statistici, questa relazione tra le feature del tuo dataset (semplice o complessa che sia) è spesso chiamata correlazione.
È fondamentale scoprire il grado di correlazione delle feature in un dataset. Questo passaggio funge essenzialmente da feature selection, che riguarda la selezione delle feature più importanti. È uno dei passi più cruciali in una pipeline di machine learning standard, perché può darti un notevole incremento di accuratezza in meno tempo.
Per capire meglio e restare pratici, vediamo perché le feature possono essere correlate tra loro:
Una feature può essere determinante per un'altra feature
Una feature potrebbe essere associata a un'altra in qualche grado di composizione
Più feature possono combinarsi e dar vita a un'altra feature
La correlazione tra le feature può essere di tre tipi: - correlazione positiva quando entrambe le feature cambiano nella stessa direzione, correlazione neutra quando non c'è relazione tra i cambiamenti delle due feature, correlazione negativa quando entrambe cambiano in direzioni opposte.
Le misure di correlazione sono alla base delle tecniche di feature selection basate su filtri. Dai un'occhiata a questo articolo se vuoi saperne di più sulla feature selection.
Puoi misurare matematicamente la relazione tra campioni di due variabili usando un metodo statistico chiamato coefficiente di correlazione di Pearson, dal nome dello sviluppatore del metodo, Karl Pearson.
Puoi calcolare il punteggio di correlazione di Pearson usando la funzione corr() di pandas con il parametro method impostato su pearson. Studiamo la correlazione tra le feature del dataset Pima Indians Diabetes che hai usato in precedenza. Hai già i dati in buono stato.
# Create the matrix of correlation score between the features and the label
scoreTable = data.corr(method='pearson')Offerto da
# Visulaize the matrix
data.corr(method='pearson').style.format("{:.2}").background_gradient(cmap=plt.get_cmap('coolwarm'), axis=1)Offerto da
Puoi vedere chiaramente la correlazione di Pearson tra tutte le feature e l'etichetta del dataset.
Nella prossima sezione studierai la statistica non parametrica.
Statistica non parametrica
Una grande parte della statistica e dei metodi statistici è dedicata ai dati con distribuzione nota.
La statistica non parametrica torna utile quando ci sono poche o nessuna informazione sui parametri della popolazione. I test non parametrici non fanno assunzioni sulla distribuzione dei dati.
Nel caso in cui lavori con dati non parametrici, è possibile usare metodi statistici non parametrici specializzati che scartano tutte le informazioni sulla distribuzione. Per questo, questi metodi sono spesso chiamati metodi distribution-free.
Ma prima che un metodo statistico non parametrico possa essere applicato, i dati devono essere convertiti in formato di rango. I metodi statistici che si aspettano dati in formato di rango sono talvolta chiamati statistiche di rango. Esempi sono la correlazione di rango e i test d'ipotesi di rango. Ordinare i dati è esattamente ciò che il nome suggerisce.
Un test d'ipotesi non parametrico ampiamente usato per verificare la differenza tra due campioni indipendenti è il test U di Mann-Whitney, dal nome di Henry Mann e Donald Whitney.
Implementerai questo test in Python tramite mannwhitneyu() fornita da SciPy.
# The dependencies that you needfrom scipy.stats import mannwhitneyu
from numpy.random import rand
# seed the random number generator
seed(1)Offerto da
# Generate two independent samples
data1 =50+(rand(100)*10)
data2 =51+(rand(100)*10)# Compare samples
stat, p = mannwhitneyu(data1, data2)print('Statistics = %.3f, p = %.3f'%(stat, p))# Interpret
alpha =0.05if p > alpha:print('Same distribution (fail to reject H0)')else:print('Different distribution (reject H0)')Offerto da
Statistics =4077.000, p =0.012
Different distribution(reject H0)Offerto da
alpha è il parametro soglia deciso da te. La funzione mannwhitneyu() restituisce due cose:
statistic: la statistica U di Mann-Whitney, uguale a min(U per x, U per y) se alternative è uguale a None (deprecato; esiste per retrocompatibilità), e U per y altrimenti.
pvalue: p-value assumendo una distribuzione normale asintotica.
Se vuoi studiare altri metodi della statistica non parametrica, puoi farlo qui.
Altri due popolari test di significatività non parametrici che puoi usare sono:
Ce l'hai fatta fino alla fine. In questo articolo hai studiato una varietà di concetti statistici essenziali che giocano un ruolo cruciale nei tuoi progetti di machine learning. Quindi capirli è semplicemente importante.
Da una semplice introduzione alla statistica sei arrivato alle statistiche di rango, con diverse implementazioni. Un bel traguardo. Hai studiato tre dataset diversi, sfruttato al massimo le funzionalità di pandas e numpy e, per di più, hai usato anche SciPy. Di seguito alcuni link se vuoi approfondire:
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Se hai poca esperienza nell'applicazione di algoritmi di machine learning, avrai scoperto che non richiede alcuna conoscenza preliminare di Statistica.
Tuttavia, conoscere un po' di statistica può essere utile per comprendere il machine learning sia tecnicamente che in modo intuitivo. Un minimo di statistica diventerà necessario quando vorrai iniziare a convalidare e interpretare i tuoi risultati. Dopotutto, dove c'è dato, c'è statistica. Come la matematica è il linguaggio della scienza, la statistica è un linguaggio imprescindibile per Data Science e Machine Learning.
La statistica è un campo della matematica ricco di teorie e risultati. Tuttavia, vari concetti, strumenti, tecniche e notazioni sono stati presi da questo campo per rendere il machine learning ciò che è oggi. Puoi usare metodi statistici descrittivi per trasformare le osservazioni in informazioni utili da comprendere e condividere con gli altri. Puoi usare tecniche statistiche inferenziali per dedurre da piccoli campioni di dati interi domini. Più avanti in questo post, studierai la statistica descrittiva e inferenziale. Quindi, niente panico.
Prima di iniziare, vediamo dieci esempi in cui i metodi statistici sono usati in un progetto applicato di machine learning:
Fonte: Statistical Methods for Machine Learning
Non è affascinante?
Questo post ti darà una solida base nelle statistiche essenziali ma necessarie per diventare un buon praticante di machine learning.
In questo post studierai:
Hai molto da coprire e tutti gli argomenti sono ugualmente importanti. Iniziamo!
Introduzione alla statistica e ai suoi tipi
Vediamo brevemente come definire la statistica in parole semplici.
La statistica è considerata un sottoinsieme della matematica. Riguarda una moltitudine di metodi per lavorare con i dati e usare quei dati per rispondere a molti tipi di domande.
Quando si tratta degli strumenti statistici usati nella pratica, può essere utile dividere la statistica in due grandi gruppi di metodi: statistica descrittiva per riassumere i dati e statistica inferenziale per trarre conclusioni da campioni di dati (Statistics for Machine Learning (7-Day Mini-Course).
Fonte: IntellSpot
Statistica inferenziale: la statistica inferenziale comprende metodi che aiutano a quantificare proprietà del dominio o della popolazione a partire da un insieme più piccolo di osservazioni ottenute, detto campione. Di seguito un'infografica che descrive in modo efficace la statistica inferenziale:
Fonte: Analytics Vidhya
Nella prossima sezione studierai l'uso della statistica per la preparazione dei dati.
Statistica per la preparazione dei dati
I metodi statistici sono necessari nello sviluppo dei dati di train e test per il tuo modello di machine learning.
Questo include tecniche per:
Per aiutarti a identificare i metodi da scegliere nello svolgimento di questi compiti è necessaria una conoscenza di base delle distribuzioni dei dati, della statistica descrittiva e della visualizzazione.
Analizziamo brevemente ciascuno dei punti sopra.
Rilevamento degli outlier:
Vediamo prima che cos'è un outlier.
Un outlier è un'osservazione che sembra deviare dalle altre osservazioni del campione. La figura seguente rende la definizione più evidente.
Fonte: MathWorks
Puoi individuare gli outlier nei dati come mostra la figura sopra.
Molti algoritmi di machine learning sono sensibili all'intervallo e alla distribuzione dei valori degli attributi nei dati di input. Gli outlier possono alterare e fuorviare il processo di addestramento, con tempi più lunghi, modelli meno accurati e risultati mediocri.
L'identificazione dei potenziali outlier è fondamentale per i seguenti motivi:
Un outlier potrebbe indicare che i dati sono errati. Ad esempio, i dati potrebbero essere stati codificati in modo non corretto o l'esperimento non è andato a buon fine. Se si determina che un punto anomalo è effettivamente errato, quel valore dovrebbe essere rimosso dall'analisi. Se è possibile correggerlo, questa è un'altra opzione.
In alcuni casi, potrebbe non essere possibile stabilire se un punto anomalo sia un dato errato. Gli outlier potrebbero essere dovuti a variazione casuale o indicare qualcosa di scientificamente interessante. In ogni caso, in genere non vuoi semplicemente eliminare l'osservazione anomala. Tuttavia, se i dati contengono outlier significativi, potresti dover considerare l'uso di tecniche statistiche robuste.
Quindi, gli outlier spesso non sono buoni per i tuoi modelli predittivi (anche se a volte possono essere usati a vantaggio, ma questo esula dallo scopo di questo post). Ti serve il know-how statistico per gestirli in modo efficace.
Imputazione dei valori mancanti:
Molti dataset oggi soffrono del problema dei valori mancanti. Il tuo modello potrebbe non addestrarsi efficacemente se i dati che gli fornisci contengono valori mancanti. Qui vengono in aiuto strumenti e tecniche statistiche.
Molti tendono a scartare le istanze che contengono un valore mancante. Ma non è una buona pratica perché così potresti perdere caratteristiche/rappresentazioni essenziali dei dati. Sebbene esistano metodi avanzati per gestire i valori mancanti, queste sono le tecniche rapide a cui si ricorre: imputazione con la media e imputazione con la mediana.
È fondamentale capire cosa sono media e mediana.
Supponi di avere una caratteristica X1 con questi valori - 13, 18, 13, 14, 13, 16, 14, 21, 13
La media è la solita media aritmetica, quindi sommo e poi divido:
(13 + 18 + 13 + 14 + 13 + 16 + 14 + 21 + 13) / 9 = 15
Nota che in questo caso la media non è un valore della lista originale. È un risultato comune. Non dovresti presumere che la media sia uno dei numeri originali.
La mediana è il valore centrale, quindi prima devi riscrivere l'elenco in ordine numerico:
13, 13, 13, 13, 14, 14, 16, 18, 21
I numeri nella lista sono nove, quindi quello centrale sarà il (9 + 1) / 2 = 10 / 2 = 5° numero:
13, 13, 13, 13, 14, 14, 16, 18, 21
Quindi la mediana è 14.
Campionamento dei dati:
I dati sono la valuta del machine learning applicato. Pertanto, raccolta e utilizzo sono entrambi altrettanto importanti.
Il campionamento dei dati si riferisce a metodi statistici per selezionare osservazioni dal dominio con l'obiettivo di stimare un parametro di popolazione. In altre parole, il campionamento è un processo attivo di raccolta di osservazioni con l'intento di stimare una variabile di popolazione.
Ogni riga di un dataset rappresenta un'osservazione indicativa di una determinata popolazione. Quando lavori con i dati, spesso non hai accesso a tutte le possibili osservazioni. Questo può accadere per molte ragioni, ad esempio:
Spesso non avrai la giusta proporzione dei campioni di dati. Quindi dovrai sotto-campionare o sovra-campionare in base al tipo di problema.
Esegui il sotto-campionamento quando i campioni per una particolare categoria sono molto numerosi rispetto alle altre, cioè scarti alcuni campioni dalla categoria sovrarappresentata. Esegui il sovra-campionamento quando i campioni per un certo tipo sono decisamente inferiori rispetto agli altri. In questo caso, generi campioni.
Questo vale anche per scenari multiclasse.
Il campionamento statistico è un vasto campo di studio, ma nel machine learning applicato potresti usare tre tipi di campionamento: campionamento casuale semplice, campionamento sistematico e campionamento stratificato.
Sebbene questi siano i tipi di campionamento più comuni che potresti incontrare, esistono altre tecniche (A Gentle Introduction to Statistical Sampling and Resampling).
Scaling dei dati:
Spesso le feature del tuo dataset possono variare ampiamente negli intervalli. Alcune feature possono avere una scala da 0 a 100 mentre altre possono avere intervalli 0,01 - 0,001, 10000- 20000, ecc.
Questo è molto problematico per una modellazione efficiente. Perché una piccola variazione nella feature con un intervallo di valori più basso rispetto a un'altra potrebbe non avere un impatto significativo sulle altre. Ciò influisce sul processo di apprendimento. Affrontare questo problema è noto come scaling dei dati.
Esistono diverse tecniche di scaling come Min-Max scaling, scaling assoluto, standard scaling, ecc.
Codifica delle variabili:
A volte i dataset contengono un mix di dati numerici e non numerici. Molti framework di machine learning come
scikit-learnsi aspettano che tutti i dati siano in formato numerico. Questo è utile anche per velocizzare il calcolo.Ancora una volta, la statistica corre in tuo aiuto.
Tecniche come Label encoding, One-Hot encoding, ecc. sono usate per convertire i dati non numerici in numerici.
È il momento di applicare le tecniche!
Per ora hai coperto molta teoria. Ora applicherai alcune di queste tecniche per toccarle con mano.
Partirai applicando alcuni metodi statistici per rilevare gli outlier.
Userai l'indice
Z-Scoreper rilevare gli outlier e, per questo, analizzerai il dataset Boston House Price. Iniziamo importando il dataset dalle utility di sklearn e, man mano, introdurrai i concetti necessari.Per visualizzare il dataset in un formato tabellare standard con tutti i nomi delle feature, lo convertirai in un dataframe
pandas.È prassi comune iniziare con un'analisi univariata degli outlier, considerando una sola feature alla volta. Spesso un semplice box-plot di una feature può darti un buon punto di partenza. Creerai un box-plot usando
seaborne userai la featureDIS.Per visualizzare il box-plot, hai effettuato il secondo import di
matplotlibpoiché i grafici diseabornsono mostrati come normali grafici matplotlib.Il grafico sopra mostra tre punti tra 10 e 12: questi sono outlier perché non sono inclusi nel box delle altre osservazioni. Qui hai analizzato un outlier univariato, cioè hai usato solo la feature DIS per cercare gli outlier.
Procediamo ora con lo Z-Score.
"Lo Z-score è il numero con segno di deviazioni standard di cui il valore di un'osservazione o punto dati si discosta dalla media di ciò che viene osservato o misurato." - Wikipedia
L'idea alla base dello Z-score è descrivere ogni punto dati in relazione alla deviazione standard e alla media per il gruppo di punti. Lo Z-score consiste nel trovare la distribuzione dei dati in cui la media è 0 e la deviazione standard è 1, cioè la distribuzione normale.
Aspetta! In che modo questo aiuta a identificare gli outlier?
Beh, calcolando lo Z-score riscalibri e centri i dati (media 0 e deviazione standard 1) e cerchi le istanze troppo lontane dallo zero. Questi punti dati molto lontani da zero sono trattati come outlier. Nei casi più comuni si usa la soglia 3 o -3. Ad esempio, se il valore dello Z-score è maggiore di 3 o minore di -3. Questo punto dati verrà identificato come outlier.
Userai la funzione
Z-scoredefinita nella libreriascipyper rilevare gli outlier.Non è possibile rilevare gli outlier semplicemente guardando l'output sopra. Sei più intelligente! Definirai tu la soglia e userai una semplice condizione per rilevare gli outlier che superano la tua soglia.
Di nuovo, un output poco chiaro! Il primo array contiene l'elenco dei numeri di riga e il secondo contiene i rispettivi numeri di colonna. Ad esempio,
z[55][1]ha uno Z-score superiore a 3.Quindi, il record 55 nella colonna
ZNè un outlier. Da qui puoi proseguire.Hai visto come usare lo Z-Score e impostare una soglia per rilevare i potenziali outlier nei dati. Ora vedrai come fare un po' di imputazione dei valori mancanti.
Userai il famoso dataset Pima Indian Diabetes, noto per contenere valori mancanti. Ma prima di procedere, dovrai caricare il dataset nel tuo workspace.
Caricherai il dataset in un oggetto DataFrame chiamato data.
Avrai già notato che i nomi delle colonne sono numerici. Questo perché stai usando un dataset già preprocessato. Ma non preoccuparti, scoprirai presto i nomi.
Ora, questo dataset è noto per avere valori mancanti, ma a una prima occhiata alle statistiche sopra potrebbe sembrare che non ne contenga affatto. Tuttavia, osservando meglio, troverai che in alcune colonne un valore zero è del tutto invalido. Questi sono i valori mancanti.
Nello specifico, le colonne qui sotto hanno come minimo uno zero non valido:
Confermiamolo guardando i dati grezzi: l'esempio stampa le prime 20 righe.
È chiaro che ci sono valori 0 nelle colonne 2, 3, 4 e 5.
Poiché questo dataset ha valori mancanti indicati come 0, potrebbe essere complicato gestirli con i soli mezzi convenzionali. Riassumiamo l'approccio che seguirai per affrontare la cosa:
NaN.Puoi vedere che le colonne 1, 2 e 5 hanno solo pochi zeri, mentre le colonne 3 e 4 ne mostrano molti di più, quasi la metà delle righe.
Assicuriamoci a questo punto che la sostituzione con NaN sia andata a buon fine dando uno sguardo al dataset nel suo insieme:
Puoi vedere che la marcatura dei valori mancanti ha avuto l'effetto desiderato.
Finora hai analizzato tendenze essenziali quando i dati mancano e come puoi usare semplici misure statistiche per gestirli. Ora imputerai i valori mancanti usando la media, ossia imputando la media della rispettiva colonna al posto dei valori mancanti.
Eccellente!
Questo articolo di DataCamp ti guida efficacemente nell'implementazione dello scaling dei dati come passaggio di preprocessing. Dacci un'occhiata.
Ora farai la codifica delle variabili.
Prima, ti serve un dataset che contenga effettivamente dati non numerici. Userai il famoso dataset Iris per questo.
Puoi convertire facilmente i valori stringa in interi usando il LabelEncoder. I tre valori di classe (Iris-setosa, Iris-versicolor, Iris-virginica) sono mappati ai valori interi (0, 1, 2).
In questo caso, la quarta colonna/feature del dataset contiene valori non numerici. Quindi devi separarla.
Ora studiamo un'altra area in cui è cruciale una conoscenza elementare della statistica.
Statistica per la valutazione dei modelli
Hai progettato e sviluppato il tuo modello di machine learning. Ora vuoi valutarne le prestazioni sui dati di test. A questo scopo ti avvali di varie metriche statistiche come Precision, Recall, ROC, AUC, RMSE, ecc. E ti avvali anche di tecniche di ricampionamento come la k-fold Cross-Validation.
La statistica può essere usata efficacemente per:
È importante notare che l'ipotesi si riferisce a modelli appresi; i risultati dell'esecuzione di un algoritmo di apprendimento su un dataset. Valutare e confrontare l'ipotesi significa confrontare modelli appresi, cosa diversa dal valutare e confrontare algoritmi di machine learning, che potrebbero essere addestrati su campioni diversi dello stesso problema o su problemi differenti.
Studiamo ora la Gaussiana e le statistiche descrittive.
Introduzione alla Gaussiana e alle statistiche descrittive
Un campione di dati non è altro che un'istantanea di una popolazione più ampia di tutte le potenziali osservazioni che si potrebbero effettuare in un dominio o generare da un processo.
Interessante notare come molte osservazioni seguano un andamento tipico chiamato distribuzione normale, o più formalmente, distribuzione gaussiana. È la distribuzione a campana che probabilmente conosci. La figura seguente rappresenta una distribuzione gaussiana:
Fonte: HyperPhysics
I processi gaussiani e le distribuzioni gaussiane sono a loro volta sotto-campi a sé. Ma ora studierai due degli ingredienti più essenziali che costruiscono l'intero mondo delle distribuzioni gaussiane in generale.
Qualsiasi campione di dati tratto da una distribuzione gaussiana può essere riassunto con due parametri:
Il termine varianza dà origine anche a un altro termine fondamentale, cioè la deviazione standard, che è semplicemente la radice quadrata della varianza.
Media, varianza e deviazione standard possono essere calcolate direttamente da campioni di dati usando
numpy.Per prima cosa genererai un campione di 100 numeri casuali estratti da una distribuzione gaussiana con media 50 e deviazione standard 5. Calcolerai quindi le statistiche riassuntive.
Per iniziare, importerai tutte le dipendenze.
Successivamente imposti il seed del generatore di numeri casuali in modo che i tuoi risultati siano riproducibili.
Abbastanza vicino, eh?
Passiamo ora all'argomento successivo.
Correlazione tra variabili
In generale, le feature contenute in un dataset possono spesso essere correlate tra loro, cosa piuttosto ovvia nella pratica. In termini statistici, questa relazione tra le feature del tuo dataset (semplice o complessa che sia) è spesso chiamata correlazione.
È fondamentale scoprire il grado di correlazione delle feature in un dataset. Questo passaggio funge essenzialmente da feature selection, che riguarda la selezione delle feature più importanti. È uno dei passi più cruciali in una pipeline di machine learning standard, perché può darti un notevole incremento di accuratezza in meno tempo.
Per capire meglio e restare pratici, vediamo perché le feature possono essere correlate tra loro:
La correlazione tra le feature può essere di tre tipi: - correlazione positiva quando entrambe le feature cambiano nella stessa direzione, correlazione neutra quando non c'è relazione tra i cambiamenti delle due feature, correlazione negativa quando entrambe cambiano in direzioni opposte.
Le misure di correlazione sono alla base delle tecniche di feature selection basate su filtri. Dai un'occhiata a questo articolo se vuoi saperne di più sulla feature selection.
Puoi misurare matematicamente la relazione tra campioni di due variabili usando un metodo statistico chiamato coefficiente di correlazione di Pearson, dal nome dello sviluppatore del metodo, Karl Pearson.
Puoi calcolare il punteggio di correlazione di Pearson usando la funzione
corr()dipandascon il parametromethodimpostato supearson. Studiamo la correlazione tra le feature del dataset Pima Indians Diabetes che hai usato in precedenza. Hai già i dati in buono stato.Puoi vedere chiaramente la correlazione di Pearson tra tutte le feature e l'etichetta del dataset.
Nella prossima sezione studierai la statistica non parametrica.
Statistica non parametrica
Una grande parte della statistica e dei metodi statistici è dedicata ai dati con distribuzione nota.
La statistica non parametrica torna utile quando ci sono poche o nessuna informazione sui parametri della popolazione. I test non parametrici non fanno assunzioni sulla distribuzione dei dati.
Nel caso in cui lavori con dati non parametrici, è possibile usare metodi statistici non parametrici specializzati che scartano tutte le informazioni sulla distribuzione. Per questo, questi metodi sono spesso chiamati metodi distribution-free.
Ma prima che un metodo statistico non parametrico possa essere applicato, i dati devono essere convertiti in formato di rango. I metodi statistici che si aspettano dati in formato di rango sono talvolta chiamati statistiche di rango. Esempi sono la correlazione di rango e i test d'ipotesi di rango. Ordinare i dati è esattamente ciò che il nome suggerisce.
Un test d'ipotesi non parametrico ampiamente usato per verificare la differenza tra due campioni indipendenti è il test U di Mann-Whitney, dal nome di Henry Mann e Donald Whitney.
Implementerai questo test in Python tramite
mannwhitneyu()fornita daSciPy.alphaè il parametro soglia deciso da te. La funzionemannwhitneyu()restituisce due cose:statistic: la statistica U di Mann-Whitney, uguale a min(U per x, U per y) se alternative è uguale a None (deprecato; esiste per retrocompatibilità), e U per y altrimenti.
pvalue: p-value assumendo una distribuzione normale asintotica.
Se vuoi studiare altri metodi della statistica non parametrica, puoi farlo qui.
Altri due popolari test di significatività non parametrici che puoi usare sono:
Ed è il momento di chiudere!
Ce l'hai fatta fino alla fine. In questo articolo hai studiato una varietà di concetti statistici essenziali che giocano un ruolo cruciale nei tuoi progetti di machine learning. Quindi capirli è semplicemente importante.
Da una semplice introduzione alla statistica sei arrivato alle statistiche di rango, con diverse implementazioni. Un bel traguardo. Hai studiato tre dataset diversi, sfruttato al massimo le funzionalità di
pandasenumpye, per di più, hai usato ancheSciPy. Di seguito alcuni link se vuoi approfondire:Di seguito le risorse da cui ho tratto supporto per scrivere questo blog:
Fammi sapere opinioni/domande nei commenti. Dai anche un'occhiata al corso di DataCamp "Statistical Thinking in Python", molto orientato alla pratica.