Ich kann die Seite von StandardScaler
in der Dokumentation von nicht verstehen sklearn
.
Kann mir jemand das in einfachen Worten erklären?
Ich kann die Seite von StandardScaler
in der Dokumentation von nicht verstehen sklearn
.
Kann mir jemand das in einfachen Worten erklären?
Antworten:
Die Idee dahinter StandardScaler
ist, dass Ihre Daten so transformiert werden, dass ihre Verteilung einen Mittelwert von 0 und eine Standardabweichung von 1 aufweist.
Bei multivariaten Daten erfolgt dies merkmalsmäßig (dh unabhängig für jede Datenspalte). .
Bei gegebener Verteilung der Daten wird für jeden Wert im Datensatz der Mittelwert abgezogen und dann durch die Standardabweichung des gesamten Datensatzes (oder des Merkmals im multivariaten Fall) dividiert.
Intro: Ich gehe davon aus, dass Sie eine Matrix haben, X
in der jede Zeile / Zeile eine Stichprobe / Beobachtung und jede Spalte eine Variable / ein Merkmal ist (dies ist sklearn
übrigens die erwartete Eingabe für jede ML-Funktion - X.shape
sollte es sein [number_of_samples, number_of_features]
).
Kern der Methode : Die Hauptidee ist zu normalisieren / standardisiert dh μ = 0
und σ = 1
Ihre Funktionen / Variablen / Spalten X
, einzeln , bevor jede Maschine Lernmodell anwenden.
StandardScaler()
wird normalisiert die Merkmale dh jede Spalte von X, EINZELN , so dass jede Spalte / Feature / Variabel wird μ = 0
und σ = 1
.
PS: Ich finde die am besten bewertete Antwort auf dieser Seite falsch. Ich zitiere "Für jeden Wert im Datensatz wird der Stichprobenmittelwert abgezogen" - Dies ist weder wahr noch richtig.
Siehe auch: Wie und warum Sie Ihre Daten standardisieren: Ein Python-Tutorial
Beispiel:
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.]]
Stellen Sie sicher, dass der Mittelwert jedes Features (Spalte) 0 ist:
scaled_data.mean(axis = 0)
array([0., 0.])
Stellen Sie sicher, dass der Standard für jedes Feature (Spalte) 1 ist:
scaled_data.std(axis = 0)
array([1., 1.])
Die Mathematik:
UPDATE 08/2019 : Nach Eingabe der Eingabeparameter with_mean
und with_std
zu False
/ habe True
ich hier eine Antwort gegeben: StandardScaler-Unterschied zwischen "with_std = False oder True" und "with_mean = False oder True"
[1.15, 1.15]
wenn ich als Pandas rechne pd.DataFrame(scaled_data).std(0)
?
pd.DataFrame(scaled_data)[0]
bekomme ich eine Reihe mit Name: 0, dtype: float64
und Werten [-1.0, 1.0, -1.0, 1.0]
. Entschuldigung für die Formatierung
StandardScaler
der Algorithmus für maschinelles Lernen dadurch schneller wird oder ob genauere Entscheidungen getroffen werden oder etwas anderes?
Wie man es berechnet:
Hier können Sie mehr lesen:
StandardScaler führt die Aufgabe der Standardisierung aus . Normalerweise enthält ein Datensatz Variablen mit unterschiedlichem Maßstab. Beispielsweise enthält ein Mitarbeiterdatensatz eine AGE-Spalte mit Werten auf der Skala 20-70 und eine SALARY-Spalte mit Werten auf der Skala 10000-80000 .
Da sich diese beiden Spalten im Maßstab unterscheiden, sind sie standardisiert, um beim Erstellen eines Modells für maschinelles Lernen einen gemeinsamen Maßstab zu haben.
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 für alle Daten zu tun, transformieren Sie die Daten so, dass die Varianz einheitlich ist und der Mittelwert der Reihe 0 ist.
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 sicherstellen, dass tatsächlich jede Spalte einzeln behandelt wird. Ich bin jetzt beruhigt und kann nicht finden, welches Beispiel mich beunruhigt hat. Alle Spalten ARE separat skaliert , wie oben von denen beschrieben.
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)
Im Folgenden wird anhand eines einfachen Arbeitsbeispiels erläutert, wie die Standardisierungsberechnung funktioniert. 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 die Standardabweichung beträgt [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
Überprüfen Sie den Mittelwert und die Standardabweichung nach der Standardisierung
Hinweis: -2.77555756e-17 liegt sehr nahe bei 0.
Verweise
Nach dem Anwenden StandardScaler()
hat jede Spalte in X einen Mittelwert von 0 und eine Standardabweichung von 1.
Formeln werden von anderen auf dieser Seite aufgelistet.
Begründung: Einige Algorithmen erfordern Daten, die so aussehen (siehe sklearn-Dokumente ).
each value in the dataset will have the sample mean value subtracted
-- das ist nicht wahr. Der Mittelwert JEDES Merkmals / jeder Spalte wird von den Werten der jeweiligen Spalte abgezogen. Dies erfolgt spaltenweise. Es gibt keinesample mean value subtracted
- siehe meine Antwort unten