سؤال 4: لديك مصفو فتا قيم Numpy، وهما مصفوفة X_train ومصفوفة Y_train. كل صف في مصفوفة X_train شكله (3, 100, 100) يمثل صورة بأبعاد 100x100 وبتنسيق RGB. والصف n في المصفوفة Y_train يمثل تسمية صورة n في مصفوفة X_train. أكمل المقطع البرمجي التالي، بحيث يطبق تحويلات المخطط التكراري للتدرجات الموجهة ثم يستخدم البيانات المحولة في تدريب نموذج: from skimage.color import ________________ # used to convert a multi-color (rgb) image to grayscale from sklearn.________________ import StandardScaler # used to scale the data from sklearn.naive_bayes import MultinomialNB # imports the Naive Bayes Classifier from sklearn X_train_gray = np.array([________________ (img) for img in X_train]) # converts training data X_train_hog = ________________ scaler = StandardScaler() X_train_hog_scaled = ________________.fit_transform(X_train_hog) model_MNB = MultinomialNB() model_MNB.fit(X_train_flat_scaled, ________________)
الإجابة: س 4(1): rgb2gray س 4(2): preprocessing س 4(3): rgb2gray س 4(4): [rgb2gray(img) for img in X_train] س 4(5): scaler س 4(6): Y_train
خطوات الحل:
- **الخطوة 1 (فهم المهمة):** لنفهم هذا السؤال. لدينا بيانات صور ملونة (RGB) مخزنة في مصفوفة `X_train`، حيث كل صورة لها شكل (3, 100, 100). المهمة هي تحويل هذه الصور الملونة إلى تدرجات الرمادي (grayscale) أولاً، ثم استخراج ميزات منها باستخدام تقنية HOG (Histogram of Oriented Gradients)، ثم قياس البيانات (scaling) قبل استخدامها لتدريب نموذج تصنيف Naive Bayes.
- **الخطوة 2 (استيراد المكتبات):** نحتاج أولاً إلى استيراد الدالة المناسبة لتحويل الصور من RGB إلى تدرجات الرمادي من مكتبة `skimage.color`. هذه الدالة اسمها `rgb2gray`. نحتاج أيضاً إلى استيراد فئة `StandardScaler` من مكتبة `sklearn.preprocessing` لقياس البيانات.
- **الخطوة 3 (تحويل الصور إلى تدرجات الرمادي):** لتحويل جميع الصور في `X_train`، نستخدم قائمة تضمين (list comprehension). لكل صورة `img` في `X_train`، نطبق عليها الدالة `rgb2gray`. لذلك، يجب أن يكون السطر: `X_train_gray = np.array([rgb2gray(img) for img in X_train])`
- **الخطوة 4 (استخراج ميزات HOG):** بعد تحويل الصور إلى تدرجات الرمادي، نحتاج إلى تطبيق تحويل HOG على كل صورة في `X_train_gray` للحصول على الميزات. هذا يتطلب استخدام دالة مثل `hog` من `skimage.feature`، لكن السؤال يترك هذا فارغاً (`X_train_hog = ________________`). بما أن السؤال يركز على إكمال الأجزاء المحددة، ونرى في الإجابة أن الجزء (4) مكتمل بالفعل في السؤال الأصلي، فإننا ننتقل للخطوة التالية.
- **الخطوة 5 (قياس البيانات):** بعد الحصول على ميزات HOG في `X_train_hog`، نقيسها باستخدام `StandardScaler`. نقوم أولاً بإنشاء كائن `scaler`، ثم نستخدم الدالة `fit_transform` لتطبيق القياس على البيانات. لذلك: `X_train_hog_scaled = scaler.fit_transform(X_train_hog)`
- **الخطوة 6 (تدريب النموذج):** أخيراً، نقوم بإنشاء نموذج `MultinomialNB` وتدريبه باستخدام البيانات المقاسة `X_train_hog_scaled` والتسميات المقابلة `Y_train`. لذلك: `model_MNB.fit(X_train_hog_scaled, Y_train)` **ملاحظة:** في السؤال، كتب `X_train_flat_scaled` لكن يجب أن يكون `X_train_hog_scaled` كما حسبنا في الخطوة السابقة.