webentwicklung-frage-antwort-db.com.de

Kann mir jemand den StandardScaler erklären?

Ich kann die page der StandardScaler in der Dokumentation von sklearn nicht verstehen.

Kann mir das jemand einfach erklären?

24
nitinvijay23

Die Idee hinter StandardScaler ist, dass Ihre Daten so umgeformt werden, dass ihre Verteilung einen Mittelwert von 0 und eine Standardabweichung von 1 aufweist. Aufgrund der Verteilung der Daten wird für jeden Wert in der Datenmenge der Mittelwert der Stichprobe abgezogen. und dann durch die Standardabweichung des gesamten Datensatzes geteilt.

37
user6903745
18
Tuan Vu

Die Hauptidee ist, Ihre Funktionen zu normalisieren/standardisieren (mean = 0 und standard deviation = 1), bevor Sie maschinelle Lerntechniken anwenden.

Wichtig ist, dass die meisten (wenn nicht alle) scikit-learn Modelle/Klassen/Funktionen eine Matrix X mit Dimensions/Shape [number_of_samples, number_of_features] als Eingabe erwarten. Dies ist sehr wichtig. Einige andere Bibliotheken erwarten als Eingabe die Umkehrung.

StandardScaler() normalisiert die Features (jede Spalte von X), so dass jede Spalte/Feature/Variable mean = 0 und standard deviation = 1 hat.


Beispiel:

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.]]

Vergewissern Sie sich, dass der Mittelwert jedes Merkmals (Spalte) 0 ist:

scaled_data.mean(axis = 0)
array([0., 0.])

Vergewissern Sie sich, dass der Standardwert jedes Merkmals (Spalte) 1 ist:

scaled_data.std(axis = 0)
array([1., 1.])
17
seralou

StandardScaler übernimmt die Aufgabe der Standardisierung . Normalerweise enthält ein Dataset Variablen, deren Skala unterschiedlich ist. Für z. Ein Mitarbeiter-Datensatz enthält eine AGE-Spalte mit Werten auf Skala 20-70 und SALARY-Spalte mit Werten auf Skala 10000-80000 .
Da sich diese beiden Säulen im Maßstab unterscheiden, sind sie standardisiert, um beim Erstellen eines maschinellen Lernmodells einen gemeinsamen Maßstab zu haben.

5
krish___na

Dies ist nützlich, wenn Sie Daten vergleichen möchten, die verschiedenen Einheiten entsprechen. In diesem Fall möchten Sie die Einheiten entfernen. Um dies auf konsistente Weise zu tun, transformieren Sie die Daten in einer Weise, dass die Varianz einheitlich ist und der Mittelwert der Reihe 0 ist.

4

Im Folgenden wird anhand eines einfachen Arbeitsbeispiels die Funktionsweise der Standardisierungsberechnung erläutert. Der theoretische Teil ist bereits in anderen Antworten gut erklärt.

>>>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

Berechnung

Wie Sie in der Ausgabe sehen können, ist der Mittelwert [6. , 2.5] und Standardabweichung ist [1.41421356, 0.8660254]

Daten sind (0,1) Position ist 2 Standardisierung = (2 - 2,5)/0,8660254 = -0,57735027

Daten in (1,0) -Position sind 4 Standardisierung = (4-6)/1,41421356 = -1,414

Ergebnis nach Standardisierung

enter image description here

Mittelwert und Standardabweichung nach Standardisierung prüfen

enter image description here

Hinweis: -2.77555756e-17 liegt sehr nahe bei 0.

Referenzen

  1. Vergleichen Sie den Effekt verschiedener Skalierer auf Daten mit Ausreißern

  2. Was ist der Unterschied zwischen Normalisierung und Standardisierung?

  3. Mittelwert der mit sklearn StandardScaler skalierten Daten ist nicht Null

4
Lijo

Nach dem Anwenden von StandardScaler() hat jede Spalte in X den Mittelwert 0 und die Standardabweichung von 1.

Formeln werden von anderen auf dieser Seite aufgelistet.

Begründung: Für einige Algorithmen müssen Daten so aussehen (siehe sklearn docs ).

2
Paul

Die obigen Antworten sind großartig, aber ich brauchte ein einfaches Beispiel, um einige Bedenken auszuräumen, die ich in der Vergangenheit hatte. Ich wollte sichergehen, dass jede Säule separat behandelt wird. Ich bin jetzt beruhigt und kann nicht herausfinden, welches Beispiel mich beunruhigt hatte. Alle SpaltenWERDENseparat skaliert, wie oben beschrieben.

CODE

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)

AUSGABE

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)
1
Thom Ives