تحليل التمييز التربيعي في r (خطوة بخطوة)
التحليل التمييزي التربيعي هو طريقة يمكنك استخدامها عندما يكون لديك مجموعة من المتغيرات المتوقعة وتريد تصنيف متغير الاستجابة إلى فئتين أو أكثر. ويعتبر المعادل غير الخطي للتحليل التمييزي الخطي .
يقدم هذا البرنامج التعليمي مثالاً خطوة بخطوة لكيفية إجراء تحليل التمييز التربيعي في R.
الخطوة 1: تحميل المكتبات الضرورية
أولاً، سنقوم بتحميل المكتبات اللازمة لهذا المثال:
library (MASS)
library (ggplot2)
الخطوة 2: تحميل البيانات
في هذا المثال، سوف نستخدم مجموعة بيانات القزحية المضمنة في R. ويوضح التعليمة البرمجية التالية كيفية تحميل مجموعة البيانات هذه وعرضها:
#attach iris dataset to make it easy to work with attach(iris) #view structure of dataset str(iris) 'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width: num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... $Petal.Width: num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... $ Species: Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 ...
يمكننا أن نرى أن مجموعة البيانات تحتوي على 5 متغيرات و150 ملاحظة في المجموع.
في هذا المثال، سنقوم ببناء نموذج تحليل تمييزي تربيعي لتصنيف الأنواع التي تنتمي إليها زهرة معينة.
سوف نستخدم المتغيرات المتوقعة التالية في النموذج:
- طول
- عرض
- البتلة.الطول
- البتلة.العرض
وسنستخدمها للتنبؤ بمتغير استجابة الأنواع ، الذي يدعم الفئات الثلاثة المحتملة التالية:
- سيتوسا
- المبرقشة
- فرجينيا
الخطوة 3: إنشاء عينات التدريب والاختبار
بعد ذلك، سنقوم بتقسيم مجموعة البيانات إلى مجموعة تدريب لتدريب النموذج عليها ومجموعة اختبار لاختبار النموذج عليها:
#make this example reproducible set.seed(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, ]
الخطوة 4: ضبط نموذج QDA
بعد ذلك، سوف نستخدم الدالة qda() من الحزمة MASS لتكييف نموذج QDA مع بياناتنا:
#fit QDA model model <- qda(Species~., data=train) #view model output model Call: qda(Species ~ ., data = train) Prior probabilities of groups: setosa versicolor virginica 0.3207547 0.3207547 0.3584906 Group means: Sepal.Length Sepal.Width Petal.Length Petal.Width setosa 4.982353 3.411765 1.482353 0.2411765 versicolor 5.994118 2.794118 4.358824 1.3676471 virginica 6.636842 2.973684 5.592105 2.0552632
وإليك كيفية تفسير نتائج النموذج:
الاحتمالات السابقة للمجموعة: تمثل نسب كل نوع في مجموعة التدريب. على سبيل المثال، 35.8% من جميع الملاحظات في مجموعة التدريب كانت لأنواع فيرجينيكا .
متوسطات المجموعة: تعرض متوسط قيم كل متغير متنبئ لكل نوع.
الخطوة 5: استخدم النموذج لعمل تنبؤات
بمجرد أن نلائم النموذج باستخدام بيانات التدريب الخاصة بنا، يمكننا استخدامه للتنبؤ ببيانات الاختبار الخاصة بنا:
#use QDA model to make predictions on test data predicted <- predict (model, test) names(predicted) [1] "class" "posterior" "x"
يؤدي هذا إلى إرجاع قائمة بمتغيرين:
- الطبقة: الطبقة المتوقعة
- الخلفي: الاحتمال الخلفي الذي تنتمي إليه الملاحظة لكل فئة
يمكننا تصور كل من هذه النتائج بسرعة للملاحظات الستة الأولى في مجموعة بيانات الاختبار الخاصة بنا:
#view predicted class for first six observations in test set head(predicted$class) [1] setosa setosa setosa setosa setosa setosa Levels: setosa versicolor virginica #view posterior probabilities for first six observations in test set head(predicted$posterior) setosa versicolor virginica 4 1 7.224770e-20 1.642236e-29 6 1 6.209196e-26 8.550911e-38 7 1 1.248337e-21 8.132700e-32 15 1 2.319705e-35 5.094803e-50 17 1 1.396840e-29 9.586504e-43 18 1 7.581165e-25 8.611321e-37
الخطوة 6: تقييم النموذج
يمكننا استخدام الكود التالي لمعرفة النسبة المئوية للملاحظات التي تنبأ بها نموذج QDA بشكل صحيح حول الأنواع:
#find accuracy of model
mean(predicted$class==test$Species)
[1] 1
وتبين أن النموذج تنبأ بشكل صحيح بالأنواع بنسبة 100% من الملاحظات في مجموعة بيانات الاختبار الخاصة بنا.
في العالم الحقيقي، نادرًا ما يتنبأ نموذج QDA بنتائج كل فئة بشكل صحيح، ولكن مجموعة بيانات القزحية هذه مبنية ببساطة بطريقة تميل خوارزميات التعلم الآلي إلى الأداء بشكل جيد للغاية.
يمكنك العثور على رمز R الكامل المستخدم في هذا البرنامج التعليمي هنا .