K-Means Clustering هي خوارزمية تعلم غير خاضعة للرقابة تُستخدم لحل مشكلات التجميع في التعلم الآلي أو علم البيانات. في هذا الموضوع، سوف نتعرف على ما هي خوارزمية التجميع K-means، وكيفية عمل الخوارزمية، بالإضافة إلى تنفيذ Python لخوارزمية التجميع k-means.
ما هي خوارزمية K-يعني؟
K-يعني التجميع هو خوارزمية التعلم غير الخاضعة للرقابة ، الذي يقوم بتجميع مجموعة البيانات غير المسماة في مجموعات مختلفة. هنا تحدد K عدد المجموعات المحددة مسبقًا التي يجب إنشاؤها في العملية، كما لو كان K = 2، سيكون هناك مجموعتان، وبالنسبة لـ K = 3، سيكون هناك ثلاث مجموعات، وهكذا.
إنها خوارزمية تكرارية تقسم مجموعة البيانات غير المسماة إلى مجموعات مختلفة بحيث تنتمي كل مجموعة بيانات إلى مجموعة واحدة فقط لها خصائص مماثلة.
فهو يسمح لنا بتجميع البيانات في مجموعات مختلفة وطريقة ملائمة لاكتشاف فئات المجموعات في مجموعة البيانات غير المسماة دون الحاجة إلى أي تدريب.
أنواع مراجع جافا
إنها خوارزمية تعتمد على النقطه الوسطى، حيث ترتبط كل مجموعة بالنقطه الوسطى. الهدف الرئيسي من هذه الخوارزمية هو تقليل مجموع المسافات بين نقطة البيانات والمجموعات المقابلة لها.
تأخذ الخوارزمية مجموعة البيانات غير المسماة كمدخلات، وتقسم مجموعة البيانات إلى عدد k من المجموعات، وتكرر العملية حتى لا تجد أفضل المجموعات. يجب تحديد قيمة k مسبقًا في هذه الخوارزمية.
يعني ك تجمع تؤدي الخوارزمية بشكل أساسي مهمتين:
- يحدد أفضل قيمة لنقاط مركز K أو النقط الوسطى من خلال عملية تكرارية.
- يعين كل نقطة بيانات إلى أقرب مركز k لها. تقوم نقاط البيانات القريبة من مركز k المحدد بإنشاء مجموعة.
ومن ثم فإن كل مجموعة لها نقاط بيانات بها بعض القواسم المشتركة، وهي بعيدة عن المجموعات الأخرى.
يشرح الرسم البياني أدناه عمل خوارزمية التجميع K-means:
كيف تعمل خوارزمية K-Means؟
تم شرح عمل خوارزمية K-Means في الخطوات التالية:
الخطوة 1: حدد الرقم K لتحديد عدد المجموعات.
الخطوة 2: حدد نقاط K عشوائية أو النقط الوسطى. (يمكن أن يكون آخر من مجموعة بيانات الإدخال).
الخطوه 3: قم بتعيين كل نقطة بيانات إلى أقرب النقطه الوسطى، والتي ستشكل مجموعات K المحددة مسبقًا.
الخطوة 4: حساب التباين ووضع النقطه الوسطى الجديدة لكل مجموعة.
الخطوة 5: كرر الخطوات الثالثة، مما يعني إعادة تعيين كل نقطة بيانات إلى أقرب نقطة مركزية جديدة لكل مجموعة.
الخطوة 6: في حالة حدوث أي عملية إعادة تعيين، انتقل إلى الخطوة 4 وإلا انتقل إلى 'إنهاء'.
الخطوة 7 : النموذج جاهز.
دعونا نفهم الخطوات المذكورة أعلاه من خلال النظر في المؤامرات البصرية:
لنفترض أن لدينا متغيرين M1 وM2. ويرد أدناه مخطط مبعثر المحور xy لهذين المتغيرين:
- لنأخذ العدد k من المجموعات، أي K=2، لتحديد مجموعة البيانات ووضعها في مجموعات مختلفة. وهذا يعني أننا سنحاول هنا تجميع مجموعات البيانات هذه في مجموعتين مختلفتين.
- نحتاج إلى اختيار بعض نقاط k العشوائية أو النقطه الوسطى لتشكيل المجموعة. يمكن أن تكون هذه النقاط إما نقاطًا من مجموعة البيانات أو أي نقطة أخرى. لذا، نحن هنا نختار النقطتين أدناه كنقاط k، وهي ليست جزءًا من مجموعة البيانات الخاصة بنا. النظر في الصورة أدناه:
- الآن سنقوم بتعيين كل نقطة بيانات في المخطط المبعثر إلى أقرب نقطة K أو النقطه الوسطى. وسوف نقوم بحسابها من خلال تطبيق بعض الرياضيات التي درسناها لحساب المسافة بين نقطتين. لذلك، سوف نرسم الوسيط بين كلا النقطتين الوسطى. النظر في الصورة أدناه:
يتضح من الصورة أعلاه أن النقاط الموجودة على الجانب الأيسر من الخط قريبة من النقطه الوسطى الزرقاء K1، والنقاط الموجودة على يمين الخط قريبة من النقطه الوسطى الصفراء. دعونا نلونها باللونين الأزرق والأصفر للحصول على رؤية واضحة.
- وبما أننا نحتاج إلى العثور على المجموعة الأقرب، فسوف نكرر العملية بالاختيار النقطه الوسطى الجديدة . لاختيار النقط الوسطى الجديدة، سوف نقوم بحساب مركز ثقل هذه النقط الوسطى، وسوف نجد النقط الوسطى الجديدة على النحو التالي:
- بعد ذلك، سنقوم بإعادة تعيين كل نقطة بيانات إلى النقطه الوسطى الجديدة. لهذا، سوف نكرر نفس العملية لإيجاد خط الوسط. الوسيط سيكون مثل الصورة التالية:
من الصورة أعلاه، يمكننا أن نرى نقطة صفراء واحدة على الجانب الأيسر من الخط، ونقطتين زرقاء على يمين الخط. لذلك، سيتم تخصيص هذه النقاط الثلاث للنقط الوسطى الجديدة.
نظرًا لحدوث إعادة التعيين، سننتقل مرة أخرى إلى الخطوة 4، وهي العثور على النقط الوسطى الجديدة أو نقاط K.
- سنكرر العملية بإيجاد مركز ثقل النقط الوسطى، وبالتالي ستكون النقط الوسطى الجديدة كما هو موضح في الصورة أدناه:
- نظرًا لأننا حصلنا على النقط الوسطى الجديدة، فسوف نرسم الخط المتوسط مرة أخرى ونعيد تعيين نقاط البيانات. وبالتالي ستكون الصورة:
- يمكننا أن نرى في الصورة أعلاه؛ لا توجد نقاط بيانات مختلفة على جانبي الخط، مما يعني أن النموذج الخاص بنا قد تم تشكيله. النظر في الصورة أدناه:
بما أن نموذجنا جاهز، فيمكننا الآن إزالة النقط الوسطى المفترضة، وستكون المجموعتان الأخيرتان كما هو موضح في الصورة أدناه:
كيفية اختيار قيمة 'عدد K من المجموعات' في K-means Clustering؟
يعتمد أداء خوارزمية التجميع K-means على المجموعات عالية الكفاءة التي تشكلها. لكن اختيار العدد الأمثل للمجموعات مهمة كبيرة. هناك بعض الطرق المختلفة للعثور على العدد الأمثل للمجموعات، لكننا هنا نناقش الطريقة الأكثر ملاءمة للعثور على عدد المجموعات أو قيمة K. الطريقة موضحة أدناه:
طريقة الكوع
تعد طريقة الكوع إحدى الطرق الأكثر شيوعًا للعثور على العدد الأمثل للمجموعات. تستخدم هذه الطريقة مفهوم قيمة WCSS. WCSS تمثل ضمن مجموع الكتلة من المربعات ، الذي يحدد إجمالي الاختلافات داخل المجموعة. صيغة حساب قيمة WCSS (لثلاث مجموعات) موضحة أدناه:
WCSS= ∑صأنا في المجموعة 1المسافة (صأناج1)2+∑صأنا في المجموعة 2المسافة (صأناج2)2+∑صأنا في CLuster3المسافة (صأناج3)2في الصيغة المذكورة أعلاه من WCSS،
∑صأنا في المجموعة 1المسافة (صأناج1)2: هو مجموع مربع المسافات بين كل نقطة بيانات ونقطتها الوسطى داخل المجموعة 1 ونفس الشيء بالنسبة للمصطلحين الآخرين.
لقياس المسافة بين نقاط البيانات والنقطه الوسطى، يمكننا استخدام أي طريقة مثل المسافة الإقليدية أو مسافة مانهاتن.
للعثور على القيمة المثلى للمجموعات، تتبع طريقة الكوع الخطوات التالية:
- يقوم بتنفيذ تجميع وسائل K على مجموعة بيانات معينة لقيم K مختلفة (تتراوح من 1 إلى 10).
- لكل قيمة K، يتم حساب قيمة WCSS.
- يرسم منحنى بين قيم WCSS المحسوبة وعدد المجموعات K.
- نقطة الانحناء الحادة أو نقطة من المخطط تشبه الذراع، فتعتبر تلك النقطة أفضل قيمة لـ K.
وبما أن الرسم البياني يوضح الانحناء الحاد الذي يشبه المرفق، فمن هنا تُعرف بطريقة الكوع. يبدو الرسم البياني لطريقة الكوع كما في الصورة أدناه:
ملحوظة: يمكننا اختيار عدد المجموعات المساوية لنقاط البيانات المحددة. إذا اخترنا عدد المجموعات المساوي لنقاط البيانات، فإن قيمة WCSS تصبح صفرًا، وستكون تلك نقطة نهاية المخطط.
تنفيذ بايثون لخوارزمية التجميع باستخدام K
في القسم أعلاه، ناقشنا خوارزمية K-means، والآن دعونا نرى كيف يمكن تنفيذها باستخدامها بايثون .
قبل التنفيذ، دعونا نفهم نوع المشكلة التي سنحلها هنا. لذا، لدينا مجموعة بيانات عملاء_المول وهي بيانات العملاء الذين يزورون المركز التجاري ويقضون فيه.
في مجموعة البيانات المحددة، لدينا معرف_الزبون، والجنس، والعمر، والدخل السنوي ($)، ونقاط الإنفاق (وهي القيمة المحسوبة للمبلغ الذي أنفقه العميل في المركز التجاري، فكلما زادت القيمة، زاد إنفاقه). من مجموعة البيانات هذه، نحتاج إلى حساب بعض الأنماط، لأنها طريقة غير خاضعة للرقابة، لذلك لا نعرف ما يجب حسابه بالضبط.
وفيما يلي الخطوات الواجب اتباعها للتنفيذ:
الخطوة 1: خطوة المعالجة المسبقة للبيانات
ستكون الخطوة الأولى هي المعالجة المسبقة للبيانات، كما فعلنا في موضوعاتنا السابقة حول الانحدار والتصنيف. لكن بالنسبة لمشكلة التجميع، سيكون الأمر مختلفًا عن النماذج الأخرى. دعونا نناقش الأمر:
كما فعلنا في المواضيع السابقة، أولاً، سنقوم باستيراد المكتبات الخاصة بنموذجنا، والتي تعد جزءًا من المعالجة المسبقة للبيانات. وفيما يلي التعليمات البرمجية:
# importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
في الكود أعلاه، numpy قمنا باستيرادها لحساب الرياضيات الأداء، matplotlib هو لتخطيط الرسم البياني، و الباندا مخصصة لإدارة مجموعة البيانات.
بعد ذلك، سنقوم باستيراد مجموعة البيانات التي نحتاج إلى استخدامها. إذن، نحن هنا نستخدم مجموعة بيانات Mall_Customer_data.csv. ويمكن استيراده باستخدام الكود أدناه:
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
من خلال تنفيذ سطور التعليمات البرمجية المذكورة أعلاه، سنحصل على مجموعة البيانات الخاصة بنا في Spyder IDE. تبدو مجموعة البيانات مثل الصورة أدناه:
من مجموعة البيانات المذكورة أعلاه، نحتاج إلى العثور على بعض الأنماط فيها.
هنا لا نحتاج إلى أي متغير تابع لخطوة المعالجة المسبقة للبيانات لأنها مشكلة تجميع، وليس لدينا أي فكرة عما يجب تحديده. لذلك سنقوم فقط بإضافة سطر من التعليمات البرمجية لمصفوفة الميزات.
x = dataset.iloc[:, [3, 4]].values
كما نرى، نحن نستخرج 3 فقطبحث وتطويرو 4ذميزة. وذلك لأننا نحتاج إلى مخطط ثنائي الأبعاد لتصور النموذج، وبعض الميزات غير مطلوبة، مثل customer_id.
الخطوة الثانية: إيجاد العدد الأمثل للمجموعات باستخدام طريقة الكوع
في الخطوة الثانية، سنحاول العثور على العدد الأمثل للمجموعات لمشكلة التجميع لدينا. لذا، كما ناقشنا أعلاه، سنستخدم هنا طريقة الكوع لهذا الغرض.
كما نعلم، تستخدم طريقة الكوع مفهوم WCSS لرسم المخطط من خلال رسم قيم WCSS على المحور Y وعدد المجموعات على المحور X. لذلك سنقوم بحساب قيمة WCSS لقيم k المختلفة التي تتراوح من 1 إلى 10. وفيما يلي الكود الخاص بها:
#finding optimal number of clusters using the elbow method from sklearn.cluster import KMeans wcss_list= [] #Initializing the list for the values of WCSS #Using for loop for iterations from 1 to 10. for i in range(1, 11): kmeans = KMeans(n_clusters=i, init='k-means++', random_state= 42) kmeans.fit(x) wcss_list.append(kmeans.inertia_) mtp.plot(range(1, 11), wcss_list) mtp.title('The Elobw Method Graph') mtp.xlabel('Number of clusters(k)') mtp.ylabel('wcss_list') mtp.show()
كما نرى في الكود أعلاه، فقد استخدمنا وسائل K فئة sklearn. مكتبة الكتلة لتشكيل المجموعات.
بعد ذلك، قمنا بإنشاء wcss_list متغير لتهيئة قائمة فارغة، والتي تستخدم لاحتواء قيمة wcss المحسوبة لقيم مختلفة من k تتراوح من 1 إلى 10.
بعد ذلك، قمنا بتهيئة حلقة for للتكرار على قيمة k مختلفة تتراوح من 1 إلى 10؛ نظرًا لأن حلقة for في Python، تستبعد الحد الصادر، لذلك يتم اعتبارها 11 لتشمل 10ذقيمة.
الجزء المتبقي من الكود مشابه لما فعلناه في المواضيع السابقة، حيث قمنا بتركيب النموذج على مصفوفة من الميزات ثم رسمنا الرسم البياني بين عدد المجموعات وWCSS.
انتاج: بعد تنفيذ الكود أعلاه سنحصل على النتيجة التالية:
من المخطط أعلاه، يمكننا أن نرى أن نقطة الكوع عند 5. وبالتالي فإن عدد العناقيد هنا سيكون 5.
الخطوة 3: تدريب خوارزمية K-means على مجموعة بيانات التدريب
وبما أننا حصلنا على عدد المجموعات، فيمكننا الآن تدريب النموذج على مجموعة البيانات.
لتدريب النموذج، سنستخدم نفس السطرين من التعليمات البرمجية التي استخدمناها في القسم أعلاه، ولكن هنا بدلاً من استخدام i، سنستخدم 5، لأننا نعلم أن هناك 5 مجموعات يجب تشكيلها. وفيما يلي التعليمات البرمجية:
#training the K-means model on a dataset kmeans = KMeans(n_clusters=5, init='k-means++', random_state= 42) y_predict= kmeans.fit_predict(x)
السطر الأول هو نفسه المذكور أعلاه لإنشاء كائن من فئة KMeans.
في السطر الثاني من التعليمات البرمجية، قمنا بإنشاء المتغير التابع y_predict لتدريب النموذج.
من خلال تنفيذ الأسطر المذكورة أعلاه من التعليمات البرمجية، سوف نحصل على المتغير y_predict. يمكننا التحقق من ذلك أدناه المستكشف المتغير الخيار في سبايدر IDE. يمكننا الآن مقارنة قيم y_predict مع مجموعة البيانات الأصلية الخاصة بنا. النظر في الصورة أدناه:
من الصورة أعلاه، يمكننا الآن أن نربط أن معرف العميل 1 ينتمي إلى مجموعة
3 (بما أن الفهرس يبدأ من 0، وبالتالي سيتم اعتبار 2 كـ 3)، و2 ينتمي إلى المجموعة 4، وهكذا.
الخطوة 4: تصور المجموعات
الخطوة الأخيرة هي تصور المجموعات. بما أن لدينا 5 مجموعات في نموذجنا، فسوف نتصور كل مجموعة واحدة تلو الأخرى.
لتصور المجموعات، سيتم استخدام مخطط مبعثر باستخدام وظيفة mtp.scatter() الخاصة بـ matplotlib.
Mysql تغيير نوع العمود
#visulaizing the clusters mtp.scatter(x[y_predict == 0, 0], x[y_predict == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') #for first cluster mtp.scatter(x[y_predict == 1, 0], x[y_predict == 1, 1], s = 100, c = 'green', label = 'Cluster 2') #for second cluster mtp.scatter(x[y_predict== 2, 0], x[y_predict == 2, 1], s = 100, c = 'red', label = 'Cluster 3') #for third cluster mtp.scatter(x[y_predict == 3, 0], x[y_predict == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') #for fourth cluster mtp.scatter(x[y_predict == 4, 0], x[y_predict == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') #for fifth cluster mtp.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroid') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show()
في سطور التعليمات البرمجية أعلاه، كتبنا تعليمات برمجية لكل مجموعة، تتراوح من 1 إلى 5. الإحداثي الأول لـ mtp.scatter، أي x[y_predict == 0, 0] يحتوي على قيمة x لإظهار مصفوفة قيم الميزات، ويتراوح y_predict من 0 إلى 1.
انتاج:
تُظهر صورة الإخراج بوضوح المجموعات الخمس المختلفة بألوان مختلفة. يتم تشكيل المجموعات بين معلمتين من مجموعة البيانات؛ الدخل السنوي للعملاء والإنفاق. يمكننا تغيير الألوان والتسميات حسب المتطلبات أو الاختيار. ويمكننا أيضاً أن نلاحظ بعض النقاط من الأنماط المذكورة أعلاه، وهي مذكورة أدناه:
- توضح المجموعة 2 أن العميل لديه دخل مرتفع ولكن إنفاقه منخفض، لذلك يمكننا تصنيفهم على أنهم حذر .
- تُظهر المجموعة 3 الدخل المنخفض وكذلك الإنفاق المنخفض بحيث يمكن تصنيفها على أنها معقولة.
- تُظهر المجموعة 4 العملاء ذوي الدخل المنخفض والإنفاق المرتفع جدًا بحيث يمكن تصنيفهم على أنهم غير مبالي .
- تُظهر المجموعة 5 العملاء ذوي الدخل المرتفع والإنفاق المرتفع بحيث يمكن تصنيفهم على أنهم مستهدفون، ويمكن أن يكون هؤلاء العملاء العملاء الأكثر ربحية لمالك المركز التجاري.