You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
341 lines
28 KiB
341 lines
28 KiB
<!--
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
{
|
|
"original_hash": "730225ea274c9174fe688b21d421539d",
|
|
"translation_date": "2025-09-04T20:43:28+00:00",
|
|
"source_file": "5-Clustering/1-Visualize/README.md",
|
|
"language_code": "ar"
|
|
}
|
|
-->
|
|
# مقدمة إلى التجميع
|
|
|
|
التجميع هو نوع من [التعلم غير الموجه](https://wikipedia.org/wiki/Unsupervised_learning) الذي يفترض أن مجموعة البيانات غير معنونة أو أن مدخلاتها غير مرتبطة بمخرجات محددة مسبقًا. يستخدم التجميع خوارزميات مختلفة لفرز البيانات غير المعنونة وتوفير مجموعات بناءً على الأنماط التي يكتشفها في البيانات.
|
|
|
|
[](https://youtu.be/ty2advRiWJM "No One Like You by PSquare")
|
|
|
|
> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو. أثناء دراستك لتعلم الآلة باستخدام التجميع، استمتع ببعض أغاني الرقص النيجيرية - هذه أغنية مشهورة من عام 2014 لفرقة PSquare.
|
|
|
|
## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
### مقدمة
|
|
|
|
[التجميع](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) مفيد جدًا لاستكشاف البيانات. دعونا نرى ما إذا كان يمكنه المساعدة في اكتشاف الاتجاهات والأنماط في طريقة استهلاك الجمهور النيجيري للموسيقى.
|
|
|
|
✅ خذ دقيقة للتفكير في استخدامات التجميع. في الحياة الواقعية، يحدث التجميع عندما يكون لديك كومة من الغسيل وتحتاج إلى فرز ملابس أفراد عائلتك 🧦👕👖🩲. في علم البيانات، يحدث التجميع عند محاولة تحليل تفضيلات المستخدم أو تحديد خصائص أي مجموعة بيانات غير معنونة. يساعد التجميع، بطريقة ما، في فهم الفوضى، مثل درج الجوارب.
|
|
|
|
[](https://youtu.be/esmzYhuFnds "Introduction to Clustering")
|
|
|
|
> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو: جون غوتاغ من MIT يقدم التجميع.
|
|
|
|
في بيئة مهنية، يمكن استخدام التجميع لتحديد أشياء مثل تقسيم السوق، أو تحديد الفئات العمرية التي تشتري منتجات معينة، على سبيل المثال. استخدام آخر يمكن أن يكون اكتشاف الشذوذ، ربما لاكتشاف الاحتيال من مجموعة بيانات معاملات بطاقات الائتمان. أو قد تستخدم التجميع لتحديد الأورام في مجموعة من الفحوصات الطبية.
|
|
|
|
✅ فكر لدقيقة في كيفية مواجهتك للتجميع "في الحياة الواقعية"، سواء في البنوك أو التجارة الإلكترونية أو بيئة الأعمال.
|
|
|
|
> 🎓 من المثير للاهتمام أن تحليل التجميع نشأ في مجالات الأنثروبولوجيا وعلم النفس في ثلاثينيات القرن الماضي. هل يمكنك تخيل كيف كان يمكن استخدامه؟
|
|
|
|
بدلاً من ذلك، يمكنك استخدامه لتجميع نتائج البحث - مثل الروابط التسويقية أو الصور أو المراجعات، على سبيل المثال. يكون التجميع مفيدًا عندما يكون لديك مجموعة بيانات كبيرة تريد تقليلها وتريد إجراء تحليل أكثر تفصيلاً عليها، لذا يمكن استخدام هذه التقنية لفهم البيانات قبل بناء نماذج أخرى.
|
|
|
|
✅ بمجرد تنظيم بياناتك في مجموعات، يمكنك تعيين معرف مجموعة لها، ويمكن أن تكون هذه التقنية مفيدة عند الحفاظ على خصوصية مجموعة البيانات؛ يمكنك بدلاً من ذلك الإشارة إلى نقطة بيانات بمعرف المجموعة الخاص بها، بدلاً من بيانات تعريفية أكثر كشفًا. هل يمكنك التفكير في أسباب أخرى قد تجعلك تشير إلى معرف مجموعة بدلاً من عناصر أخرى من المجموعة لتحديدها؟
|
|
|
|
تعرف على المزيد حول تقنيات التجميع في هذا [الوحدة التعليمية](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott).
|
|
|
|
## البدء مع التجميع
|
|
|
|
[يوفر Scikit-learn مجموعة كبيرة](https://scikit-learn.org/stable/modules/clustering.html) من الطرق لتنفيذ التجميع. يعتمد النوع الذي تختاره على حالتك. وفقًا للتوثيق، لكل طريقة فوائد مختلفة. إليك جدول مبسط للطرق المدعومة من Scikit-learn وحالات الاستخدام المناسبة لها:
|
|
|
|
| اسم الطريقة | حالة الاستخدام |
|
|
| :--------------------------- | :--------------------------------------------------------------------- |
|
|
| K-Means | غرض عام، استقرائي |
|
|
| Affinity propagation | العديد من المجموعات غير المتساوية، استقرائي |
|
|
| Mean-shift | العديد من المجموعات غير المتساوية، استقرائي |
|
|
| Spectral clustering | مجموعات قليلة ومتساوية، استنتاجي |
|
|
| Ward hierarchical clustering | العديد من المجموعات المقيدة، استنتاجي |
|
|
| Agglomerative clustering | العديد من المجموعات المقيدة، مسافات غير إقليدية، استنتاجي |
|
|
| DBSCAN | هندسة غير مسطحة، مجموعات غير متساوية، استنتاجي |
|
|
| OPTICS | هندسة غير مسطحة، مجموعات غير متساوية بكثافة متغيرة، استنتاجي |
|
|
| Gaussian mixtures | هندسة مسطحة، استقرائي |
|
|
| BIRCH | مجموعة بيانات كبيرة مع نقاط شاذة، استقرائي |
|
|
|
|
> 🎓 كيف ننشئ المجموعات يعتمد بشكل كبير على كيفية جمع نقاط البيانات في مجموعات. دعونا نوضح بعض المصطلحات:
|
|
>
|
|
> 🎓 ['استنتاجي' مقابل 'استقرائي'](https://wikipedia.org/wiki/Transduction_(machine_learning))
|
|
>
|
|
> الاستنتاج الاستقرائي يعتمد على حالات تدريب ملاحظة تُطبق على قواعد عامة، بينما الاستنتاج الاستنتاجي يعتمد على حالات تدريب ملاحظة تُطبق على حالات اختبار محددة.
|
|
>
|
|
> مثال: تخيل أن لديك مجموعة بيانات معنونة جزئيًا. بعض العناصر "أسطوانات"، وبعضها "أقراص مدمجة"، وبعضها فارغ. إذا اخترت نهجًا استقرائيًا، ستدرب نموذجًا يبحث عن "أسطوانات" و"أقراص مدمجة"، وتطبق هذه التصنيفات على البيانات غير المعنونة. هذا النهج سيواجه صعوبة في تصنيف الأشياء التي هي في الواقع "كاسيتات". أما النهج الاستنتاجي، فيتعامل مع هذه البيانات غير المعروفة بشكل أكثر فعالية حيث يعمل على تجميع العناصر المتشابهة معًا ثم يطبق تصنيفًا على المجموعة.
|
|
>
|
|
> 🎓 ['هندسة غير مسطحة' مقابل 'مسطحة'](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering)
|
|
>
|
|
> مشتقة من المصطلحات الرياضية، تشير الهندسة المسطحة إلى قياس المسافات بين النقاط باستخدام الطرق الإقليدية، بينما تشير الهندسة غير المسطحة إلى استخدام الطرق غير الإقليدية.
|
|
>
|
|

|
|
> إنفوجرافيك بواسطة [Dasani Madipalli](https://twitter.com/dasani_decoded)
|
|
>
|
|
> 🎓 ['المسافات'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf)
|
|
>
|
|
> تُعرف المجموعات بمصفوفة المسافات الخاصة بها، أي المسافات بين النقاط. يمكن قياس هذه المسافة بطرق مختلفة. المجموعات الإقليدية تُعرف بمتوسط قيم النقاط، وتحتوي على "مركز" أو نقطة مركزية. تُقاس المسافات بناءً على المسافة إلى هذا المركز. المسافات غير الإقليدية تشير إلى "clustroids"، النقطة الأقرب إلى النقاط الأخرى.
|
|
>
|
|
> 🎓 ['مقيدة'](https://wikipedia.org/wiki/Constrained_clustering)
|
|
>
|
|
> [التجميع المقيد](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) يقدم التعلم "شبه الموجه" إلى هذه الطريقة غير الموجهة. يتم وضع قواعد على العلاقات بين النقاط مثل "لا يمكن الربط" أو "يجب الربط".
|
|
>
|
|
> مثال: إذا تُركت خوارزمية حرة على مجموعة بيانات غير معنونة أو معنونة جزئيًا، قد تكون المجموعات الناتجة ذات جودة ضعيفة. إذا أُعطيت بعض القيود، مثل "يجب أن يكون العنصر مصنوعًا من البلاستيك"، يمكن أن يساعد ذلك في تحسين جودة المجموعات.
|
|
|
|
## خوارزميات التجميع
|
|
|
|
هناك أكثر من 100 خوارزمية للتجميع، ويعتمد استخدامها على طبيعة البيانات المتاحة. دعونا نناقش بعض الخوارزميات الرئيسية:
|
|
|
|
- **التجميع الهرمي**. إذا تم تصنيف كائن بناءً على قربه من كائن قريب بدلاً من كائن بعيد، يتم تشكيل المجموعات بناءً على المسافات بين أعضائها. التجميع التكتلي في Scikit-learn هو تجميع هرمي.
|
|
|
|

|
|
> إنفوجرافيك بواسطة [Dasani Madipalli](https://twitter.com/dasani_decoded)
|
|
|
|
- **التجميع المركزي**. يتطلب هذا الخوارزمية الشائعة اختيار "k"، أو عدد المجموعات المراد تشكيلها، وبعد ذلك تحدد الخوارزمية النقطة المركزية للمجموعة وتجمع البيانات حول تلك النقطة. [التجميع باستخدام K-means](https://wikipedia.org/wiki/K-means_clustering) هو نسخة شائعة من هذا النوع.
|
|
|
|

|
|
> إنفوجرافيك بواسطة [Dasani Madipalli](https://twitter.com/dasani_decoded)
|
|
|
|
- **التجميع القائم على التوزيع**. يعتمد على النمذجة الإحصائية، حيث يركز على تحديد احتمال انتماء نقطة بيانات إلى مجموعة معينة.
|
|
|
|
- **التجميع القائم على الكثافة**. يتم تعيين نقاط البيانات إلى مجموعات بناءً على كثافتها، أو تجمعها حول بعضها البعض. النقاط البعيدة عن المجموعة تُعتبر شذوذًا أو ضوضاء.
|
|
|
|
- **التجميع القائم على الشبكة**. بالنسبة لمجموعات البيانات متعددة الأبعاد، يتم إنشاء شبكة وتقسيم البيانات بين خلايا الشبكة، مما يؤدي إلى إنشاء مجموعات.
|
|
|
|
## تمرين - تجميع بياناتك
|
|
|
|
التجميع كطريقة يعتمد بشكل كبير على التصور الصحيح، لذا دعونا نبدأ بتصور بيانات الموسيقى الخاصة بنا. سيساعدنا هذا التمرين في تحديد الطريقة الأكثر فعالية للتجميع التي يمكننا استخدامها لطبيعة هذه البيانات.
|
|
|
|
1. افتح ملف [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) في هذا المجلد.
|
|
|
|
1. استورد حزمة `Seaborn` للحصول على تصور جيد للبيانات.
|
|
|
|
```python
|
|
!pip install seaborn
|
|
```
|
|
|
|
1. أضف بيانات الأغاني من [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). قم بتحميل إطار بيانات يحتوي على بعض البيانات حول الأغاني. استعد لاستكشاف هذه البيانات عن طريق استيراد المكتبات وعرض البيانات:
|
|
|
|
```python
|
|
import matplotlib.pyplot as plt
|
|
import pandas as pd
|
|
|
|
df = pd.read_csv("../data/nigerian-songs.csv")
|
|
df.head()
|
|
```
|
|
|
|
تحقق من الأسطر القليلة الأولى من البيانات:
|
|
|
|
| | الاسم | الألبوم | الفنان | النوع الموسيقي الرئيسي | تاريخ الإصدار | الطول | الشعبية | القابلية للرقص | الصوتية | الطاقة | الآلية | الحيوية | الصوت | الكلامية | الإيقاع | توقيع الوقت |
|
|
| --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- |
|
|
| 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 |
|
|
|
|
1. احصل على بعض المعلومات حول إطار البيانات باستخدام الأمر `info()`:
|
|
|
|
```python
|
|
df.info()
|
|
```
|
|
|
|
الناتج يبدو كالتالي:
|
|
|
|
```output
|
|
<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
|
|
```
|
|
|
|
1. تحقق مرة أخرى من القيم الفارغة باستخدام الأمر `isnull()` وتأكد من أن المجموع يساوي 0:
|
|
|
|
```python
|
|
df.isnull().sum()
|
|
```
|
|
|
|
يبدو جيدًا:
|
|
|
|
```output
|
|
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
|
|
```
|
|
|
|
1. وصف البيانات:
|
|
|
|
```python
|
|
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"، مما يظهر الأغاني التي ليس لها تصنيف. دعنا نزيل هذه القيم قريبًا.
|
|
|
|
1. استخدم مخطط الأعمدة لمعرفة الأنواع الموسيقية الأكثر شعبية:
|
|
|
|
```python
|
|
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]` إلى قيمة أكبر، أو قم بإزالتها لرؤية الكل.
|
|
|
|
لاحظ أنه عندما يتم وصف النوع الموسيقي الأعلى بأنه "Missing"، فهذا يعني أن Spotify لم يصنفه، لذا دعنا نتخلص منه.
|
|
|
|
1. تخلص من البيانات المفقودة عن طريق تصفيتها:
|
|
|
|
```python
|
|
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')
|
|
```
|
|
|
|
الآن تحقق مرة أخرى من الأنواع الموسيقية:
|
|
|
|

|
|
|
|
1. بشكل عام، الأنواع الموسيقية الثلاثة الأولى تهيمن على هذا الإطار. دعنا نركز على `afro dancehall`، `afropop`، و `nigerian pop`، بالإضافة إلى تصفية الإطار لإزالة أي قيمة شعبية تساوي 0 (مما يعني أنها لم تصنف بشعبية في الإطار ويمكن اعتبارها ضوضاء لأغراضنا):
|
|
|
|
```python
|
|
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')
|
|
```
|
|
|
|
1. قم باختبار سريع لمعرفة ما إذا كانت البيانات ترتبط بطريقة قوية بشكل خاص:
|
|
|
|
```python
|
|
corrmat = df.corr(numeric_only=True)
|
|
f, ax = plt.subplots(figsize=(12, 9))
|
|
sns.heatmap(corrmat, vmax=.8, square=True)
|
|
```
|
|
|
|

|
|
|
|
الارتباط القوي الوحيد هو بين `energy` و `loudness`، وهو ليس مفاجئًا جدًا، نظرًا لأن الموسيقى الصاخبة عادة ما تكون مليئة بالطاقة. بخلاف ذلك، الارتباطات ضعيفة نسبيًا. سيكون من المثير للاهتمام معرفة ما يمكن أن تفعله خوارزمية التجميع بهذه البيانات.
|
|
|
|
> 🎓 لاحظ أن الارتباط لا يعني السببية! لدينا دليل على الارتباط ولكن ليس لدينا دليل على السببية. [موقع ويب ممتع](https://tylervigen.com/spurious-correlations) يحتوي على بعض الرسوم التي تؤكد هذه النقطة.
|
|
|
|
هل هناك أي تقارب في هذه البيانات حول شعبية الأغنية المتصورة وقابليتها للرقص؟ يظهر مخطط FacetGrid أن هناك دوائر متحدة المركز تتماشى، بغض النظر عن النوع الموسيقي. هل يمكن أن تكون الأذواق النيجيرية تتقارب عند مستوى معين من القابلية للرقص لهذا النوع الموسيقي؟
|
|
|
|
✅ جرب نقاط بيانات مختلفة (مثل الطاقة، الصخب، الكلامية) والمزيد من الأنواع الموسيقية أو أنواع مختلفة. ماذا يمكنك أن تكتشف؟ ألق نظرة على جدول `df.describe()` لرؤية الانتشار العام لنقاط البيانات.
|
|
|
|
### تمرين - توزيع البيانات
|
|
|
|
هل هذه الأنواع الثلاثة مختلفة بشكل كبير في تصور قابليتها للرقص بناءً على شعبيتها؟
|
|
|
|
1. قم بفحص توزيع بيانات الأنواع الثلاثة العليا للشعبية وقابليتها للرقص على محور x و y معين.
|
|
|
|
```python
|
|
sns.set_theme(style="ticks")
|
|
|
|
g = sns.jointplot(
|
|
data=df,
|
|
x="popularity", y="danceability", hue="artist_top_genre",
|
|
kind="kde",
|
|
)
|
|
```
|
|
|
|
يمكنك اكتشاف دوائر متحدة المركز حول نقطة تقارب عامة، تظهر توزيع النقاط.
|
|
|
|
> 🎓 لاحظ أن هذا المثال يستخدم مخطط KDE (تقدير كثافة النواة) الذي يمثل البيانات باستخدام منحنى كثافة احتمالية مستمر. هذا يسمح لنا بتفسير البيانات عند العمل مع توزيعات متعددة.
|
|
|
|
بشكل عام، الأنواع الثلاثة تتماشى بشكل فضفاض من حيث شعبيتها وقابليتها للرقص. تحديد التجمعات في هذه البيانات المتراصة سيكون تحديًا:
|
|
|
|

|
|
|
|
1. قم بإنشاء مخطط مبعثر:
|
|
|
|
```python
|
|
sns.FacetGrid(df, hue="artist_top_genre", height=5) \
|
|
.map(plt.scatter, "popularity", "danceability") \
|
|
.add_legend()
|
|
```
|
|
|
|
يظهر مخطط مبعثر لنفس المحاور نمطًا مشابهًا للتقارب.
|
|
|
|

|
|
|
|
بشكل عام، للتجميع، يمكنك استخدام المخططات المبعثرة لإظهار تجمعات البيانات، لذا فإن إتقان هذا النوع من التصور مفيد جدًا. في الدرس التالي، سنأخذ هذه البيانات المصفاة ونستخدم التجميع باستخدام k-means لاكتشاف مجموعات في هذه البيانات التي تبدو متداخلة بطرق مثيرة للاهتمام.
|
|
|
|
---
|
|
|
|
## 🚀تحدي
|
|
|
|
استعدادًا للدرس التالي، قم بإنشاء مخطط حول خوارزميات التجميع المختلفة التي قد تكتشفها وتستخدمها في بيئة الإنتاج. ما هي أنواع المشاكل التي تحاول خوارزميات التجميع معالجتها؟
|
|
|
|
## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
## المراجعة والدراسة الذاتية
|
|
|
|
قبل تطبيق خوارزميات التجميع، كما تعلمنا، من الجيد فهم طبيعة إطار البيانات الخاص بك. اقرأ المزيد عن هذا الموضوع [هنا](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html)
|
|
|
|
[هذه المقالة المفيدة](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) تشرح لك الطرق المختلفة التي تتصرف بها خوارزميات التجميع المختلفة، بالنظر إلى أشكال البيانات المختلفة.
|
|
|
|
## الواجب
|
|
|
|
[ابحث عن تصورات أخرى للتجميع](assignment.md)
|
|
|
|
---
|
|
|
|
**إخلاء المسؤولية**:
|
|
تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. |