Je suis incapable de comprendre la page de StandardScaler
dans la documentation de sklearn
.
Quelqu'un peut-il m'expliquer cela en termes simples?
L’idée de StandardScaler
est qu’elle transformera vos données de telle sorte que leur distribution aura une valeur moyenne de 0 et un écart type de 1 . Étant donné la distribution des données, chaque valeur de l’ensemble de données aura la valeur moyenne de l’échantillon soustraite et ensuite divisé par l'écart type de l'ensemble de données.
Comment le calculer:
Vous pouvez lire plus ici:
mean = 0
et standard deviation = 1
) vos fonctionnalités avant d'appliquer des techniques d'apprentissage automatique.Une chose importante à garder à l'esprit est que la plupart (sinon la totalité) des modèles/classes/fonctions scikit-learn
s'attendent à une matrice X
avec dimensions/forme [number_of_samples, number_of_features]
. C'est très important. Certaines autres bibliothèques attendent en entrée l'inverse.
StandardScaler()
normalisera les entités (chaque colonne de X) afin que chaque colonne/entité/variable ait mean = 0
et standard deviation = 1
.
Exemple:
from sklearn.preprocessing import StandardScaler
import numpy as np
data = np.array([[0, 0], [0, 0], [1, 1], [1, 1]])
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
print(data)
[[0 0]
[0 0]
[1 1]
[1 1]]
print(scaled_data)
[[-1. -1.]
[-1. -1.]
[ 1. 1.]
[ 1. 1.]]
Vérifiez que la moyenne de chaque entité (colonne) est 0:
scaled_data.mean(axis = 0)
array([0., 0.])
Vérifiez que la valeur standard de chaque fonction (colonne) est 1:
scaled_data.std(axis = 0)
array([1., 1.])
StandardScaler effectue la tâche de Standardization . Généralement, un jeu de données contient des variables d'échelle différente. Par exemple un ensemble de données employé contiendra la colonne AGE avec les valeurs sur l'échelle 20-70 et la colonne SALAIRE avec les valeurs sur l'échelle 10000-80000 .
Comme ces deux colonnes ont une échelle différente, elles sont normalisées pour avoir une échelle commune lors de la création d'un modèle d'apprentissage automatique.
Ceci est utile lorsque vous souhaitez comparer des données correspondant à différentes unités. Dans ce cas, vous souhaitez supprimer les unités. Pour le faire de manière cohérente dans toutes les données, vous devez transformer les données de manière à ce que la variance soit unitaire et que la moyenne de la série soit égale à 0.
Après application de StandardScaler()
, chaque colonne dans X aura une moyenne de 0 et un écart type de 1.
Les formules sont énumérées par d'autres sur cette page.
Justification: certains algorithmes nécessitent que les données ressemblent à ceci (voir sklearn docs ).
Les réponses ci-dessus sont excellentes, mais il me fallait un exemple simple pour atténuer certaines des préoccupations que j'avais par le passé. Je voulais m'assurer que chaque colonne était traitée séparément. Je suis maintenant rassuré et n'arrive pas à trouver quel exemple m'avait préoccupé. Toutes les colonnesSONTmises à l'échelle séparément, comme décrit ci-dessus.
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)