31 KiB
مقدمة في التجميع
التجميع هو نوع من أنواع التعلم بدون إشراف الذي يفترض أن مجموعة البيانات غير معنونة أو أن مدخلاتها غير مطابقة لمخرجات محددة مسبقًا. يستخدم خوارزميات مختلفة للفرز عبر البيانات غير المعنونة وتوفير مجموعات وفقًا للأنماط التي يكتشفها في البيانات.
🎥 انقر على الصورة أعلاه لمشاهدة فيديو. أثناء دراستك لتعلم الآلة مع التجميع، استمتع ببعض مسارات رقص هول النيجيري - هذه أغنية عالية التقييم من عام 2014 بواسطة PSquare.
اختبار قبل المحاضرة
مقدمة
التجميع مفيد جدًا لاستكشاف البيانات. دعنا نرى إذا كان يمكنه المساعدة في اكتشاف الاتجاهات والأنماط في طريقة استهلاك الجمهور النيجيري للموسيقى.
✅ خذ دقيقة للتفكير في استخدامات التجميع. في الحياة الواقعية، يحدث التجميع كلما كان لديك كومة من الغسيل وتحتاج إلى فرز ملابس أفراد عائلتك 🧦👕👖🩲. في علم البيانات، يحدث التجميع عند محاولة تحليل تفضيلات المستخدم، أو تحديد خصائص أي مجموعة بيانات غير معنونة. التجميع، بطريقة ما، يساعد على فهم الفوضى، مثل درج الجوارب.
🎥 انقر على الصورة أعلاه لمشاهدة فيديو: يقدّم جون جوتاغ من MIT التجميع
في بيئة مهنية، يمكن استخدام التجميع لتحديد أشياء مثل تجزئة السوق، وتحديد الفئات العمرية التي تشتري عناصر معينة، على سبيل المثال. استخدام آخر يمكن أن يكون الكشف عن الشذوذ، ربما لاكتشاف الاحتيال من مجموعة بيانات لمعاملات بطاقات الائتمان. أو قد تستخدم التجميع لتحديد الأورام في مجموعة من الصور الطبية.
✅ فكر لدقيقة في كيفية مواجهتك للتجميع 'في الواقع'، في مجال الخدمات المصرفية، التجارة الإلكترونية، أو الأعمال التجارية.
🎓 من المثير للاهتمام، أن تحليل التجمع نشأ في مجالات الأنثروبولوجيا وعلم النفس في ثلاثينيات القرن العشرين. هل يمكنك تخيل كيفية استخدامه؟
بدلاً من ذلك، يمكنك استخدامه لتجميع نتائج البحث - حسب روابط التسوق، الصور، أو المراجعات، على سبيل المثال. التجميع مفيد عندما يكون لديك مجموعة بيانات كبيرة تريد تقليلها والتي تريد إجراء تحليل أكثر تفصيلاً عليها، لذا يمكن استخدام التقنية للتعرف على البيانات قبل بناء نماذج أخرى.
✅ بمجرد تنظيم بياناتك في مجموعات، تعطيها رقم تعريف مجموعة، ويمكن أن تكون هذه التقنية مفيدة عند الحفاظ على خصوصية مجموعة البيانات؛ يمكنك بدلاً من ذلك الإشارة إلى نقطة بيانات عبر رقم تعريف المجموعة، وليس عبر بيانات تعريفية أكثر كشفًا. هل يمكنك التفكير في أسباب أخرى تجعلك تشير إلى رقم تعريف المجموعة بدلاً من عناصر أخرى في المجموعة لتحديدها؟
عمّق فهمك لتقنيات التجميع في هذا وحدة التعلم
البدء بالتجميع
تقدم مكتبة Scikit-learn مجموعة كبيرة من الطرق لأداء التجميع. النوع الذي تختاره يعتمد على حالة الاستخدام الخاصة بك. وفقًا للتوثيق، كل طريقة لها فوائد مختلفة. هذه جدول مبسط للطرق التي تدعمها Scikit-learn وحالات استخدامها المناسبة:
| اسم الطريقة | حالة الاستخدام |
|---|---|
| K-Means | غرض عام، استقرائي |
| افينيتي بروجاشن (Affinity propagation) | متعدد، مجموعات غير متساوية، استقرائي |
| مين-شيفت (Mean-shift) | متعدد، مجموعات غير متساوية، استقرائي |
| التجميع الطيفي (Spectral clustering) | قليل، مجموعات متساوية، انتقالي |
| التجميع الهرمي لـ Ward | متعدد، مجموعات مقيدة، انتقالي |
| التجميع التجميعي (Agglomerative clustering) | متعدد، مقيد، مسافات غير إقليدية، انتقالي |
| دي بي سكان (DBSCAN) | هندسة غير مسطحة، مجموعات غير متساوية، انتقالي |
| أوبتيكس (OPTICS) | هندسة غير مسطحة، مجموعات غير متساوية بكثافة متغيرة، انتقالي |
| مزيج جاوسي (Gaussian mixtures) | هندسة مسطحة، استقرائي |
| بيرش (BIRCH) | مجموعة بيانات كبيرة بها قيم شاذة، استقرائي |
🎓 كيفية إنشاء المجموعات لها علاقة كبيرة بكيفية جمع نقاط البيانات إلى مجموعات. لنفكّر في بعض المصطلحات:
الاستدلال الانتقالي مشتق من حالات تدريب ملاحظة تتطابق مع حالات اختبار محددة. الاستدلال الاستقرائي مشتق من حالات تدريب تتطابق مع قواعد عامة تُطبق فقط بعد ذلك على حالات الاختبار.
مثال: تخيل أن لديك مجموعة بيانات معنونة جزئيًا. بعض الأشياء هي 'أسطوانات،' بعضها 'أقراص مدمجة،' وبعضها فارغ. مهمتك هي إعطاء تسميات للفارغات. إذا اخترت نهجًا استقرائيًا، ستدرّب نموذجًا للبحث عن 'أسطوانات' و'أقراص مدمجة'، وتطبق هذه التسميات على بياناتك غير المعنونة. هذا النهج سيواجه صعوبة في تصنيف الأشياء التي هي فعليًا 'أشرطة كاسيت'. أما النهج الانتقالي، من ناحية أخرى، فيتعامل مع هذه البيانات المجهولة بشكل أكثر فاعلية حيث يعمل على تجميع العناصر المتشابهة معًا ثم يطبق تسمية على المجموعة. في هذه الحالة، قد تعكس المجموعات 'أشياء موسيقية دائرية' و'أشياء موسيقية مربعة'.
🎓 'الهندسة غير المسطحة' مقابل 'المسطحة'
مأخوذة من المصطلحات الرياضية، الهندسة غير المسطحة مقابل المسطحة تشير إلى قياس المسافات بين النقاط إما بطريقة 'مستوية' (إقليدية) أو بطريقة 'غير مستوية' (غير إقليدية).
'المسطحة' في هذا السياق تعني الهندسة الإقليدية (الأجزاء منها تُدرّس كالهندسة 'المستوية')، و'غير المسطحة' تشير إلى الهندسة غير الإقليدية. ما علاقة الهندسة بتعلم الآلة؟ بما أن كلا المجالين متجذران في الرياضيات، يجب أن يكون هناك طريقة مشتركة لقياس المسافات بين نقاط المجموعات، ويمكن القيام بذلك بطريقة 'مستوية' أو 'غير مستوية' حسب طبيعة البيانات. تُقاس المسافات الإقليدية بطول قطعة خط بين نقطتين. تُقاس المسافات غير الإقليدية على طول منحنى. إذا بدت بياناتك، عند تصورها، وكأنها لا توجد على مستوى، قد تحتاج إلى استخدام خوارزمية متخصصة للتعامل معها.
مخطط معلوماتي بواسطة Dasani Madipalli
تُعرّف المجموعات بواسطة مصفوفة المسافات الخاصة بها، أي المسافات بين النقاط. يمكن قياس هذه المسافة بعدة طرق. تُعرف المجموعات الإقليدية بمتوسط قيم النقاط، وتحتوي على 'مركز' أو نقطة مركزية. المسافات تُقاس إذًا عن طريق المسافة إلى ذلك المركز. تشير المسافات غير الإقليدية إلى 'نقاط مركزية' (clustroids)، وهي النقطة الأقرب إلى النقاط الأخرى. ويمكن تعريفها بطرق مختلفة.
🎓 'مقيدة'
التجميع المقيد يُدخل التعلم "شبه المراقب" في هذه الطريقة غير المراقبة. تُعلم العلاقات بين النقاط كـ 'لا يمكن ربطها' أو 'يجب ربطها' بحيث تُفرض بعض القواعد على مجموعة البيانات.
مثال: إذا أُطلقت خوارزمية على دفعة من البيانات غير المعنونة أو ذات التسمية الجزئية، قد تكون المجموعات التي تنتجها ذات جودة منخفضة. في المثال أعلاه، قد تجمع المجموعات 'أشياء موسيقية دائرية' و'أشياء موسيقية مربعة' و'أشياء مثلثة' و'كوكيز'. إذا أعطيت بعض القيود، أو القواعد التي يجب اتباعها ("يجب أن يكون العنصر مصنوعًا من البلاستيك"، "يجب أن يكون العنصر قادرًا على إنتاج موسيقى") يمكن أن يساعد ذلك في 'تقييد' الخوارزمية لاتخاذ خيارات أفضل.
🎓 'الكثافة'
يُعتبر البيانات التي تحتوي على 'ضجيج' بأنها 'كثيفة'. قد تثبت المسافات بين النقاط في كل من مجموعاتها، عند التحقق، أنها أكثر أو أقل كثافة، أو 'مزدحمة' وبالتالي تحتاج هذه البيانات إلى تحليل بطريقة التجميع المناسبة. تُظهر هذه المقالة الفرق بين استخدام خوارزمية K-Means مقابل HDBSCAN لاستكشاف مجموعة بيانات مضطربة بكثافة مجموعات غير متساوية.
خوارزميات التجميع
هناك أكثر من 100 خوارزمية تجميع، ويعتمد استخدامها على طبيعة البيانات الموجودة. دعونا نناقش بعض الخوارزميات الرئيسية:
-
التجميع الهرمي. إذا تم تصنيف كائن بمقارنة قربه من كائن مجاور بدلاً من كائن بعيد، تُشكل المجموعات بناءً على مسافة أعضائها من وإلى الأجسام الأخرى. التجميع التجميعي في Scikit-learn هو هرمي.
مخطط معلوماتي بواسطة Dasani Madipalli
-
التجميع المركزي. هذه الخوارزمية الشهيرة تتطلب اختيار 'k'، أو عدد المجموعات المراد تشكيلها، وبعدها تحدد الخوارزمية نقطة مركز المجموعة وتجمع البيانات حول تلك النقطة. تجميع K-means هو نسخة شهيرة من هذا النوع. يتم تحديد المركز بواسطة المتوسط الأقرب، ومن هنا جاء الاسم. يتم تقليل مربع المسافة من المجموعة.
مخطط معلوماتي بواسطة Dasani Madipalli
-
التجميع القائم على التوزيع. يعتمد على النمذجة الإحصائية، ويركز على تحديد احتمال انتماء نقطة بيانات إلى مجموعة، وتعيينها وفقًا لذلك. طرق المزيج الغاوسي تنتمي إلى هذا النوع.
-
التجميع القائم على الكثافة. تُخصص نقاط البيانات إلى المجموعات بناءً على كثافتها، أو تجمّعها حول بعضها البعض. تُعتبر النقاط البعيدة عن المجموعة شذوذات أو ضجيج. تنتمي DBSCAN وMean-shift وOPTICS إلى هذا النوع من التجميع.
-
التجميع القائم على الشبكة. لمجموعات البيانات متعددة الأبعاد، يتم إنشاء شبكة ثم تُقسم البيانات بين خلايا الشبكة، مما يخلق مجموعات.
التمرين - قم بتجميع بياناتك
يُساعد التجميع كطريقة بشكل كبير من خلال التصور المناسب، فلنبدأ بتصور بيانات الموسيقى الخاصة بنا. سيساعدنا هذا التمرين في تحديد أي من طرق التجميع يجب أن نستخدمها بأكثر فعالية لطبيعة هذه البيانات.
-
افتح ملف notebook.ipynb في هذا المجلد.
-
استورد حزمة
Seabornلتصور جيد للبيانات.!pip install seaborn -
أضف بيانات الأغاني من nigerian-songs.csv. قم بتحميل إطار بيانات يحتوي على بعض المعلومات عن الأغاني. استعد لاستكشاف هذه البيانات عن طريق استيراد المكتبات وإظهار البيانات:
import matplotlib.pyplot as plt import pandas as pd df = pd.read_csv("../data/nigerian-songs.csv") df.head()تحقق من أول بضعة أسطر من البيانات:
name album artist artist_top_genre release_date length popularity danceability acousticness energy instrumentalness liveness loudness speechiness tempo time_signature 0 Sparky Mandy & The Jungle Cruel Santino alternative r&b 2019 144000 48 0.666 0.851 0.42 0.534 0.11 -6.699 0.0829 133.015 5 1 shuga rush EVERYTHING YOU HEARD IS TRUE Odunsi (The Engine) afropop 2020 89488 30 0.71 0.0822 0.683 0.000169 0.101 -5.64 0.36 129.993 3 2 LITT! LITT! AYLØ indie r&b 2018 207758 40 0.836 0.272 0.564 0.000537 0.11 -7.127 0.0424 130.005 4 3 Confident / Feeling Cool Enjoy Your Life Lady Donli nigerian pop 2019 175135 14 0.894 0.798 0.611 0.000187 0.0964 -4.961 0.113 111.087 4 4 wanted you rare. Odunsi (The Engine) afropop 2018 152049 25 0.702 0.116 0.833 0.91 0.348 -6.044 0.0447 105.115 4 -
احصل على بعض المعلومات حول إطار البيانات، من خلال استدعاء
info():df.info()المخرجات تظهر كالتالي:
<class 'pandas.core.frame.DataFrame'> RangeIndex: 530 entries, 0 to 529 Data columns (total 16 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 name 530 non-null object 1 album 530 non-null object 2 artist 530 non-null object 3 artist_top_genre 530 non-null object 4 release_date 530 non-null int64 5 length 530 non-null int64 6 popularity 530 non-null int64 7 danceability 530 non-null float64 8 acousticness 530 non-null float64 9 energy 530 non-null float64 10 instrumentalness 530 non-null float64 11 liveness 530 non-null float64 12 loudness 530 non-null float64 13 speechiness 530 non-null float64 14 tempo 530 non-null float64 15 time_signature 530 non-null int64 dtypes: float64(8), int64(4), object(4) memory usage: 66.4+ KB -
تحقق مرة أخرى من القيم الخالية، عن طريق استدعاء
isnull()والتحقق من أن المجموع يساوي 0:df.isnull().sum()يبدو جيداً:
name 0 album 0 artist 0 artist_top_genre 0 release_date 0 length 0 popularity 0 danceability 0 acousticness 0 energy 0 instrumentalness 0 liveness 0 loudness 0 speechiness 0 tempo 0 time_signature 0 dtype: int64 -
وصف البيانات:
df.describe()release_date length popularity danceability acousticness energy instrumentalness liveness loudness speechiness tempo time_signature count 530 530 530 530 530 530 530 530 530 530 530 530 mean 2015.390566 222298.1698 17.507547 0.741619 0.265412 0.760623 0.016305 0.147308 -4.953011 0.130748 116.487864 3.986792 std 3.131688 39696.82226 18.992212 0.117522 0.208342 0.148533 0.090321 0.123588 2.464186 0.092939 23.518601 0.333701 min 1998 89488 0 0.255 0.000665 0.111 0 0.0283 -19.362 0.0278 61.695 3 25% 2014 199305 0 0.681 0.089525 0.669 0 0.07565 -6.29875 0.0591 102.96125 4 50% 2016 218509 13 0.761 0.2205 0.7845 0.000004 0.1035 -4.5585 0.09795 112.7145 4 75% 2017 242098.5 31 0.8295 0.403 0.87575 0.000234 0.164 -3.331 0.177 125.03925 4 max 2020 511738 73 0.966 0.954 0.995 0.91 0.811 0.582 0.514 206.007 5
🤔 إذا كنا نعمل على التكتل، وهي طريقة غير خاضعة للمراقبة لا تتطلب بيانات معنونة، لماذا نعرض هذه البيانات مع التسميات؟ في مرحلة استكشاف البيانات، تكون هذه التسميات مفيدة، لكنها غير ضرورية لعمل خوارزميات التكتل. يمكنك أيضًا إزالة رؤوس الأعمدة والإشارة إلى البيانات بواسطة رقم العمود.
انظر إلى القيم العامة للبيانات. لاحظ أن الشعبية يمكن أن تكون '0'، وهذا يظهر الأغاني التي لا تمتلك تصنيفًا. دعونا نزيلها قريبًا.
-
استخدم مخطط أعمدة لمعرفة أكثر الأنواع شعبية:
import seaborn as sns top = df['artist_top_genre'].value_counts() plt.figure(figsize=(10,7)) sns.barplot(x=top[:5].index,y=top[:5].values) plt.xticks(rotation=45) plt.title('Top genres',color = 'blue')
✅ إذا أردت رؤية مزيد من القيم العليا، قم بتغيير [:5] إلى قيمة أكبر، أو قم بإزالتها لرؤية الكل.
لاحظ، عندما يوصف النوع الأعلى بأنه 'مفقود'، فهذا يعني أن سبوتيفاي لم يصنفه، فلنتخلص منه.
-
تخلص من البيانات المفقودة عن طريق تصفيتها
df = df[df['artist_top_genre'] != 'Missing'] top = df['artist_top_genre'].value_counts() plt.figure(figsize=(10,7)) sns.barplot(x=top.index,y=top.values) plt.xticks(rotation=45) plt.title('Top genres',color = 'blue')أعد التحقق الآن من الأنواع:
-
حتى الآن، تهيمن الأنواع الثلاثة الأولى على مجموعة البيانات هذه. دعونا نركز على
afro dancehall،afropop، وnigerian pop، بالإضافة إلى تصفية مجموعة البيانات لإزالة أي شيء بقيمة شعبية 0 (مما يعني أنه لم يُصنف بشعبية في مجموعة البيانات ويمكن اعتباره ضوضاء لأغراضنا):df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')] df = df[(df['popularity'] > 0)] top = df['artist_top_genre'].value_counts() plt.figure(figsize=(10,7)) sns.barplot(x=top.index,y=top.values) plt.xticks(rotation=45) plt.title('Top genres',color = 'blue') -
قم بإجراء اختبار سريع لمعرفة ما إذا كانت البيانات تتوافق بطريقة قوية بشكل خاص:
corrmat = df.corr(numeric_only=True) f, ax = plt.subplots(figsize=(12, 9)) sns.heatmap(corrmat, vmax=.8, square=True)الترابط القوي الوحيد هو بين
energyوloudness، وهذا ليس مفاجئًا جدًا، نظرًا لأن الموسيقى الصاخبة عادةً ما تكون نشيطة جدًا. بخلاف ذلك، الترابطات ضعيفة نسبيًا. سيكون من المثير للاهتمام رؤية ما يمكن أن تصنعه خوارزمية التكتل من هذه البيانات.🎓 لاحظ أن الترابط لا يعني السببية! لدينا دليل على الترابط ولكن لا دليل على السببية. يوجد موقع ويب ممتع يحتوي على بعض الصور التي تؤكد هذه النقطة.
هل هناك تقارب في هذه المجموعة من البيانات حول الشعبية المتصورة للأغنية وقابليتها للرقص؟ يُظهر FacetGrid وجود دوائر متحدة المركز تصطف، بغض النظر عن النوع. هل يمكن أن تكون الأذواق النيجيرية تتقارب عند مستوى معين من القابلية للرقص لهذا النوع؟
✅ جرب نقاط بيانات مختلفة (الطاقة، الصوت العالي، الكلامية) وأنواع موسيقية أكثر أو مختلفة. ماذا يمكنك اكتشافه؟ ألق نظرة على جدول df.describe() لرؤية الانتشار العام لنقاط البيانات.
تمرين - توزيع البيانات
هل تختلف هذه الأنواع الثلاثة اختلافًا كبيرًا في الإدراك لقابلية الرقص الخاصة بهم، بناءً على شعبيتهم؟
-
افحص توزيع بيانات الأنواع الثلاثة الأولى لدينا للشعبية وقابلية الرقص بمحور x و y معين.
sns.set_theme(style="ticks") g = sns.jointplot( data=df, x="popularity", y="danceability", hue="artist_top_genre", kind="kde", )يمكنك اكتشاف دوائر متحدة المركز حول نقطة تقارب عامة، تظهر توزيع النقاط.
🎓 لاحظ أن هذا المثال يستخدم مخطط KDE (تقدير كثافة النواة) الذي يمثل البيانات باستخدام منحنى كثافة احتمالية مستمر. هذا يسمح لنا بتفسير البيانات عند العمل مع توزيعات متعددة.
بشكل عام، تصطف الأنواع الثلاثة بشكل فضفاض من حيث شعبيتها وقابلية رقصها. سيكون تحديد الكتل في هذه البيانات الفضفاضة تحديًا:
-
أنشئ مخطط تشتت:
sns.FacetGrid(df, hue="artist_top_genre", height=5) \ .map(plt.scatter, "popularity", "danceability") \ .add_legend()يُظهر مخطط التشتت لنفس المحاور نمط تقارب مشابه
بشكل عام، بالنسبة للتكتل، يمكنك استخدام مخططات التشتت لإظهار مجموعات البيانات، لذا فإن إتقان هذا النوع من التصوير مفيد جدًا. في الدرس القادم، سنأخذ هذه البيانات المفلترة ونستخدم تكتل k-means لاكتشاف مجموعات في هذه البيانات تبدو متداخلة بطرق مثيرة للاهتمام.
🚀التحدي
كتحضير للدرس القادم، قم بعمل مخطط عن خوارزميات التكتل المختلفة التي قد تكتشفها وتستخدمها في بيئة الإنتاج. ما أنواع المشاكل التي تحاول خوارزميات التكتل معالجتها؟
اختبار ما بعد المحاضرة
مراجعة ودراسة ذاتية
قبل تطبيق خوارزميات التكتل، كما تعلمنا، من الجيد فهم طبيعة مجموعة بياناتك. اقرأ المزيد عن هذا الموضوع هنا
هذه المقالة المفيدة ترشدك خلال الطرق المختلفة التي تتصرف بها خوارزميات التكتل المختلفة، اعتمادًا على أشكال البيانات المختلفة.
التكليف
تنويه: تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى للدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.









