So normalisieren sie daten in r
Wenn man von der „Normalisierung“ der Variablen in einem Datensatz spricht, meint man in den meisten Fällen, dass man die Werte so skalieren möchte, dass die Variable einen Mittelwert von 0 und eine Standardabweichung von 1 hat.
Der häufigste Grund für die Standardisierung von Variablen besteht darin, dass Sie eine Art multivariate Analyse durchführen (dh Sie möchten die Beziehung zwischen mehreren Prädiktorvariablen und einer Antwortvariablen verstehen) und möchten, dass jede Variable gleichermaßen zur Analyse beiträgt.
Wenn Variablen auf unterschiedlichen Skalen gemessen werden, tragen sie häufig nicht gleichermaßen zur Analyse bei. Wenn beispielsweise die Werte einer Variablen zwischen 0 und 100.000 liegen und die Werte einer anderen Variablen zwischen 0 und 100, wird der Variablen mit dem größeren Bereich in der Analyse ein höheres Gewicht zugewiesen.
Dies ist häufig der Fall, wenn eine Variable etwa das Gehalt misst (0 bis 100.000 US-Dollar) und eine andere Variable etwa das Alter (0 bis 100 Jahre alt).
Durch die Standardisierung der Variablen können wir sicher sein, dass jede Variable gleichermaßen zur Analyse beiträgt. Es gibt zwei gängige Methoden zum Normalisieren (oder „Skalieren“) von Variablen:
- Min-Max-Normalisierung: (X – min(X)) / (max(X) – min(X))
- Standardisierung des Z-Scores: (X – μ) / σ
Anschließend zeigen wir, wie man diese beiden Techniken in R implementiert.
Wie man Variablen in R normalisiert (oder „skaliert“)
Für jedes der folgenden Beispiele verwenden wir den integrierten R-Datensatz iris , um zu veranschaulichen, wie Variablen in R normalisiert oder skaliert werden:
#view first six rows of iris dataset
head(iris)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.4 3.9 1.7 0.4 setosa
Min-Max-Normalisierung
Die Formel für die Min-Max-Normalisierung lautet:
(X – min(X))/(max(X) – min(X))
Für jeden Wert einer Variablen ermitteln wir einfach den Abstand zwischen diesem Wert und dem Mindestwert und dividieren ihn dann durch den Bereich.
Um dies in R zu implementieren, können wir eine einfache Funktion definieren und diese Funktion dann mit laply auf die Spalten im gewünschten Iris- Datensatz anwenden:
#define Min-Max normalization function min_max_norm <- function (x) { (x - min(x)) / (max(x) - min(x)) } #apply Min-Max normalization to first four columns in iris dataset iris_norm <- as.data.frame(lapply(iris[1:4], min_max_norm)) #view first six rows of normalized iris dataset head(iris_norm) # Sepal.Length Sepal.Width Petal.Length Petal.Width #1 0.22222222 0.6250000 0.06779661 0.04166667 #2 0.16666667 0.4166667 0.06779661 0.04166667 #3 0.11111111 0.5000000 0.05084746 0.04166667 #4 0.08333333 0.4583333 0.08474576 0.04166667 #5 0.19444444 0.6666667 0.06779661 0.04166667 #6 0.30555556 0.7916667 0.11864407 0.12500000
Beachten Sie, dass jede der Spalten jetzt Werte zwischen 0 und 1 aufweist. Beachten Sie außerdem, dass die fünfte Spalte „Art“ aus diesem Datenrahmen entfernt wurde. Wir können es einfach mit dem folgenden Code hinzufügen:
#add back Species column iris_norm$Species <- iris$Species #view first six rows of iris_norm head(iris_norm) # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #1 0.22222222 0.6250000 0.06779661 0.04166667 setosa #2 0.16666667 0.4166667 0.06779661 0.04166667 setosa #3 0.11111111 0.5000000 0.05084746 0.04166667 setosa #4 0.08333333 0.4583333 0.08474576 0.04166667 setosa #5 0.19444444 0.6666667 0.06779661 0.04166667 setosa #6 0.30555556 0.7916667 0.11864407 0.12500000 setosa
Z-Score-Standardisierung
Der Nachteil der Min-Max-Normalisierungstechnik besteht darin, dass die Datenwerte näher an den Mittelwert heranrücken. Wenn wir sicherstellen möchten, dass Ausreißer stärker gewichtet werden als andere Werte, ist eine Z-Score-Standardisierung eine bessere Technik zur Implementierung.
Die Formel zur Standardisierung des Z-Scores lautet wie folgt:
(X – μ) / σ
Für jeden Wert einer Variablen subtrahieren wir einfach den Mittelwert der Variablen und dividieren ihn dann durch die Standardabweichung der Variablen.
Um dies in R umzusetzen, haben wir mehrere Möglichkeiten:
1. Standardisieren Sie eine Variable
Wenn wir einfach eine Variable in einem Datensatz standardisieren möchten, wie Sepal.Width im Iris -Datensatz, können wir den folgenden Code verwenden:
#standardize Sepal.Width iris$Sepal.Width <- (iris$Sepal.Width - mean(iris$Sepal.Width)) / sd(iris$Sepal.Width) head(iris) # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #1 5.1 1.01560199 1.4 0.2 setosa #2 4.9 -0.13153881 1.4 0.2 setosa #3 4.7 0.32731751 1.3 0.2 setosa #4 4.6 0.09788935 1.5 0.2 setosa #5 5.0 1.24503015 1.4 0.2 setosa #6 5.4 1.93331463 1.7 0.4 setosa
Die Sepal.Width -Werte werden nun so skaliert, dass der Mittelwert 0 und die Standardabweichung 1 beträgt. Wir können dies sogar überprüfen, wenn wir möchten:
#find mean of Sepal.Width mean(iris$Sepal.Width) #[1] 2.034094e-16 #basically zero #find standard deviation of Sepal.Width sd(iris$Sepal.Width) #[1] 1
2. Standardisieren Sie mehrere Variablen mithilfe der Skalenfunktion
Um mehrere Variablen zu normalisieren, kann man einfach die Skalierungsfunktion verwenden. Der folgende Code zeigt beispielsweise, wie die ersten vier Spalten des Iris- Datensatzes skaliert werden:
#standardize first four columns of iris dataset
iris_standardize <- as.data.frame(scale(iris[1:4]))
#view first six rows of standardized dataset
head(iris_standardize)
# Sepal.Length Sepal.Width Petal.Length Petal.Width
#1 -0.8976739 1.01560199 -1.335752 -1.311052
#2 -1.1392005 -0.13153881 -1.335752 -1.311052
#3 -1.3807271 0.32731751 -1.392399 -1.311052
#4 -1.5014904 0.09788935 -1.279104 -1.311052
#5 -1.0184372 1.24503015 -1.335752 -1.311052
#6 -0.5353840 1.93331463 -1.165809 -1.048667
Beachten Sie, dass die Skalierungsfunktion standardmäßig versucht, jede Spalte in einem Datenrahmen zu normalisieren. Wir würden also eine Fehlermeldung erhalten, wenn wir versuchen würden , „scale(iris)“ zu verwenden, da die Spalte „Arten“ nicht numerisch ist und nicht standardisiert werden kann:
scale(iris) #Error in colMeans(x, na.rm = TRUE): 'x' must be numeric
Mit dem dplyr- Paket ist es jedoch möglich, nur bestimmte Variablen in einem Datenrahmen zu standardisieren, während alle anderen Variablen gleich bleiben. Der folgende Code standardisiert beispielsweise die Variablen Sepal.Width und Sepal.Length , während alle anderen Variablen gleich bleiben:
#load dplyr package library(dplyr) #standardize Sepal.Width and Sepal.Length iris_new <- iris %>% mutate_each_(list(~scale(.) %>% as.vector), vars = c("Sepal.Width","Sepal.Length")) #view first six rows of new data frame head(iris_new) # Sepal.Length Sepal.Width Petal.Length Petal.Width Species #1 -0.8976739 1.01560199 1.4 0.2 setosa #2 -1.1392005 -0.13153881 1.4 0.2 setosa #3 -1.3807271 0.32731751 1.3 0.2 setosa #4 -1.5014904 0.09788935 1.5 0.2 setosa #5 -1.0184372 1.24503015 1.4 0.2 setosa #6 -0.5353840 1.93331463 1.7 0.4 setosa
Beachten Sie, dass Sepal.Length und Sepal.Width so standardisiert sind, dass beide Variablen einen Mittelwert von 0 und eine Standardabweichung von 1 haben, während die anderen drei Variablen im Datenrahmen unverändert bleiben.