كيفية تطبيع البيانات في r


في معظم الحالات، عندما يتحدث الأشخاص عن “تطبيع” المتغيرات في مجموعة بيانات، فإنهم يقصدون أنهم يريدون قياس القيم بحيث يكون للمتغير متوسط 0 وانحراف معياري عن 1.

السبب الأكثر شيوعًا لتوحيد المتغيرات هو عند قيامك بإجراء نوع من التحليل متعدد المتغيرات (على سبيل المثال، أنك تريد فهم العلاقة بين متغيرات التوقع المتعددة ومتغير الاستجابة) وتريد أن يساهم كل متغير بشكل متساوٍ في التحليل.

عندما يتم قياس المتغيرات على مستويات مختلفة، فإنها غالبا لا تساهم بشكل متساو في التحليل. على سبيل المثال، إذا كانت قيم متغير واحد تتراوح من 0 إلى 100000 وقيم متغير آخر تتراوح من 0 إلى 100، فسيتم تعيين وزن أكبر للمتغير ذو النطاق الأكبر في التحليل.

يعد هذا أمرًا شائعًا عندما يقيس أحد المتغيرات شيئًا مثل الراتب (من 0 إلى 100000 دولار) ويقيس متغير آخر شيئًا مثل العمر (من 0 إلى 100 عام).

ومن خلال توحيد المتغيرات، يمكننا التأكد من أن كل متغير يساهم بالتساوي في التحليل. هناك طريقتان شائعتان لتطبيع (أو “قياس”) المتغيرات:

  • التطبيع من الحد الأدنى إلى الحد الأقصى: (X – min(X)) / (max(X) – min(X))
  • توحيد النتيجة Z: (X – μ) / σ

سنبين بعد ذلك كيفية تنفيذ هاتين التقنيتين في R.

كيفية تطبيع (أو “قياس”) المتغيرات في R

لكل من الأمثلة التالية، سوف نستخدم مجموعة بيانات R المضمنة لتوضيح كيفية تسوية أو قياس المتغيرات في R:

 #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

التطبيع الحد الأدنى والحد الأقصى

صيغة التطبيع الأدنى-الأقصى هي:

(X – دقيقة (X))/(الحد الأقصى (X) – دقيقة (X))

بالنسبة لكل قيمة للمتغير، فإننا ببساطة نوجد المسافة بين تلك القيمة وأقل قيمة، ثم نقسمها على المدى.

لتنفيذ ذلك في R، يمكننا تحديد دالة بسيطة ثم استخدام laply لتطبيق تلك الوظيفة على الأعمدة في مجموعة بيانات القزحية التي نريدها:

 #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

لاحظ أن كل عمود يحتوي الآن على قيم تتراوح بين 0 و1. ولاحظ أيضًا أنه تمت إزالة العمود الخامس “الأنواع” من إطار البيانات هذا. يمكننا إضافته بسهولة باستخدام الكود التالي:

 #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

عيب تقنية التطبيع min-max هو أنها تقرب قيم البيانات من المتوسط. إذا أردنا التأكد من أن القيم المتطرفة مرجحة أكثر من القيم الأخرى، فإن توحيد النقاط z هو أسلوب أفضل للتنفيذ.

صيغة توحيد درجة z هي كما يلي:

(X – μ) / σ

بالنسبة لكل قيمة للمتغير، نقوم ببساطة بطرح القيمة المتوسطة للمتغير ثم نقسمها على الانحراف المعياري للمتغير.

لتنفيذ ذلك في R، لدينا عدة خيارات:

1. توحيد المتغير

إذا أردنا ببساطة توحيد متغير في مجموعة بيانات، مثل Sepal.Width في مجموعة بيانات القزحية ، فيمكننا استخدام الكود التالي:

 #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 بحيث يكون المتوسط 0 والانحراف المعياري 1. ويمكننا أيضًا التحقق من ذلك إذا أردنا:

 #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. توحيد المتغيرات المتعددة باستخدام دالة المقياس

لتطبيع متغيرات متعددة، يمكن للمرء ببساطة استخدام وظيفة المقياس . على سبيل المثال، يوضح التعليمة البرمجية التالية كيفية قياس الأعمدة الأربعة الأولى من مجموعة بيانات القزحية :

 #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

لاحظ أن دالة القياس ، بشكل افتراضي، تحاول تسوية كل عمود في إطار البيانات. لذا، سنحصل على خطأ إذا حاولنا استخدام مقياس (القزحية) لأن عمود الأنواع ليس رقميًا ولا يمكن توحيده:

 scale(iris)

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

ومع ذلك، من الممكن توحيد متغيرات معينة فقط في إطار البيانات مع الحفاظ على جميع المتغيرات الأخرى كما هي باستخدام الحزمة dplyr . على سبيل المثال، تعمل التعليمة البرمجية التالية على توحيد متغيرات Sepal.Width و Sepal.Length مع الحفاظ على جميع المتغيرات الأخرى كما هي:

 #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 و Sepal.Width بحيث يكون لكلا المتغيرين متوسط 0 وانحراف معياري 1، بينما تظل المتغيرات الثلاثة الأخرى في إطار البيانات دون تغيير.

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *