خوارزمية التجميع الهرمي بيثون!

عقدة المصدر: 1055669

تم نشر هذه المقالة كجزء من مدونة علوم البيانات

المُقدّمة

في هذه المقالة ، سنلقي نظرة على نهج مختلف لتكتل يعني K يسمى Hierarchical Clustering. بالمقارنة مع K Means أو K Mode ، فإن التجميع الهرمي له خوارزمية أساسية مختلفة لكيفية عمل آلية التجميع. يستخدم التجميع الهرمي تقنيات تكتلية أو تقسيمية ، بينما يستخدم K Means مزيجًا من المسافة النقطية الوسطى والإقليدية لتشكيل مجموعات. يمكن استخدام Dendrograms لتصور المجموعات في مجموعات هرمية ، والتي يمكن أن تساعد في تفسير أفضل للنتائج من خلال تصنيفات ذات مغزى. لا يتعين علينا تحديد عدد الكتل عند عمل مخطط شجر الأسنان.

هنا نستخدم بايثون لشرح نموذج المجموعات الهرمية. لدينا 200 بيانات عملاء مول في مجموعة البيانات الخاصة بنا. يتم تضمين معرف العميل والنوع والعمر والدخل السنوي ودرجة الإنفاق لكل عميل في إطار البيانات. يعتمد المبلغ المحسوب لكل من درجات إنفاق عملائهم على عدة معايير ، مثل دخلهم ، وعدد المرات التي يزورون فيها المركز التجاري في الأسبوع ، ومقدار الأموال التي أنفقوها في السنة. تتراوح هذه الدرجة من 1 إلى 100. نظرًا لأننا لا نعرف الإجابات ، تصبح مشكلة العمل مشكلة تجميعية. الفئات النهائية للبيانات غير معروفة لنا. نتيجة لذلك ، هدفنا هو اكتشاف بعض مجموعات العملاء غير المعروفة سابقًا.

لكن أولاً ، ننظر إلى بعض المصطلحات المهمة في التجميع الهرمي.

مصطلحات مهمة في التجميع الهرمي

طرق الربط

إذا كانت هناك (أ) ملاحظات أصلية أ [0] ، ... ، [| أ | 1] في المجموعة (أ) و (ب) كائنات أصلية ب [0] ، ... ، ب [| ب | 1] في المجموعة ( ب) ، ثم يجب علينا حساب المسافة بين مجموعتين (أ) و (ب) من أجل الجمع بينهما (ب). لنفترض أن هناك نقطة (د) لم يتم تعيينها لأي من المجموعات. سنحتاج إلى معرفة مدى بُعد المجموعة (أ) عن المجموعة (د) والمجموعة (ب) عن المجموعة (د).

تحتوي المجموعات الآن عادةً على نقاط متعددة ، مما يستلزم طريقة مختلفة لحساب مصفوفة المسافة. يتم تحديد الطريقة التي يتم بها حساب المسافة بين المجموعات ، أو الإشارة إلى مسافة المجموعة ، عن طريق الارتباط. فيما يلي بعض آليات الربط الأكثر استخدامًا:

وصلة واحدة - يتم حساب المسافات بين الأعضاء الأكثر تشابهًا لكل زوج من المجموعات ، ثم يتم دمج المجموعات بناءً على أقصر مسافة.

متوسط ​​الارتباط - يتم حساب المسافة بين جميع أعضاء الكتلة الواحدة وجميع أعضاء الكتلة الأخرى. بعد ذلك ، يتم استخدام متوسط ​​هذه المسافات لتحديد المجموعات التي سيتم دمجها.

ربط كامل - لكل زوج من المجموعات ، يتم حساب المسافات بين الأعضاء الأكثر تباينًا ، ثم يتم دمج المجموعات بناءً على أقصر مسافة.

متوسط ​​الارتباط - نستخدم متوسط ​​المسافة بدلاً من متوسط ​​المسافة بطريقة مماثلة لمتوسط ​​الارتباط.

ربط الجناح - يحدد المسافة بين العناقيد باستخدام طريقة تحليل التباين.

الارتباط المركزي - يتم حساب النقطه الوسطى لكل عنقود عن طريق حساب متوسط ​​جميع النقاط المخصصة للمجموعة ، ثم يتم حساب المسافة بين العناقيد باستخدام هذه النقطه الوسطى.

حساب المسافة

توجد طرق متعددة لحساب المسافة بين مجموعتين أو أكثر ، مع كون المسافة الإقليدية هي الأكثر شيوعًا. يمكن استخدام مقاييس المسافة الأخرى ، مثل Minkowski و City Block و Hamming و Jaccard و Chebyshev ، مع المجموعات الهرمية أيضًا. تؤثر مقاييس المسافة المختلفة على المجموعات الهرمية ، كما هو موضح في الشكل 2.

حساب المسافة

دندروغرام

يتم تمثيل العلاقة بين الكائنات في مساحة الميزة بواسطة مخطط الأسنان. في مساحة الميزة ، يتم استخدامه لإظهار المسافة بين كل زوج من الكائنات المدمجة بالتسلسل. كثيرا ما تستخدم Dendrograms لفحص المجموعات الهرمية قبل اتخاذ قرار بشأن العدد المناسب من المجموعات لمجموعة البيانات. المسافة dendrogram هي المسافة بين مجموعتين عندما تتحد. تحدد مسافة dendrogram ما إذا كانت مجموعتان أو أكثر مفككتان أو يمكن ضمهما معًا لتشكيل كتلة واحدة.

مثال

الآن ننظر في أمثلة باستخدام Python لإثبات نموذج المجموعات الهرمية. لدينا 200 بيانات عملاء مول في منطقتنا بيانات. يتم تضمين معرف العميل والنوع والعمر والدخل السنوي ودرجة الإنفاق لكل عميل في إطار البيانات. يعتمد المبلغ المحسوب لكل من درجات إنفاق عملائهم على عدة معايير ، مثل دخلهم ، وعدد المرات التي يزورون فيها المركز التجاري في الأسبوع ، والأموال التي أنفقوها لمدة عام. تتراوح هذه الدرجة من 1 إلى 100. نظرًا لأننا لا نعرف الإجابات ، تصبح مشكلة العمل مشكلة تجميعية.

# 1 استيراد المكتبات
استيراد numpy كـ np import matplotlib.pyplot كما plt استيراد الباندا كـ pd
# 2 استيراد مجموعة بيانات Mall_Customers بواسطة الباندا
dataset = pd.read_csv ('Mall_Customers.csv') X = dataset.iloc [:، [3,4،XNUMX]]. قيم

تستلزم هذه الخطوة الجديدة في التجميع الهرمي أيضًا تحديد العدد الأمثل للمجموعات. لن نستخدم طريقة الكوع هذه المرة. سوف نستفيد من مخطط الأسنان.

# 3 استخدام مخطط الأسنان للعثور على العدد الأمثل للعناقيد. # أول شيء سنفعله هو استيراد مكتبة scipy. scipy هي مكتبة # Python مفتوحة المصدر تحتوي على أدوات للقيام بالتجميع الهرمي وبناء مخططات تخطيطية. # استيراد الأداة المطلوبة فقط. استيراد scipy.cluster.hierarchy كـ sch 
#Lets إنشاء متغير dendrogram # linkage هو في الواقع الخوارزمية نفسها للتجميع الهرمي ، ثم في #linkage ، يتعين علينا تحديد البيانات التي نطبقها ونشاركها. هذا X dataset dendrogram = sch.dendrogram (sch.linkage (X، method = "ward")) plt.title ('Dendrogram') plt.xlabel ('customers') plt.ylabel ('المسافات الإقليدية') plt. تبين()

طريقة Ward هي طريقة تحاول تقليل التباين داخل كل مجموعة. إنه تقريبًا نفس الشيء عندما استخدمنا K-mean لتقليل wcss لرسم مخطط طريقة الكوع لدينا ؛ الاختلاف الوحيد هو أنه بدلاً من wcss ، نقوم بتقليل المتغيرات داخل المجموعة. داخل كل مجموعة ، هذا هو التباين. يتم عرض مخطط الأسنان أدناه.

مخطط الأسنان

يتم تمثيل العملاء على المحور السيني ، ويتم تمثيل المسافة الإقليدية بين المجموعات على المحور ص. كيف نكتشف أفضل عدد من المجموعات بناءً على هذا الرسم التخطيطي؟ نريد إيجاد أطول مسافة رأسية ممكنة دون عبور أي خطوط أفقية ، وهو الخط الأحمر في الرسم البياني أعلاه. دعنا نحسب الخطوط الموجودة على الرسم التخطيطي ونكتشف أفضل عدد من المجموعات. بالنسبة لمجموعة البيانات هذه ، سيكون رقم المجموعة 5.

# 4 تركيب المجموعات الهرمية لمجموعة بيانات Mall_Customes # هناك خوارزميتان للتجميع الهرمي: التجميع الهرمي التجميعي و # التجميع الهرمي الانقسامي. اخترنا طريقة الإقليدية للمسافة والجناح لفئة الخوارزمية # من sklearn.cluster import AgglomerativeClustering hc = AgglomerativeClustering (n_clusters = 5، affinity = 'euclidean'، linkage = 'ward') # دعونا نحاول ملاءمة خوارزمية التجميع الهرمي لمجموعة البيانات X أثناء إنشاء متجه المجموعات # الذي يخبر كل عميل عن المجموعة التي ينتمي إليها العميل. y_hc = hc.fit_predict (X)
# 5 تصور المجموعات. هذا الرمز مشابه لرمز التصور k-mean. # نحن فقط نستبدل اسم المتجه y_kmeans بـ y_hc للتجمع الهرمي plt.scatter (X [y_hc == 0 ، 0] ، X [y_hc == 0 ، 1] ، s = 100 ، c = 'red' ، label = 'Cluster 1') plt.scatter (X [y_hc == 1، 0]، X [y_hc == 1، 1]، s = 100، c = 'blue'، label = 'Cluster 2') plt.scatter ( X [y_hc == 2، 0]، X [y_hc == 2، 1]، s = 100، c = 'green'، label = 'Cluster 3') plt.scatter (X [y_hc == 3، 0] ، X [y_hc == 3، 1]، s = 100، c = 'cyan'، label = 'Cluster 4') مبعثر plt (X [y_hc == 4، 0]، X [y_hc == 4، 1 ]، s = 100، c = 'magenta'، label = 'Cluster 5') plt.title ('مجموعات العملاء (نموذج المجموعات الهرمية)') plt.xlabel ('الدخل السنوي (k $)') plt.ylabel ("نقاط الإنفاق (1-100") plt.show ()
عناقيد | المجموعات الهرمية
Cluster1 (أحمر) ، Cluster2 (أزرق) ، Cluster3 (أخضر) ، Cluster4 (سماوي) ، Cluster5 (أرجواني)

يمكن اعتبار هذه المجموعات على أنها شريحة عملاء المركز التجاري.

هذا كل ما في نموذج المجموعات الهرمي القياسي. تتوفر مجموعة البيانات بالإضافة إلى جميع الرموز في قسم Github.

وفي الختام

في أي تمرين تجميع ، يعد تحديد عدد المجموعات عملية تستغرق وقتًا طويلاً. نظرًا لأن الجانب التجاري من العمل يهتم أكثر باستخراج المعنى من هذه المجموعات ، فمن الضروري تصور المجموعات في بعدين ومعرفة ما إذا كانت متميزة. يمكن استخدام تحليل PCA أو تحليل العامل لتحقيق هذا الهدف. هذه طريقة شائعة لتقديم النتائج النهائية إلى مختلف أصحاب المصلحة ، مما يسهل على الجميع استهلاك المخرجات.

الحاشية

شكرا لقرائتك!
أتمنى أن تكون قد استمتعت بالمقال وزادت معرفتك.
لا تتردد في الاتصال بي on البريد إلكتروني:
شيء لم يذكر او تريد مشاركة افكارك؟ لا تتردد في التعليق أدناه وسأعود إليك.

عن المؤلف

هارديكومار م دادوك
محلل بيانات | اخصائي تحليل البيانات الرقمية | متعلم علوم البيانات
تواصل معي على لينكد إن
تواصل معي على جيثب

الوسائط الموضحة في هذه المقالة ليست مملوكة لشركة Analytics Vidhya ويتم استخدامها وفقًا لتقدير المؤلف.

المصدر: https://www.analyticsvidhya.com/blog/2021/08/hierarchical-clustering-algorithm-python/

الطابع الزمني:

اكثر من تحليلات Vidhya