📝 ملخص كورس علم البيانات - 11

الجزء الثالث من الكورس يتكلم عن التعلم غير الموجَّه Unsupervised Learning.

الفصل الثالث - التعلم غير الموجَّه Unsupervised Learning
الدرس الأول - التجميع - Clustering

كتبت في منشور سابق عن التعلم غير الموجَّه بشكل عام، تعريفة وأمثله عليه واشهر خوارزمياته.

أنواع التعلم غير الموجَّه
  • Clustering التجميع: جمع البيانات على شكل فئات حسب خصائص معينه تتاشبه فيها.
  • Dimensionality reduction تقليص الأبعاد: عرض البيانات بأقل عدد من الخصائص.
    ويضاف لها أحياناً:
  • Association Rules قواعد / قوانين الربط: ربط البيانات فيما بينها عن طريق محاولة أكتشاف علاقات بينها.
خوارزميات التعلم غير الموجَّه
K-Means تجميع بالمتوسطات

تم شرحها سابقاً بشكل مفصل هنا. تستخدم هذه الخوارزمية كثيراً في برامج تقديم الإقتراحات مثلاً في Netflix و Spotify.

طريقة عمل الخوارزمية K-Means
  • يتم إعطاء الخوارزمية رقم K ويعني عدد مرات تقسيم (تجميع) البيانات إلى Clusters.
  • بنفس الرقم K يتم رسم نقاط تعرف بالنقاط المركزية Centroids.
  • تربط كل بيانات بما يقارب لها من نقاط مركزية.
  • تقوم الخوارزمية بحساب المتوسط لجميع النقاط داخل كل Cluster.
  • تكرار الخطوتين الأخيرتين مرة أخرى حتى تصل لنقاط مركزية وتجميعة مناسبة لجميع النقاط.
Elbow Method

طريقة لإيجاد عدد الـK في خوارزمية K-Means، و K تعني هنا عدد الـClusters في البيانات لدينا. تستخدم هذه الطريقة عندما لا نعرف عدد التصنيفات لدينا. طريقة عملها كالتالي:

  • نتبع الخطوات السابقة لعمل الخوارزمية
  • عند انشاء الخوارزمية بواسطة Scikit-learn يحتوي المودل على دالة Score
  • نظهر النتائج في رسم بياني يكون شكله كالتالي X = Number of K & Y = Average Distance to Cluster 1
  • في الصورة العلوية، 3 هو العدد المناسب الذي يتوقف فيه التغير العالي في متوسط المسافة بين النقاط و الـCluster.
مثال بايثون

طريقة كتابة خوارزمية K-means وإستخدام الـElbow Method

from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt

#   لنفرض لدينا بيانات معرفة في data
data = data

#   نعرف المودل ونضيف له عدد الClusters
kmeans_4 = KMeans(n_clusters=4)

#   نقوم بربط البيانات مع المودل
model_4 = kmeans_4.fit(data)

#   للتوقع نقوم بالتالي
labels_4 = model_4.predict(data)


#   الجزء التالي لعرض Elbow method كرسم بياني بإستخدام مكتبة matplotlib

#   هنا نجرب من 1 إلى 10 Clusters ونظهر نتائجها
No_of_clusters = range(1, 10)

#   ننشأ قائمة تحتوي على 10 مودلز من 1 إلى 10 Clusters
kmeans = [KMeans(n_clusters=i) for i in No_of_clusters]

#   ننشأ قائمة ثانية تحتوي على نتائج كل مودل من التي أنشئناها بالخطوة السابقة
score = [np.abs(kmeans[i].fit(data).score(data)) for i in range(len(kmeans))]

#   عرض النتائج في رسم بياني
plt.plot(No_of_clusters, score, linestyle='--', marker='o', color='b');
plt.xlabel('Number of Clusters')
plt.ylabel('Score')
plt.title('Elbow Curve')
plt.show()
Feature Scaling

طريقة لإعادة تعين قيمة النتائج حتى نحصل على بيانات ونتائج صحيحة، توجد طريقتين لذلك:

  • Standardizing: تحويل القيم إلى رقم جديد يكون متوسط Mean كل النتائج يساوي 0 وتباين Variance يساوي 1. تكون النتائج عادة متقاربة من -3 إلى 3 مثلاً.
  • Normalizing: تحويل القيم إلى رقم جديد من 0 إلى 1.
    مثال لنتائج قبل وبعد التحويل لإحدى الطريقتين: 2

العودة إلى ملخص كورس علم البيانات - 10 - الإنتقال إلى ملخص كورس علم البيانات - 12

كُتب في 11/04/2019