المُقدّمة
K-Means هي واحدة من أكثر خوارزميات التجميع شيوعًا. من خلال وجود نقاط مركزية لمجموعة ، فإنه يجمع النقاط الأخرى بناءً على المسافة التي تفصلها عن تلك النقطة المركزية.
يتمثل الجانب السلبي لـ K-Means في اختيار عدد المجموعات ، K، قبل تشغيل الخوارزمية التي تجمع النقاط.
إذا كنت ترغب في قراءة دليل متعمق لـ K-Means Clustering ، فقم بإلقاء نظرة "K-Means Clustering with Scikit-Learn".
طريقة الكوع وتحليل الصورة الظلية
أكثر التقنيات شيوعًا لاختيار عدد Ks هي طريقة الكوع و تحليل صورة ظلية.
لتسهيل اختيار Ks ، فإن يلوبريك مكتبة تختتم الشفرة بحلقات for ومخطط نكتبه عادةً في 4 أسطر من التعليمات البرمجية.
لتثبيت Yellowbrick مباشرة من دفتر Jupyter ، قم بتشغيل:
! pip install yellowbrick
دعونا نرى كيف يعمل مع مجموعة بيانات مألوفة والتي هي بالفعل جزء من Scikit-Learn ، و قزحية مجموعة البيانات.
تتمثل الخطوة الأولى في استيراد مجموعة البيانات ، KMeans
و yellowbrick
المكتبات وتحميل البيانات:
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer
iris = load_iris()
لاحظ هنا ، نحن نستورد ملف KElbowVisualizer
و SilhouetteVisualizer
تبدأ من yellowbrick.cluster
، هذه هي الوحدات التي سنستخدمها لتصور نتائج Elbow و Silhouette!
بعد تحميل مجموعة البيانات ، في ملف data
مفتاح المجموعة (نوع البيانات الذي يعد امتدادًا لقاموس) هي قيم النقاط التي نريد تجميعها. إذا كنت تريد معرفة ما تمثله الأرقام ، فقم بإلقاء نظرة عليها iris['feature_names']
.
من المعروف أن مجموعة بيانات Iris تحتوي على ثلاثة أنواع من القزحية: "المبرقشة" و "فيرجينيكا" و "سيتوسا". يمكنك أيضًا فحص الفصول في iris['target_names']
للتحقق.
لذلك ، لدينا 4 ميزات للتجميع ويجب فصلها في 3 مجموعات مختلفة وفقًا لما نعرفه بالفعل. دعونا نرى ما إذا كانت نتائجنا باستخدام طريقة الكوع وتحليل الصورة الظلية ستدعم ذلك.
أولاً ، سنختار قيم الميزة:
print(iris['feature_names'])
print(iris['target_names'])
X = iris['data']
بعد ذلك ، يمكننا إنشاء ملف KMeans
نموذج ، أ KElbowVisualizer()
المثال الذي سيتلقى هذا النموذج إلى جانب عدد ks التي سيتم حساب المقياس من أجلها ، في هذه الحالة من 2 إلى 11 ك.
بعد ذلك ، نلائم المتخيل مع البيانات باستخدام fit()
وعرض المؤامرة مع show()
. إذا لم يتم تحديد مقياس ، يستخدم المتخيل امتداد تشويه متري ، والذي يحسب مجموع المسافات المربعة من كل نقطة إلى المركز المخصص لها:
model = KMeans(random_state=42)
elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)
elb_visualizer.show()
الآن ، لدينا بالفعل ملف كوع نقاط التشويه لتجميع KMeans مؤامرة مع تعليم خط عمودي والذي سيكون أفضل عدد من ks ، في هذه الحالة ، 4
.
يبدو أن طريقة الكوع بمقياس تشويه لم تكن الخيار الأفضل إذا لم نكن نعرف العدد الفعلي للعناقيد. هل سيشير Silhouette إلى وجود 4 مجموعات؟ للإجابة على ذلك ، نحتاج فقط إلى تكرار الكود الأخير بنموذج به 4 مجموعات وكائن متخيل مختلف:
model_4clust = KMeans(n_clusters = 4, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)
sil_visualizer.show()
يعرض الرمز ملف مؤامرة Silhouette of KMeans Clustering لـ 150 عينة في 4 مراكز. لتحليل هذه المجموعات ، نحتاج إلى النظر إلى قيمة معامل الصورة الظلية (أو النتيجة) ، وأفضل قيمة لها أقرب إلى 1. متوسط القيمة لدينا هو 0.5
، التي تم تمييزها بالخط العمودي ، وليست جيدة.
نحتاج أيضًا إلى النظر في التوزيع بين المجموعات - قطعة الأرض الجيدة لها أحجام متشابهة من المناطق المجمعة أو النقاط الموزعة جيدًا. في هذا الرسم البياني ، هناك 3 مجموعات أصغر (رقم 3 ، 2 ، 1) ومجموعة أكبر واحدة (الرقم 0) ، وهي ليست النتيجة التي كنا نتوقعها.
تحقق من دليلنا العملي العملي لتعلم Git ، مع أفضل الممارسات ، والمعايير المقبولة في الصناعة ، وورقة الغش المضمنة. توقف عن أوامر Googling Git وفي الواقع تعلم ذلك!
دعنا نكرر نفس الحبكة لثلاث مجموعات لنرى ما سيحدث:
model_3clust = KMeans(n_clusters = 3, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)
sil_visualizer.show()
من خلال تغيير عدد المجموعات ، حصلت على نتيجة الصورة الظلية 0.05
أعلى والعناقيد أكثر توازنا. إذا لم نكن نعرف العدد الفعلي للمجموعات ، من خلال التجربة والجمع بين كلتا الطريقتين ، لكنا اخترنا 3
بدلا من 2
كعدد Ks.
هذا مثال على كيفية الجمع بين المقاييس المختلفة ومقارنتها ، وتصوير البيانات ، وتجربة قيم مختلفة من المجموعات أمرًا مهمًا لقيادة النتيجة في الاتجاه الصحيح. وأيضًا ، كيف أن وجود مكتبة تسهل هذا التحليل يمكن أن يساعد في هذه العملية!