كيفية تقسيم البيانات في التدريب & #038; مجموعات الاختبار في r (3 طرق)
في كثير من الأحيان، عندما نقوم بتكييف خوارزميات التعلم الآلي مع مجموعات البيانات، نقوم أولاً بتقسيم مجموعة البيانات إلى مجموعة تدريب ومجموعة اختبار.
هناك ثلاث طرق شائعة لتقسيم البيانات إلى مجموعات تدريب واختبار في R:
الطريقة الأولى: استخدم Base R
#make this example reproducible set. seeds (1) #use 70% of dataset as training set and 30% as test set sample <- sample(c( TRUE , FALSE ), nrow(df), replace= TRUE , prob=c( 0.7 , 0.3 )) train <- df[sample, ] test <- df[!sample, ]
الطريقة الثانية: استخدم حزمة caTools
library (caTools) #make this example reproducible set. seeds (1) #use 70% of dataset as training set and 30% as test set sample <- sample. split (df$any_column_name, SplitRatio = 0.7 ) train <- subset(df, sample == TRUE ) test <- subset(df, sample == FALSE )
الطريقة الثالثة: استخدم حزمة dplyr
library (dplyr) #make this example reproducible set. seeds (1) #create ID column df$id <- 1:nrow(df) #use 70% of dataset as training set and 30% as test set train <- df %>% dplyr::sample_frac( 0.70 ) test <- dplyr::anti_join(df, train, by = ' id ')
توضح الأمثلة التالية كيفية استخدام كل طريقة عمليًا مع مجموعة بيانات القزحية المضمنة في R.
مثال 1: تقسيم البيانات إلى مجموعات تدريب واختبار باستخدام Base R
يوضح التعليمة البرمجية التالية كيفية استخدام قاعدة R لتقسيم مجموعة بيانات القزحية إلى مجموعة تدريب واختبار، باستخدام 70% من الصفوف كمجموعة تدريب و30% المتبقية كمجموعة اختبار:
#load iris dataset data(iris) #make this example reproducible set. seeds (1) #Use 70% of dataset as training set and remaining 30% as testing set sample <- sample(c( TRUE , FALSE ), nrow(iris), replace= TRUE , prob=c( 0.7 , 0.3 )) train <- iris[sample, ] test <- iris[!sample, ] #view dimensions of training set sun(train) [1] 106 5 #view dimensions of test set dim(test) [1] 44 5
ومن النتيجة يمكننا أن نرى:
- مجموعة التدريب عبارة عن إطار بيانات مكون من 106 صفًا و5 أعمدة.
- الاختبار عبارة عن كتلة بيانات مكونة من 44 صفًا و5 أعمدة.
نظرًا لأن قاعدة البيانات الأصلية كانت تحتوي على 150 صفًا إجمالاً، فإن مجموعة التدريب تحتوي على 106/150 تقريبًا = 70.6% من الصفوف الأصلية.
يمكننا أيضًا عرض الصفوف القليلة الأولى من مجموعة التدريب إذا أردنا ذلك:
#view first few rows of training set
head(train)
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
5 5.0 3.6 1.4 0.2 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
مثال 2: تقسيم البيانات إلى مجموعات تدريب واختبار باستخدام أدوات caTools
يوضح الكود التالي كيفية استخدام حزمة caTools في R لتقسيم مجموعة بيانات القزحية إلى مجموعة تدريب واختبار، باستخدام 70% من الصفوف كمجموعة تدريب و30% المتبقية كمجموعة اختبار:
library (caTools) #load iris dataset data(iris) #make this example reproducible set. seeds (1) #Use 70% of dataset as training set and remaining 30% as testing set sample <- sample. split (iris$Species, SplitRatio = 0.7 ) train <- subset(iris, sample == TRUE ) test <- subset(iris, sample == FALSE ) #view dimensions of training set sun(train) [1] 105 5 #view dimensions of test set dim(test) [1] 45 5
ومن النتيجة يمكننا أن نرى:
- مجموعة التدريب عبارة عن إطار بيانات مكون من 105 صفوف و5 أعمدة.
- الاختبار عبارة عن كتلة بيانات مكونة من 45 صفًا و5 أعمدة.
مثال 3: تقسيم البيانات إلى مجموعات تدريب واختبار باستخدام dplyr
يوضح الكود التالي كيفية استخدام حزمة caTools في R لتقسيم مجموعة بيانات القزحية إلى مجموعة تدريب واختبار، باستخدام 70% من الصفوف كمجموعة تدريب و30% المتبقية كمجموعة اختبار:
library (dplyr) #load iris dataset data(iris) #make this example reproducible set. seeds (1) #create variable ID iris$id <- 1:nrow(iris) #Use 70% of dataset as training set and remaining 30% as testing set train <- iris %>% dplyr::sample_frac( 0.7 ) test <- dplyr::anti_join(iris, train, by = ' id ') #view dimensions of training set sun(train) [1] 105 6 #view dimensions of test set dim(test) [1] 45 6
ومن النتيجة يمكننا أن نرى:
- مجموعة التدريب عبارة عن إطار بيانات مكون من 105 صفوف و6 أعمدة.
- الاختبار عبارة عن كتلة بيانات مكونة من 45 صفًا و6 أعمدة.
لاحظ أن مجموعات التدريب والاختبار هذه تحتوي على عمود “المعرف” الإضافي الذي قمنا بإنشائه.
تأكد من عدم استخدام هذا العمود (أو إزالته من إطارات البيانات بالكامل) عند ضبط خوارزمية التعلم الآلي.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ العمليات الشائعة الأخرى في R:
كيفية حساب MSE في R
كيفية حساب RMSE في R
كيفية حساب R-squared المعدل في R