يعني K Clusterجي في R مع مثال
ما هي تفاصيل Cluster تحليل؟
Cluster التحليل هو جزء من تعليم غير مشرف عليه. المجموعة هي مجموعة من البيانات التي تشترك في سمات متشابهة. يمكننا القول إن تحليل المجموعة يتعلق بالاكتشاف أكثر من التنبؤ. تبحث الآلة عن التشابه في البيانات. على سبيل المثال، يمكنك استخدام تحليل المجموعة للتطبيق التالي:
- تجزئة العملاء: يبحث عن التشابه بين مجموعات العملاء
- تجميع سوق الأوراق المالية: تجميع الأسهم بناءً على الأداء
- تقليل أبعاد مجموعة البيانات من خلال تجميع الملاحظات ذات القيم المتشابهة
Clusterإن التحليل ليس صعب التنفيذ، كما أنه مفيد وقابل للتنفيذ بالنسبة للأعمال.
يكمن الاختلاف الأكثر وضوحًا بين التعلم الخاضع للإشراف وغير الخاضع للإشراف في النتائج. يؤدي التعلم غير الخاضع للرقابة إلى إنشاء متغير جديد، وهو التسمية، بينما يتنبأ التعلم تحت الإشراف بالنتيجة. تساعد الآلة الممارس في مهمة تصنيف البيانات على أساس الارتباط الوثيق. الأمر متروك للمحلل للاستفادة من المجموعات وإعطاء اسم لها.
لنأخذ مثالاً لفهم مفهوم التجميع. من أجل التبسيط، نعمل في بُعدين. لديك بيانات حول إجمالي إنفاق العملاء وأعمارهم. لتحسين الإعلان، يريد فريق التسويق إرسال المزيد من رسائل البريد الإلكتروني المستهدفة إلى عملائهم.
في الرسم البياني التالي، يمكنك رسم إجمالي الإنفاق وعمر العملاء.
library(ggplot2) df <- data.frame(age = c(18, 21, 22, 24, 26, 26, 27, 30, 31, 35, 39, 40, 41, 42, 44, 46, 47, 48, 49, 54), spend = c(10, 11, 22, 15, 12, 13, 14, 33, 39, 37, 44, 27, 29, 20, 28, 21, 30, 31, 23, 24) ) ggplot(df, aes(x = age, y = spend)) + geom_point()
نمط مرئي في هذه المرحلة
- في أسفل اليسار، يمكنك رؤية الشباب ذوي القوة الشرائية الأقل
- يعكس الجزء العلوي الأوسط الأشخاص الذين لديهم وظيفة يمكنهم إنفاق المزيد منها
- وأخيرا، كبار السن بميزانية أقل.
في الشكل أعلاه، تقوم بتجميع الملاحظات يدويًا وتحديد كل مجموعة من المجموعات الثلاث. هذا المثال واضح إلى حد ما وواضح للغاية. إذا تمت إضافة ملاحظات جديدة إلى مجموعة البيانات، فيمكنك تسميتها داخل الدوائر. يمكنك تحديد الدائرة بناءً على حكمنا. بدلاً من ذلك، يمكنك استخدام تعلم آلة لتجميع البيانات بشكل موضوعي.
في هذا البرنامج التعليمي، سوف تتعلم كيفية استخدام ك يعني الخوارزمية.
K- يعني الخوارزمية
لا شك أن K-mean هي طريقة التجميع الأكثر شيوعًا. فقد أصدر الباحثون هذه الخوارزمية منذ عقود من الزمان، وتم إجراء العديد من التحسينات عليها.
تحاول الخوارزمية العثور على المجموعات عن طريق تقليل المسافة بين الملاحظات، والتي تسمى الأمثل المحلي حلول. يتم قياس المسافات بناءً على إحداثيات الملاحظات. على سبيل المثال، في الفضاء ثنائي الأبعاد، تكون الإحداثيات بسيطة و.
تعمل الخوارزمية على النحو التالي:
- الخطوة 1: اختر المجموعات في خطة الميزات بشكل عشوائي
- الخطوة 2: تقليل المسافة بين مركز المجموعة والملاحظات المختلفة (النقطه الوسطى). وينتج عن ذلك مجموعات مع الملاحظات
- خطوة 3 Shift النقطه الوسطى الأولية لمتوسط الإحداثيات داخل المجموعة.
- الخطوة 4: تقليل المسافة وفقًا للنقط الوسطى الجديدة. يتم إنشاء حدود جديدة. وهكذا تنتقل الملاحظات من مجموعة إلى أخرى
- كرر حتى لا تغير أي ملاحظة المجموعات
عادةً ما تأخذ وسائل K المسافة الإقليدية بين الميزة والميزة :
تتوفر مقاييس مختلفة مثل مسافة مانهاتن أو مسافة مينلوفسكي. لاحظ أن K-mean يعيد مجموعات مختلفة في كل مرة تقوم فيها بتشغيل الخوارزمية. تذكر أن التخمينات الأولية الأولية عشوائية وتحسب المسافات حتى تصل الخوارزمية إلى التجانس داخل المجموعات. وهذا يعني أن K-mean حساسة للغاية للاختيار الأول، وما لم يكن عدد الملاحظات والمجموعات صغيرًا، فمن المستحيل تقريبًا الحصول على نفس التجميع.
حدد عدد المجموعات
هناك صعوبة أخرى تواجهها مع k-mean وهي اختيار عدد المجموعات. يمكنك تعيين قيمة عالية لـ ، أي عدد كبير من المجموعات، لتحسين الاستقرار ولكن قد ينتهي بك الأمر بـ زائدة البيانات. تعني الإفراط في التجهيز أن أداء النموذج ينخفض بشكل كبير بالنسبة للبيانات الجديدة الواردة. لقد تعلمت الآلة التفاصيل الصغيرة لمجموعة البيانات وتكافح لتعميم النمط العام.
يعتمد عدد المجموعات على طبيعة مجموعة البيانات والصناعة والأعمال وما إلى ذلك. ومع ذلك، هناك قاعدة عامة لاختيار العدد المناسب من المجموعات:
مع يساوي عدد المراقبة في مجموعة البيانات.
بشكل عام، من المثير للاهتمام قضاء بعض الوقت في البحث عن أفضل قيمة تتناسب مع احتياجات العمل.
سنستخدم مجموعة بيانات أسعار أجهزة الكمبيوتر الشخصية لإجراء تحليل التجميع. تحتوي مجموعة البيانات هذه على 6259 ملاحظة و10 سمات. تراقب مجموعة البيانات أسعار 1993 جهاز كمبيوتر شخصي في الولايات المتحدة من عام 1995 إلى عام 486. المتغيرات هي السعر والسرعة وذاكرة الوصول العشوائي والشاشة والقرص المضغوط وغيرها.
سوف تتصرف على النحو التالي:
- تواريخ الاستيراد
- درب النموذج
- قيم النموذج
تواريخ الاستيراد
وسائل K غير مناسبة لمتغيرات العوامل لأنها تعتمد على المسافة والقيم المنفصلة لا تُرجع قيمًا ذات معنى. يمكنك حذف المتغيرات الفئوية الثلاثة في مجموعة البيانات الخاصة بنا. علاوة على ذلك، لا توجد قيم مفقودة في مجموعة البيانات هذه.
library(dplyr) PATH <-"https://raw.githubusercontent.com/guru99-edu/R-Programming/master/computers.csv" df <- read.csv(PATH) %>% select(-c(X, cd, multi, premium)) glimpse(df)
الناتج
## Observations: 6, 259 ## Variables: 7 ## $ price < int > 1499, 1795, 1595, 1849, 3295, 3695, 1720, 1995, 2225, 2... ##$ speed < int > 25, 33, 25, 25, 33, 66, 25, 50, 50, 50, 33, 66, 50, 25, ... ##$ hd < int > 80, 85, 170, 170, 340, 340, 170, 85, 210, 210, 170, 210... ##$ ram < int > 4, 2, 4, 8, 16, 16, 4, 2, 8, 4, 8, 8, 4, 8, 8, 4, 2, 4, ... ##$ screen < int > 14, 14, 15, 14, 14, 14, 14, 14, 14, 15, 15, 14, 14, 14, ... ##$ ads < int > 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, ... ## $ trend <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
من خلال إحصائيات الملخص، يمكنك رؤية أن البيانات تحتوي على قيم كبيرة. من الممارسات الجيدة في حساب المتوسط والمسافة k هو إعادة قياس البيانات بحيث يكون المتوسط مساويًا لواحد والانحراف المعياري يساوي صفر.
summary(df)
الإخراج:
## price speed hd ram ## Min. : 949 Min. : 25.00 Min. : 80.0 Min. : 2.000 ## 1st Qu.:1794 1st Qu.: 33.00 1st Qu.: 214.0 1st Qu.: 4.000 ` ## Median :2144 Median : 50.00 Median : 340.0 Median : 8.000 ## Mean :2220 Mean : 52.01 Mean : 416.6 Mean : 8.287 ## 3rd Qu.:2595 3rd Qu.: 66.00 3rd Qu.: 528.0 3rd Qu.: 8.000 ## Max. :5399 Max. :100.00 Max. :2100.0 Max. :32.000 ## screen ads trend ## Min. :14.00 Min. : 39.0 Min. : 1.00 ## 1st Qu.:14.00 1st Qu.:162.5 1st Qu.:10.00 ## Median :14.00 Median :246.0 Median :16.00 ## Mean :14.61 Mean :221.3 Mean :15.93 ## 3rd Qu.:15.00 3rd Qu.:275.0 3rd Qu.:21.50 ## Max. :17.00 Max. :339.0 Max. :35.00
يمكنك إعادة قياس المتغيرات باستخدام وظيفة المقياس () الخاصة بمكتبة dplyr. يقلل هذا التحويل من تأثير القيم المتطرفة ويسمح بمقارنة الملاحظة الوحيدة بالمتوسط. إذا كانت القيمة الموحدة (أو نقاط ض) عالية، يمكنك أن تكون واثقًا من أن هذه الملاحظة أعلى بالفعل من المتوسط (تشير درجة z الكبيرة إلى أن هذه النقطة بعيدة عن المتوسط من حيث الانحراف المعياري. وتشير درجة z التي تبلغ اثنين إلى أن القيمة هي 2 معيار الانحرافات بعيدًا عن المتوسط. لاحظ أن درجة z تتبع توزيعًا غاوسيًا وتكون متماثلة حول المتوسط.
rescale_df <- df % > % mutate(price_scal = scale(price), hd_scal = scale(hd), ram_scal = scale(ram), screen_scal = scale(screen), ads_scal = scale(ads), trend_scal = scale(trend)) % > % select(-c(price, speed, hd, ram, screen, ads, trend))
تحتوي قاعدة R على وظيفة لتشغيل خوارزمية k المتوسطة. الوظيفة الأساسية للمتوسط k هي:
kmeans(df, k) arguments: -df: dataset used to run the algorithm -k: Number of clusters
درب النموذج
في الشكل الثالث، قمت بتفصيل كيفية عمل الخوارزمية. يمكنك رؤية كل خطوة بيانيًا باستخدام الحزمة الرائعة التي أنشأها Yi Hui (وهو أيضًا منشئ Knit for Rmarkdown). الرسوم المتحركة للحزمة غير متوفرة في مكتبة كوندا. يمكنك استخدام الطريقة الأخرى لتثبيت الحزمة باستخدام install.packages("animation"). يمكنك التحقق من تثبيت الحزمة في مجلد Anaconda الخاص بنا.
install.packages("animation")
بعد تحميل المكتبة، يمكنك إضافة .ani بعد kmeans و R سيتم رسم جميع الخطوات. ولأغراض التوضيح، يمكنك فقط تشغيل الخوارزمية باستخدام المتغيرات المعاد قياسها hd وram بثلاث مجموعات.
set.seed(2345) library(animation) kmeans.ani(rescale_df[2:3], 3)
شرح الكود
- kmeans.ani(rescale_df[2:3], 3): حدد العمودين 2 و3 من مجموعة بيانات rescale_df وقم بتشغيل الخوارزمية بمجموعات k إلى 3. ارسم الرسم المتحرك.
يمكنك تفسير الرسوم المتحركة على النحو التالي:
- الخطوة 1: يختار R ثلاث نقاط بشكل عشوائي
- الخطوة 2: احسب المسافة الإقليدية وارسم المجموعات. لديك مجموعة واحدة باللون الأخضر في الأسفل إلى اليسار ومجموعة كبيرة باللون الأسود في اليمين ومجموعة حمراء بينهما.
- الخطوة 3: احسب مركز الثقل، أي متوسط المجموعات
- كرر ذلك حتى لا تتغير أي بيانات في المجموعة
تقاربت الخوارزمية بعد سبع تكرارات. يمكنك تشغيل خوارزمية k-mean في مجموعة البيانات الخاصة بنا مع خمس مجموعات وتسميتها pc_cluster.
pc_cluster <-kmeans(rescale_df, 5)
- تحتوي القائمة pc_cluster على سبعة عناصر مثيرة للاهتمام:
- pc_cluster$cluster: يشير إلى مجموعة كل ملاحظة
- pc_cluster$centers: مراكز المجموعة
- pc_cluster$totss: مجموع المربعات الإجمالي
- pc_cluster$withinss: ضمن مجموع المربعات. عدد المكونات التي يتم إرجاعها يساوي `k`
- pc_cluster$tot.withinss: مجموع withinss
- pc_clusterbetweenss: المجموع الكلي للمربع ناقص المجموع الداخلي للمربع
- pc_cluster$size: عدد الملاحظات داخل كل مجموعة
ستستخدم مجموع مجموع المربعات الداخلية (أي مجموع المربعات الداخلية) لحساب العدد الأمثل للمجموعات k. إن إيجاد k مهمة كبيرة بالفعل.
الأمثل ك
إحدى التقنيات لاختيار أفضل k تسمى طريقة الكوعتستخدم هذه الطريقة التجانس داخل المجموعة أو التباين داخل المجموعة لتقييم التباين. بعبارة أخرى، أنت مهتم بنسبة التباين التي يفسرها كل مجموعة. يمكنك أن تتوقع زيادة التباين مع عدد المجموعات، أو بدلاً من ذلك، يتناقص التباين. التحدي الذي نواجهه هو العثور على k الذي يتجاوز العائدات المتناقصة. إن إضافة مجموعة جديدة لا يحسن التباين في البيانات لأنه يتبقى القليل جدًا من المعلومات لتفسيرها.
في هذا البرنامج التعليمي، سنجد هذه النقطة باستخدام مقياس التباين. مجموع المربعات في المجموعات هو مجموع المربعات في القائمة التي يتم إرجاعها بواسطة kmean().
يمكنك إنشاء الرسم البياني للكوع والعثور على k الأمثل على النحو التالي:
- الخطوة 1: إنشاء دالة لحساب المجموع الإجمالي داخل مجموعات مجموع المربعات
- الخطوة 2: تشغيل أوقات الخوارزمية
- الخطوة 3: إنشاء إطار بيانات بنتائج الخوارزمية
- الخطوة 4: رسم النتائج
الخطوة 1) إنشاء دالة لحساب المجموع الإجمالي داخل مجموعات مجموع المربعات
يمكنك إنشاء الدالة التي تقوم بتشغيل خوارزمية k-mean وتخزين الإجمالي داخل مجموعات مجموع المربعات
kmean_withinss <- function(k) { cluster <- kmeans(rescale_df, k) return (cluster$tot.withinss) }
شرح الكود
- الوظيفة (ك): قم بتعيين عدد الوسائط في الوظيفة
- kmeans(rescale_df, k): قم بتشغيل الخوارزمية k مرات
- return(cluster$tot.withinss): قم بتخزين الإجمالي داخل مجموع مربعات المجموعات
يمكنك اختبار الدالة مع تساوي 2.
الإخراج:
## Try with 2 cluster
kmean_withinss(2)
الإخراج:
## [1] 27087.07
الخطوة 2) قم بتشغيل الخوارزمية n مرات
سوف تستخدم الدالة sapply() لتشغيل الخوارزمية على مدى k. هذه التقنية أسرع من إنشاء حلقة وتخزين القيمة.
# Set maximum cluster max_k <-20 # Run algorithm over a range of k wss <- sapply(2:max_k, kmean_withinss)
شرح الكود
- max_k <-20: قم بتعيين الحد الأقصى لعدد 20
- sapply(2:max_k, kmean_withinss): قم بتشغيل الدالة kmean_withinss() على نطاق 2:max_k، أي من 2 إلى 20.
الخطوة 3) قم بإنشاء إطار بيانات بنتائج الخوارزمية
بعد إنشاء وظيفتنا واختبارها، يمكنك تشغيل خوارزمية k-mean على نطاق من 2 إلى 20، وتخزين قيم tot.withinss.
# Create a data frame to plot the graph elbow <-data.frame(2:max_k, wss)
شرح الكود
- data.frame(2:max_k, wss): قم بإنشاء إطار بيانات بمخرجات مخزن الخوارزمية في wss
الخطوة 4) ارسم النتائج
يمكنك رسم الرسم البياني لتصور مكان نقطة الكوع
# Plot the graph with gglop ggplot(elbow, aes(x = X2.max_k, y = wss)) + geom_point() + geom_line() + scale_x_continuous(breaks = seq(1, 20, by = 1))
من الرسم البياني، يمكنك أن ترى أن k الأمثل هو سبعة، حيث يبدأ المنحنى في الحصول على عائد متناقص.
بمجرد حصولك على k الأمثل، قم بإعادة تشغيل الخوارزمية مع k يساوي 7 وقم بتقييم المجموعات.
فحص المجموعة
pc_cluster_2 <-kmeans(rescale_df, 7)
كما ذكرنا من قبل، يمكنك الوصول إلى المعلومات المتبقية المثيرة للاهتمام في القائمة التي تم إرجاعها بواسطة kmean().
pc_cluster_2$cluster pc_cluster_2$centers pc_cluster_2$size
إن الجزء التقييمي شخصي ويعتمد على استخدام الخوارزمية. هدفنا هنا هو جمع أجهزة كمبيوتر ذات ميزات مماثلة. يمكن لفني الكمبيوتر القيام بالمهمة يدويًا وتجميع أجهزة الكمبيوتر بناءً على خبرته. ومع ذلك، ستستغرق العملية الكثير من الوقت وستكون عرضة للخطأ. يمكن لخوارزمية K-mean إعداد الحقل له/لها من خلال اقتراح مجموعات.
كتقييم مسبق، يمكنك فحص حجم المجموعات.
pc_cluster_2$size
الإخراج:
## [1] 608 1596 1231 580 1003 699 542
تتكون المجموعة الأولى من 608 ملاحظة، في حين أن المجموعة الأصغر، رقم 4، تحتوي على 580 جهاز كمبيوتر فقط. قد يكون من الجيد أن يكون هناك تجانس بين المجموعات، وإلا فقد تكون هناك حاجة إلى إعداد بيانات أقل.
يمكنك إلقاء نظرة أعمق على البيانات باستخدام المكون المركزي. تشير الصفوف إلى ترقيم المجموعة والأعمدة إلى المتغيرات التي تستخدمها الخوارزمية. القيم هي متوسط النتيجة لكل مجموعة للعمود المهتم. يجعل التوحيد القياسي التفسير أسهل. تشير القيم الإيجابية إلى أن الدرجة المعيارية لمجموعة معينة أعلى من المتوسط الإجمالي. على سبيل المثال، تحتوي المجموعة 2 على أعلى متوسط سعر بين جميع المجموعات.
center <-pc_cluster_2$centers center
الإخراج:
## price_scal hd_scal ram_scal screen_scal ads_scal trend_scal ## 1 -0.6372457 -0.7097995 -0.691520682 -0.4401632 0.6780366 -0.3379751 ## 2 -0.1323863 0.6299541 0.004786730 2.6419582 -0.8894946 1.2673184 ## 3 0.8745816 0.2574164 0.513105797 -0.2003237 0.6734261 -0.3300536 ## 4 1.0912296 -0.2401936 0.006526723 2.6419582 0.4704301 -0.4132057 ## 5 -0.8155183 0.2814882 -0.307621003 -0.3205176 -0.9052979 1.2177279 ## 6 0.8830191 2.1019454 2.168706085 0.4492922 -0.9035248 1.2069855 ## 7 0.2215678 -0.7132577 -0.318050275 -0.3878782 -1.3206229 -1.5490909
يمكنك إنشاء خريطة حرارية باستخدام ggplot لمساعدتنا في إبراز الفرق بين الفئات.
يجب تغيير الألوان الافتراضية لـ ggplot باستخدام مكتبة RColorBrewer. يمكنك استخدام كوندا مكتبة والكود الذي سيتم تشغيله في المحطة:
conda install -cr r-rcolorbrewer
لإنشاء خريطة حرارية، عليك المتابعة في ثلاث خطوات:
- إنشاء إطار بيانات بقيم المركز وإنشاء متغير برقم المجموعة
- أعد تشكيل البيانات باستخدام وظيفة التجميع () الخاصة بمكتبة الترتيب. تريد تحويل البيانات من واسعة إلى طويلة.
- إنشاء لوحة الألوان مع اللونRampوظيفة لوحة ().
الخطوة 1) بناء إطار البيانات
لنقم بإنشاء مجموعة بيانات إعادة التشكيل
library(tidyr) # create dataset with the cluster number cluster <- c(1: 7) center_df <- data.frame(cluster, center) # Reshape the data center_reshape <- gather(center_df, features, values, price_scal: trend_scal) head(center_reshape)
الإخراج:
## cluster features values ## 1 1 price_scal -0.6372457 ## 2 2 price_scal -0.1323863 ## 3 3 price_scal 0.8745816 ## 4 4 price_scal 1.0912296 ## 5 5 price_scal -0.8155183 ## 6 6 price_scal 0.8830191
الخطوة 2) إعادة تشكيل البيانات
يقوم الكود الموجود أدناه بإنشاء لوحة الألوان التي ستستخدمها لرسم الخريطة الحرارية.
library(RColorBrewer) # Create the palette hm.palette <-colorRampPalette(rev(brewer.pal(10, 'RdYlGn')),space='Lab')
الخطوة 3) تصور
يمكنك رسم الرسم البياني ورؤية شكل المجموعات.
# Plot the heat map ggplot(data = center_reshape, aes(x = features, y = cluster, fill = values)) + scale_y_continuous(breaks = seq(1, 7, by = 1)) + geom_tile() + coord_equal() + scale_fill_gradientn(colours = hm.palette(90)) + theme_classic()
الملخص
يمكننا تلخيص خوارزمية k-mean في الجدول أدناه
فئة الإشتراك | الهدف | الوظيفة | حجة |
---|---|---|---|
قاعدة | قطار ك يعني | كمينز () | مدافع، ك |
مجموعة الوصول | kmeans()$العنقود | ||
Cluster مراكز | kmeans()$مراكز | ||
حجم المجموعة | كم يعني()$الحجم |