-
المساهمات
5583 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
68
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو محمد عاطف17
-
يرجى حذف السطر الذي أخبرتك بوضعه . لقد ظننت أن هذا هو ال controller وليس ال service . من المفترض أن يتم التعديل . هل قمتي بوضع المتغير $fillable في ال model الخاص بال Organizer ؟ حيث يجب وضع الأعمدة التي تريدين أن يتم تعديلها أو حفظها من خلال ال mass assignment . حيث إذا لم يتم وضع المتغير $fillable فلن يتم تعديل الأعمدة الموجودة بهذا النموذج. لذلك يجب التأكد من وجود السطر التالي في النموذج Organizer : protected $fillable = ['name','image'];
-
وعليكم السلام ورحمة الله وبركاته. أولا تحتاج أن تتعلم كيفية إستخدام إستعلام mysqldump في mysql لأخذ نسخة إحتياطية من قاعدة البيانات . حيث هذا هو الإستعلام الذي ستقوم به وكتابته في كود php ويمكنك تعلم المزيد حول كيفية إستيراد وتصدير قاعدة بيانات mysql من خلال المقال التالي : وإليك الكود التالي لفعل ذلك من خلال php : <?php // بيانات الاتصال بقاعدة البيانات $host = 'localhost'; // خادم myqsl $user = 'root'; // اسم المستخدم $pass = ''; // كلمة المرور $dbname = 'database_name'; // اسم قاعدة البيانات // تحديد اسم الملف الذي سيتم حفظ النسخة الاحتياطية فيه $backupFile = 'backup_' . $dbname . '_' . date('Y-m-d_H-i-s') . '.sql'; // إستعلام mysql الخاص بأخذ نسخة إحتياطية $command = "mysqldump --host=$host --user=$user --password=$pass $dbname > $backupFile"; // تنفيذ الأمر system($command, $output); // التأكد من أن النسخة الاحتياطية تم إنشاؤها if ($output === 0) { echo "تم إنشاء النسخة الاحتياطية بنجاح!"; } else { echo "حدث خطأ أثناء إنشاء النسخة الاحتياطية."; } ?> وإليك الإجابة التالية بتفصيل كيف تقوم بأخذ نسخة إحتياطية وحل المشكال التي من الممكن أن تواجهك : أما إذا أردت إستعادة النسخة الاحتياطية وإستيرادها إلى قاعدة بيانات لديك فيمكنك استخدام الكود التالي: <?php // بيانات الاتصال بقاعدة البيانات $host = 'localhost'; // خادم mysql $user = 'root'; // اسم المستخدم $pass = ''; // كلمة المرور $dbname = 'database_name'; // اسم قاعدة البيانات // إسم ملف النسحة الإحتياطية التي تريد إستيراده $backupFile = 'backup_2025-02-15_12-00-00.sql'; // التأكد من أن الملف موجود if (file_exists($backupFile)) { // إستعلام mysql الخاص بإستيراد النسخة الإحتياطية $command = "mysql --host=$host --user=$user --password=$pass $dbname < $backupFile"; // تنفيذ الأمر system($command, $output); // التأكد من نجاح الاستعادة if ($output === 0) { echo "تم استعادة النسخة الاحتياطية بنجاح!"; } else { echo "حدث خطأ أثناء استعادة النسخة الاحتياطية."; } } else { echo "الملف غير موجود."; } ?>
- 8 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته. الخطأ لديكي أنكي تقومين بتعريف data كمعامل في الدالة . وتقومين بتمريرها للدالة update دون وضع البيانات بها . حيث البيانات تكون في الطلب request ولا يتم تمريرها إلى data تلقائيا. لذلك يجب في بداية الدالة كتابة السطر التالي : $data = $request->all(); وهكذا سيتم تمرير البيانات إلى المتغير data وهي البيانات التي تم إرسالها من النموذج form وهكذا ستحتوي data على البيانات الصحيحة وسيتم تمريرها إلى الدالة update . ويفضل حذف data من المعاملات الخاصة بالدالة .
-
إذا لنقم بطريقة إرسال الأحداث مع useState لأن ال localstorage تغيرها لا يؤدي إلى تحديث حالها المكونات. يرجى إستبدال ملف routes.js بالتالي : const router = (user) => createBrowserRouter([ { path: "/", element: !user ? <LoginPage /> : <Navigate to="/dashboard" /> }, { path: "/dashboard", element: user ? <DashboardLayout /> : <Navigate to="/" />, children: [ { index: true, element: <Dashboard /> }, ] } ]); export default function Router() { const [user, setUser] = useState(JSON.parse(localStorage.getItem("user"))); useEffect(() => { const handleStorageChange = () => { setUser(JSON.parse(localStorage.getItem("user"))); }; window.addEventListener('storage', handleStorageChange); return () => { window.removeEventListener('storage', handleStorageChange); }; }, []); return <RouterProvider router={router(user)} />; } والآن في ملف LoginForm.js نقوم بإرسال الحدث بعد حفظ البيانات في ال localstorage هكذا : const submitHandler = async (e) => { e.preventDefault(); mutate(formData, { onSuccess: (data) => { localStorage.setItem("user", JSON.stringify(data.user)); window.dispatchEvent(new Event("storage")); navigate("/dashboard"); } }); };
- 4 اجابة
-
- 1
-
-
الخطأ الأساسي لديك أنك تقوم بمحاولة إرفاق عنوان الصورة التي تحاول رفعها من الواجهة الأمامية وهذا خاطئ . حيث لا يجب إرسال عنوان بل يجب إرسال الملف نفسه من الواجهة الأمامية لتستطيع حفظ الملف من خلال الواجهة الخلفية. في ملف frontend\src\components\createProduct.js سطر 20 يجب إرسال ال image وليس req.file.path حيث لا يوجد ما يسمى req في الواجهة الأمامية وأيضا المتغير لم تقم بتمريره لهذا يحدث خطأ أنك تحاول إستخدام متغير req فارغ . لهذا يجب عليك إستبدال السطر بالتالي : formData.append('image', image); بعد ذلك في سطر 43 يرجى وضع الملف مباشرة وليس العنوان url هكذا : setImage(e.target.files[0]); بعد ذلك في سطر 52 يرجى إستبداله بالتالي لتظهر الصورة في النموذج form حينما تقوم برفعها : <img src={image ? URL.createObjectURL(image):""} style={{ margin: "0 auto", width: "25%" }} /> الآن تم حل مشكلة الواجهة الأمامية . توجد مشكلة في الواجهة الخلفية في ملف backend\routes\index.js حيث في سطر 26 انت تحاول إستقبال الملف بإسم file ولكنك في الواجهة الأمامية قمت بإرساله من خلال إسم image وليس file لذلك يمكنك إما تغيره هنا أو في الواجهة الأمامية . ويمكنك تغيره هنا هكذا : router.post("/create-products",upload.single("image"),isLoggedIn,productController.createProduct); اما بخصوص الإضافة إلى cart فأنت في الواجهة الأمامية تقوم بإرسال البيانات في ال headers وهذا خاطئ حيث يجب إرسالها في ال body وأنت تستقبلها من ال body في الواجهة الخلفية.وأيضا يجب أن تقوم بعمل parse للبيانات التي تقوم بإحضارها من ال localStorage . لهذا في ملف frontend\src\components\getProduct.js سطر رقم26 يرجى إستبداله بالتالي : userId: JSON.parse(localStorage.getItem("id")), وسطر 39 يجب إستبداله بالتالي : .post(ADD_TO_CART ,headers, ولقد قمت بإرفاق الملفات لك بعد التعديل . index.js createProduct.js getProduct.js
- 1 جواب
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته. إن collections هي وحدة (module) مدمجة في بايثون. توفر لك هياكل بيانات متقدمة ومحسنة مقارنة بالأنواع الأساسية مثل القوائم (list) و القواميس (dict) و المجموعات (set). وهذه الوحدة مرتبطة بشكل كبير بهياكل البيانات لأنها توفر لك نظام حاويات تخزن بها البيانات و التي ستسهل عليك التعامل مع البيانات بطرق أكثر كفاءة وفعالية. ومن هياكل البيانات التي توفرها لك : namedtuple : نستخدمها لإنشاء tuple بأسماء حقول مما يجعل الوصول إلى العناصر أكثر وضوحا بدلا من استخدام الفهرس والتعامل مع الارقام. deque : هي قائمة ذات طرفين تسمح بإضافة وحذف العناصر من البداية والنهاية بكفاءة وبسرعة دون الحاجة لإستخدام حلقات التكرار أو تغيرها يدويا. Counter : نستخدمها لحساب تكرار العناصر في قائمة أو أي كائن قابل للتكرار حيث تقوم بإنشاء قاموس مكون من المفاتيح وهي القيم الفريدة في البيانات و قيمة تلك القواميس هي عدد تكرار تلك البيانات. وإليك التوثيق الرسمي لها لمزيد من التفاصيل والدوال التي تقدمها لك : https://docs.python.org/3/library/collections.html
- 3 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته. المشكلة الأولي أنك لا تقوم بحفظ بيانات المستخدم في localStorage عند تسجيل الدخول . ولذلك عند إعادة التوجيه إلى dashboard لا يتم العثور على user في localStorage ويتم إعادة التوجيه مرة أخرى إلى login . لهذا يجب عليك إستبدال الكود السابق بهذا الكود والذي نقوم فيه بتخزين بيانات المستخدم : const submitHandler = async (e) => { e.preventDefault(); mutate(formData, { onSuccess: (data) => { localStorage.setItem("user", JSON.stringify(data)); navigate("/dashboard"); } }); }; وتأكد من أن المتغير data هو بيانات المستخدم لديك . وإذا كانت البيانات بداخل كائن أخر بداخل data مثل data.user تأكد من حفظ data.user حينها. يجب أن يحل ذلك المشكلة إذا ظلت المشكلة أخبرني وذلك لنقوم بتجربة حل إنشاء حدث لإعادة تحديث الحالة.
- 4 اجابة
-
- 1
-
-
هل هذه هي الصفحة التي تقوم بإرسال البيانات لها ؟ إذا كان كذلك حاول طباعة البيانات في بداية الملف وأنظر هل يتم الطباعة أم لا في نافذة network وذلك لتتأكد هل يذهب الطلب بشكل صحيح أم لا . ولكن أعتقد أن المشكلة في ملف إرسال البريد . وخاصة في السطر أخير contact->send فإذا تم طباعة الجملة التي كتبتها في بداية الملف فإذا الخطأ في php-email-form.php
-
الخطأ الآن هو خطأ مختلف وهو 405 Method not allowed وهو يخبرك أن نوع الطلب هذا غير مسموح به أى أنه لا يقبل نوع POST . لذلك يجب عليك التأكد في الخادم أنك قمت بإنشاء الطلب من نوع POST أيضا وليس GET فقط .
-
هذا بسبب أنك تحاول إرسال البيانات إلى الخادم ولكنه لم يتم الوصول إلى الخادم وهذا بسبب إما أنه يوجد مشكلة لديك في الإنترنت أو أن الخادم لا يعمل . أوحدثت مشكلة أثناء تنفيذ طلبك . يرجى فتح نافذة network في أدوات المطور من خلال الضغط على CTRL + SHIFT + I وإختيار نافذة network : بعد ذلك قم بالضغط على زر send message مرة أخرى وستجد الطلب يظهر هنا ويمكنك رؤية سبب الخطأ. يرجى إرفاق صورة للطلب لديك في نافذة network مع إرفاق الكود لمساعدتك.
- 5 اجابة
-
- 1
-
-
هنا نحن في أكاديمية حسوب لا نقوم بالإجابة على أسئلة الإختبارات أو التقيمات ولكن يمكننا أن ندلك على طريقة الحل. أولا بالنسبة إلى توسيط العناصر في الشاشة فيمكنك إستخدام flexbox لتستطيع بناء عناصر متجاوبة وتوسيطها في أى حجم للشاشة ويمكنك قراءة الدرس التالي حول كيفية إستخدام flexbox : أما بخصوص المؤشر فتوجد خاصية في css تسمي caret-color يمكنك قراءة كيفية إستخدامه من خلال موسوعة حسوب على الرابط التالي : الخاصية caret-color ولتستطيع إنشاء border يحوى لونين يمكنك إستخدام الدالة linear-gradient() في css مع الخاصية border-image لتحقيق ذلك ويمكنك قراءة كيفية إستخدام تلك الخاصيتين من خلال موسوعة حسوب على الرابط التالي : الدالة linear-gradient() الخاصية border-image يمكنك محاولة حل التقيم بنفسك وإخبارنا بالكود الذي توصلت إليه .
- 1 جواب
-
- 1
-
-
ستجدين أسفل فيديو الدرس صندوق للتعليقات كما هنا يرجى طرح سؤالك أسفل الدرس وليس هنا حيث هنا قسم الأسئلة العامة ولا نقوم بإجابة الأسئلة الخاصة بمحتوى الدورة أو الدرس، وذلك لمعرفة الدرس الذي توجد به مشكلتك و لمساعدتك بشكل أفضل.
-
لا يمكنك إستخدام متغير قبل تعريفه في أى لغة برمجة . لذلك يجب عليك نقل هذا الكود في بداية الصفحة لتستطيع إستخدامه في أى مكان بعده.
- 15 اجابة
-
- 1
-
-
أولا يجب أن نتفق أنه لا يوجد دورة ستجعلك محترفا فقط من خلال متابعة ومشاهدة الدروس فقط حيث بعد الإنتهاء من الدورة سيتوجب عليك العمل على نفسك والمذاكرة دائما خصوصا في مجال مثل الذكاء الإصطناعي وتعلم الآلة حيث يتطور هذا المجال بشكل كبير جدا وسريع. ولكن هنا في دورة الذكاء الإصطناعي لا تكتفي الأكاديمية بتدريس الأساسيات فقط بل ستقوم بتطبيقات عملية ومشاريع حقيقية والتي ستجعلك تعرف طبيعة الوظائف الحالية في المجال وأيضا تتدرب على مشاريع موجودة حقيقية . مما تؤهلك بعد الإنتهاء من الدورة أن تحصل على وظيفة شريطة أن تكون قد درست جيدا وقمت بالتطبيق العملي والتدريب على مشاريع حقيقية. ومن مميزات الدورة هنا في أكاديمية حسوب أنك يتوفر لك الوصول مدى الحياة للدورة بجميع تحديثاتها . فتقوم الأكاديمية دائما بتحديثات المسارات والأدوات بناء على سوق العمل والمتطلبات فيه . وأيضا تقوم بإضافة مسارات جديدة وغيرها مما ستساعدك في سوق العمل. ولهذا فإذا أتممت الدورة وقد فهمت الدروس وقمت بالتطبيق فعمليا أن الآن مؤهل لدخول سوق العمل كشخص متوسط أو مبتدئ ولكنك سيكون لديك الأساسيات الرئيسية والمعرفة الكافية للحصول على وظيفة ولكن كما وضحت لك سيتوجب عليك العمل والمذاكرة ومتابعة التحديثات دائما . ويمكنك مشاهدة الفيديوا التعريفي التالي عن الدورة و ما الذي ستتعلمه فيها والخبرات التي ستحصل عليها منها :
-
سؤالك لم يكن واضح قليلا إعتقد أنك تريد فقط مجموع الدول وعدد سكانها التي أكبر من شرط معين . <?php function latestitem1($select, $table, $innerjoin = null, $where = null) { global $con; $latestitems = $con->prepare("SELECT $select FROM $table $innerjoin $where"); $latestitems->execute(); $latestitem = $latestitems->fetchall(); return $latestitem; } $nations = latestitem1("nation.*", "nation", "", "", ""); $totalPopulation = 0; $numberOfCountries = count($nations); foreach ($nations as $nation) { $nationid = $nation['nationid']; $nationname = $nation['nationname']; $nationnumber = nationnumber($nationid); $totalPopulation += $nationnumber; if ($nationnumber > 200) { echo "<td>" . $nationid . "</td>"; echo "<td>" . $nationname . "</td>"; echo "<td>" . $nationnumber . "</td>"; } } echo "<td>" . $numberOfCountries . "</td>"; echo "<td>" . $totalPopulation . "</td>"; من المفترض أن هذا الكود يقوم بتنفيذ ما تريده . ويمكنك تغيره بسهولة حسب الشرط الذي تريده.
- 15 اجابة
-
- 1
-
-
هل قمت بوضع أخر سطرين الخاصين بطباعة عدد الدول و عدد السكان خارج ال foreach ؟ يجب أن تقوم بوضعهم بالخارج كما فعلت لك في الكود السابق . ويرجى ملاحظة أنه سيتم إحتساب عدد الدول فقط التي لها عدد سكان أكبر من 200 . يرجى إرفاق صورة للكود الذي لديك إذا إستمرت المشكلة.
- 15 اجابة
-
- 1
-
-
يبدوا انك وضعت الكود الخاص بتصفير المتغير بداخل foreach لهذا حدثت لك تلك المشلكة . يجب نقله بخارج حلقة for هكذا : <?php function latestitem1($select, $table, $innerjoin = null, $where = null) { global $con; $latestitems = $con->prepare("SELECT $select FROM $table $innerjoin $where"); $latestitems->execute(); $latestitem = $latestitems->fetchall(); return $latestitem; } $nations = latestitem1("nation.*", "nation", "", "", ""); $totalPopulation = 0; $numberOfCountries = 0; foreach ($nations as $nation) { $nationid = $nation['nationid']; $nationname = $nation['nationname']; $nationnumber = nationnumber($nationid); if ($nationnumber > 200) { $totalPopulation += $nationnumber; $numberOfCountries++; echo "<td>" . $nationid . "</td>"; echo "<td>" . $nationname . "</td>"; echo "<td>" . $nationnumber . "</td>"; } } echo "<td>" . $numberOfCountries . "</td>"; echo "<td>" . $totalPopulation . "</td>";
- 15 اجابة
-
- 1
-
-
يرجي إرفاق الكود كما طلبت منك . حيث لا اعلم ما هي بنية المتغيرات لديك . ولكن يجب على الفكرة أن تكون واحدة ويمكنك تطبيقها بناء على الكود الذي لديك .
- 15 اجابة
-
- 1
-
-
إذا يمكنك إنشاء متغيرين قبل الشرط if وبداخل الشرط يمكنك زيادة ذلك المتغيرين كالتالي : $totalPopulation = 0; $numberOfCountries = 0; If($nationnumber>30){ $totalPopulation += $nationnumber; $numberOfCountries++; // توليد الجدول } وهكذا في النهاية سيكون لديك المتغيرين totalPopulation والذي يحوي عدد السكان و numberOfCountries والذي يحوي عدد الدول.
- 15 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته. هل تقصد أن الجدول الذي يتم توليده ديناميكيا يتم حفظه في قاعدة البيانات ؟ أم أين يتم توليده ؟ إذا كان يتم توليده بالكود يرجى توضيح الكود الذي تعمل به وهيكل البيانات التي لديك التي تقوم بها بإنشاء الجدول ديناميكيا . وإذا كنت تقصد أنه يتم توليده في الكود فالأمر بسيط كل ما عليك هو المرور على قائمة الدول كالتالي : function calculateTotalPopulation($countries) { $totalPopulation = 0; $numberOfCountries = count($countries); foreach ($countries as $country) { $totalPopulation += $country['Population']; } return [$numberOfCountries, $totalPopulation]; } ويمكنك تغير إسم العمود Population بإسم العمود الموجود لديك والذي يحوي عدد السكان في تلك الدولة. ويمكنك إستدعاء الدالة مباشرة وتمرير قائمة الدول . وستعيد لك قائمة بها مجموع عدد الدول و مجموع عدد السكان.
- 15 اجابة
-
- 1
-
-
وعليكم السلام ورحمة الله وبركاته. نعم عادة ما يتم استخدام ReLU في الطبقات المخفية حتى في مهام التصنيف. وذلك لأنه يعمل على إزالة القيم السالبة -أي يجعلها بصفر- ويحتفظ بالقيم الموجبة. و هذا يساعد في تسريع عملية التدريب مقارنة بوظائف التنشيط الأخرى مثل Sigmoid أو Tanh. وأيضا يساعد على تقليل مشكلة تلاشي التدرجات (Vanishing Gradients) وهو سهل الحساب لأنه يتطلب فقط مقارنة بسيطة (max(0, x)) . ولكن في الطبقة الأخيرة (Output Layer) في التصنيف لا يتم استخدام ال ReLU لأن نتائجها غير مناسبة لمخرجات التصنيف. فمثلا: إذا كان التصنيف لديك ثنائي فيفضل إستخدام Sigmoid في الطبقة الأخيرة. أما إذا كان التصنيف متعدد الفئات فيفضل استخدام Softmax للحصول على احتمالات تصنيف مفسرة. إذا تلخيص لما سبق يمكنك استخدام ال ReLU في الطبقات الخفية أثناء التدريب على مهمة التصنيف ولكن يجب عليك أن تتأكد من استخدام دوال تنشيط مناسبة في الطبقة الأخيرة مثل Sigmoid أو Softmax حسب نوع التصنيف الذي تقوم به.
- 3 اجابة
-
- 1
-
-
ستحتاج أن تتعلم التعامل مع وحدة fs في Node.js لتحقيق ذلك ويمكنك قراءة المقال التالي لتعلم كيفية التعامل مع تلك الوحدة. أولا ستحتاج إنشاء مسار لإستقبال البيانات من النموذج form . بعد ذلك ستحتاج أولا لقراءة البينات الموجودة في ملف json وذلك لتستطيع الإضافة عليها . حيث لو قمت بإضافة الملفات مباشرة على الملف ستفقد البيانات القديمة . ستحتاج إلى قراءة الملف من خلال الدالة readFile في fs بعد ذلك سيكون لديك البيانات الموجودة في الملف ولكن ستلاحظ انها سلسلة نصية لذلك يجب أولا تحويلها إلى json من خلال JSON.parse . بعد ذلك ستقوم بإضافة المستخدم الجديد إلى البيانات التي قمت بإستخراجها من الملف ومن ثم إضافة البيانات الجديدة بعد تعديلها من خلال الدالة writeFile في fs . وإليك الكود المسئول عن ذلك : app.post('/user', (req, res) => { const { name, email } = req.body; const newUser = { name, email }; fs.readFile('data.json', (err, data) => { let users = []; if (!err) { users = JSON.parse(data); //إذا كان هناك بيانات سابقة نقوم بإحضارها } // إضافة المستخدم الجديد إلى البيانات القديمة users.push(newUser); // حفظ البيانات الجديدة في الملف fs.writeFile('data.json', JSON.stringify(users, null, 2), (err) => { if (err) { return res.status(500).send('Error saving data'); } res.json({ message: 'User added successfully!' }); }); }); }); الآن يمكنك وضع الكود السابق لديك في الخادم وإرسال الطلب له وسيتم إضافة البيانات إلى الملف. والآن لننشئ عنوان أخر لجلب البيانات من الملف وإرسالها إلى العميل : app.get('/user', (req, res) => { fs.readFile('data.json', (err, data) => { if (err) { return res.status(500).send('Error reading data file'); } const userData = JSON.parse(data); res.json(userData); }); }); هنا إستخدمنا نفس الدالة السابقة readFile لقراءة الملف وإرسال البيانات منه بعد تحويلها إلى json من خلال JSON.parse .
-
وعليكم السلام ورحمة الله وبركاته. ليس في أغلب الأمر أن ارتفاع قيمة الدقة (accuracy) يعني أن النموذج أفضل و يتنبأ بشكل صحيح بنسبة أكبر. فمثلا تخيل أن في بيانات الأختبار أكثر من 80% من البيانات تعطي نتيجة متشابهة . فلو مثلا نختبر إذا الكان الشخص مريض أم لا . فإذا كانت بيانات الإختبار أكثر من 80% منها الشخص مريض وقام النموذج بالتبنؤ بأن جميع الأشخاص مرضي فهنا الدقة ستظهر لك 80% ولكن هنا النموذج ليس دقيقا بالمرة فالنموذج يخرج جيمع التنبؤات بأن الشخص مريض وتصادف أن بيانات الإختبار الشخص المريض فيها أكثر . فمثلا لو أعطينا النموذج بيانات لإختبارها وكانت تلك البيانات جميعها بهاض الشخص غير مريض . فهنا النموذج دقته ستكون 0% . لأنه تنبأ بأن جميع الأشخاص مرضى وهم عكس ذلك. لذلك ال accuracy لا تعطيك دقة النموذج بشكل أفضل إذا كانت بيانات الإختبار غير موزعة بشكل صحيح . لذلك يفضل إستخدام مقايس أخرى بالإضافة إلى ال accuracy مثل Precision و Recall و F1-score . فمثلا لو كان لديك نموذج يعطي دقة 90% ولكن ال Recall منخفض جدا فهنا هذا النموذج قد يكون غير مفيد في تطبيقات مثل الكشف عن الأمراض النادرة. وبالنسبة للنتيجة التي لديك : الدقة = 0.6258 ( 62.9%) الخسارة = 0.6506 فهنا الدقة ليست عالية لديك مما يخبرك أن النموذج يمكن تحسينه من خلال لضبط ال hyperparameters أو استخدام بنية مختلفة.ولاخظ أن ال loss (الخسارة)،لديك هي 0.6506 في هذه الحالةوهي منخفضة و هذا يشير إلى أن النموذج يتعلم بشكل صحيح وهذا جيد. إذا تلخيصا لما سبق لا تعتمد فقط على ال accuracy لتقييم النموذج قم بتحليل البيانات واستخدم مقاييس أخرى مثل Precision، Recall، F1-Precision و Recall و F1-score لفهم أداء النموذج بشكل أفضل.
-
إن حل المشكلات Problem solving هي مهارة أساسية يجب أن تتوافر في أى مبرمج وهي التي تميز المبرمج الجيد من غيره . وهي ستساعدك جدا في دراسة مجال ال AI و تمكنك من التفكير المنطق في حل المشكلات والبحث عن أفضل الحلول . وأيضا بالطبع يفضل دراسة هياكل البيانات Data Structure و ال Algorithmes . ويمكنك قراءة المقال التالي لمزيد من التفاصيل حول مهارة حل المشكلات وكيفية إتقانها : ويوجد العديد من المواقع المتخصصة في وضع المسابقات ومسائل لتطوير مهارة حل المشكلات ومنها التالي : Hackerrank و LeetCode: هذه المواقع تقدم تحديات برمجية تمكنك من تطبيق المفاهيم المختلفة بما في ذلك الأساسيات و الدوال، وتقديم الحلول الخاصة بك لهذه التحديات ولكن يفضل الدخول في المستويات المبتدئة. PyBites: يوفر PyBites تحديات يومية وأسبوعية لتطوير مهاراتك في Python. codeforces : وهو من المواقع الشهيرة جدا التى تقوم بعمل مسابقات عالمية يوميا وإسبوعيا حيث تكون تلك المسابقات عبارة عن مشاكل ويجب حلها عن طريق البرمجة وتختلف صعوبة المسابقات من مسابقة إلى أخرى و أيضا يعطيك نقاط عند دخول كل مسابقة وحل المشاكل لتتابع تقيمك وسط العديد من المبرمجين حول العالم . Codewars : يقدم تحديات برمجية مصنفة بمستويات مختلفة تتيح لك تطوير مهاراتك بشكل تدريجي. ولكن لا ينبغي عليك التوقف عن متابعة الدورة إذا كنت تسير بشكل جيد فيها . أما إذا كنت ترى صعوبة في تطبيق الأساسيات او لم تفهم الأكواد أو تجد صعوبة في كتابتها فيمكنك حينها التوقف قليلا لمذاكرة Data Structure و ال Algorithmes وتنمية مهارة حل المشكلات لديك.
-
وعليكم السلام ورحمة الله وبركاته. يكمن الفرق بينهما في وظيفة كل منهما . confusion_matrix : هي دالة تقوم بحساب مصفوفة الالتباس (Confusion Matrix) بناء على التوقعات الفعلية والتوقعات المتوقعة.و تعطيك المصفوفة نفسها في شكل مصفوفة من الأعداد حيث يتم عرض النتائج على شكل مصفوفة 2x2 . فمثلا إذا كان لديك 2 فئة (صحيح/خطأ) فسيتم عرض المصفوفة على النحو التالي: [[TN, FP], [FN, TP]] حيث: TN (True Negative) هو عدد الحالات التي تم تصنيفها بشكل صحيح ك "سلبية". FP (False Positive) هو عدد الحالات التي تم تصنيفها بشكل غير صحيح ك "إيجابية". FN (False Negative) هو عدد الحالات التي تم تصنيفها بشكل غير صحيح ك "سلبية". TP (True Positive) هو عدد الحالات التي تم تصنيفها بشكل صحيح ك "إيجابية". ولمزيد من التفاصيل حولها يمكنك قراءة الإجابة التالية والدرس التالي : ConfusionMatrixDisplay : هي أداة لعرض المصفوفة بشكل مرئي كرسومات وهي تستخدم لعرض المصفوفة الناتجة من confusion_matrix بطريقة رسومية مع إضافة بعض التحسينات مثل تسميات المحاور وتلوين الخلايا لمساعدتك في فهم أفضل لأداء النموذج.ليكون الناتج شئ كهذا : ويمكنك قراءة مزيد من التفاصيل وكيفية الإستخدام من خلال التوثيق الرسمي لها : https://scikit-learn.org/stable/modules/generated/sklearn.metrics.ConfusionMatrixDisplay.html إذا الفرق الرئيسي هو أن confusion_matrix تستخدم لحساب مصفوفة الالتباس فقط أما ConfusionMatrixDisplay تستخدم لرسم المصفوفة .
- 5 اجابة
-
- 1
-