فرضية تعلم منيفولد (Manifold Learning) وتنفيذ تقنية التضمين الخطي محليًا (Locally Linear Embedding) في بایثون

مقدمة

يقدم هذا المقال مفهوم تعلم منيفولد (Manifold Learning). كما يناقش أيضًا إحدى تقنياته – LLE (التضمين الخطي محليًا) وكيفية تنفيذها.

لعنة الأبعاد (Curse of Dimensionality)

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

هناك طريقتان رئيسيتان لتقليل الأبعاد: الإسقاط وتعلم منيفولد. هنا، سوف نركز على الأخير.

تعلم منيفولد (Manifold Learning)؟

ما هو تعلم منيفولد؟

منيفولد ثنائي الأبعاد هو أي شكل ثنائي الأبعاد يمكن تصنيعه ليلائم مساحة ذات أبعاد أعلى عن طريق لفها (twisting) أو ثنيها (bending).

ما هي فرضية منيفولد (Manifold Hypothesis)؟

“تنص فرضية منيفولد على أن البيانات عالية الأبعاد في العالم الحقيقي تكمن في منیفولدات منخفضة الأبعاد المضمّنة في الفضاء عالي الأبعاد.”

ببساطة، هذا يعني أن البيانات ذات الأبعاد الأعلى تقع في معظم الأوقات على منیفولد أقل أبعادًا. تسمى عملية نمذجة المنیفولد الذي تكمن عليه حالات التدريب، تعلم منيفولد.

كيف سيبدو منيفولد؟

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

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

تعلم منيفولد
الصورة الأولى: الأسطح الأساسية التي تكون منيفولد

هل يمكنك التفكير في الأسطح التي لا تکون منیفولدا؟ ستواجه هذه الأسطح مشاكل في بعض النقاط “الحادة”. فيما يلي أول عدد قليل يتبادر إلى الذهن بالنسبة لي:

  1. المكعب: إذا مشيت على طول جانب ووصلت إلى الحافة، فستكون الأشياء حادة جدًا ولن تبدو وكأنها مساحة مسطحة بعد الآن.
  2. المناظر الجبل الطبيعية: بافتراض أن القمة حادة تمامًا، فلن تبدو الأشياء في هذه المرحلة وكأنها مساحة مسطحة.
  3. الساعة الرملية: بافتراض أن تقاطع النصفين هي نقطة واحدة، فسيتم كسر القاعدة هنا.

تقنية التضمين الخطي محليًا (Locally Linear Embedding)

التضمين الخطي محليًا (LLE) هو أسلوب تعلم منيفولد. ويستخدم لتقليل الأبعاد غير الخطية. إنها خوارزمية تعليمية للتعلم بدون الإشراف، تنتج زخارف منخفضة الأبعاد لمدخلات عالية الأبعاد، تربط كل حالة تدريب بأقرب جار لها. إنها خوارزمية تعليمية بدون الإشراف وتنتج بيانات منخفضة الأبعاد لمدخلات عالية الأبعاد، إذ تربط كل حالة تدريب بأقرب جار لها.

كيف تعمل LLE؟

لكل مثيل تدريب x^{(i)} تجد الخوارزمية أولاً k أقرب جيرانها ثم تحاول التعبير عن x^{(i)} كدالة خطية لهم. بشكل عام، إذا كانت هناك m حالات تدريب إجمالاً، فإنها تحاول إيجاد مجموعة الأوزان w التي تقلل المسافة المربعة بين x^{(i)} وتمثيلها الخطي.

لذلك، يتم إعطاء دالة التكلفة (cost function) بواسطة،

\sum_{i=1}^{m}(x^{(i)}-\sum_{j=1}^{m}\omega _{i,j}\times x^{j})^{2}

إذ \omega _{i,j}، إذا لم يتم تضمين j في أقرب جيران k لـ i.

أيضًا، يقوم بتطبيع الأوزان لكل مثيل تدريب x^{(i)}،

\sum_{j=1}^{m}\omega _{i,j}=1

أخيرًا، يتم تعيين كل مثيل تدريب عالي الأبعاد x^{(i)} إلى متجه y^{(i)} منخفض الأبعاد (على سبيل المثال، أبعاد d) مع الحفاظ على علاقات الجوار.

یتم ذلك عن طريق اختيار إحداثيات الأبعاد d التي تقلل من وظيفة التكلفة (cost function)،

\sum_{i=1}^{m}(y^{(i)}-\sum_{j=1}^{m}\omega _{i,j}\times y^{j})^{2}

هنا يتم الاحتفاظ بالأوزان \omega _{ij} ثابتة بينما نحاول إيجاد الإحداثيات المثلى y^{(i)}.

التنفيذ باستخدام scikit-Learn

يتم استخدام الكود أدناه لتنفيذ LLE باستخدام فئة LocallyLinearEmbedding الخاصة بـ scikit-Learn:

الکود:

from sklearn.manifold import LocallyLinearEmbedding
lle= LocallyLinearEmbedding(n_neighbors=5, n_components=2)
n_points = 1000
from sklearn import manifold, datasets
X, color = datasets.make_swiss_roll(n_points, random_state=0)
X_transformed=lle.fit_transform(X)
print("X")
print(X)
print("X_transformed")
print(X_transformed)

الآن، سیکون الإخراج في مجموعة البيانات هذه کما یلی:

X:
[[ -8.85708287  12.45048569  -4.38885338]
 [  5.0569229    0.21133761 -10.2760021 ]
 [ -5.88799247   9.99235011  -8.56459157]
 ...
 [  7.43454008  10.08226395  11.33631801]
 [  5.72861159  13.52114477   3.78724932]
 [  1.09344646  10.53723574 -11.04027772]]
X_transformed:
array([[ 3.34962177e-02, -2.45809520e-03],
       [ 3.44122800e-02, -4.72959930e-03],
       [ 3.38512862e-02, -2.73044022e-03],
       ...,
       [ 4.16806197e-03,  7.60888817e-02],
       [ 3.74335137e-02,  5.48442004e-05],
       [ 3.62720254e-02, -9.70683698e-03]])

ملاحظات النهاية لتعلم منيفولد

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

الخاتمة

في هذه المقالة، قدمنا مفهوم تعلم منيفولد وناقشنا أيضًا إحدى تقنياته – LLE. ثم رأينا تطبيق بایثون الخاص به على مجموعة بيانات swiss roll.

المصادر

المصدر الأول

المصدر الثاني

Related video

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

السلة