Non riesco a capire la pagina del StandardScaler
nella documentazione di sklearn
.
Qualcuno può spiegarmelo in termini semplici?
Non riesco a capire la pagina del StandardScaler
nella documentazione di sklearn
.
Qualcuno può spiegarmelo in termini semplici?
Risposte:
L'idea alla base StandardScaler
è che trasformerà i tuoi dati in modo tale che la loro distribuzione abbia un valore medio 0 e una deviazione standard di 1.
In caso di dati multivariati, questo viene fatto per funzionalità (in altre parole indipendentemente per ogni colonna di dati) .
Data la distribuzione dei dati, ogni valore nel set di dati avrà il valore medio sottratto e quindi diviso per la deviazione standard dell'intero set di dati (o caratteristica nel caso multivariato).
Intro: presumo che tu abbia una matrice in X
cui ogni riga / linea è un campione / osservazione e ogni colonna è una variabile / caratteristica (questo è l'input previsto per qualsiasi sklearn
funzione ML, tra l'altro - X.shape
dovrebbe essere [number_of_samples, number_of_features]
).
Core del metodo : l'idea principale è quella di normalizzare / standardizzare ie μ = 0
e le σ = 1
tue caratteristiche / variabili / colonne di X
, individualmente , prima di applicare qualsiasi modello di apprendimento automatico.
StandardScaler()
si normalizzare le caratteristiche esempio ogni colonna di X, INDIVIDUALMENTE , in modo che ogni colonna / funzione / variabile avranno μ = 0
e σ = 1
.
PS: trovo la risposta più votata in questa pagina, sbagliata. Sto citando "ogni valore nel set di dati avrà il valore medio del campione sottratto" - Questo non è né vero né corretto.
Vedi anche: Come e perché standardizzare i tuoi dati: un tutorial su Python
Esempio:
from sklearn.preprocessing import StandardScaler
import numpy as np
# 4 samples/observations and 2 variables/features
data = np.array([[0, 0], [1, 0], [0, 1], [1, 1]])
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
print(data)
[[0, 0],
[1, 0],
[0, 1],
[1, 1]])
print(scaled_data)
[[-1. -1.]
[ 1. -1.]
[-1. 1.]
[ 1. 1.]]
Verifica che la media di ogni caratteristica (colonna) sia 0:
scaled_data.mean(axis = 0)
array([0., 0.])
Verifica che lo standard di ogni caratteristica (colonna) sia 1:
scaled_data.std(axis = 0)
array([1., 1.])
La matematica:
AGGIORNAMENTO 08/2019 : Riguardo ai parametri di input with_mean
e with_std
a False
/ True
, ho fornito una risposta qui: Differenza di StandardScaler tra "with_std = False or True" e "with_mean = False o True"
[1.15, 1.15]
quando computo come un panda df: pd.DataFrame(scaled_data).std(0)
?
pd.DataFrame(scaled_data)[0]
ottengo una serie con Name: 0, dtype: float64
e valori [-1.0, 1.0, -1.0, 1.0]
. Ci scusiamo per la formattazione
StandardScaler
, rende l'algoritmo di apprendimento automatico più veloce o aiuta a prendere decisioni più accurate o qualcos'altro?
Come calcolarlo:
Puoi leggere di più qui:
StandardScaler svolge il compito di standardizzazione . Di solito un set di dati contiene variabili di scala diversa. Ad esempio, un dataset di un dipendente conterrà la colonna ETÀ con valori su scala 20-70 e la colonna SALARIO con valori su scala 10000-80000 .
Poiché queste due colonne sono di scala diversa, sono standardizzate per avere una scala comune durante la creazione del modello di apprendimento automatico.
Ciò è utile quando si desidera confrontare dati che corrispondono a unità diverse. In tal caso, si desidera rimuovere le unità. Per fare ciò in modo coerente di tutti i dati, trasformi i dati in modo che la varianza sia unitaria e che la media della serie sia 0.
Le risposte di cui sopra sono ottime, ma avevo bisogno di un semplice esempio per alleviare alcune preoccupazioni che ho avuto in passato. Volevo assicurarmi che stesse effettivamente trattando ciascuna colonna separatamente. Ora sono rassicurato e non riesco a trovare quale esempio mi abbia causato preoccupazione. Tutte le colonne SONO ridimensionate separatamente come descritto da quelle sopra.
import pandas as pd
import scipy.stats as ss
from sklearn.preprocessing import StandardScaler
data= [[1, 1, 1, 1, 1],[2, 5, 10, 50, 100],[3, 10, 20, 150, 200],[4, 15, 40, 200, 300]]
df = pd.DataFrame(data, columns=['N0', 'N1', 'N2', 'N3', 'N4']).astype('float64')
sc_X = StandardScaler()
df = sc_X.fit_transform(df)
num_cols = len(df[0,:])
for i in range(num_cols):
col = df[:,i]
col_stats = ss.describe(col)
print(col_stats)
DescribeResult(nobs=4, minmax=(-1.3416407864998738, 1.3416407864998738), mean=0.0, variance=1.3333333333333333, skewness=0.0, kurtosis=-1.3599999999999999)
DescribeResult(nobs=4, minmax=(-1.2828087129930659, 1.3778315806221817), mean=-5.551115123125783e-17, variance=1.3333333333333337, skewness=0.11003776770595125, kurtosis=-1.394993095506219)
DescribeResult(nobs=4, minmax=(-1.155344148338584, 1.53471088361394), mean=0.0, variance=1.3333333333333333, skewness=0.48089217736510326, kurtosis=-1.1471008824318165)
DescribeResult(nobs=4, minmax=(-1.2604572012883055, 1.2668071116222517), mean=-5.551115123125783e-17, variance=1.3333333333333333, skewness=0.0056842140599118185, kurtosis=-1.6438177182479734)
DescribeResult(nobs=4, minmax=(-1.338945389819976, 1.3434309690153527), mean=5.551115123125783e-17, variance=1.3333333333333333, skewness=0.005374558840039456, kurtosis=-1.3619131970819205)
Di seguito è riportato un semplice esempio di lavoro per spiegare come funziona il calcolo della standardizzazione. La parte teorica è già ben spiegata in altre risposte.
>>>import numpy as np
>>>data = [[6, 2], [4, 2], [6, 4], [8, 2]]
>>>a = np.array(data)
>>>np.std(a, axis=0)
array([1.41421356, 0.8660254 ])
>>>np.mean(a, axis=0)
array([6. , 2.5])
>>>from sklearn.preprocessing import StandardScaler
>>>scaler = StandardScaler()
>>>scaler.fit(data)
>>>print(scaler.mean_)
#Xchanged = (X−μ)/σ WHERE σ is Standard Deviation and μ is mean
>>>z=scaler.transform(data)
>>>z
Calcolo
Come puoi vedere nell'output, la media è [6. , 2.5] e la deviazione std è [1.41421356, 0.8660254]
I dati sono (0,1) la posizione è 2 Standardizzazione = (2 - 2.5) /0.8660254 = -0.57735027
I dati nella posizione (1,0) sono 4 Standardizzazione = (4-6) /1.41421356 = -1.414
Risultato dopo la standardizzazione
Controllare la media e la deviazione std dopo la standardizzazione
Nota: -2.77555756e-17 è molto vicino a 0.
Riferimenti
Dopo l'applicazione StandardScaler()
, ogni colonna in X avrà media 0 e deviazione standard 1.
Le formule sono elencate da altri in questa pagina.
Razionale: alcuni algoritmi richiedono che i dati abbiano questo aspetto (vedere la documentazione di sklearn ).
each value in the dataset will have the sample mean value subtracted
-- questo non è vero. La media di OGNI caratteristica / colonna verrà sottratta dai valori della colonna specifica. Questa operazione viene eseguita in base alla colonna. Non c'èsample mean value subtracted
- Vedi la mia risposta qui sotto