التضمينات في التعلم الآلي: تبسيط البيانات المعقدة
نشرت: 2022-03-11قد يكون العمل مع البيانات غير الرقمية أمرًا صعبًا ، حتى بالنسبة لعلماء البيانات ذوي الخبرة. يتوقع نموذج التعلم الآلي النموذجي أن تكون ميزاته أرقامًا وليس كلمات أو رسائل بريد إلكتروني أو صفحات موقع ويب أو قوائم أو رسوم بيانية أو توزيعات احتمالية. لتكون مفيدة ، يجب تحويل البيانات إلى فضاء متجه أولاً. ولكن كيف؟
قد يكون أحد الأساليب الشائعة هو معاملة السمة غير العددية على أنها قاطعة . قد يعمل هذا بشكل جيد إذا كان عدد الفئات صغيرًا (على سبيل المثال ، إذا كانت البيانات تشير إلى مهنة أو بلد). ومع ذلك ، إذا حاولنا تطبيق هذه الطريقة على رسائل البريد الإلكتروني ، فمن المحتمل أن نحصل على العديد من الفئات مثل العينات. لا توجد رسالتان بريد إلكترونيان متماثلتان تمامًا ، وبالتالي لن يكون لهذا النهج أي فائدة.
هناك طريقة أخرى تتمثل في تحديد المسافة بين عينات البيانات ، وهي وظيفة تخبرنا عن مدى قرب أي عينتين. أو يمكننا تحديد مقياس تشابه ، والذي من شأنه أن يعطينا نفس المعلومات باستثناء أن المسافة بين عينتين متقاربتين صغيرة بينما التشابه كبير. المسافة الحاسوبية (التشابه) بين جميع عينات البيانات ستمنحنا مصفوفة مسافة (أو تشابه). هذه بيانات رقمية يمكننا استخدامها.
ومع ذلك ، فإن هذه البيانات سيكون لها العديد من الأبعاد مثل العينات ، والتي عادة ما تكون غير رائعة إذا أردنا استخدامها كميزة (انظر لعنة الأبعاد) أو تصورها (بينما يمكن أن تتعامل قطعة واحدة حتى 6D ، لدي حتى الآن لرؤية قطعة أرض 100D). هل يمكننا تقليل عدد الأبعاد إلى مبلغ معقول؟
الجواب نعم! هذا ما لدينا حفلات الزفاف من أجله.
ما المقصود بالتضمين ولماذا يتم استخدامه؟
التضمين هو تمثيل منخفض الأبعاد للبيانات عالية الأبعاد. عادةً ، لا يلتقط التضمين جميع المعلومات الموجودة في البيانات الأصلية. ومع ذلك ، فإن التضمين الجيد سيلتقط ما يكفي لحل المشكلة المطروحة.
توجد العديد من حفلات الزفاف المصممة لهيكل بيانات معين. على سبيل المثال ، ربما تكون قد سمعت عن word2vec للبيانات النصية أو واصفات فورييه لبيانات صورة الشكل. بدلاً من ذلك ، سنناقش كيفية تطبيق الزخارف على أي بيانات حيث يمكننا تحديد مسافة أو مقياس تشابه. طالما أنه يمكننا حساب مصفوفة المسافة ، فإن طبيعة البيانات غير ذات صلة تمامًا. ستعمل بنفس الطريقة ، سواء كانت رسائل بريد إلكتروني أو قوائم أو أشجار أو صفحات ويب.
في هذه المقالة ، سوف نقدم لك أنواعًا مختلفة من التضمين ونناقش كيفية عمل بعض حفلات الزفاف الشائعة وكيف يمكننا استخدام حفلات الزفاف لحل مشكلات العالم الواقعي التي تتضمن بيانات معقدة. سنستعرض أيضًا إيجابيات وسلبيات هذه الطريقة ، بالإضافة إلى بعض البدائل. نعم ، يمكن حل بعض المشكلات بشكل أفضل بوسائل أخرى ، ولكن لسوء الحظ ، لا يوجد حل سحري في التعلم الآلي.
هيا بنا نبدأ.
كيف تعمل حفلات الزفاف
تحاول جميع عمليات التضمين تقليل أبعاد البيانات مع الحفاظ على المعلومات "الأساسية" في البيانات ، ولكن كل عملية تضمين تقوم بذلك بطريقتها الخاصة. هنا ، سنتعرف على عدد قليل من حفلات الزفاف الشائعة التي يمكن تطبيقها على مصفوفة المسافة أو التشابه.
لن نحاول حتى تغطية جميع حفلات الزفاف هناك. هناك ما لا يقل عن عشرة حفلات زفاف معروفة يمكنها القيام بذلك والعديد من حفلات الزفاف الأقل شهرة وتنوعاتها. كل واحد منهم له نهج ومزايا وعيوب.
إذا كنت ترغب في رؤية حفلات الزفاف الأخرى الموجودة هناك ، يمكنك البدء من هنا:
- دليل مستخدم Scikit-Learn
- عناصر التعلم الإحصائي (الإصدار الثاني) ، الفصل 14
مصفوفة المسافة
دعنا نتطرق بإيجاز إلى مصفوفات المسافة. يتطلب العثور على مسافة مناسبة للبيانات فهمًا جيدًا للمشكلة ، وبعض المعرفة بالرياضيات ، وأحيانًا الحظ المطلق . في النهج الموضح في هذه المقالة ، قد يكون هذا هو العامل الأكثر أهمية الذي يساهم في النجاح أو الفشل الشامل لمشروعك.
يجب أيضًا أن تضع في اعتبارك بعض التفاصيل الفنية. تفترض العديد من خوارزميات التضمين أن مصفوفة المسافة (أو الاختلاف ) $ \ textbf {D} $ بها أصفار على قطرها وأنها متماثلة. إذا لم يكن الأمر متماثلًا ، فيمكننا استخدام $ (\ textbf {D} + \ textbf {D} ^ T) / 2 $ بدلاً من ذلك. ستفترض الخوارزميات التي تستخدم خدعة النواة أيضًا أن المسافة هي مقياس ، مما يعني أن متباينة المثلث تحمل:
\ [\ للجميع أ ، ب ، ج \ ؛ \ ؛ د (أ ، ج) \ leq د (أ ، ب) + د (ب ، ج) \]أيضًا ، إذا كانت الخوارزمية تتطلب مصفوفة تشابه بدلاً من ذلك ، فيمكننا تطبيق أي دالة مخفضة أحادية اللون لتحويل مصفوفة المسافة إلى مصفوفة تشابه: على سبيل المثال ، $ \ exp -x $.
تحليل المكونات الرئيسية (PCA)
من المحتمل أن يكون تحليل المكون الرئيسي ، أو PCA ، هو التضمين الأكثر استخدامًا حتى الآن. الفكرة بسيطة: ابحث عن تحويل خطي للميزات التي تزيد من التباين الملتقط أو (بشكل مكافئ) تقلل خطأ إعادة البناء التربيعي .
على وجه التحديد ، دع الميزات تكون نموذج مصفوفة $ \ textbf {X} \ in \ mathbb {R} ^ {n \ times p} $ لها $ n $ features و $ p $ أبعاد. للتبسيط ، دعنا نفترض أن متوسط عينة البيانات هو صفر. يمكننا تقليل عدد الأبعاد من $ p $ إلى $ q $ بضرب $ \ textbf {X} $ في مصفوفة متعامدة $ \ textbf {V} _q \ in \ mathbb {R} ^ {p \ times q} $ :
\ [\ hat {\ textbf {X}} = \ textbf {X} \ textbf {V} _q \]بعد ذلك ، ستكون مجموعة الميزات $ \ hat {\ textbf {X}} \ in \ mathbb {R} ^ {n \ times q} $ هي المجموعة الجديدة من الميزات. لإعادة تعيين الميزات الجديدة إلى المساحة الأصلية (تسمى هذه العملية إعادة البناء ) ، نحتاج ببساطة إلى ضربها مرة أخرى في $ \ textbf {V} _q ^ T $.
الآن ، علينا إيجاد المصفوفة $ \ textbf {V} _q $ التي تقلل خطأ إعادة البناء:
\ [\ min _ {\ textbf {V} _q} || \ textbf {X} \ textbf {V} _q \ textbf {V} _q ^ T - \ textbf {X} || ^ 2 \]أعمدة المصفوفة $ \ textbf {V} _q $ تسمى اتجاهات المكونات الرئيسية ، وأعمدة $ \ hat {\ textbf {X}} $ تسمى المكونات الأساسية. عدديًا ، يمكننا العثور على $ \ textbf {V} _q $ من خلال تطبيق تحليل SVD على $ \ textbf {X} $ ، بالرغم من وجود طرق أخرى صالحة للقيام بذلك.
يمكن تطبيق PCA مباشرة على السمات العددية. أو ، إذا كانت ميزاتنا غير رقمية ، فيمكننا تطبيقها على مصفوفة مسافة أو تشابه.
إذا كنت تستخدم Python ، يتم تنفيذ PCA في scikit-Learn.
وتتمثل ميزة هذه الطريقة في أنها سريعة في الحوسبة وقوية تمامًا للتشويش في البيانات.
قد يكون العيب أنه يمكنه فقط التقاط الهياكل الخطية ، لذلك من المحتمل أن تُفقد المعلومات غير الخطية الموجودة في البيانات الأصلية.
نواة PCA
Kernel PCA هو إصدار غير خطي من PCA. الفكرة هي استخدام خدعة kernel ، والتي ربما تكون قد سمعت عنها إذا كنت معتادًا على Support Vector Machines SVM.
على وجه التحديد ، توجد عدة طرق مختلفة لحساب PCA. أحدها هو حساب eigendecomposition للنسخة ذات المركزين من gram matrix $ \ textbf {X} \ textbf {X} ^ T \ in \ mathbb {R} ^ {n \ times n} $. الآن ، إذا قمنا بحساب مصفوفة kernel $ \ textbf {K} \ in \ mathbb {R} ^ {n \ times n} $ لبياناتنا ، فسوف يتعامل معها Kernel PCA على أنها مصفوفة جرام للعثور على المكونات الأساسية.
لنفترض أن $ x_i $، $ i \ in {1، ..، n} $ نماذج للميزات. يتم تعريف مصفوفة النواة بواسطة دالة النواة $ K (x_i، x_j) = \ langle \ phi (x_i)، \ phi (x_j) \ rangle $.
الخيار الشائع هو النواة الشعاعية:
\ [K (x_i، x_j) = \ exp - \ gamma \ cdot d (x_i، x_j) \]حيث $ d $ دالة عن بعد.
تطلبت Kernel PCA منا تحديد المسافة. على سبيل المثال ، بالنسبة للسمات العددية ، يمكننا استخدام المسافة الإقليدية: $ d (x_i، x_j) = \ vert \ vert x_i-x_j \ vert \ vert ^ 2 $.
بالنسبة إلى الميزات غير العددية ، قد نحتاج إلى الإبداع. شيء واحد يجب تذكره هو أن هذه الخوارزمية تفترض أن بعدنا مقياس.
إذا كنت تستخدم Python ، يتم تنفيذ Kernel PCA في scikit-Learn.
تتمثل ميزة طريقة Kernel PCA في قدرتها على التقاط هياكل البيانات غير الخطية.
العيب هو أنه حساس للضوضاء في البيانات وأن اختيار وظائف المسافة والنواة سيؤثر بشكل كبير على النتائج.
التحجيم متعدد الأبعاد (MDS)
القياس متعدد الأبعاد (MDS) يحاول الحفاظ على المسافات بين العينات بشكل عام. الفكرة بديهية تمامًا وتعمل جيدًا مع مصفوفات المسافات.
على وجه التحديد ، نظرًا لنماذج الميزات $ x_i $ و $ i \ in {1، .. و n} $ ودالة المسافة $ d $ ، فإننا نحسب نماذج الميزات الجديدة $ z_i \ in \ mathbb {R} ^ {q} $، $ i \ في {1، ..، n} $ بتقليل دالة الضغط :
\ [\ min_ {z_1، ..، z_n} \ sum_ {1 \ leq i <j \ leq n} (d (x_i، x_j) - || z_i - z_j ||) ^ 2 \]إذا كنت تستخدم Python ، فسيتم تنفيذ MDS في scikit-Learn. ومع ذلك ، لا يدعم scikit-Learn تحويل النقاط خارج العينة ، مما قد يكون غير مريح إذا أردنا استخدام التضمين بالاقتران مع نموذج الانحدار أو التصنيف. من حيث المبدأ ، ومع ذلك ، هذا ممكن.
ميزة MDS هي أن فكرتها تتوافق تمامًا مع إطار عملنا وأنها لا تتأثر كثيرًا بالضوضاء في البيانات.
العيب هو أن تنفيذه في scikit-Learn بطيء جدًا ولا يدعم التحول خارج العينة.
حالة الاستخدام: تتبع الشحنة
طورت بعض المستوطنات على جزيرة استوائية صغيرة خدمات شحن الطرود لتلبية احتياجات صناعة السياحة المحلية. قرر تاجر في إحدى هذه المستوطنات اتخاذ إجراء لكسب ميزة على المنافسة ، لذلك أنشأ نظام مراقبة عبر الأقمار الصناعية لتتبع جميع شحنات الطرود في الجزيرة. بمجرد جمع البيانات ، اتصل التاجر بعالم بيانات (هذا نحن!) لمساعدته في الإجابة على السؤال التالي: هل يمكننا توقع وجهة الحزمة الموجودة حاليًا في الطريق؟

تحتوي مجموعة البيانات على معلومات حول 200 شحنة متعقبة. لكل شحنة يتم تعقبها ، توجد قائمة بإحداثيات (س ، ص) لجميع المواقع التي تم رصد الحزمة فيها ، والتي تكون عادةً في مكان ما بين 20 و 50 ملاحظة. تظهر المؤامرة أدناه كيف تبدو هذه البيانات.
تبدو هذه البيانات وكأنها مشكلة - نوعان مختلفان من المشاكل في الواقع.
المشكلة الأولى هي أن البيانات التي نتعامل معها ذات أبعاد عالية. على سبيل المثال ، إذا تم رصد كل حزمة في 50 موقعًا ، فستحتوي بياناتنا على 100 بُعد — يبدو كثيرًا ، مقارنةً بـ 200 عينة تحت تصرفك.
المشكلة الثانية: تحتوي طرق الشحن المختلفة في الواقع على عدد مختلف من الملاحظات ، لذلك لا يمكننا ببساطة تكديس القوائم بالإحداثيات لتمثيل البيانات في شكل جدول (وحتى لو كان لديهم ، فلن يكون ذلك منطقيًا حقًا).
يقوم التاجر بقرع الطاولة بأصابعه بفارغ الصبر ، ويحاول عالم البيانات جاهدًا عدم إظهار أي علامات للذعر.
هذا هو المكان الذي ستكون فيه مصفوفات المسافات وحفلات الزفاف في متناول يدي. نحتاج فقط إلى إيجاد طريقة لمقارنة مسارين للشحن. يبدو أن المسافة Frechet خيار معقول. باستخدام المسافة ، يمكننا حساب مصفوفة المسافة.
ملاحظة: قد تستغرق هذه الخطوة بعض الوقت. نحتاج إلى حساب مسافات $ O (n ^ 2) $ مع كل مسافة بها تكرارات $ O (k ^ 2) $ ، حيث $ n $ هو عدد العينات و $ k $ هو عدد المشاهدات في عينة واحدة. كتابة دالة المسافة بكفاءة هو المفتاح. على سبيل المثال ، في Python ، يمكنك استخدام numba لتسريع هذا الحساب أكثر من مرة.
تصور حفلات الزفاف
الآن ، يمكننا استخدام التضمين لتقليل عدد الأبعاد من 200 إلى عدد قليل. يمكننا أن نرى بوضوح أنه لا يوجد سوى عدد قليل من طرق التجارة ، لذلك قد نأمل في العثور على تمثيل جيد للبيانات حتى في بعدين أو ثلاثة أبعاد. سنستخدم حفلات الزفاف التي ناقشناها سابقًا: PCA و Kernel PCA و MDS.
في المخططات أدناه ، يمكنك رؤية بيانات المسار المسمى (المقدمة من أجل العرض التوضيحي) وتمثيلها من خلال التضمين ثنائي الأبعاد وثلاثي الأبعاد (من اليسار إلى اليمين). تشير البيانات المصنفة إلى أربعة مراكز تجارية متصلة بستة طرق تجارية. اثنان من ستة طرق تجارية ثنائية الاتجاه ، مما يجعل ثماني مجموعات شحن في المجموع (6 + 2). كما ترون ، حصلنا على فصل واضح جدًا لجميع مجموعات الشحن الثماني مع تطعيمات ثلاثية الأبعاد.
هذه بداية جيدة.
حفلات الزفاف في نموذج خط الأنابيب
الآن ، نحن جاهزون لتدريب التضمين. بالرغم من أن MDS أظهر أفضل النتائج ، إلا أنه بطيء نوعًا ما ؛ أيضًا ، لا يدعم تطبيق scikit-Learn التحول خارج العينة. إنها ليست مشكلة للبحث ولكن يمكن أن تكون للإنتاج ، لذلك سنستخدم Kernel PCA بدلاً من ذلك. بالنسبة لـ Kernel PCA ، يجب ألا ننسى تطبيق نواة شعاعية على مصفوفة المسافة مسبقًا.
كيف تختار عدد أبعاد الإخراج؟ أظهر التحليل أنه حتى النماذج ثلاثية الأبعاد تعمل بشكل جيد. فقط لكي تكون في الجانب الآمن ولا تترك أي معلومات مهمة ، دعنا نضبط إخراج التضمين على 10D. للحصول على أفضل أداء ، يمكن تعيين عدد أبعاد المخرجات كمعامل فرعي للنموذج ثم ضبطه عن طريق التحقق المتقاطع.
لذلك ، سيكون لدينا 10 ميزات عددية يمكننا استخدامها كمدخلات لأي نموذج تصنيف تقريبًا. ماذا عن نموذج واحد خطي وآخر غير خطي: لنقل ، الانحدار اللوجستي وتعزيز التدرج؟ للمقارنة ، دعنا أيضًا نستخدم هذين النموذجين مع مصفوفة المسافة الكاملة كمدخل. علاوة على ذلك ، دعنا نختبر SVM أيضًا (تم تصميم SVM للعمل مع مصفوفة مسافة مباشرة ، لذلك لن يكون التضمين مطلوبًا).
يتم عرض دقة النموذج في مجموعة الاختبار أدناه (تم إنشاء 10 مجموعات بيانات تدريب واختبار حتى نتمكن من تقدير تباين النموذج):
- يحصل التدرج المتدرج المقترن بالتضمين (KernelPCA + GB) على المركز الأول. لقد تفوق على التدرج اللوني مع عدم التضمين (جيجابايت). هنا ، أثبتت Kernel PCA أنها مفيدة.
- كان الانحدار اللوجستي جيدًا. الأمر المثير للاهتمام هو أن الانحدار اللوجستي بدون تضمين (LR) كان أفضل من التضمين (KernelPCA + LR). هذا ليس غير متوقع تماما النماذج الخطية ليست مرنة للغاية ولكن يصعب نسبيًا تجهيزها. هنا ، يبدو أن فقدان المعلومات الناجم عن التضمين يفوق فائدة أبعاد الإدخال الأصغر.
- أخيرًا وليس آخرًا ، كان أداء SVM جيدًا أيضًا ، على الرغم من أن تباين هذا النموذج مهم جدًا.
دقة النموذج
كود Python لحالة الاستخدام هذه متاح في GitHub.
خاتمة
لقد أوضحنا ماهية حفلات الزفاف وشرحنا كيف يمكن استخدامها جنبًا إلى جنب مع مصفوفات المسافات لحل مشاكل العالم الحقيقي. وقت النطق بالحكم:
هل حفلات الزفاف شيء يجب على عالم البيانات استخدامه؟ دعونا نلقي نظرة على كلا الجانبين من القصة.
إيجابيات وسلبيات استخدام حفلات الزفاف
الايجابيات:
- يتيح لنا هذا النهج العمل مع هياكل بيانات غير عادية أو معقدة طالما يمكنك تحديد مسافة ، والتي - بدرجة معينة من المعرفة والخيال والحظ - يمكنك عادةً.
- الناتج عبارة عن بيانات عددية منخفضة الأبعاد ، والتي يمكنك بسهولة تحليلها أو تجميعها أو استخدامها كميزات نموذجية لأي نموذج تعلم آلي موجود تقريبًا.
سلبيات:
باستخدام هذا النهج ، سنفقد بالضرورة بعض المعلومات:
- خلال الخطوة الأولى ، عندما نستبدل البيانات الأصلية بمصفوفة التشابه
- خلال الخطوة الثانية ، عندما نقوم بتقليل الأبعاد باستخدام التضمين
- اعتمادًا على وظيفة البيانات والمسافة ، قد يستغرق حساب مصفوفة المسافة وقتًا طويلاً. يمكن التخفيف من ذلك عن طريق وظيفة المسافة المكتوبة بكفاءة.
- بعض حفلات الزفاف حساسة جدًا للضوضاء في البيانات. قد يتم التخفيف من ذلك عن طريق تنظيف البيانات الإضافية.
- بعض حفلات الزفاف حساسة لاختيار معاييرها المفرطة. يمكن تخفيف ذلك عن طريق التحليل الدقيق أو ضبط المعلمة المفرطة.
البدائل: لماذا لا تستخدم ...؟
- لماذا لا تستخدم فقط التضمين مباشرة على البيانات ، بدلاً من مصفوفة المسافات؟
إذا كنت تعرف التضمين الذي يمكنه ترميز بياناتك بكفاءة بشكل مباشر وبكل الوسائل ، فاستخدمه. المشكلة هي أنه لا يوجد دائما. - لماذا لا تستخدم فقط التجميع في مصفوفة المسافات؟
إذا كان هدفك الوحيد هو تقسيم مجموعة البيانات الخاصة بك ، فسيكون من الجيد تمامًا القيام بذلك. تستفيد بعض طرق التجميع من حفلات الزفاف أيضًا (على سبيل المثال ، التجميع الطيفي). إذا كنت ترغب في معرفة المزيد ، فإليك برنامج تعليمي حول التجميع. - لماذا لا تستخدم مصفوفة المسافة فقط كميزات؟
حجم مصفوفة المسافة هو $ (n_ {sample}، n_ {sample}) $. لا يمكن لجميع الطرز التعامل معها بكفاءة - فقد يزيد بعضها من ملاءمتها ، وبعضها قد يكون بطيئًا في الملاءمة ، والبعض الآخر قد يفشل في التوافق تمامًا. قد تكون النماذج ذات التباين المنخفض خيارًا جيدًا هنا ، مثل النماذج الخطية و / أو المنتظمة. - لماذا لا تستخدم فقط SVM مع مصفوفة المسافة؟
يعد SVM نموذجًا رائعًا ، وقد أدى أداءً جيدًا في حالة الاستخدام الخاصة بنا. ومع ذلك ، هناك بعض المحاذير. أولاً ، إذا أردنا إضافة ميزات أخرى (يمكن أن تكون مجرد أرقام رقمية بسيطة) ، فلن نتمكن من القيام بذلك مباشرةً. سيتعين علينا دمجها في مصفوفة التشابه الخاصة بنا وربما نفقد بعض المعلومات القيمة. ثانيًا ، على الرغم من جودة SVM ، فقد يعمل نموذج آخر بشكل أفضل مع مشكلتك الخاصة. - لماذا لا تستخدم التعلم العميق فقط؟
هذا صحيح ، لأية مشكلة ، يمكنك العثور على شبكة عصبية مناسبة إذا بحثت لفترة كافية. ضع في اعتبارك ، مع ذلك ، أن عملية العثور على هذه الشبكة العصبية وتدريبها والتحقق من صحتها ونشرها لن تكون بالضرورة عملية بسيطة. لذلك ، كما هو الحال دائمًا ، استخدم أفضل حكم لديك.
في جملة واحدة
تعد عمليات التضمين جنبًا إلى جنب مع مصفوفات المسافات أداة مفيدة بشكل لا يصدق إذا كنت تعمل مع بيانات معقدة غير رقمية ، خاصة عندما لا يمكنك تحويل بياناتك إلى مساحة متجه مباشرة وتفضل الحصول على مدخلات منخفضة الأبعاد لنموذجك.