R'deki veriler nasıl normalleştirilir


Çoğu durumda, insanlar bir veri kümesindeki değişkenleri “normalleştirmekten” bahsettiklerinde, değişkenin ortalaması 0 ve standart sapması 1 olacak şekilde değerleri ölçeklendirmek istediklerini kastediyorlar.

Değişkenleri standartlaştırmanın en yaygın nedeni, bir tür çok değişkenli analiz gerçekleştirmenizdir (yani, birden fazla yordayıcı değişken ile bir yanıt değişkeni arasındaki ilişkiyi anlamak istemeniz) ve her değişkenin analize eşit şekilde katkıda bulunmasını istemenizdir.

Değişkenler farklı ölçeklerde ölçüldüğünde çoğu zaman analize eşit katkı sağlamazlar. Örneğin bir değişkenin değerleri 0 ile 100.000 arasında değişiyorsa ve başka bir değişkenin değerleri 0 ile 100 arasında değişiyorsa, aralığı daha büyük olan değişkene analizde daha fazla ağırlık verilecektir.

Bu, bir değişkenin maaş gibi bir şeyi (0 ila 100.000 ABD Doları) ölçtüğü ve başka bir değişkenin yaş (0 ila 100 yaş) gibi bir şeyi ölçtüğü durumlarda yaygındır.

Değişkenleri standartlaştırarak her değişkenin analize eşit katkıda bulunduğundan emin olabiliriz. Değişkenleri normalleştirmenin (veya “ölçeklendirmenin”) iki yaygın yolu vardır:

  • Min-Maks normalizasyonu: (X – min(X)) / (max(X) – min(X))
  • Z puanının standardizasyonu: (X – μ) / σ

Daha sonra bu iki tekniğin R’de nasıl uygulanacağını göstereceğiz.

R’de değişkenler nasıl normalleştirilir (veya “ölçeklenir”)

Aşağıdaki örneklerin her biri için, R’deki değişkenlerin nasıl normalleştirileceğini veya ölçeklendirileceğini göstermek için yerleşik R veri kümesi irisini kullanacağız:

 #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-Maks Normalleştirme

Min-max normalizasyonunun formülü şöyledir:

(X – min(X))/(maks(X) – min(X))

Bir değişkenin her değeri için, o değer ile minimum değer arasındaki mesafeyi bulup aralığa böleriz.

Bunu R’de uygulamak için basit bir fonksiyon tanımlayabilir ve ardından bu fonksiyonu istediğimiz iris veri kümesindeki sütunlara uygulamak için laply’yi kullanabiliriz:

 #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

Sütunların her birinin artık 0 ile 1 arasında değerlere sahip olduğunu unutmayın. Ayrıca beşinci sütun “Türler”in bu veri çerçevesinden kaldırıldığını da unutmayın. Aşağıdaki kodu kullanarak kolayca ekleyebiliriz:

 #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 puanı standardizasyonu

Min-max normalizasyon tekniğinin dezavantajı veri değerlerini ortalamaya yaklaştırmasıdır. Aykırı değerlerin diğer değerlerden daha fazla ağırlıklandırılmasını sağlamak istiyorsak, z-puanı standardizasyonunun uygulanması daha iyi bir tekniktir.

Z-puanını standartlaştırma formülü aşağıdaki gibidir:

(X – μ) / σ

Bir değişkenin her bir değeri için, değişkenin ortalama değerini çıkarırız ve ardından değişkenin standart sapmasına böleriz.

Bunu R’de uygulamak için birkaç seçeneğimiz var:

1. Bir değişkeni standartlaştırın

İris veri kümesindeki Sepal.Width gibi bir veri kümesindeki bir değişkeni standartlaştırmak istiyorsak aşağıdaki kodu kullanabiliriz:

 #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

Sepal.Width değerleri artık ortalama 0 ve standart sapma 1 olacak şekilde ölçeklendirilmiştir. Hatta istersek bunu kontrol edebiliriz:

 #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. Ölçek fonksiyonunu kullanarak birden fazla değişkeni standartlaştırın

Birden fazla değişkeni normalleştirmek için ölçek fonksiyonu basitçe kullanılabilir. Örneğin, aşağıdaki kod iris veri kümesinin ilk dört sütununun nasıl ölçeklendirileceğini gösterir:

 #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

Ölçek fonksiyonunun varsayılan olarak bir veri çerçevesindeki her sütunu normalleştirmeye çalıştığını unutmayın. Dolayısıyla, Türler sütunu sayısal olmadığı ve standartlaştırılamadığı için ölçek(iris) kullanmayı denediğimizde bir hata alırız:

 scale(iris)

#Error in colMeans(x, na.rm = TRUE): 'x' must be numeric

Ancak dplyr paketini kullanarak bir veri çerçevesindeki yalnızca belirli değişkenleri standartlaştırırken diğer tüm değişkenleri aynı tutmak mümkündür. Örneğin, aşağıdaki kod Sepal.Width ve Sepal.Length değişkenlerini standartlaştırırken diğer tüm değişkenleri aynı tutar:

 #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

Sepal.Length ve Sepal.Width’in , her iki değişkenin de ortalaması 0 ve standart sapması 1 olacak şekilde standartlaştırıldığını, veri çerçevesindeki diğer üç değişkenin ise değişmediğini unutmayın.

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir