التجميع الهرمي هو خوارزمية أخرى للتعلم الآلي غير خاضعة للرقابة، والتي تُستخدم لتجميع مجموعات البيانات غير المسماة في مجموعة وتُعرف أيضًا باسم التحليل العنقودي الهرمي أو HCA.
في هذه الخوارزمية قمنا بتطوير التسلسل الهرمي للمجموعات على شكل شجرة، ويعرف هذا الهيكل على شكل شجرة باسم dendrogram .
سلسلة حتى الآن تحويل
في بعض الأحيان قد تبدو نتائج التجميع والتكتل الهرمي متشابهة، لكن كلاهما يختلف اعتمادًا على كيفية عملهما. حيث لا يوجد أي شرط لتحديد عدد المجموعات مسبقًا كما فعلنا في خوارزمية K-Means.
تتضمن تقنية التجميع الهرمي طريقتين:
لماذا التجمع الهرمي؟
كما لدينا بالفعل غيرها تجمع خوارزميات مثل K-يعني التجميع فلماذا نحتاج إلى التجميع الهرمي؟ لذلك، كما رأينا في طريقة K-means التجميعية، هناك بعض التحديات مع هذه الخوارزمية، وهي عبارة عن عدد محدد مسبقًا من المجموعات، وهي تحاول دائمًا إنشاء مجموعات من نفس الحجم. لحل هذين التحديين، يمكننا اختيار خوارزمية التجميع الهرمية لأننا، في هذه الخوارزمية، لا نحتاج إلى معرفة عدد المجموعات المحدد مسبقًا.
في هذا الموضوع، سنناقش خوارزمية التجميع الهرمي التجميعي.
التكتل الهرمي التجميعي
تعد خوارزمية التجميع الهرمية التكتلية مثالًا شائعًا على HCA. لتجميع مجموعات البيانات في مجموعات، فإنه يتبع نهج من أسفل إلى أعلى . وهذا يعني أن هذه الخوارزمية تعتبر كل مجموعة بيانات بمثابة مجموعة واحدة في البداية، ثم تبدأ في دمج أقرب زوج من المجموعات معًا. يقوم بذلك حتى يتم دمج كافة المجموعات في مجموعة واحدة تحتوي على كافة مجموعات البيانات.
يتم تمثيل هذا التسلسل الهرمي للمجموعات في شكل مخطط الأشجار.
كيف تعمل المجموعات الهرمية التكتلية؟
يمكن شرح عمل خوارزمية AHC باستخدام الخطوات التالية:
ملاحظة: لفهم التجميع الهرمي بشكل أفضل، يُنصح بإلقاء نظرة على التجميع بالوسائل k
قياس المسافة بين مجموعتين
وكما رأينا فإن أقرب مسافة بين المجموعتين أمر بالغ الأهمية للتجميع الهرمي. هناك طرق مختلفة لحساب المسافة بين مجموعتين، وهذه الطرق تحدد قاعدة التجميع. وتسمى هذه التدابير طرق الربط . بعض طرق الربط الشائعة مذكورة أدناه:
ومن خلال الأساليب المذكورة أعلاه، يمكننا تطبيق أي منها وفقًا لنوع المشكلة أو متطلبات العمل.
ووكينغ ديندروغرام في المجموعات الهرمية
مخطط الأشجار عبارة عن بنية تشبه الشجرة تُستخدم بشكل أساسي لتخزين كل خطوة كذاكرة تنفذها خوارزمية HC. في مخطط dendrogram، يُظهر المحور Y المسافات الإقليدية بين نقاط البيانات، ويُظهر المحور X جميع نقاط البيانات الخاصة بمجموعة البيانات المحددة.
يمكن شرح عمل مخطط الأشجار باستخدام الرسم البياني أدناه:
في الرسم البياني أعلاه، يوضح الجزء الأيسر كيفية إنشاء التجمعات في التجمعات التكتلية، بينما يعرض الجزء الأيمن مخطط الأشجار المقابل.
- كما ناقشنا أعلاه، أولاً، تتحد نقطتا البيانات P2 وP3 معًا وتشكلان مجموعة، وبالتالي يتم إنشاء مخطط شجري يربط P2 وP3 بشكل مستطيل. يتم تحديد الارتفاع وفقًا للمسافة الإقليدية بين نقاط البيانات.
- في الخطوة التالية، يشكل P5 وP6 مجموعة، ويتم إنشاء مخطط الأشجار المقابل. وهي أعلى من السابقة، حيث أن المسافة الإقليدية بين P5 وP6 أكبر قليلاً من P2 وP3.
- مرة أخرى، يتم إنشاء اثنين من المخططات الشجرية الجديدة التي تجمع بين P1 وP2 وP3 في مخطط شجيري واحد، وP4 وP5 وP6 في مخطط شجيري آخر.
- وأخيرًا، يتم إنشاء مخطط الأشجار النهائي الذي يجمع جميع نقاط البيانات معًا.
يمكننا قطع هيكل الشجرة الشجرية على أي مستوى حسب متطلباتنا.
تنفيذ بايثون للمجموعات الهرمية التكتلية
سنرى الآن التنفيذ العملي لخوارزمية التجميع الهرمي التكتلية باستخدام بايثون. لتنفيذ ذلك، سوف نستخدم نفس مشكلة مجموعة البيانات التي استخدمناها في الموضوع السابق وهو تجميع الوسائل K حتى نتمكن من مقارنة كلا المفهومين بسهولة.
تحتوي مجموعة البيانات على معلومات العملاء الذين قاموا بزيارة مركز تجاري للتسوق. لذلك، يريد صاحب المركز التجاري العثور على بعض الأنماط أو بعض السلوكيات المحددة لعملائه باستخدام معلومات مجموعة البيانات.
خطوات تنفيذ AHC باستخدام بايثون:
ستكون خطوات التنفيذ هي نفس خطوات التجميع بالوسائل k، باستثناء بعض التغييرات مثل طريقة العثور على عدد المجموعات. وفيما يلي الخطوات:
خطوات المعالجة المسبقة للبيانات:
في هذه الخطوة، سنقوم باستيراد المكتبات ومجموعات البيانات لنموذجنا.
# Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
يتم استخدام أسطر التعليمات البرمجية المذكورة أعلاه لاستيراد المكتبات لأداء مهام محددة، مثل numpy للعمليات الحسابية، matplotlib لرسم الرسوم البيانية أو مؤامرة مبعثرة، و الباندا لاستيراد مجموعة البيانات.
# Importing the dataset dataset = pd.read_csv('Mall_Customers_data.csv')
كما نوقش أعلاه، قمنا باستيراد نفس مجموعة البيانات من Mall_Customers_data.csv، كما فعلنا في k-يعني التجميع. النظر في الإخراج أدناه:
هياكل البيانات جافا
سنقوم هنا باستخراج مصفوفة الميزات فقط، حيث ليس لدينا أي معلومات إضافية حول المتغير التابع. الكود موضح أدناه:
x = dataset.iloc[:, [3, 4]].values
قمنا هنا باستخراج 3 و4 أعمدة فقط حيث سنستخدم مخططًا ثنائي الأبعاد لرؤية المجموعات. لذلك، نحن نعتبر الدخل السنوي ودرجة الإنفاق كمصفوفة للميزات.
الخطوة الثانية: العثور على العدد الأمثل للمجموعات باستخدام Dendrogram
الآن سوف نجد العدد الأمثل للمجموعات باستخدام Dendrogram لنموذجنا. لهذا سوف نستخدم scipy المكتبة لأنها توفر وظيفة ستعيد مباشرة مخطط الأشجار للكود الخاص بنا. خذ بعين الاعتبار الأسطر التالية من التعليمات البرمجية:
#Finding the optimal number of clusters using the dendrogram import scipy.cluster.hierarchy as shc dendro = shc.dendrogram(shc.linkage(x, method='ward')) mtp.title('Dendrogrma Plot') mtp.ylabel('Euclidean Distances') mtp.xlabel('Customers') mtp.show()
في سطور التعليمات البرمجية المذكورة أعلاه، قمنا باستيراد ملف تَسَلسُل وحدة من مكتبة scipy. توفر لنا هذه الوحدة طريقة shc.denrogram(), الذي يأخذ الربط () كمعلمة. يتم استخدام دالة الربط لتحديد المسافة بين مجموعتين، لذلك قمنا هنا بتمرير x (مصفوفة الميزات)، والطريقة ' جناح '،' الطريقة الشائعة للربط في المجموعات الهرمية.
تهدف الأسطر المتبقية من التعليمات البرمجية إلى وصف التسميات الخاصة بمؤامرة dendrogram.
انتاج:
من خلال تنفيذ الأسطر أعلاه من التعليمات البرمجية، سوف نحصل على الإخراج أدناه :
باستخدام مخطط Dendrogram هذا، سنحدد الآن العدد الأمثل للمجموعات لنموذجنا. لهذا سنجد أقصى مسافة عمودية لا يقطع أي شريط أفقي. النظر في الرسم البياني أدناه:
في الرسم البياني أعلاه، أظهرنا المسافات الرأسية التي لا تقطع أشرطةها الأفقية. كما يمكننا أن نتصور، 4ذالمسافة هي الحد الأقصى، لذلك وفقًا لهذا، سيكون عدد المجموعات 5 (الخطوط العمودية في هذا النطاق). يمكننا أيضا أن نأخذ 2اختصار الثانيالرقم لأنه يساوي تقريبا 4ذالمسافة، ولكننا سنأخذ في الاعتبار المجموعات الخمس لأننا حسبنا نفس الشيء في خوارزمية K-means.
وبالتالي فإن العدد الأمثل للمجموعات سيكون 5 ، وسوف نقوم بتدريب النموذج في الخطوة التالية باستخدام نفس الشيء.
الخطوة 3: تدريب نموذج التجميع الهرمي
وبما أننا نعرف العدد الأمثل المطلوب من المجموعات، فيمكننا الآن تدريب نموذجنا. وفيما يلي التعليمات البرمجية:
#training the hierarchical model on dataset from sklearn.cluster import AgglomerativeClustering hc= AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward') y_pred= hc.fit_predict(x)
في الكود أعلاه، قمنا باستيراد ملف التكتل التكتل فئة الوحدة النمطية العنقودية في مكتبة scikit Learn.
ثم قمنا بإنشاء كائن هذه الفئة المسمى باسم HC. تأخذ فئة AgglomerativeClustering المعلمات التالية:
com.mylivecricklet
في السطر الأخير، قمنا بإنشاء المتغير التابع y_pred لملاءمة النموذج أو تدريبه. فهو لا يقوم بتدريب النموذج فحسب، بل يقوم أيضًا بإرجاع المجموعات التي تنتمي إليها كل نقطة بيانات.
بعد تنفيذ سطور التعليمات البرمجية المذكورة أعلاه، إذا مررنا بخيار مستكشف المتغيرات في Sypder IDE الخاص بنا، فيمكننا التحقق من المتغير y_pred. يمكننا مقارنة مجموعة البيانات الأصلية بالمتغير y_pred. النظر في الصورة أدناه:
كما نرى في الصورة أعلاه، y_pred يعرض قيمة المجموعات، مما يعني أن معرف العميل 1 ينتمي إلى الرقم 5ذالعنقودية (حيث أن الفهرسة تبدأ من 0، فإن 4 تعني 5ذالكتلة)، معرف العميل 2 ينتمي إلى 4ذالكتلة، وهكذا.
الخطوة 4: تصور المجموعات
وبما أننا قمنا بتدريب نموذجنا بنجاح، يمكننا الآن تصور المجموعات المقابلة لمجموعة البيانات.
سنستخدم هنا نفس أسطر التعليمات البرمجية التي استخدمناها في تجميع الوسائل k، باستثناء تغيير واحد. هنا لن نرسم النقطه الوسطى التي رسمناها بالوسائل k، لأننا هنا استخدمنا مخطط الأشجار لتحديد العدد الأمثل للمجموعات. وفيما يلي التعليمات البرمجية:
#visulaizing the clusters mtp.scatter(x[y_pred == 0, 0], x[y_pred == 0, 1], s = 100, c = 'blue', label = 'Cluster 1') mtp.scatter(x[y_pred == 1, 0], x[y_pred == 1, 1], s = 100, c = 'green', label = 'Cluster 2') mtp.scatter(x[y_pred== 2, 0], x[y_pred == 2, 1], s = 100, c = 'red', label = 'Cluster 3') mtp.scatter(x[y_pred == 3, 0], x[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4') mtp.scatter(x[y_pred == 4, 0], x[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5') mtp.title('Clusters of customers') mtp.xlabel('Annual Income (k$)') mtp.ylabel('Spending Score (1-100)') mtp.legend() mtp.show()
الإخراج: من خلال تنفيذ أسطر التعليمات البرمجية أعلاه، سوف نحصل على الإخراج أدناه: