يعني K Clusterالبرمجة بلغة R مع مثال
⚡ ملخص ذكي
K- الوسائل Clusterفي لغة البرمجة R، يتم تجميع الملاحظات عن طريق تقليل المسافة بين كل نقطة ومركز مجموعتها. يُبسط هذا الشرح مجموعة بيانات أسعار الحواسيب، ويُحرك الخوارزمية، ويجد قيمة k المثلى باستخدام طريقة الكوع، ويقرأ المجموعات من خلال خريطة حرارية.

ما هي تفاصيل Cluster تحليل؟
Cluster التحليل ينتمي إلى تعليم غير مشرف عليه. المجموعة هي مجموعة من البيانات التي تشترك في سمات متشابهة. يمكننا القول إن تحليل المجموعة يتعلق بالاكتشاف أكثر من التنبؤ. تبحث الآلة عن التشابه في البيانات. على سبيل المثال، يمكنك استخدام تحليل المجموعة للتطبيق التالي:
- تجزئة العملاء: يبحث عن التشابه بين مجموعات العملاء
- تجميع سوق الأوراق المالية: تجميع الأسهم بناءً على الأداء
- تقليل أبعاد مجموعة البيانات عن طريق التجميعping ملاحظات ذات قيم متشابهة
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-Means
تُعدّ خوارزمية K-means أكثر طرق التجميع استخدامًا. يعود تاريخ هذه الخوارزمية إلى خمسينيات القرن الماضي، وقد خضعت للعديد من التحسينات منذ ذلك الحين.
تحاول الخوارزمية العثور على المجموعات عن طريق تقليل المسافة بين الملاحظات، والتي تسمى الأمثل المحلي الحلول. تُقاس المسافات بناءً على إحداثيات المشاهدات. على سبيل المثال، في فضاء ثنائي الأبعاد، تكون الإحداثيات ببساطة x و y.
تعمل الخوارزمية على النحو التالي:
- الخطوة 1: اختر k مركزًا أوليًا عشوائيًا في فضاء الميزات
- الخطوة الثانية: قم بتعيين كل ملاحظة إلى أقرب مركز مجموعة لها، النقطه الوسطىينتج عن ذلك k مجموعة
- الخطوة 3 : Shift النقطه الوسطى الأولية لمتوسط الإحداثيات داخل المجموعة.
- الخطوة 4: تقليل المسافة وفقًا للنقط الوسطى الجديدة. يتم إنشاء حدود جديدة. وهكذا تنتقل الملاحظات من مجموعة إلى أخرى
- كرر حتى لا تغير أي ملاحظة المجموعات
تقيس خوارزمية K-means عادةً المسافة الإقليدية بين ملاحظتين x و y:
تتوفر مقاييس أخرى، مثل مسافة مانهاتن أو مينكوفسكي. تجدر الإشارة إلى أن خوارزمية K-means تُنتج مجموعات مختلفة في كل مرة يتم تشغيلها. تذكر أن التخمينات الأولية عشوائية، ويتم حساب المسافات حتى تصل الخوارزمية إلى تجانس داخل المجموعات. أي أن خوارزمية K-means حساسة للغاية للاختيار الأولي، وما لم يكن عدد المشاهدات والمجموعات صغيرًا، فمن شبه المستحيل الحصول على نفس التجميع.
تحديد عدد المجموعات
من الصعوبات الأخرى التي تواجه خوارزمية k-means اختيار عدد المجموعات. يمكنك تحديد قيمة عالية لـ k، أي عدد كبير من المجموعات، لتحسين التجانس داخل المجموعات، ولكنك بذلك تخاطر المفرط البيانات. يعني التخصيص الزائد انخفاض الأداء بشكل حاد على البيانات الجديدة، لأن النموذج قد حفظ الضوضاء في هذه العينة المحددة بدلاً من النمط الأساسي.
يعتمد عدد المجموعات على طبيعة مجموعة البيانات والصناعة والأعمال وما إلى ذلك. ومع ذلك، هناك قاعدة عامة لاختيار العدد المناسب من المجموعات:
حيث n هو عدد المشاهدات في مجموعة البيانات.
من الناحية العملية، يجدر قضاء بعض الوقت في البحث عن قيمة k التي تناسب احتياجات العمل على أفضل وجه.
سنستخدم مجموعة بيانات أسعار أجهزة الكمبيوتر الشخصية لإجراء تحليل التجميع. تحتوي مجموعة البيانات هذه على 6259 ملاحظة و10 سمات. تراقب مجموعة البيانات أسعار 1993 جهاز كمبيوتر شخصي في الولايات المتحدة من عام 1995 إلى عام 486. المتغيرات هي السعر والسرعة وذاكرة الوصول العشوائي والشاشة والقرص المضغوط وغيرها.
سوف تتصرف على النحو التالي:
- تواريخ الاستيراد
- درب النموذج
- قيم النموذج
تواريخ الاستيراد
لا تُناسب خوارزمية K-means المتغيرات الفئوية، لأنها تعتمد على المسافات، ولا توجد مسافة ذات دلالة بين التصنيفات المنفصلة. لذا، احذف الأعمدة الفئوية الثلاثة (cd، multi، premium) بالإضافة إلى فهرس الصف X. لا تحتوي هذه المجموعة من البيانات على أي قيم مفقودة.
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...
من الإحصاءات الموجزة، يتضح أن البيانات تحتوي على قيم كبيرة. من الممارسات الجيدة قبل استخدام أي طريقة تعتمد على المسافة، توحيد البيانات بحيث يكون لكل متغير قيمة ثابتة. متوسطه صفر وانحرافه المعياري واحد. بدون ذلك، فإن السعر، الذي تصل قيمته إلى الآلاف، سيهيمن على حساب المسافة ولن يكون لحجم الشاشة أي أهمية تقريبًا.
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 تتبع توزيعًا غاوسيًا وتكون متماثلة حول المتوسط.
# Note: speed is deliberately left out of the scaled data frame 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
درب النموذج
في الشكل الثالث، شرحتَ بالتفصيل كيفية عمل الخوارزمية. يمكنك مشاهدة كل خطوة بيانيًا باستخدام حزمة الرسوم المتحركة التي كتبها ييهوي شي، وهو أيضًا مطوّر knitr لـ R Markdown. الحزمة غير متوفرة في قنوات conda، لذا ثبّتها من CRAN.
install.packages("animation")
بعد تحميل المكتبة، يمكنك إضافة .ani بعد kmeans و R سيتم رسم جميع الخطوات. ولأغراض التوضيح، يمكنك فقط تشغيل الخوارزمية باستخدام المتغيرات المعاد قياسها hd وram بثلاث مجموعات.
set.seed(2345) library(animation) kmeans.ani(rescale_df[2:3], 3)
Code تفسير
- 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: ضمن مجموع المربعات، قيمة واحدة لكل مجموعة
- pc_cluster$tot.withinss: مجموع العناصر داخل المجموعة
- pc_cluster$betweenss: مجموع المربعات الكلي مطروحًا منه مجموع المربعات الداخلي
- pc_cluster$size: عدد الملاحظات داخل كل مجموعة
ستستخدم مجموع مجموع المربعات الداخلية (أي مجموع المربعات الداخلية) لحساب العدد الأمثل للمجموعات k. إن إيجاد k مهمة كبيرة بالفعل.
كيفية إيجاد قيمة k المثلى باستخدام طريقة الكوع
إحدى التقنيات لاختيار أفضل k تسمى طريقة الكوعتستخدم هذه الطريقة التجانس داخل المجموعة أو التباين داخل المجموعة لتقييم التباين. بعبارة أخرى، أنت مهتم بنسبة التباين التي يفسرها كل مجموعة. يمكنك أن تتوقع زيادة التباين مع عدد المجموعات، أو بدلاً من ذلك، يتناقص التباين. التحدي الذي نواجهه هو العثور على k الذي يتجاوز العائدات المتناقصة. إن إضافة مجموعة جديدة لا يحسن التباين في البيانات لأنه يتبقى القليل جدًا من المعلومات لتفسيرها.
في هذا البرنامج التعليمي، سنجد هذه النقطة باستخدام مقياس التباين. مجموع المربعات في المجموعات هو مجموع المربعات في القائمة التي يتم إرجاعها بواسطة kmean().
يمكنك إنشاء الرسم البياني للكوع والعثور على k الأمثل على النحو التالي:
- الخطوة 1: إنشاء دالة لحساب المجموع الإجمالي داخل مجموعات مجموع المربعات
- الخطوة الثانية: تشغيل الخوارزمية على نطاق من قيم k
- الخطوة 3: إنشاء إطار بيانات بنتائج الخوارزمية
- الخطوة 4: رسم النتائج
الخطوة 1) إنشاء دالة لحساب المجموع الإجمالي داخل مجموعات مجموع المربعات
يمكنك إنشاء الدالة التي تقوم بتشغيل خوارزمية k-mean وتخزين الإجمالي داخل مجموعات مجموع المربعات
kmean_withinss <- function(k) { cluster <- kmeans(rescale_df, k) return (cluster$tot.withinss) }
Code تفسير
- الوظيفة (ك): قم بتعيين عدد الوسائط في الوظيفة
- kmeans(rescale_df, k): تشغيل الخوارزمية لهذه القيمة من k
- return(cluster$tot.withinss): قم بتخزين الإجمالي داخل مجموع مربعات المجموعات
اختبر الدالة عندما تكون قيمة k تساوي 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)
Code تفسير
- max_k <- 20: اضبط القيمة القصوى لـ k على 20
- sapply(2:max_k, kmean_withinss): قم بتشغيل الدالة kmean_withinss() على نطاق 2:max_k، أي من 2 إلى 20.
الخطوة 3) قم بإنشاء إطار بيانات بنتائج الخوارزمية
بعد كتابة الدالة واختبارها، قم بتشغيلها على النطاق من 2 إلى 20 وقم بتخزين كل قيمة tot.withinss.
# Create a data frame to plot the graph elbow <-data.frame(2:max_k, wss)
Code تفسير
- 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-means بالتجميع.ping بموضوعية، ويترك للخبير مهمة تفسير النتيجة وتسميتها.
كتقييم مسبق، يمكنك فحص حجم المجموعات.
pc_cluster_2$size
الإخراج:
## [1] 608 1596 1231 580 1003 699 542
تحتوي أكبر مجموعة، رقم 2، على 1,596 مشاهدة، بينما تحتوي أصغرها، رقم 7، على 542 جهاز كمبيوتر فقط. قد يكون من الأفضل وجود تجانس بين المجموعات، وإلا فقد يتطلب الأمر إعدادًا أقل دقة للبيانات.
يُتيح لك المكون المركزي تحليلًا أعمق للبيانات. تشير الصفوف إلى ترقيم المجموعات، بينما تشير الأعمدة إلى المتغيرات التي تستخدمها الخوارزمية. تمثل القيم متوسط الدرجات لكل مجموعة في العمود المطلوب. يُسهّل التوحيد القياسي عملية التفسير. تشير القيم الموجبة إلى أن قيمة z لمجموعة معينة أعلى من المتوسط العام. على سبيل المثال، المجموعة 4 لديها أعلى متوسط سعر (price_scal = 1.09)، بينما المجموعة 5 لديها أدنى متوسط (-0.82).
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 -c r 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-Means باستخدام set.seed() و nstart
تشير التعليمات إلى أن خوارزمية k-means تُنتج مجموعات مختلفة في كل تشغيل. هذه ليست مشكلة عابرة، بل هي مشكلة لها حلان قياسيان، ولم يُستخدم أي منهما في الأمثلة المذكورة أعلاه.
1. حدد نقطة البداية باستخدام set.seed(). يتم اختيار المراكز الأولية عشوائيًا، لذا ينتج عن نفس الاستدعاء مجموعات مختلفة في كل مرة. تحديد قيمة ابتدائية يجعل التحليل بأكمله قابلاً للتكرار.
set.seed(123)
pc_cluster_2 <- kmeans(rescale_df, 7)
2. قم بتشغيل عدة عمليات بدء واحتفظ بأفضلها باستخدام nstart. قد يؤدي بدء عشوائي واحد إلى تقارب نحو حل أمثل محلي ضعيف. يقوم الوسيط nstart بتشغيل الخوارزمية عدة مرات من بدايات عشوائية مختلفة، ويعيد الخوارزمية التي تحقق أقل مجموع ضمن مجموع المربعات.
set.seed(123)
pc_cluster_2 <- kmeans(rescale_df, centers = 7, nstart = 25)
يُعدّ استخدام 25 بداية هو التوصية المعتادة، وهو لا يُكلّف الكثير على مجموعة بيانات بهذا الحجم. وبدون ذلك، يصبح منحنى الكوع غير مستقر، لأن كل نقطة على الرسم البياني ناتجة عن بداية واحدة، سواء كانت موفقة أم لا. لذا، يجب كتابة دالة kmean_withinss() المُعرّفة سابقًا على النحو التالي:
kmean_withinss <- function(k) { cluster <- kmeans(rescale_df, centers = k, nstart = 25) return (cluster$tot.withinss) }
3. قم برفع iter.max إذا حذرت الخوارزمية. إذا أبلغ برنامج R عن "عدم التقارب في 10 تكرارات"، فقم بتمرير iter.max = 50 لإعطائه مساحة أكبر.
مقارنة بين خوارزمية K-Means والخوارزمية الهرمية Clusterجي في ر
إن خوارزمية K-means ليست طريقة التجميع الوحيدة المتاحة، وعادةً ما يعتمد الاختيار على حجم البيانات وما إذا كنت تعرف بالفعل عدد المجموعات التي تريدها.
| المعايير | K- الوسائل | الهرمية |
|---|---|---|
| عدد المجموعات | يجب اختيارها مسبقاً | يتم اختيارها لاحقًا عن طريق قطع مخطط التفرع |
| استقرار النتائج | يختلف ذلك باختلاف البداية العشوائية | حتمية |
| التوسعة | يتعامل مع مجموعات بيانات ضخمة للغاية | صراعات تتجاوز بضعة آلاف من الصفوف |
| Cluster شكل | يفترض وجود مجموعات كروية الشكل تقريبًا ومتشابهة في الحجم | أكثر مرونة |
| الناتج | مجموعة مسطحة من الملصقات | مخطط شجري يوضح البنية المتداخلة |
| وظيفة R | kmeans(df, k) | hclust(dist(df)) |
# Hierarchical alternative on the same scaled data hc <- hclust(dist(rescale_df), method = "ward.D2") plot(hc) groups <- cutree(hc, k = 7)
مع وجود 6,259 مشاهدة، يتطلب التجميع الهرمي إنشاء مصفوفة مسافة تضم حوالي 19.6 مليون زوج، ولذلك يُعدّ خوارزمية k-means الخيار الأمثل لهذه المجموعة من البيانات. تجدر الإشارة أيضًا إلى أن خوارزمية k-means تفترض وجود مجموعات متقاربة الحجم وذات شكل كروي تقريبًا؛ وعندما لا يتحقق هذا الافتراض، تعالج خوارزمية DBSCAN الأشكال غير المنتظمة وتحدد القيم الشاذة بدلًا من إجبار كل نقطة على الانضمام إلى مجموعة.
K- الوسائل Clusterفي لغة R: مرجع الدوال
جميع الوظائف المستخدمة في هذا البرنامج التعليمي مدرجة أدناه:
| فئة الإشتراك | الهدف | الوظيفة | حجة |
|---|---|---|---|
| قاعدة | قطار ك يعني | كمينز () | مدافع، ك |
| مجموعة الوصول | kmeans()$العنقود | ||
| Cluster مراكز | kmeans()$مراكز | ||
| Cluster الأحجام | كم يعني()$الحجم | ||
| المجموع ضمن مجموع المربعات | kmeans()$tot.withinss | يستخدم بطريقة الكوع | |
| بين مجموع المربعات | kmeans()$betweenss | ||
| قاعدة | تشغيل قابل للتكرار | set.seed() | القيمة الأولية |
| قاعدة | تثبيت النتيجة | kmeans(df, k, nstart = 25) | nstart |








