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

Mustafa Suleiman

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

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

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

  • عدد الأيام التي تصدر بها

    403

كل منشورات العضو Mustafa Suleiman

  1. التزامن ببساطة تقنية برمجية تتيح للبرنامج تنفيذ عدة مهام في نفس الوقت، أي أن البرنامج يمكنه القيام بمهام متعددة في نفس الوقت، بدلاً من انتظار انتهاء المهام السابقة قبل البدء في المهام الجديدة. للتوضيح، ساستخدم مكتبة threading في بايثون لإنشاء خيطين Threads منفصلين، الخيط Thread الأول سيقوم بطباعة الأرقام من 1 إلى 10، والخيط الثاني سيقوم بطباعة الأحرف من A إلى J. وسيصبح البرنامج كالتالي وإليك تعليقات لتوضيح الأمر: import threading import time # دالة للخيط الأول def print_numbers(): for i in range(1, 11): print(i) time.sleep(0.5) # انتظر نصف ثانية قبل الطباعة التالية # دالة للخيط الثاني def print_letters(): for letter in 'ABCDEFGHIJ': print(letter) time.sleep(0.5) # انتظر نصف ثانية قبل الطباعة التالية # إنشاء خيطين thread1 = threading.Thread(target=print_numbers) thread2 = threading.Thread(target=print_letters) # بدء الخيطين thread1.start() thread2.start() # انتظار انتهاء الخيطين thread1.join() thread2.join() عندما تشغل البرنامج، ستلاحظ أن الأرقام والأحرف يتم طباعتها في نفس الوقت، وذلك يعني أن البرنامج يقوم بمهام متعددة في نفس الوقت، وهو ما يسمى بالتزامن. 1 A 2 B 3 C 4 D 5 E 6 F 7 G 8 H 9 I 10 J وللعلم بايثون لديها بعض القيود فيما يتعلق بالتزامن، بسبب ما يعرف بـ "Global Interpreter Lock" (GIL). ويعني أن بايثون لا يمكنه استخدام أكثر من نواة واحدة في المعالج في نفس الوقت، حتى لو كان لديك معالج متعدد النواة.
  2. طالما لديكِ إلمام بأساسيات البرمجة من خلال لغة قوية جدًا مثل C++ فلا حاجة إطلاقًا لدراسة مسار سكراتش فهو مناسب لتقديم مفاهيم البرمجة بشكل مبسط لمن ليس لديهم أي دراية بمجال البرمجة. على عكسك أنتِ، بالتالي عليكِ دراسة المسارات التالية لمسار سكراتش بالكامل وستجدي استفادة منهم، حيث سيتم التطرق إلى: أساسيات البرمجة من خلال جافاسكريبت (ستتمكني من دراسته بسهولة بما أن لديك خلفية برمجية وستتعلمي لغة جافاسكريبت أيضًا) أنظمة التشغيل ونظام لينكس قواعد البيانات مجال الويب والواجهة الأمامية والخلفية البرمجة كائنية التوجه من خلال بايثون الخوارزميات وبنى المعطيات algorithm and data structure أنماط التصميم design patterns أساسيات هندسة البرمجيات Software Development Life Cycle (SDLC) إعادة تصميم البرمجيات Refactoring وكل ما سبق مطلوب منك معرفته ودراسته لتصبحي مهندسة برمجيات software engineer.
  3. أرجو توفير صورة لما يحدث لديك في منفذ الأوامر والخطوات التي قمت بها لرفع المشروع أي ما هي الأوامر التي كتبتها. وأيضًا عرض نتيجة الأمر التالي: git remote show origin مع توضيح رابط المستودع الخاص بك على github أيضًا. ستجد هنا تفصيل لطريقة رفع المشاريع:
  4. لا يوجد دورة مخصصة بالأكاديمية لتطوير تطبيقات الهاتف المحمول، لكن في في دورة "تطوير التطبيقات من خلال جافاسكريبت" يوجد شرح لإطاري React Native و Ionic وهما لتطوير تطبيقات الهاتف لأندرويد وIos من خلال جافاسكريبت. لذا من خلال تلك الدورة تستطيع تعلم بناء أي مشروع تريده، فيوجد بها أيضًا شرح لبناء تطبيقات سطح المكتب.
  5. التعلم العميق هو أحد فروع تعلم الآلة، وتعلم الآلة هو فرع من فروع الذكاء الاصطناعي (AI) يركز على تطوير خوارزميات وطرق يمكنها من التعلم من البيانات وتحسين أدائها دون الحاجة إلى برمجة صريحة، ويستخدم مختلف الأساليب والتقنيات، مثل التعلم الإشرافي والتعلم غير الإشرافي والتعلم المعزز. من جانبه، التعلم العميق هو فرع من فروع تعلم الآلة يركز على تطوير خوارزميات تعتمد على الشبكات العصبية الاصطناعية ANNs ذات الطبقات المتعددة، وهي تحاكي هيكل الدماغ البشري وتسمح للآلة بالتعلم من البيانات وتحليلها بطريقة أكثر تعقيداً، ويستخدم تقنيات مثل الشبكات العصبية التلافيفية CNNs والشبكات العصبية الدلالية RNNs والشبكات العصبية التلافيفية الدلالية LSTMs وغيرها. بالتالي عليك البدء بتعلم أساسيات "تعلم الآلة" قبل البدء في التعلم العميق من خلال دراسة التالي: Regularization. Underfitting and Overfitting and how to identify them Various cost functions A thorough understanding of stochastic gradient descent Hyper parameter tuning Cross validation techniques ثم دراسة: Regression Classification (Both Sample Based and Probabilistic) Decision Trees Neural Networks
  6. بسبب طريقة حساب الأهمية في كل منهما، ففي الرسم الأول، الذي يظهر الترتيب حسب قيمة الارتباط مع Outcome، تقوم بحساب الارتباط باستخدام معامل الارتباط بين كل ميزة و Outcome، أي أن الميزات التي لها قيمة ارتباط أعلى تكون أكثر ارتباطًا مع Outcome. في الرسم الثاني، يظهر الترتيب حسب الأهمية باستخدام Permutation Importance، وتقوم بحساب الأهمية من خلال تقييم تأثير كل ميزة على دقة النموذج من خلال تغيير قيمة كل ميزة بشكل عشوائي وتقييم التغيير في دقة النموذج، والميزات التي لها تأثير أكبر على دقة النموذج تكون أكثر أهمية. بالتالي الفرق بين الطريقتين هو أن الارتباط لا يعتبر تأثير الميزة على دقة النموذج، بينما الأهمية تعتبر تأثير الميزة على دقة النموذج. ولتعديل الترتيب، استخدم تقنية Feature Engineering لتحسين الأهمية للميزات التي تريدها، وأحد الطرق هي Feature Scaling والتي تقوم بتوسيم الميزات وتصبح جميعها بنفس النطاق، مما يمنع الميزات ذات القيم الأكبر من التأثير بشكل أكبر على النموذج. أي لو ميزة Glucose تتراوح بين 0 و 300، بينما ميزة Insulin تتراوح بين 0 و 10، فإن Glucose ستكون لها تأثير أكبر على النموذج، وتستطيع استخدام StandardScaler أو MinMaxScaler لتوسيم الميزات إلى نطاق موحد. كالتالي: from sklearn.preprocessing import StandardScaler scaler = StandardScaler() x_train_scaled = scaler.fit_transform(x_train) x_test_scaled = scaler.transform(x_test) modle_diabetes_randomforestregressor = RandomForestRegressor(n_estimators=10000 , max_depth=4 , random_state=33) train = modle_diabetes_randomforestregressor.fit(x_train_scaled , y_train) importances = permutation_importance(modle_diabetes_randomforestregressor , x_test_scaled , y_test , n_repeats=10 , random_state=42) importance_scores = importances.importances_mean
  7. ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
  8. أولاً عليك تنظيم مجلد المشروع الرئيسي بحيث تقوم به بإنشاء مجلد لكل مشروع ثم داخل كل مجلد تضع ملفات المشروع الخاصة به. ثم بإنشاء مستودع git محلي بالمجلد الرئيسي ثم تقوم بإنشاء مستودع على GitHub لنرفع به المجلد الرئيسي ثم تقوم بدفع المجلد إلى المستودع على GitHub. ستجد خطوات رفع المشاريع هنا: لكن لتوفر على نفسك الكثير من العناء الأفضل مشاهدة التالي أولاً لتعلم Git الأمر سيستغرق منك ساعة: وستجد هنا مرجع لأوامر git:
  9. بشكل واقعي ما تقوم به ليس الطريقة الصحيحة لتعلم البرمجة، لا يوجد أحد قادر على تعلم جميع لغات البرمجة والتقنيات الخاصة بها، من الممكن تعلم الأساسيات وتنفيذ مشاريع لكن ليس الإحتراف واكتساب خبرة بها تؤهلك للتخصص في مجال معين. للتوضيح بخصوص تلك النقطة، مثلاً مطور الواجهة الخلفية من الطبيعي والصحيح أن يصبح قادر على التنقل بين لغات البرمجة والتقنيات الخاصة بالواجهة الخلفية مثل PHP و GO وC# وغيرهم. وتلك هي طبيعة مهندس البرمجيات وليس مطور فقط، أي شخص لديه دراية وتعمق بالأساسيات تؤهله للتنقل بين لغة وأخرى وإطار وآخر. لكن ليس من المنطقي أن يقوم بذلك في الواجهة الأمامية أيضًا أو في مجال تطوير تطبيقات الهاتف، لا يوجد وقت لذلك، أو حتى القدرة فالتخصصات البرمجية أصبحت معقدة حاليًا. بالتالي عليك تحديد تخصص برمجي والعمل على تعلم المهارات الخاصة به، وستصبح قادر على فعل ذلك بعد دورة علوم الحاسوب. لكن لا تقوم بذلك بناءًا على ما تفضله أنت، بل على حسب المطلوب في سوق العمل الذي ترغب بالعمل به، أي عليك القيام بواجبك وتفقد الوظائف المعروضة والمهارات المطلوبة ومستوى الخبرة وبالأخص مستوى Junior أو Mid-Level (3 سنوات خبرة)، لديك موقعي LinkedIn وIndeed. في البداية تستطيع العمل على مواقع العمل الحر، مثل موقع مستقل وخمسات، وتلك هي الطريقة للحصول على عائد حتى لو بسيط لحين الحصول على وظيفة. لكن عليك أيضًا تفقد تلك المواقع والمهارات المطلوبة عليها فقد تختلف عن سوق العمل لديك، لذا عليك الموازنة والتقرير بناءًا على ظروفك الحالية وما تريده خلال فترة سنة.
  10. بمنظور عام، أولآً عليك إنشاء فئة أو كلاس أساسي للنظام، باسم SecurityDevice ويتضمن سمات وسلوكيات مشتركة لكل الأجهزة الأمنية. ثم أضف به سمات properties مثل state و location و sensitivity التي تمثل حالة الجهاز وموقعه وحساسيته. ثم إضافة ميثودز مثل activate و deactivate و alert التي تمثل تفعيل وإلغاء تفعيل الجهاز وإرسال تنبيهات. بعد ذلك، عليك إنشاء كلاسات فرعية منه لكل نوع من الأجهزة الأمنية، مثل Camera و Alarm و MotionSensor، أي نقوم بالوراثة من الكلاس الأساسي SecurityDevice. ثم أضف سمات وسلوكيات (ميثودز) إضافية لكل فئة محددة، مثلاً: في كلاس Camera: أضف سمة resolution تمثل دقة الفيديو. Alarm: أضف سمة loudness تمثل شدة الصوت. MotionSensor: أضف سمة sensitivity تمثل حساسية الاستشعار. ثم تطبيق مبدأ الـ Polymorphism أي تعدد الأشكال وهو مفهوم أساسي في البرمجة الموجهة للكائنات (OOP) يسمح لك بتنفيذ نفس السلوك بطرق مختلفة اعتمادًا على نوع الكائن. وذلك عن طريق تجاوز الأساليب Method Overriding في الفئات (الكلاسات) المشتقة Derived Classes. للتوضيح لدينا ثلاث فئات: Camera، Alarm، MotionSensor. كل فئة تمثل نوعًا مختلفًا من الجهاز. Camera: لديها ميثود alert() التي ترسل تنبيهًا يحتوي على صورة من الكاميرا. Alarm: لديها ميثود alert() التي ترسل تنبيهًا يحتوي على صوت عالٍ. MotionSensor: لديها ميثود alert() التي ترسل تنبيهًا يحتوي على إشعار بحركة. سيتم الأمر كالتالي: نحدد فئة أساسية Base Class وهي SecurityDevice. ثم نحدد ميثود alert() في الفئة الأساسية. في كل فئة مشتقة (Camera، Alarm، MotionSensor)، نقوم بتجاوز طريقة alert() لتنفيذ سلوك مختلف. وعند استخدام كائن من نوع SecurityDevice، سيتم تنفيذ طريقة alert() المحددة في الفئة المشتقة التي ينتمي إليها الكائن. مثلاً من خلال بايثون نقوم بالتالي: class Device: def alert(self): print("تنبيه عام") class Camera(Device): def alert(self): print("تنبيه يحتوي على صورة من الكاميرا") class Alarm(Device): def alert(self): print("تنبيه يحتوي على صوت عالٍ") class MotionSensor(Device): def alert(self): print("تنبيه يحتوي على إشعار بحركة") camera = Camera() alarm = Alarm() motion_sensor = MotionSensor() # استخدام تعدد الأشكال camera.alert() alarm.alert() motion_sensor.alert()
  11. عند إنشاء قاعدة بيانات على Render ستحصل على روابط مختلفة للإتصال بها وهما internal للإتصال بقاعدة البيانات من داخل الاستضافة نفسها أي عند نشر المشروع عليها نستخدمه. بينما لو أردنا الإتصال من الخارج والقيام بعمليات التهجير من خلال منفذ الأوامر على نظامك كما تفعل بشكل عادي فنستخدم رابط تحت اسم External. وضعه في ملف .env في متغير باسم: DATABASE_URL = 'الرابط هنا'
  12. سأوضح لك بمثال وحاول تطبيقه على مشروعك، لكن للعلم ستوفر على نفسك الكثير لو تعلمت جافاسكريبت فهي اللغة البرمجية الخاصة بالويب وبدونها لن تتمكن من أن تصبح مطور للواجهة الأمامية Front-End حيث ستقوم ببناء مواقع ثابتة بدون أي تفاعل حقيقي. أولاً عند إنشاء كروت السور في صفحة الرئيسية، أضف سمة data-sura-name لكل كرت، واحفظ فيها اسم السورة. <div class="sura-card" data-sura-name="الفاتحة"> <h2>الفاتحة</h2> <button class="listen-button">استماع</button> </div> بعد ذلك علينا معالجة النقر على زر استماع من خلال جافاسكريبت كالتالي: إضافة حدث onclick لزر استماع في كل كرت. عند النقر، نحصل على اسم السورة من سمة data-sura-name للكرت. نستخدم window.location.href لتحويل المستخدم إلى صفحة القرآن مع تمرير اسم السورة كمعامل في عنوان URL. const listenButtons = document.querySelectorAll('.listen-button'); listenButtons.forEach(button => { button.addEventListener('click', () => { const suraName = button.parentElement.getAttribute('data-sura-name'); window.location.href = `quran.html?sura=${suraName}`; }); }); الآن علينا معالجة اسم السورة في صفحة القرآن من خلال القيام بالتالي بجافاسكريبت أيضًا: استخدم URLSearchParams للحصول على اسم السورة من عنوان URL. حدد اسم السورة في عنصر select باستخدام value. ثم نشغل الصوت تلقائيًا باستخدام JavaScript. const urlParams = new URLSearchParams(window.location.search); const suraName = urlParams.get('sura'); const suraSelect = document.getElementById('sura-select'); suraSelect.value = suraName; // شغل الصوت تلقائيًا من خلال إنشاء دالة خاصة بذلك وتمرير اسم السورة إليها) playAudio(suraName); لاحظ getElementById('sura-select') نحصل من خلالها على العنصر select لتغيير قيمة السورة به. لذا عليك تعديل أسماء الكلاسات بما يتناسب مع كود HTML لديك، بالتالي يجب إمتلاك أساسيات جافاسكريبت على الأقل.
  13. في ملف src\Pages\Dashboard\Users.js قم بكتابة دالة مباشرًة داخل useEffect وذلك غير صحيح، ما نقوم به هو التالي أرجو مراجعته: const getUsers = async () => { try { const response = await axios.get(`${Api.baseURL}/${Api.USERS}`, { headers: { Authorization: `Bearer ${cookie.get('e-commerce')}`, }, }); return response.data; } catch (error) { console.error(error); throw error; } }; useEffect(() => { getUsers(); }, []); نكتب الدالة بالخارج في حال تعود بوعد promise نستخدم async ثم نستدعي تلك الدالة في useEffect ونقوم بتشغيله مرة واحدة من خلال مصفوفة إعتماديات فارغة []
  14. Google Developer عباةر عن برنامج مجاني يقدم مجموعة من الأدوات والموارد لمن يرغبون في إنشاء تطبيقات وخدمات على منصة Google، أي للمطورين. ويوفر التالي: مجموعة واسعة من الأدوات مثل Android Studio، Firebase، Google Cloud Platform، و Google Maps APIs. دروسًا، وثائق، ودورات تدريبية لمساعدة المطورين على تعلم كيفية استخدام أدوات Google. دعمًا تقنيًا للمطورين من خلال المنتديات، وشبكات التواصل الاجتماعي، ووثائق الدعم. فرصًا للمطورين لعرض تطبيقاتهم على متجر Google Play، والحصول على شهادة Google Developer، والمشاركة في برامج Google Developer Groups. بإمكانك الانضمام إلى برنامج Google Developer مجانًا من خلال موقع Google Developer.
  15. أنت تستخدم طريقة المدى الربيعي (IQR) للكشف عن البيانات الشاذة، وهي طريقة مستخدمة بكثرة وفعالة. وهناك طرق مختلفة لما تريده، أولها الفهرس المنطقي Boolean Indexing diabetes = diabetes[(diabetes['Insulin'] >= lower_bound) & (diabetes['Insulin'] <= upper_bound)] سيتم إنشاء مجموعة بيانات جديدة تسمى diabetes تستبعد الصفوف التي تحتوي على قيم "Insulin" شاذة. الطريقة الثانية هي باستخدام طريقة drop: outlier_indices = diabetes[(diabetes['Insulin'] < lower_bound) | (diabetes['Insulin'] > upper_bound)].index diabetes.drop(outlier_indices, inplace=True) ستحذف الصفوف التي تحتوي على قيم شاذة من مجموعة البيانات الأصلية diabetes. الطريقة الثالثة هي من خلال loc: diabetes.loc[~((diabetes['Insulin'] < lower_bound) | (diabetes['Insulin'] > upper_bound)), :] ستنشئ مجموعة بيانات جديدة تحتوي فقط على الصفوف التي لا تحتوي على قيم شاذة.
  16. الـ Outlier عبارة عن قيمة بيانات تقع بعيدًا عن بقية البيانات في مجموعة البيانات. وأحيانًا يكون سببها خطأ في القياس أو بيانات غير متوقعة، وتؤثر على متوسط المجموعة، والانحراف المعياري، والارتباطات. وتستطيع إزالتها أو تحويلها أو استخدام تقنيات إحصائية مقاومة. مثلاً في مجموعة بيانات لدرجات الطلاب، يكون هناك طالب حصل على درجة 95 بينما حصل بقية الطلاب على درجات بين 70 و 85. بينما الـ Extreme Outlier هي قيمة بيانات تقع بعيدًا جدًا عن بقية البيانات في مجموعة البيانات، بشكل أكبر من outlier العادي، وذلك يعرف أيضًا باسم gross error. وغالبًا ما يكون سببها خطأ في القياس أو بيانات غير متوقعة بشكل كبير، وتؤثر بشكل كبير على متوسط المجموعة، والانحراف المعياري، والارتباطات، وتؤثر على تحليل البيانات بشكل كبير مقارنًة بالـ Outlier. ويجب التعامل معها بحذر شديد، فمن الضروري إزالتها أو تحويلها، ولكن يجب التحقق من سبب وجودها أولاً. مثلاً في نفس مجموعة البيانات، هناك طالب حصل على درجة 150 بينما حصل بقية الطلاب على درجات بين 70 و 85.
  17. تحتاج إلى تعديل التالي في ملف settings.gradle في السطر 3: def localProperties = Properties() لتصبح: def localProperties = new Properties() أي بوضع كلمة new. إن لم تجد ما سبق فقم بوضع كلمة new قبل السطر الذي يسبب المشكلة مثلاً كالتالي: if (keystorePropertiesFile.exists()) { keystoreProperties.load( new FileInputStream(keystorePropertiesFile))}
  18. ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
  19. ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
  20. طالما ذكرت سوق العمل الحر فتوجه مباشرًة إلى PHP ولارافل ثم تعلم ووردبريس، لكن لا تستمع إلى أحد، تفقد مواقع العمل الحر التي تنوي العمل عليها ونوعية المشروع المعروضة والمهارات الخاصة بها، ثم اتخذ قرارك بناءًا على ذلك. وفي كلا الأحوال سيتعين عليك تعلم جافاسكريبت فهي لغة الويب للواجهة الأمامية وبدونها ستحتاج إلى استخدام مكتبة مثل alpine للإلتفاف حول عدم تعلم اللغة، وذلك لا أنصحك به، قم بتعلم الأساسيات التي تمكنك من فهم سطور اللغة على الأقل ثم تستطيع استخدام مكتبة مثل alpine وبعد ذلك تستطيع التعمق في تعلم جافاسكريبت بعد فترة. ابحث عن Tall stack وتعلم التقنيات الخاص به بعد القيام بالبحث في الخطوة الأولى وإتخاذ قرارك.
  21. بخصوص شرح لمكتبة Turtle فلا يوجد على وجه الخصوص، هناك نقاشات حول تلك المكتبة هنا: بينما ستجد هنا شرح لمكتبة pygame وتطبيقات عملية على المكتبة ففي المقال التالي يوجد مرجع لكافة المقالات حول pygame في الأكاديمية: بالطبع على اليوتيوب يوجد شروحات عملية لكلاهما
  22. من الطرق السهلة لفعل ذلك هي Permutation Feature Importance أو أهمية ميزة الإزاحة، وستجدها بالعديد من مكتبات التعلم الآلي، مثل scikit-learn، حيث توفر وظائف مدمجة لحسابها. وتلك الطريقة توفر تصنيفًا واضحًا لأهمية الميزة، الأمر الذي يسهل فهم النتائج وتفسيرها، وتستطيع تطبيق أهمية ميزة الإزاحة على أي نموذج تعلم آلي، بما في ذلك النماذج الخطية وغير الخطية، دون الحاجة إلى تعديلات كبيرة على النموذج أو معاملاته الفائقة. أيضًا مقاومة للارتباطات بين الميزات، وهو أمر شائع في العديد من مجموعات البيانات، وبإمكانك حساب أهمية ميزة الإزاحة بسرعة نسبية، خاصة عند مقارنتها بطرق أخرى مثل إزالة الميزة التكرارية (RFE). للتوضيح: from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.inspection import permutation_importance X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) rf = RandomForestClassifier(n_estimators=100, random_state=42) rf.fit(X_train, y_train) importances = permutation_importance(rf, X_test, y_test, n_repeats=10, random_state=42) # الحصول على درجات أهمية الميزة importance_scores = importances.importances_mean # فرز الميزات حسب الأهمية sorted_features = np.argsort(importance_scores)[::-1] # تحديد أفضل 3 ميزات top_3_features = sorted_features[:3] print("Best 3:", X.columns[top_3_features])
  23. أقصد النتيجة التي حصلنا عليها من خلال اختبارنا الإحصائي ليست نتيجة عشوائية، بل هي نتيجة ذات احتمال ضئيل جدًا للحدوث إن كانت الفرضية الصفرية صحيحة. أي أن هناك احتمالًا ضئيلًا جدًا لأن يكون ذلك الفرق نتيجة للصدفة. للتوضيح: الفرضية الصفرية: لا يوجد فرق بين متوسطي العينتين. الفرضية البديلة: يوجد فرق بين متوسطي العينتين. في حال قيمة p أقل من مستوى الدلالة (عادةً 0.05)، فإننا نرفض الفرضية الصفرية ونستنتج أن هناك فرقًا "ذو دلالة إحصائية" بين متوسطي العينتين.
  24. عليك تحديد ما هو استخدامك هل للبرمجة فقط أم هناك استخدامات أخرى وما هي الميزانية، وهل تستخدم الحاسوب خارج المنزل أم داخل المنزل أغلب الوقت؟ عامًة للبرمجة أنت لست بحاجة إلى مواصفات مرتفعة يكفي حاسوب بمواصفات متوسطة والأهم وجود 16 جيجابايت من الذاكرة العشوائية و هارد SSD للنظام.
  25. الغرض منها إجراء اختبار t للعينات المستقلة وهو اختبار إحصائي لمقارنة متوسطين لعينتين مستقلتين. وذلك عندما تريد معرفة هل هناك فرق ذو دلالة إحصائية بين متوسطين لعينتين مستقلتين. حيث تُجري ttest_ind اختبار t للعينات المستقلة وتُعيد قيمتين: القيمة p: وهي احتمال الحصول على الفرق المُلاحظ بين متوسطي العينتين إن لم يكن هناك فرق حقيقي بينهما. إحصائية t: وهي قياس الفرق بين متوسطي العينتين مُقسّمًا على خطأ المعياري. وتستقبل المعلمات التالية: a: مصفوفة NumPy تحتوي على البيانات للعينة الأولى. b: مصفوفة NumPy تحتوي على البيانات للعينة الثانية. axis: المحور الذي يتم حساب الاختبار عليه (افتراضيًا 0). equal_var: قيمة منطقية تُشير إلى ما إن كان يُفترض أن يكون التباين متساويًا بين العينتين (افتراضيًا True). nan_policy: كيفية التعامل مع القيم المفقودة (افتراضيًا "propagate"). للتوضيح: import scipy.stats as stats import numpy as np data1 = np.array([1, 2, 3, 4, 5]) data2 = np.array([6, 7, 8, 9, 10]) result = stats.ttest_ind(data1, data2) print(" p:", result.pvalue) print(" t:", result.statistic) لاحظ في حال كانت القيمة p أقل من مستوى الدلالة (عادةً 0.05)، فإننا نرفض الفرضية الصفرية ونستنتج أن هناك فرقًا ذو دلالة إحصائية بين متوسطي العينتين. أما لو القيمة p أكبر من مستوى الدلالة، فإننا لا نرفض الفرضية الصفرية ونستنتج أنه لا يوجد فرق ذو دلالة إحصائية بين متوسطي العينتين.
×
×
  • أضف...