اذهب إلى المحتوى

Abdulrahman Muhammad

الأعضاء
  • المساهمات

    12
  • تاريخ الانضمام

  • تاريخ آخر زيارة

آخر الزوار

84 زيارة للملف الشخصي

إنجازات Abdulrahman Muhammad

عضو مساهم

عضو مساهم (2/3)

12

السمعة بالموقع

1

إجابات الأسئلة

  1. 1. التأكد من حفظ النموذج في المسار الصحيح في Kaggle Notebooks، لا يمكنك حفظ الملفات مباشرة في أي مكان، بل يجب حفظها في المسار /kaggle/working/ حتى تتمكن من تحميلها لاحقًا. مثال على حفظ النموذج باستخدام pickle: import pickle # حفظ النموذج with open('/kaggle/working/model.pkl', 'wb') as file: pickle.dump(model, file) 2. التحقق من حفظ الملف بعد التشغيل بما أن Kaggle يعمل في بيئة مؤقتة، فمن الجيد التأكد من أن الملف قد تم حفظه بنجاح قبل انتهاء الجلسة. استخدام الأمر التالي لعرض الملفات المحفوظة: !ls /kaggle/working/ إذا رأيت model.pkl ضمن الملفات، فهذا يعني أنه تم حفظه بنجاح. 3. تحميل النموذج لاحقًا داخل نفس الجلسة عند الحاجة إلى استخدام النموذج لاحقًا، يمكنك تحميله بنفس الطريقة: with open('/kaggle/working/model.pkl', 'rb') as file: loaded_model = pickle.load(file) الخلاصة استخدم المسار /kaggle/working/ لحفظ النموذج. تحقق من أن الملف محفوظ عبر !ls /kaggle/working/. قم بتنزيل الملف إذا كنت تريد استخدامه خارج Kaggle.
  2. لحل هذه المشكلة، يمكنك استخدام دالة في PHP لطباعه الوقت الحالي بتنسيق يتضمن اليوم، الشهر، السنة، الساعة، الدقيقة، والثانية، ثم استخدام هذه البيانات لحساب الفرق بين تاريخين بالساعة. 1. دالة لطباعه الوقت الحالي بتنسيق مناسب: إذا كنت تستخدم قاعدة بيانات MySQL وتحتاج إلى تخزين التاريخ والوقت بتنسيق يحتوي على اليوم، الشهر، السنة، الساعة، الدقيقة، والثانية، يمكنك استخدام الدالة NOW() في SQL أو يمكنك بناء التنسيق باستخدام PHP. $datetime = date('Y-m-d H:i:s'); // تنسيق: سنة-شهر-يوم ساعة:دقيقة:ثانية إدراج التاريخ والوقت في قاعدة البيانات: $sql = "INSERT INTO your_table (your_datetime_column) VALUES ('$datetime')"; 2. حساب الفرق بين تاريخين بالساعة: لحساب الفرق بين تاريخين يتم جلبهما من قاعدة البيانات بالساعة، يمكنك استخدام دالة strtotime() في PHP ثم حساب الفرق بين التاريخين. PHP: // مثال على جلب تاريخين من قاعدة البيانات (بتنسيق 'Y-m-d H:i:s') $date1 = '2025-02-25 14:30:00'; // التاريخ الأول $date2 = '2025-02-26 18:45:00'; // التاريخ الثاني // تحويل التواريخ إلى طوابع زمنية (timestamps) $timestamp1 = strtotime($date1); $timestamp2 = strtotime($date2); // حساب الفرق بين التاريخين بالثواني $diffInSeconds = abs($timestamp2 - $timestamp1); // تحويل الفرق إلى ساعات $diffInHours = $diffInSeconds / 3600; // 3600 ثانية في الساعة echo "الفرق بين التاريخين هو: " . $diffInHours . " ساعة"; 3. استعلام SQL لجلب التاريخ والوقت من قاعدة البيانات: إذا كنت ترغب في جلب التاريخ من قاعدة البيانات بتنسيق مناسب ثم حساب الفرق بين التاريخين، يمكنك استخدام الاستعلام التالي: استعلام SQL: SELECT your_datetime_column FROM your_table WHERE your_condition; ========================================= ملخص الحل: استخدم دالة date('Y-m-d H:i:s') في PHP لاحتساب الوقت الحالي. قم بإدخال الوقت الحالي إلى قاعدة البيانات. استخدم دالة strtotime() لتحويل التواريخ إلى طوابع زمنية، ثم احسب الفرق بينها بالثواني. قسم الفرق على 3600 لتحصل على الفرق بالساعات. باتباع هذه الخطوات، يمكنك حساب الفرق بين التاريخين بدقة وحساب الفرق بالساعة.
  3. نعم، XGBClassifier (XGBoost) يُعتبر من أشهر وأقوى النماذج المستخدمة في مسابقات Kaggle، ويُستخدم بشكل واسع بسبب أدائه العالي وسرعته. لماذا XGBClassifier شائع في Kaggle؟ 1. دقة عالية: XGBoost يعتمد على تقنيات مثل Boosting، مما يجعله من أفضل النماذج في التنبؤات. 2. سرعة في التدريب: يتمتع XGBoost بآلية التوازي (Parallel Processing)، مما يجعله أسرع مقارنةً بـ RandomForest و Gradient Boosting. 3. مقاوم لـ (Overfitting): يحتوي XGBoost على معلمات تنظيمية (Regularization مثل lambda و alpha) تساعد في تحسين أداء النموذج ومنع الإفراط في التكيف مع البيانات التدريبية. 4. التعامل مع القيم المفقودة: XGBoost يمكنه التعامل تلقائيًا مع القيم المفقودة دون الحاجة إلى معالجتها يدويًا. 5. دعم أنواع مختلفة من البيانات: يمكن استخدامه مع البيانات المهيكلة (Structured Data)، وهو ما يجعله شائعًا جدًا في Kaggle حيث تكون معظم البيانات بهذا الشكل. أمثلة على استخدامه في مسابقات Kaggle الشهيرة Titanic (التنبؤ بالبقاء على قيد الحياة) House Prices (التنبؤ بأسعار العقارات) Santander Customer Satisfaction (التنبؤ برضا العملاء) IEEE-CIS Fraud Detection (اكتشاف الاحتيال في المدفوعات)
  4. أسباب بطء RandomizedSearchCV 1. عدد كبير من القيم الممكنة (param_distributions) إذا كنت تستخدم نطاقًا واسعًا جدًا من القيم لكل معلمة، فسيأخذ البحث وقتًا طويلاً. 2. n_iter كبير جدًا إذا كنت قد ضبطت n_iter على قيمة عالية (مثل 100 أو أكثر)، فسيأخذ البحث وقتًا أطول. 3. حجم البيانات كبير جدًا إذا كنت تعمل على مجموعة بيانات ضخمة، فقد يؤثر ذلك على سرعة البحث. 4. عدد كبير من الطيات (cv=5 أو cv=10) كلما زاد عدد الطيات (cross-validation)، زاد وقت التدريب. ------------------------------------------------------------------------------- حلول لتسريع RandomizedSearchCV 1. تقليل n_iter جرّب تقليل عدد التوليفات العشوائية: استخدم n_iter=10 أو 20 بدلًا من 100 أو أكثر. 2. تقليل عدد الطيات (cv) استخدم cv=3 بدلاً من cv=5 أو cv=10: 3. تشغيل البحث على أكثر من نواة (n_jobs=-1) يتيح لك ذلك استخدام جميع المعالجات المتاحة لتسريع العملية.
  5. ما هي الخاصية n_iter في RandomizedSearchCV؟ في RandomizedSearchCV، الخاصية n_iter تُحدد عدد التكرارات (iterations) التي سيتم تجربتها أثناء البحث عن أفضل مجموعة من المعلمات (hyperparameters). كيف تعمل؟ على عكس GridSearchCV، الذي يجرب كل (مجموعة من القيم) الممكنة للمعلمات، يقوم RandomizedSearchCV بتجربة عدد محدد من (مجموعة من القيم) العشوائية من المعلمات. n_iter تتحكم في عدد هذه (مجموعة من القيم). كلما زادت n_iter، زادت فرص العثور على أفضل معلمات، لكن وقت البحث سيزداد أيضًا. مثال عملي: from sklearn.model_selection import RandomizedSearchCV from sklearn.ensemble import RandomForestClassifier import numpy as np # تعريف المعلمات الممكنة param_dist = { 'n_estimators': np.arange(10, 200, 10), 'max_depth': np.arange(3, 20), 'min_samples_split': np.arange(2, 10) } # إنشاء نموذج RandomForest rf = RandomForestClassifier() # البحث العشوائي مع تجربة 10 توليفات فقط random_search = RandomizedSearchCV(rf, param_distributions=param_dist, n_iter=10, cv=5, scoring='accuracy', random_state=42) # تشغيل البحث random_search.fit(X_train, y_train) متى تستخدم n_iter؟ إذا كنت تريد تقليل وقت البحث وتوفير الموارد مقارنةً بـ GridSearchCV. عندما يكون لديك عدد كبير من المعلمات المحتملة، وتريد البحث في عينة منها فقط. إذا كنت تبحث عن تحسين تقريبي للمعلمات بدلًا من البحث الشامل. الخلاصة: n_iter: تحدد عدد التكرارات (التجارب) التي يتم تنفيذها لاختيار مجموعة من المعلمات بشكل عشوائي. قيمة صغيرة (n_iter=10)بحث سريع ولكن قد لا يجد أفضل المعلمات. قيمة كبيرة (n_iter=100)بحث أكثر دقة ولكنه يحتاج إلى وقت أطول. بالتالي، n_iter تساعد في تحقيق توازن بين سرعة البحث ودقته!
  6. لفرق بين scoring و refit في GridSearchCV في GridSearchCV من مكتبة Scikit-Learn، يتم استخدام كل من scoring و refit ولكن لكل منهما وظيفة مختلفة: scoring: تحديد معيار التقييم يحدد طريقة تقييم النماذج أثناء البحث عن أفضل المعلمات (hyperparameters). يمكن أن يكون مقياس دقة (accuracy) أو متوسط خطأ (neg_mean_squared_error) أو F1-score أو أي مقياس آخر. يقبل إما: مقياسًا جاهزًا مثل "accuracy", "f1", "roc_auc"... دالة مخصصة يقوم المستخدم بتحديدها. مثال: 📌 هنا يتم اختيار النموذج بناءً على أعلى قيمة لمقياس accuracy. -------------------------------------------------------------------------------- refit: إعادة تدريب النموذج الأفضل عند ضبطه على True (وهو الافتراضي)، يقوم GridSearchCV بإعادة تدريب النموذج باستخدام أفضل المعلمات التي تم العثور عليها على جميع البيانات. يمكن تعيينه على مقياس معين إذا كنت تستخدم أكثر من مقياس في scoring. مثال مع refit محدد لمقياس معين: هنا يتم اختيار أفضل نموذج بناءً على roc_auc، حتى لو كانت هناك مقاييس أخرى. -------------------------------------------------------------------------------- الخلاصة: إذا كنت تريد فقط تقييم النماذج، استخدم scoring إذا كنت تريد إعادة تدريب النموذج الأفضل، استخدم refit
  7. النظام الشبكي في Bootstrap هو نظام مرن ومبني على Flexbox يُستخدم لتصميم صفحات الويب بطريقة منظمة ومتجاوبة. يعتمد على 12 عمودًا في كل صف (row)، مما يتيح تقسيم المحتوى إلى أعمدة مختلفة بناءً على حجم الشاشة، مما يسهل تصميم مواقع متجاوبة ومتناسقة. لإعطاء إجابة مثالية عن أي موضوع تقني، يمكن اتباع الخطوات التالية: 1. ابدأ بتعريف واضح ومباشر للمفهوم وضّح الفكرة الأساسية باختصار، مثل: "النظام الشبكي هو..." 2. اذكر أهمية المفهوم ولماذا يُستخدم مثل: "يساعد في تصميم تخطيطات متجاوبة وسهلة التكيف مع مختلف الشاشات." 3. قدم تفاصيل تقنية بسيطة وسهلة الفهم مثل: "يعتمد على تقسيم الصفحة إلى 12 عمودًا، ويمكن تخصيص العرض باستخدام col-md-, col-lg-، إلخ." 4. استخدم أمثلة عملية لتعزيز الفهم باتباع هذه الخطوات، ستكون إجاباتك دقيقة، وسهلة الفهم.
  8. متى يتم تقسيم البيانات إلى (تدريب - تطوير - اختبار) ومتى يكون (تدريب - اختبار) كافيًا؟ أولًا: فهم الفرق بين الأقسام الثلاثة عند العمل على تدريب نموذج في التعلم الآلي، يمكن تقسيم البيانات إلى: مجموعة التدريب (Training Set) → تُستخدم لتدريب النموذج. مجموعة التطوير/التحقق (Validation Set) → تُستخدم لضبط المعلمات وتحسين الأداء وتجنب overfitting. مجموعة الاختبار (Test Set) → تُستخدم لتقييم أداء النموذج النهائي على بيانات جديدة لم تُستخدم أثناء التدريب. إذا كان لديك مجموعة بيانات صغيرة، فمن الأفضل الاكتفاء بتقسيم البيانات إلى: 80% تدريب (Train) 20% اختبار (Test) لكن! في هذه الحالة، قد لا يكون لديك وسيلة لضبط المعلمات بشكل دقيق، مما قد يؤدي إلى Overfitting. لذلك، هذه الطريقة تناسب النماذج البسيطة أو عندما يكون لديك بيانات محدودة جدًا. إذا كان لديك مجموعة بيانات كبيرة وترغب في ضبط أداء النموذج، فمن الأفضل التقسيم إلى ثلاث مجموعات: 70% تدريب (Train) → لتعليم النموذج. 15% تطوير/تحقق (Validation) → لضبط المعلمات وتقليل Overfitting. 15% اختبار (Test) → لتقييم النموذج النهائي. هذه الطريقة مناسبة عند العمل مع نماذج معقدة مثل الشبكات العصبية العميقة (Deep Learning) أو عند الحاجة إلى ضبط الهايبر باراميترز (Hyperparameters). إذا كان لديك بيانات صغيرة: استخدم تدريب - اختبار فقط. إذا كان لديك بيانات كبيرة وتحتاج لضبط المعلمات: استخدم تدريب - تطوير - اختبار. إذا كان لديك بيانات قليلة لكن تريد تقييمًا أكثر دقة: استخدم K-Fold Cross Validation. الاختيار يعتمد على حجم البيانات وتعقيد النموذج! ======================================================== ما هي مجموعة التحقق؟ هي مجموعة بيانات منفصلة عن بيانات التدريب والاختبار، تُستخدم أثناء التدريب لتقييم أداء النموذج وضبط المعلمات دون التأثير على التقييم النهائي. لماذا نستخدم مجموعة التحقق؟ 1.ضبط الهايبر باراميترز (Hyperparameters Tuning): تساعد في اختيار المعلمات المثلى مثل معدل التعلم، عدد الطبقات في الشبكة العصبية، وغيرها. 2. تجنب Overfitting: إذا كان الأداء على التدريب جيدًا لكن سيئًا على التحقق، فهذا يعني أن النموذج قد حفظ البيانات بدلاً من تعميمها. 3. وقف التدريب المبكر (Early Stopping): عندما نلاحظ أن الأداء على التحقق بدأ في التراجع رغم تحسن التدريب، فهذا مؤشر على ضرورة التوقف لتجنب Overfitting. لديك بيانات وتصمم شبكة عصبية لتصنيف الصور، يمكنك تقسيمها كالتالي: 70% تدريب → لتعليم النموذج 15% تحقق → لضبط المعلمات والتحقق من التحسين 15% اختبار → للتقييم النهائي إذا وجدت أن دقة التحقق لا تتحسن أو تتراجع بينما دقة التدريب تزيد، فهذا يعني Overfitting ويجب تعديل المعلمات. عند استخدام K-Fold Cross Validation، حيث نقسم البيانات إلى K أجزاء ويتم التحقق مع كل تكرار. عندما يكون لديك بيانات قليلة جدًا، فتقسمها إلى تدريب واختبار فقط لتوفير أكبر كمية ممكنة من البيانات للتدريب. الخلاصة: مجموعة التحقق ضرورية لضبط المعلمات وتجنب Overfitting. تُستخدم لاختيار النموذج الأفضل قبل تقييمه على بيانات الاختبار. بدونها، قد يكون النموذج غير عامّ ويعمل جيدًا فقط على البيانات التي تدرب عليها.
  9. ImageNet ليس مسابقة ولا خوارزمية، بل هو مجموعة بيانات ضخمة (Dataset) تُستخدم في تدريب نماذج التعلم العميق، خاصة في رؤية الحاسوب (Computer Vision). ImageNet هو مشروع بدأه البروفيسورة Fei-Fei Li في جامعة ستانفورد عام 2009. يحتوي على أكثر من 14 مليون صورة مصنفة إلى أكثر من 20,000 فئة (Category). كل صورة تكون مرتبطة بتسمية (Label) مأخوذة من قاعدة بيانات WordNet. يتم استخدامه بشكل شائع في تدريب وتقييم نماذج تصنيف الصور.
  10. لقد واجهت هذه المشكلة من قبل، وكانت معقدة بعض الشيء. الحل الذي نجح معي هو التواصل مباشرة مع دعم كورسيرا عبر الرابط التالي: https://www.coursera.support/s/learner-help-center-contact-us وضحت لهم المشكلة بالتفصيل، وذكرت سبب تغيير الاسم، وأرفقت مستندًا رسميًا يثبت الاسم الصحيح. استغرق الأمر حوالي 7-10 أيام حتى تم حل المشكلة وتغيير الاسم بنجاح.
  11. نعم، حذف الصفوف التي تحتوي على بيانات مفقودة (Missing Data) قد يؤدي إلى تحيز (Bias) أثناء تدريب النموذج، كما يمكن أن يؤثر على تحليل البيانات بطرق مختلفة. إليك التفاصيل: 1. تأثير حذف الصفوف على تحيز النموذج عند حذف عدد كبير من الصفوف، قد تصبح العينة المستخدمة في التدريب غير ممثلة بشكل جيد للبيانات الأصلية. إذا كانت البيانات المفقودة غير موزعة عشوائيًا (أي أن هناك نمط معين لفقدانها)، فقد يؤدي الحذف إلى تحيز في التنبؤات، مما يجعل النموذج غير قادر على التعميم على البيانات الحقيقية. 2. تأثير حذف الصفوف على تحليل البيانات يمكن أن يؤدي حذف البيانات إلى تقليل حجم العينة، مما يجعل الإحصائيات المستخرجة أقل دقة وأقل تمثيلًا للبيانات الأصلية. قد تفقد بعض العلاقات المهمة بين المتغيرات، مما قد يؤدي إلى استنتاجات خاطئة أثناء تحليل البيانات. 3. متى يكون الحذف خيارًا مناسبًا؟ إذا كانت نسبة البيانات المفقودة صغيرة جدًا (أقل من 5%)، فقد لا يكون للحذف تأثير كبير. إذا كانت القيم المفقودة موزعة بشكل عشوائي ، فقد يكون الحذف آمنًا نسبيًا. 4. ما البدائل الأفضل للحذف؟ إذا كان لديك عدد كبير من القيم المفقودة، يمكنك تجربة أحد الحلول التالية بدلًا من الحذف: تعويض القيم المفقودة استخدام المتوسط أو الوسيط: استخدام النماذج لتوقع القيم المفقودة: يمكن استخدام خوارزميات مثل KNNImputer أو Random Forest Regressor لملء القيم المفقودة. الحذف العشوائي للصفوف قد يسبب تحيزًا في النموذج ويؤثر على دقة التحليل. من الأفضل استخدام طرق تعويض القيم المفقودة مثل التعبئة بالمتوسط أو النماذج التنبؤية لتجنب فقدان المعلومات.
  12. عندما تكون قيمة val_accuracy ثابتة ولا تتغير في كل مرة أثناء تدريب النموذج، فهذا قد يشير إلى واحد أو أكثر من الأسباب التالية: 1. عدم تحسن النموذج إذا كانت val_accuracy لا تتحسن مع كل Epoch دوره، فقد يعني ذلك أن النموذج لم يتعلم أي شيء جديد من البيانات التدريبية، وبالتالي لا يستطيع تحسين أدائه على بيانات التحقق (Validation Set). 2. النموذج يعاني من Underfitting إذا كانت val_accuracy منخفضة وثابتة، فقد يكون النموذج غير معقد بما يكفي لالتقاط الأنماط في البيانات، مما يؤدي إلى أداء ضعيف على كل من بيانات التدريب والاختبار. 3. النموذج قد يكون قد وصل إلى حالة التشبّع (Plateau) أحيانًا، بعد عدة Epochs دورات، يصل النموذج إلى حد أقصى في الأداء ولا يستطيع تحسين دقته أكثر من ذلك، مما يؤدي إلى استقرار val_accuracy. الحلول الممكنة؟ تجربة نموذج أكثر تعقيدًا (زيادة الطبقات أو عدد الخصائص) ضبط Hyperparameters مثل learning rate أو batch size. التأكد من صحة تقسيم البيانات بحيث تكون بيانات التدريب (traingin) والاختبار (test) متنوعة. مراقبة Overfitting أو Underfitting باستخدام training_accuracy و val_accuracy.
×
×
  • أضف...