إعداد البيانات للتعلم الآلي
قبل أن تتمكن من إنشاء نموذج التعلم الآلي، تحتاج إلى إعداد البيانات التي ستستخدمها لتدريبه وتقييمه. يتم استيعاب البيانات في Azure Databricks من مصدرها، غالبا كملفات بيانات. اختياريا، يمكنك إنشاء جداول دلتا استنادا إلى ملفات البيانات لتبسيط استكشاف البيانات وتحليلها. بعد استيعاب البيانات، يقوم عالم البيانات بإعدادها للتعلم الآلي.
عادة ما يتضمن إعداد البيانات مهمتين رئيسيتين:
- تنظيف البيانات: تحديد وتخفيف المشكلات في البيانات التي ستؤثر على فائدتها للتعلم الآلي.
- هندسة الميزات والمعالجة المسبقة: تحديد وتحويل الميزات المناسبة لتدريب النموذج.
تنقية البيانات
تختلف الخطوات المحددة المطلوبة لتنظيف البيانات من مشروع إلى آخر، ولكن المشكلات النموذجية التي تحتاج إلى معالجتها تشمل:
-
البيانات غير المكتملة: غالبا ما تتضمن البيانات سجلات تكون فيها الحقول الفردية مفقودة (غالبا ما يشار إليها بوجود قيم NULL). تحتاج إلى تحديد القيم المفقودة والتخفيف منها من خلال:
- استبدالها باستبدال مناسب - إما عن طريق استنتاج قيمة في سلسلة، أو باستخدام قيمة متوسطة (أو متوسطة)، أو إنشاء قيمة مناسبة أخرى.
- إزالة الصفوف غير المكتملة بالكامل (بافتراض أن هذا يترك بيانات تمثيلية مناسبة كافية للنمذجة)
- الأخطاء: ليس من غير المألوف أن تتضمن البيانات أخطاء، ناتجة عن أخطاء إدخال البيانات أو فشل معالجة البيانات الأولية. قد يكون العثور على الأخطاء أمرا صعبا، وعادة ما يتضمن تدقيقا كبيرا في البيانات باستخدام الاستعلامات والمرئيات لتلخيص البيانات والبحث عن قيم لا تتوافق مع معظم القيم الأخرى في حقل معين.
- القيم الخارجية: القيم الخارجية هي قيم خارج التوزيع الإحصائي للبيانات بشكل ملحوظ (أعلى أو أسفل). في بعض الأحيان تكون القيم الخارجية إشارة إلى خطأ (على سبيل المثال، قد يكون لدى شخص ما قيمة مع صفر إضافي أو حذف فاصلة عشرية) وأحيانا تكون قيم أصلية عالية أو منخفضة بشكل غير عادي مقارنة بمعظم الملاحظات. وفي كلتا الحالتين، يمكن أن تؤثر القيم المتطرفة تأثيرا سلبيا على تدريب نموذج التعلم الآلي؛ لذلك من الأفضل عادة التعامل معها عن طريق إعادة تعيينها إلى قيمة حد أعلى أو أقل، أو عن طريق إزالة السجلات التي تحتوي على قيم خارجية من مجموعة البيانات.
- أنواع البيانات غير الصحيحة: يمكن أن تكون خوارزميات التعلم الآلي حساسة لنوع البيانات المعينة لقيم الميزة. من الشائع أن تقوم مجموعات البيانات التي كانت تستند إلى ملفات نصية تحتوي على أخطاء أو قيم خالية بسوء نشر الحقول الرقمية إلى نوع بيانات سلسلة ، وغالبا ما تكون القيم التي تمثل قيم عدد صحيح منفصلة غير منسقة إلى أرقام عشرية (أو العكس). يجب فحص مخطط البيانات وتعيين أنواع البيانات المناسبة التي تعكس قيم البيانات بشكل أكثر فعالية.
- بيانات غير متوازنة: يعمل التدريب على التعلم الآلي بشكل أفضل إذا كانت بيانات التدريب تحتوي على تمثيل كاف لجميع مجموعات الميزات والتسميات المختلفة التي قد تتم مواجهتها. في مجموعة بيانات غير متوازنة، يتم تمثيل السجلات التي تتضمن قيمة فئوية معينة أو مجموعة من الحقول تمثيلا زائدا؛ التي يمكن أن تؤثر على خوارزمية التدريب وإدخال التحيز في النموذج. تتمثل إحدى التقنيات الشائعة للتخفيف من هذه المشكلة في الإفراط في تعيين القيم الممثلة تمثيلا ناقصا بواسطة الصفوف المكررة المضمنة، أو إلى تعيين الصفوف ذات التمثيل الزائد (عن طريق إزالتها من مجموعة البيانات).
في Azure Databricks، الطريقة الأكثر شيوعا للكشف عن هذه الأنواع من المشكلات ومعالجتها هي كتابة التعليمات البرمجية في دفتر ملاحظات يستكشف البيانات ويعالجها. الفئة الأساسية المستخدمة لهذا النوع من معالجة البيانات هي إطار بيانات Spark.
على سبيل المثال، تحمل التعليمات البرمجية التالية البيانات من ملف نصي إلى إطار بيانات:
df = spark.read.format("csv").option("header", "true").load("/myfolder/mydata.csv")
بدلا من ذلك، إذا تم تحميل البيانات في جدول دلتا في مساحة عمل Azure Databricks، يمكنك استخدام استعلام SQL لتحميل بياناته في إطار بيانات:
df = spark.sql("SELECT * FROM mytable")
بعد تحميل البيانات في إطار بيانات، يمكنك استخدام أساليبها والوظائف الأخرى في مكتبة Spark SQL لاستكشاف البيانات وتحويلها. على سبيل المثال، تستخدم التعليمات البرمجية التالية أسلوب dropna لإزالة أي صفوف تتضمن قيما خالية، وتعين أنواع بيانات معينة إلى أعمدة في إطار البيانات.
clean_data = df.dropna().select(col("column1").astype("string"),
col("column2").astype("float"))
تلميح
لمزيد من المعلومات حول وظيفة إطار بيانات Spark، راجع وثائق Spark Dataframe.
هندسة الميزات والمعالجة المسبقة
بعد التأكد من اكتمال مجموعة البيانات وتنظيفها، يمكنك البدء في إعداد الميزات للتعلم الآلي. هندسة الميزات هي نهج تكراري غالبا ما يتضمن بعض التجربة والخطأ لتحديد أعمدة الميزات التي لها قيمة تنبؤية، وأفضل طريقة لتمثيل الميزات. تتضمن مهام هندسة الميزات والمعالجة المسبقة الشائعة ما يلي:
اشتقاق ميزات جديدة: غالبا ما يمكنك اشتقاق ميزات جديدة أكثر تنبؤية من الميزات الموجودة. على سبيل المثال، افترض أن مجموعة البيانات تتضمن عمود تاريخ وتشتبه في أن التاريخ الكامل قد لا يكون عاملا تنبؤيا مهما في تحديد التسمية، ولكن قد يكون يوم الأسبوع. يمكنك إنشاء ميزة day_of_week جديدة مشتقة من التاريخ واختبار نظريتك.
ميزات رقمية منفصلة: في بعض الحالات، قد تكون القيمة الرقمية أكثر تنبؤا عند تقسيمها إلى فئات تمثل نطاقات محددة من القيم. على سبيل المثال، يمكنك أخذ القيم الرقمية في ميزة السعر وتعيينها إلى فئات منخفضةومتوسطةوعالية استنادا إلى الحدود المناسبة.
ترميز الميزات الفئوية: تتضمن العديد من مجموعات البيانات بيانات فئوية تمثلها قيم السلسلة. ومع ذلك، تعمل معظم خوارزميات التعلم الآلي بشكل أفضل مع البيانات الرقمية. لذلك من الشائع تعيين رموز رقمية لتمثيل الفئات بدلا من السلاسل. على سبيل المثال، قد تتضمن مجموعة بيانات تفاصيل المنتج ميزة للون يمكن أن تحتوي على قيمة "أخضر" أو "أحمر" أو "أزرق". يمكنك ترميز هذه القيم باستخدام رموز عدد صحيح بسيطة مثل 0 ل "أخضر"، و1 ل "أحمر"، و2 ل "أزرق". بدلا من ذلك، يمكنك استخدام تقنية ترميز أحادية الحرارة تقوم فيها بإنشاء عمود جديد لكل فئة ممكنة، وتعيين القيمة 1 أو 0 لكل عمود حسب الاقتضاء لكل صف، مثل هذا:
عمود اللون الأصلي أخضر أحمر أزرق أخضر 1 1 1 أزرق 1 1 1 أحمر 1 1 1 تحجيم (تسوية) القيم الرقمية: غالبا ما تكون قيم البيانات الرقمية على مقاييس أو وحدات قياس مختلفة عن بعضها البعض. تعالجها خوارزميات التعلم الآلي كلها كقيم رقمية مطلقة، وغالبا ما تهيمن الميزات ذات القيم الأكبر على تدريب النموذج. لحل هذه المشكلة، من الشائع تغيير حجم كافة الأعمدة الرقمية بحيث تحتفظ القيم الفردية لعمود واحد بنفس العلاقة النسبية مع بعضها البعض، ولكن جميع الأعمدة الرقمية على مقياس مماثل. على سبيل المثال، افترض أن مجموعة البيانات تحتوي على قيم الطولوالوزن التي تم قياسها بالعدادات والكيلوجرامات. يمكنك تحويل كل من هاتين الميزتين إلى قيمة متدرجة بين 0 و1 على النحو التالي:
طول ثقل scaled_length scaled_weight 250.0 2.1 0.250 0.210 176.0 0.9 0.176 0.09
تتضمن العديد من مكتبات التعلم الآلي فصولا يمكنك استخدامها لتنفيذ مهام هندسة الميزات الشائعة. على سبيل المثال، تتضمن مكتبة Spark MLlib فئة StringIndexer ، والتي يمكنك استخدامها لتنفيذ ترميز بسيط يستند إلى عدد صحيح لقيم السلسلة.
from pyspark.ml.feature import StringIndexer
encoder = StringIndexer(inputCol="catCol", outputCol="catColCode")
encoded_data = encoder.fit(data).transform(data)
إشعار
الأمر يستحق شرح نموذج التعليمات البرمجية StringIndexer بمزيد من التفاصيل. يمكن أن تتضمن فئات Spark MLlib مقيمين يلائمون خوارزمية لعملية تحويل معينة لبعض بيانات العينة. في هذه الحالة، يلائم StringIndexer خوارزمية ترميز لقيم السلسلة المنفصلة في عمود catCol في إطار بيانات البيانات لتحديد العمليات الحسابية المحددة المطلوبة لإنشاء عمود catColCode جديد يحتوي على القيم المشفرة. إخراج المقيم هو محول يغلف الدالة المحددة من قبل المقيم، والذي يمكنه تطبيق هذه الدالة على البيانات وإنشاء إطار بيانات جديد. في هذا المثال، نقوم بتمرير نفس البيانات المستخدمة لتحديد دالة الترميز إلى المحول الناتج لتطبيق الترميز فعليا.
في Spark MLLib، يمكنك ربط سلسلة من المقيمين والمحولات معا في البنية الأساسية لبرنامج ربط العمليات التجارية التي تنفذ جميع خطوات هندسة الميزات والمعالجة المسبقة التي تحتاجها لإعداد بياناتك. يمكن أن ينتهي المسار باستخدام خوارزمية التعلم الآلي التي تعمل كمقيم لتحديد العمليات المطلوبة للتنبؤ بتسمية من الميزات المعدة. إخراج البنية الأساسية لبرنامج ربط العمليات التجارية هو نموذج التعلم الآلي، وهو في الواقع محول يمكن استخدامه لتطبيق وظيفة النموذج على الميزات في إطار البيانات والتنبؤ بقيم التسمية المقابلة.