بناء نموذج التعلم في Scikit-Learn
Scikit-learn هي مكتبة Python مفتوحة المصدر تعمل على تبسيط عملية بناء نماذج التعلم الآلي. إنه يوفر واجهة نظيفة ومتسقة تساعد المستخدمين المبتدئين وذوي الخبرة على العمل بكفاءة.
- يدعم مهام مثل تجميع انحدار التصنيف والمعالجة المسبقة
- يجعل بناء النموذج سريعًا وموثوقًا
- يوفر أدوات جاهزة للاستخدام للتدريب والتقييم
- يقلل من التعقيد عن طريق تجنب التنفيذ اليدوي للخوارزميات
تثبيت واستخدام Scikit-Learn
قبل أن نبدأ في بناء النماذج، نحتاج إلى التثبيت Scikit تعلم. يتطلب إصدار Python 3.8 أو أحدث ويعتمد على مكتبتين مهمتين: NumPy و سكيبي. تأكد من تثبيت هذه أولاً.
لتثبيت Scikit-learn، قم بتشغيل الأمر التالي:
تثبيت النقطة -U scikit-Learn
سيؤدي هذا إلى تنزيل وتثبيت أحدث إصدار من Scikit-learn بالإضافة إلى تبعياته. دعونا نرى الخطوات المختلفة المتبعة في عملية بناء النموذج باستخدام مكتبة Scikit-learn.
الخطوة 1: تحميل مجموعة البيانات
تتكون مجموعة البيانات من:
- الميزات (X): متغيرات الإدخال التي تصف البيانات
- الهدف (ص): القيمة التي نريد التنبؤ بها
يوفر Scikit-learn مجموعات بيانات مدمجة مثل Iris Digits وBoston Housing. باستخدام مجموعة بيانات إيريس:
- يقوم Load_iris() بتحميل البيانات
- يقوم X بتخزين بيانات الميزات
- y يخزن التسميات المستهدفة
- توفر feature_names وtarget_names أسماء وصفية
يمكننا فحص الصفوف القليلة الأولى لفهم البنية. بالنسبة لمجموعات البيانات المخصصة، يتم استخدام Pandas بشكل شائع لتحميل الملفات الخارجية مثل ملفات CSV.
Python from sklearn.datasets import load_iris iris = load_iris () X = iris . data y = iris . target feature_names = iris . feature_names target_names = iris . target_names print ( 'Feature names:' feature_names ) print ( 'Target names:' target_names ) print ( ' n Type of X is:' type ( X )) print ( ' n First 5 rows of X: n ' X [: 5 ])
الإخراج:
جارٍ تحميل مجموعة البيانات في بعض الأحيان نحتاج إلى العمل على بياناتنا المخصصة ثم نقوم بتحميل مجموعة بيانات خارجية. لهذا يمكننا استخدام مكتبة الباندا لسهولة تحميل ومعالجة مجموعات البيانات.
لهذا يمكنك الرجوع إلى مقالتنا حول كيفية استيراد ملف CSV في الباندا ؟
الخطوة 2: تقسيم مجموعة البيانات
لتقييم نموذج بشكل عادل قمنا بتقسيم البيانات إلى:
- مجموعة التدريب: تستخدم لتدريب النموذج
- مجموعة الاختبار: تستخدم لتقييم مدى تعميم النموذج
باستخدام Train_test_split قمنا بتقسيم مجموعة بيانات Iris بحيث تكون 60% للتدريب و40% للاختبار (test_size=0.4). Random_state=1 يضمن إمكانية تكرار نتائج.
بعد التقسيم نحصل على:
- X_train y_train -> بيانات التدريب
- X_test y_test -> اختبار البيانات
التحقق من الأشكال يضمن تقسيم البيانات بشكل صحيح.
Python from sklearn.model_selection import train_test_split X_train X_test y_train y_test = train_test_split ( X y test_size = 0.4 random_state = 1 )
الآن دعونا نتحقق من الأشكال من البيانات المقسمة للتأكد من أن كلتا المجموعتين تحتويان على نسب صحيحة من البيانات لتجنب أي أخطاء محتملة في تقييم النموذج أو التدريب.
Python print ( 'X_train Shape:' X_train . shape ) print ( 'X_test Shape:' X_test . shape ) print ( 'Y_train Shape:' y_train . shape ) print ( 'Y_test Shape:' y_test . shape )
الإخراج:
شكل البيانات المقسمة الخطوة 3: التعامل مع البيانات الفئوية
تعمل خوارزميات التعلم الآلي مع المدخلات الرقمية لذلك يجب تحويل البيانات الفئوية (النصية) إلى أرقام. إذا لم يتم ترميزها بشكل صحيح، يمكن للنماذج أن تسيء تفسير الفئات. يوفر Scikit-learn طرقًا متعددة للتشفير:
1. ترميز التسمية : يقوم بتحويل كل فئة إلى عدد صحيح فريد. على سبيل المثال، في عمود يحتوي على فئات مثل "قطة" و"كلب" و"طائر"، سيتم تحويلها إلى 0 1 و2 على التوالي. تعمل هذه الطريقة بشكل جيد عندما يكون للفئات ترتيب ذو معنى مثل منخفض متوسط ومرتفع.
- أداة تشفير التسمية (): تتم تهيئته لإنشاء كائن تشفير يقوم بتحويل القيم الفئوية إلى تسميات رقمية.
- fit_transform (): تقوم هذه الطريقة أولاً بملاءمة المشفر مع البيانات الفئوية ثم تحويل الفئات إلى تسميات رقمية مقابلة.
from sklearn.preprocessing import LabelEncoder categorical_feature = [ 'cat' 'dog' 'dog' 'cat' 'bird' ] encoder = LabelEncoder () encoded_feature = encoder . fit_transform ( categorical_feature ) print ( 'Encoded feature:' encoded_feature )
الإخراج:
الميزة المشفرة: [1 2 2 1 0]
2. ترميز واحد ساخن : يقوم One-Hot Encoding بإنشاء أعمدة ثنائية منفصلة لكل فئة. يكون هذا مفيدًا عندما لا يكون للفئات أي ترتيب طبيعي. مثال: قطة، كلب، طائر -> 3 أعمدة جديدة (قطة/كلب/طائر) تحتوي على 1 و0.
- يجب إعادة تشكيل الإدخال إلى مصفوفة ثنائية الأبعاد
- يقوم OneHotEncoder(sparse_output=False) بإنشاء أعمدة ثنائية
from sklearn.preprocessing import OneHotEncoder import numpy as np categorical_feature = [ 'cat' 'dog' 'dog' 'cat' 'bird' ] categorical_feature = np . array ( categorical_feature ) . reshape ( - 1 1 ) encoder = OneHotEncoder ( sparse_output = False ) encoded_feature = encoder . fit_transform ( categorical_feature ) print ( 'OneHotEncoded feature: n ' encoded_feature )
الإخراج:
إلى جانب Label Encoding وOne-Hot Encoding هناك تقنيات أخرى مثل يعني الترميز .
الخطوة 4: تدريب النموذج
الآن بعد أن أصبحت بياناتنا جاهزة، حان الوقت لتدريب نموذج التعلم الآلي. يحتوي Scikit-learn على العديد من الخوارزميات مع واجهة متسقة للتنبؤ بالتدريب وتقييمه. هنا سنستخدم الانحدار اللوجستي كمثال.
ملحوظة : لن ندخل في تفاصيل كيفية عمل الخوارزمية حيث يهمنا فهم تنفيذها فقط.
- log_reg = الانحدار اللوجستي (max_iter=200): إنشاء كائن مصنف الانحدار اللوجستي.
- log_reg.fit(X_train y_train): باستخدام هذا يقوم نموذج الانحدار اللوجستي بضبط معلمات النموذج لتناسب البيانات بشكل أفضل.
from sklearn.linear_model import LogisticRegression log_reg = LogisticRegression ( max_iter = 200 ) log_reg . fit ( X_train y_train )
التدريب باستخدام الانحدار اللوجستي. الخطوة 5: عمل التنبؤات
بمجرد التدريب، نستخدم النموذج لإجراء تنبؤات على بيانات الاختبار X_test عن طريق استدعاء طريقة التنبؤ. يؤدي هذا إلى إرجاع التصنيفات المتوقعة y_pred.
- log_reg.توقع: ويستخدم نموذج الانحدار اللوجستي المدرب للتنبؤ بتسميات بيانات الاختبار X_test.
y_pred = log_reg . predict ( X_test )
الخطوة 6: تقييم دقة النموذج
تحقق من مدى جودة أداء نموذجنا من خلال مقارنة y_test وy_pred. نحن هنا نستخدم دقة أسلوب وحدة المقاييس.
Python from sklearn import metrics print ( 'Logistic Regression model accuracy:' metrics . accuracy_score ( y_test y_pred ))
الإخراج:
دقة نموذج الانحدار اللوجستي: 0.9666666666666667
نريد الآن أن يقوم نموذجنا بعمل تنبؤات بشأن بيانات العينة الجديدة. ومن ثم يمكن ببساطة تمرير عينة الإدخال بنفس الطريقة التي نمرر بها أي مصفوفة ميزات. هنا استخدمناها كعينة = [[3 5 4 2] [2 3 5 4]]
Python sample = [[ 3 5 4 2 ] [ 2 3 5 4 ]] preds = log_reg . predict ( sample ) pred_species = [ iris . target_names [ p ] for p in preds ] print ( 'Predictions:' pred_species )
الإخراج:
التوقعات: [np.str_('فيرجينيكا') np.str_('فيرجينيكا')]
مميزات برنامج Scikit-Learn
يتم استخدام Scikit-learn لأنه يجعل بناء نماذج التعلم الآلي أمرًا مباشرًا وفعالاً. فيما يلي بعض الأسباب المهمة:
- أدوات جاهزة للاستخدام : يوفر وظائف مدمجة للمهام الشائعة مثل نماذج التدريب على المعالجة المسبقة للبيانات وعمل التنبؤات. وهذا يوفر الوقت عن طريق تجنب الحاجة إلى برمجة الخوارزميات من البداية.
- تقييم النموذج السهل : باستخدام أدوات مثل التحقق المتبادل ومقاييس الأداء، يساعد ذلك في قياس مدى نجاح نموذجنا وتحديد مجالات التحسين.
- دعم خوارزمية واسعة : يقدم العديد من خوارزميات التعلم الآلي الشائعة بما في ذلك انحدار التصنيف والتجمع مما يمنحنا المرونة لاختيار النموذج المناسب لمشكلتنا.
- التكامل السلس : مبني على مكتبات Python المهمة مثل NumPy وSciPy بحيث يتناسب مع سير عمل تحليل البيانات الحالي لدينا.
- واجهة بسيطة ومتسقة : نفس بناء الجملة المباشر الذي يعمل عبر نماذج مختلفة يساعد في تسهيل التعلم والتبديل بين الخوارزميات.
- أصبح ضبط النموذج سهلاً : تساعدنا أدوات مثل البحث على الشبكة على ضبط إعدادات نموذجنا لتحسين الدقة دون أي متاعب إضافية.
فوائد استخدام Scikit-Learn
- سهل الاستخدام : واجهة Scikit-learn المتسقة والبسيطة تجعلها في متناول المبتدئين والأفضل للخبراء.
- توفير الوقت: تعمل الأدوات والخوارزميات المعدة مسبقًا على تقليل وقت التطوير مما يسمح لنا بالتركيز بشكل أكبر على حل المشكلات بدلاً من تفاصيل الترميز.
- أداء أفضل للنموذج : تساعد أدوات الضبط والتقييم سهلة الاستخدام في تحسين دقة النموذج وموثوقيته.
- مرنة وقابلة للتطوير : يدعم مجموعة واسعة من الخوارزميات ويتكامل بسلاسة مع مكتبات بايثون الأخرى مما يساعد في جعله مناسبًا للمشاريع من أي حجم.
- دعم مجتمعي قوي : مجتمع نشط كبير يضمن تحديثات منتظمة ووثائق واسعة النطاق والكثير من الموارد للمساعدة عندما نواجه مشكلة.