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

Chihab Hedidi

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

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

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

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

    13

كل منشورات العضو Chihab Hedidi

  1. كتابة الخوارزمية تعني وصف الخطوات الأساسية التي يجب اتباعها لحل مشكلة معينة أو تنفيذ مشروع معين بشكل منطقي ومنظم، قبل أن تبدأ في كتابة الخوارزمية، تأكد من أنك تفهم المشكلة تماما وما هي الأهداف التي تريد تحقيقها، و حدد ما هي المدخلات والمخرجات اللازمة لحل المشكلة، بعدها قم بتقسيم العملية إلى خطوات بسيطة ومنطقية، يجب أن تكون هذه الخطوات واضحة وسهلة الفهم، و أيضا كخطوة أساسية إذا كانت هناك شروط معينة يجب التحقق منها أو عمليات تكرارية، قم بإدراجها في الخوارزمية، و اكتب الخطوات بشكل مرتب وواضح، بحيث يمكن لأي شخص آخر فهمها بسهولة، يمكنك استخدام لغة طبيعية أو أي لغة برمجة (Pseudocode). يمكنك أن تقرأ هذه المقالات و التي ستساعدك كثيرا:
  2. مرحبا أحمد، يجب أن تعرف أنه للتقدم للإختبار يجب عليك إنهاء أربع مسارات على الأقل، أما بالنسبة للتقدم بما أنك وصلت لمرحلة أتك قادر على برمجة المواقع من الصفر فأعتقد أنك جاهز للإختبار، لكن يجب أن تعرف أنه سيتم سؤالك عن كل المحتوى في الدورة، يمكنك الإطلاع أكثر على معلومات حول الإختبار من خلال هذه الإجابة :
  3. يجب عليك التركيز على الجودة بدلا من الكمية، واحرص على أن تأتي الروابط الواردة من مواقع ذات سمعة جيدة وتصنيف عال، وذات محتوى ذو صلة بمحتوى موقعك، وأيضا قم بإنشاء محتوى ذو جودة عالية يستحق الروابط، وحاول في نفس الوقت التواصل مع مواقع أخرى في نفس مجالك واطلب منهم الارتباط بموقعك، و عندر الرغبة في ذكر موقعك في موقع آخر حاول أن يكون ذلك عند الحاجة بطريقة طبيعية وغير ترويجية مفرطة. ولا تنسى أن تستخدم أدوات مثل Ahrefs وSEMrush لتحليل الروابط الواردة إلى منافسيك ومعرفة من أين يحصلون على روابطهم. يمكنك قراءة هذه المقالات ستفيدك كثيرا:
  4. الخطأ الذي يظهر سببه أن PropertyPage هو مكون React ويفترض أن يكون دالة وظيفية عادية وليست دالة async، في React، المكونات الوظيفية لا يمكن أن تكون دوال async لأنها يجب أن ترجع JSX مباشرة، وليس وعدا (Promise). في الكود الذي كتبته، عند إضافة async إلى PropertyPage، تقوم بجعل هذه الدالة ترجع وعدا، مما يؤدي إلى أن React لا يعرف كيف يتعامل مع هذا الوعد ويعرض المكون، و لحل المشكلة، يمكنك فصل منطق الجلب (fetching) في useEffect كما فعلت، لكن تأكد من عدم استخدام async في دالة المكون الرئيسية. إليك كيف يمكنك إعادة كتابة الكود بشكل صحيح: "use client" import React, { useEffect, useState } from "react"; import Link from "next/link"; import { useParams } from "next/navigation"; import { FaArrowLeft } from 'react-icons/fa'; import { fetchProperty } from "@/utils/requests"; const PropertyPage = () => { const [property, setProperty] = useState(null); const [loading, setLoading] = useState(true); const { id } = useParams(); useEffect(() => { const fetchPropertyData = async () => { if (!id) return; try { const property = await fetchProperty(id); setProperty(property); } catch (error) { console.error('Error fetching property', error); } finally { setLoading(false); } }; fetchPropertyData(); }, [id]); if (loading) { return <div>Loading...</div>; } return ( <> <section> <div className="container m-auto py-6 px-6"> <Link href="/properties" className="text-green-500 hover:text-green-600 flex items-center" > <FaArrowLeft className="mr-2" /> Back to Properties </Link> </div> </section> <section className="bg-green-50"> <div className="container m-auto py-10 px-6"> <div className="grid grid-cols-1 md:grid-cols-70/30 w-full gap-6"> <aside className="space-y-4"> property single page </aside> </div> </div> </section> </> ); }; export default PropertyPage; في هذا الكود، يتم تنفيذ دالة fetchPropertyData داخل useEffect كما هو مطلوب، دون جعل المكون الرئيسي async. بهذه الطريقة، يمكنك ضمان أن المكون يرجع JSX وليس وعدا، وبالتالي تتجنب الخطأ الذي ظهر.
  5. يمكنك استخدام PHP مع JavaScript لجعل الحقول تظهر أو تختفي بناء على الخيار المحدد في حقل select، سنستخدم JavaScript للتعامل مع تغيير الخيارات في حقل select وPHP لعرض الحقول المناسبة بناء على هذا التغيير. أولا نقوم بإعداد HTML وJavaScript: <!DOCTYPE html> <html> <head> <title>Form Example</title> <script type="text/javascript"> function showJobs() { var gender = document.getElementById("gender").value; var maleJobs = document.getElementById("maleJobs"); var femaleJobs = document.getElementById("femaleJobs"); if (gender == "male") { maleJobs.style.display = "block"; femaleJobs.style.display = "none"; } else if (gender == "female") { maleJobs.style.display = "none"; femaleJobs.style.display = "block"; } else { maleJobs.style.display = "none"; femaleJobs.style.display = "none"; } } </script> </head> <body> <form method="post" action="submit.php"> <label for="gender">الجنس:</label> <select id="gender" name="gender" onchange="showJobs()"> <option value="">اختر...</option> <option value="male">ذكر</option> <option value="female">أنثى</option> </select> <div id="maleJobs" style="display:none;"> <label for="maleJob">وظائف الذكور:</label> <select id="maleJob" name="maleJob"> <option value="job1">وظيفة 1</option> <option value="job2">وظيفة 2</option> <option value="job3">وظيفة 3</option> </select> </div> <div id="femaleJobs" style="display:none;"> <label for="femaleJob">وظائف الإناث:</label> <select id="femaleJob" name="femaleJob"> <option value="job4">وظيفة 4</option> <option value="job5">وظيفة 5</option> <option value="job6">وظيفة 6</option> </select> </div> <input type="submit" value="إرسال"> </form> </body> </html> في ملف submit.php، يمكنك معالجة البيانات المرسلة من النموذج: <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { $gender = $_POST["gender"]; if ($gender == "male") { $job = $_POST["maleJob"]; } elseif ($gender == "female") { $job = $_POST["femaleJob"]; } echo "الجنس: " . $gender . "<br>"; echo "الوظيفة: " . $job; } ?> عند تغيير الخيار في حقل select، تقوم JavaScript باستدعاء وظيفة showJobs التي تعرض أو تخفي حقول الوظائف بناء على الخيار المختار، و عند إرسال النموذج، تقوم PHP بمعالجة البيانات وتحديد الوظيفة المختارة بناء على الجنس، و بهذا الشكل يمكنك جعل الحقول تظهر وتختفي بناء على الخيارات المحددة في حقل select.
  6. مرحبا، أسفل الفيديو الخاص بالدورة تجد مكان للسؤال، أرجوا طرح السؤال هناك.
  7. لا يشترط فهم جميع المواضيع الموجودة في موسوعة الحاسوب، بل حاول البدء بالأساسية حيث يجب عليك أن تركز على فهم المفاهيم الأساسية لـ HTML (هيكل الصفحة، العناصر، العلامات) وCSS (التنسيق، الألوان، الخطوط)، كما أنه أفضل طريقة لتعلم HTML وCSS هي من خلال العمل على مشاريع عملية، لذا القيام بالمشاريع مع المدرب سيزيد من نسبة فهمك لهذه الأمور، و في نفس الوقت يمكنك استخدام موسوعة حاسوب كمرجع عند الحاجة.، أي لا تحاول حفظ كل شيء. كما أن الدورة فيها جزء كبير يتحدث على الأساسيات و بالتالي ستستفيد منه كثيرا، لذا يمكنك البدء فيها الآن. بالتوفيق إن شاء الله.
  8. الكود يبدو صحيحا، تأكد من أن النموذج (Model) الخاص بك مكتوب بالأحرف الكبيرة كالتالي: Student وليس student، و في الـ Controller، تأكد من أنك تقوم باستيراد النموذج بشكل صحيح: use App\Models\Student; class StudentController extends Controller { public function index() { $students = Student::all(); return view('student.index', compact('students')); } } و في الأخير جرب مسح التخزين المؤقت للعرض: php artisan view:clear
  9. المشكلة بسبب متغير غير معرف في العرض (view). من الصور التي أرفقتها، الخطأ يأتي من ملف العرض student.blade.php حيث لا يتم تمرير متغير $student بشكل صحيح من الـ Controller إلى العرض. في الصورة الأولى، في ملف الـ Controller StudentController، لاحظت أنك قمت بتعريف المتغير $student كالتالي: $student = student::all(); لكن عندما تقوم بتمرير المتغير إلى العرض، يجب أن تستخدم الطريقة الصحيحة وهي: $students = Student::all(); return view('student.index', compact('students')); لاحظ أنني قمت بتغيير اسم المتغير من $student إلى $students ليعكس أن هناك مجموعة من الطلاب، ويجب تمريره بنفس الاسم إلى العرض. ثم في ملف العرض student.blade.php، يجب عليك استخدام المتغير $students بنفس الاسم كالتالي: @foreach ($students as $student) <tr> <td>{{ $student->name }}</td> </tr> @endforeach تأكد من أن الأسماء المستخدمة في العرض تتطابق مع الأسماء التي قمت بتمريرها من الـ Controller، حاول تعديل الكود وتحقق مما إذا كانت المشكلة قد حلت.
  10. مرحبا حمد، تحت كل فيديو من الدورة توجد يوجد مكان للأسئلة أرجوا أن تطرح مشكلتك هناك، بخصوص التي في الصورة، فهذه النسخة الخاصة بال macOS لذا لا يشترط أن يكون الأمر نفسه في الوينداوز، يمكنك فقط التثبيت و الإستمرار في الفيديو.
  11. خاصية الإستشارة عن طريق الإتصال بالفيديو غير متوفرة حاليا و لكن في حالة أردت اي معلومة أو إستشارة يمكنك أن تطرحها كسؤال هنا و سيتكفل المدربين بمساعدتك.
  12. مرحبا بدر، نعم في حالة شرائك للدورة سيمكنك في أي فترة مشاهدتها و في حالة لم تفهم أي جزء من أي فيديو في الدورة يمكنك أن تطرح مشكلتك أسفل الفيديو و سيتكفل المدربون بمساعدتك في الأمر، أما من ناحية الجروبات فهي غير متوفرة حالية فأغلب النقاشات تكون ظاهرة لكل المشتركين في الدورة أسفل الفيديوهات و بالتالي يستفيد كل المتدربين من المشاكل التي يصادفها كل شخص.
  13. يجب أن نفهم أن الكابتشا موجودة لحماية المواقع من الروبوتات والهجمات الإلكترونية، و استخدام الطرق لتجاوز هذه الأنظمة يعد انتهاكا لشروط استخدام معظم المواقع، وقد يكون غير قانوني، حتى أن تجاوزها يعتبر صعب و يتطلب مهارة برمجية عالية من قراءة لمحتوى الصفحة و إستخراج الكابتشا منه و من ثم القيام بالعمليات اللازمة و تسجيل النتيجة، كما أن أغلب المواقع تكون مزودة بحماية من مثل هذه السكريبتات لذا الأمر شبه مستحيل.
  14. دائما هذه القيم تعتمد على المبرمج بحد ذاته و مدى فعاليته، و مثل ما نعرف أن أقل مشروع في موقع مستقل ب 25 دولار، بمسار لغة البيثون يمكنك العمل على العديد من المشاريع، يمكنك حتى أن تكمل مشروعين في الأسبوع و هو معدل جيد كبداية و مع مرور الوقت ستصبح قادر على العمل على مشاريع أكبر و بالتالي سيزيد دخلك بشكل أفضل، لذا حاول عدم التركيز على الدخل بقدر ما تركز على المشاريع المنجزة، لأنه هو السبيل الذي سيزيد من خبرتك و دخلك أيضا.
  15. أسهل طريقة هي إستعمال Office 365 online، و هذه هي أسهل طريقة للحصول على نسخة مجانية من أوفيس. كل ما تحتاجه هو حساب مايكروسوفت، اذهب إلى موقع Office.com، سجل الدخول باستخدام حساب مايكروسوفت الخاص بك (أو أنشئ حساباً جديداً إذا لم يكن لديك واحد)، و بمجرد تسجيل الدخول، سترى قائمة بتطبيقات أوفيس المتاحة. انقر فوق التطبيق الذي تريد استخدامه (مثل Word أو Excel)، سيفتح التطبيق في متصفح الويب الخاص بك ويمكنك البدء في استخدامه على الفور. هذه النسخة من أوفيس عبر الإنترنت وتتطلب اتصالا بالإنترنت للعمل.
  16. SVM مبنية على فكرة إيجاد مستوي hyperplane والذي يقوم بتقسيم البيانات الى عدة اجزاء منفصلة بحيث يمثل كل جزء منهم class او تصنيف معين من البيانات.وتعتبر أقرب نقطتين للمستوي الفائق الذي تقوم برسمه ال SVM هي المتجهات الداعمة او support vector كما هو موضح في الصورة التالية: بالنسبة لمميزات SVM، فهي فعالة في البيانات عالية الأبعاد و تعمل بشكل جيد مع البيانات التي تحتوي على العديد من الميزات، و أيضا فعالة في البيانات التي يكون فيها عدد العينات أقل من عدد الميزات. و تستخدم عادة في تصنيف النصوص كتصنيف البريد الإلكتروني العشوائي، وتحليل المشاعر، أو التعرف على الصور كالتعرف على الوجوه، وتصنيف الصور.
  17. نعم يمكنك ذلك فأغلب الدورات هنا يكون القسم الأول منها عبارة عن تعليم الأساسيات للغة البرمجة التي سيتم إستعمالها و بالتالي لن تجد مشكلة في هذا، بالنسبة للعمل من الأيباد نعم يمكنك ذلك كبداية فقط و ستعتمد بشكل أكثر على google colab و لكن هناك بعض الأدوات أو البرامج التي تتطلب حاسوبا للتنفيذ العملي، لذا يفضل امتلاك حاسوب للاستفادة الكاملة من جميع الدروس. في الأخير بإمكانك العثور على فرص عمل في مجال الذكاء الاصطناعي والعمل عن بعد بعد اكتساب المهارات اللازمة، و بالتأكيد سيتكفل فريق من الأكاديمية بمرافقتك في هذا الأمر، فهناك طلب متزايد على خبراء الذكاء الاصطناعي والمحللين، ويمكنك العمل في مجالات متعددة مثل تحليل البيانات، تطوير النماذج، والتعلم الآلي.
  18. هناك العديد من البرامج التي يمكنك استخدامها أشهرها برنامج Recuva هو برنامج مجاني وسهل الاستخدام، يمكنه استعادة الملفات المحذوفة من أجهزة USB، وأيضًا من الحواسيب والأجهزة الأخرى و متاح لنظام التشغيل ويندوز. و أيضا برنامج EaseUS Data Recovery Wizard برنامج قوي لاستعادة البيانات، يدعم استعادة الملفات من مجموعة واسعة من الأجهزة، بما في ذلك أجهزة USB، و يوفر نسخة مجانية بحد معين من الاستعادة ونسخة مدفوعة بمزايا كاملة، و متاح لنظامي التشغيل ويندوز وماك. قبل استخدام أي من هذه البرامج، يفضل تجنب الكتابة أو إجراء تغييرات على جهاز USB لتجنب الكتابة فوق البيانات المحذوفة التي ترغب في استعادتها.
  19. سبب المشكلة هو فشل التحقق من عدم وجود قيمة فارغة في حقل name في جدول Category1 عند إضافة كتاب جديد، وكذلك مشكلة تكرار الفئة عند تحديث الصفحة، يمكنك إجراء التعديلات التالية: تأكد من إضافة الفئة فقط عند وجود قيمة مدخلة، و في الكود الخاص بـ views.py، تأكد من أنك تتحقق من وجود قيمة في الحقل المدخل للفئة قبل محاولة حفظها في قاعدة البيانات. يمكنك تعديل الكود في الدالة index ليكون كالتالي: def index(request): if request.method == "POST": add = BookForm(request.POST, request.FILES) if add.is_valid(): add.save() addcate = request.POST.get("cate") if addcate: # تحقق من أن هناك قيمة مدخلة قبل إضافة الفئة addca = Category1(name=addcate) addca.save() context = { 'book': Book.objects.all(), 'cate': Category1.objects.all(), 'form': BookForm(), 'form1': CategoryForm(), } return render(request, "pages/conten.html", context) و تأكد من أن تعريف النموذج في forms.py لفئة CategoryForm يستخدم ModelForm بدلاً من forms.Form. التعديل كالتالي: from django import forms from .models import Book, Category1 class CategoryForm(forms.ModelForm): class Meta: model = Category1 fields = '__all__' widgets = { 'name': forms.TextInput(attrs={'class': 'form-control'}), } class BookForm(forms.ModelForm): class Meta: model = Book fields = '__all__' widgets = { 'titile': forms.TextInput(attrs={'class': 'form-control'}), 'author': forms.TextInput(attrs={'class': 'form-control'}), 'photo_book': forms.FileInput(attrs={'class': 'form-control'}), 'photo_author': forms.FileInput(attrs={'class': 'form-control'}), 'pages': forms.NumberInput(attrs={'class': 'form-control'}), 'price': forms.NumberInput(attrs={'class': 'form-control'}), 'ratelday': forms.NumberInput(attrs={'class': 'form-control'}), 'rateltime': forms.NumberInput(attrs={'class': 'form-control'}), 'statue': forms.Select(attrs={'class': 'form-control'}), 'categry': forms.Select(attrs={'class': 'form-control'}), # تعديل اسم الحقل هنا } و أيضا تأكد من أنك تستخدم الاسم الصحيح للحقل categry في BookForm. لاحظ أن هناك مسافة إضافية في تعريف الحقل في كودك الأصلي. قم بتعديل الحقل ليكون كالتالي: 'categry': forms.Select(attrs={'class': 'form-control'}), بهذه الطريقة تكون قد قمت بإجراء التعديلات الضرورية لحل مشكلة عدم وجود قيمة في الحقل name في جدول Category1 عند إضافة كتاب جديد، وأيضًا قمت بحل مشكلة تكرار الفئة عند تحديث الصفحة.
  20. المشكلة هي أن قيمة المعلمة algorithm في دالة KMeans يجب أن تكون إما 'lloyd' أو 'elkan'. لكن في الكود الخاص بك تم تعيينها إلى 'auto'، ، لحل هذه المشكلة يجب تعديل الكود لتغيير قيمة المعلمة algorithm إلى 'lloyd' أو 'elkan'. بالنسبة للفرق بينهما خوارزمية ليويد (Lloyd's algorithm) تعتبر الطريقة الكلاسيكية والأساسية لتنفيذ خوارزمية K-Means، وتعرف أيضا بـ "Forgy's algorithm". و تعتمد على تحديث المراكز من خلال تعيين كل نقطة إلى أقرب مركز، ومن ثم تحديث مراكز الكتل بناء على متوسط النقاط المخصصة لكل مركز. عادة ما تكون أسرع في الحالات التي تكون فيها الأبعاد قليلة. بالنسبة لخوارزمية إلكان (Elkan's algorithm) تعتبر تحسينا لخوارزمية ليويد الكلاسيكية، وتستخدم حدودا ثلاثية لتقليل عدد الحسابات المطلوبة عند تعيين النقاط إلى المراكز، يمكن أن تكون أسرع في الحالات التي تحتوي على عدد كبير من الأبعاد أو عدد كبير من المجموعات. استخدام أي من الخوارزميتين يعتمد على طبيعة البيانات والأداء المطلوب. في معظم الحالات، خوارزمية ليويد تكون كافية وتعمل بكفاءة. إذا كانت البيانات تحتوي على عدد كبير من الأبعاد أو كانت هناك حاجة لتحسين الأداء، يمكن تجربة خوارزمية إلكان.
  21. الخطأ الذي تواجهه ناتج عن وجود عنصر <a> داخل عنصر آخر <a>. في الكود لديك، يتم استخدام NavLink كعنصر أب ويحتوي داخله على عنصر <Dropdown> والذي يحتوي بدوره على عنصر <Link>. هذا ما يسبب الخطأ لأن NavLink يستخدم عنصر <a> في هيكله الداخلي. لحل هذه المشكلة، يمكنك تعديل هيكل الكود بحيث لا يحتوي NavLink على عناصر <a> أخرى بداخله. يمكن فعل ذلك عن طريق وضع محتوى الـ Dropdown خارج الـ NavLink، ثم استخدام أسلوب آخر لعرض القائمة المنسدلة. على سبيل المثال: import React, { useState } from "react"; import "./header.css"; import { Link, NavLink } from "react-router-dom"; import { CiMenuBurger } from "react-icons/ci"; import { RiCloseFill } from "react-icons/ri"; import logo from "../../images/logo.png"; import { useSelector } from "react-redux"; import { BsThreeDotsVertical } from "react-icons/bs"; import Dropdown from "./Dropdown"; function Header() { const [click, setClick] = useState(false); const [dropdown, setDropdown] = useState(false); const { user } = useSelector((state) => state.auth); const handleClick = () => setClick(!click); return ( <> <nav className="navbar"> <div className="nav-container"> <Link to="/" className="nav-logo"> <div className="logo"> <img src={logo} alt="logo" /> </div> <span className="logo-icon">Bookly</span> </Link> <ul className={click ? "nav-menu active" : "nav-menu"}> {user ? ( <> <li className="nav-item"> <NavLink to="/" className={({ isActive }) => isActive ? "active" : "nav-links" } onClick={handleClick} > Home </NavLink> </li> {user.isAdmin && ( <li className="nav-item"> <NavLink to="/admin" className={({ isActive }) => isActive ? "active" : "nav-links" } onClick={handleClick} > Dashboard </NavLink> </li> )} <li className="nav-item"> <span className="nav-links nav-dropdown" onClick={() => setDropdown(!dropdown)} > {user.name} <BsThreeDotsVertical /> </span> {dropdown && <Dropdown />} </li> </> ) : ( <> <li className="nav-item"> <NavLink to="/" className={({ isActive }) => isActive ? "active" : "nav-links" } onClick={handleClick} > Home </NavLink> </li> <li className="nav-item"> <NavLink to="/login" className={({ isActive }) => isActive ? "active" : "nav-links" } onClick={handleClick} > Login </NavLink> </li> </> )} </ul> <div className="nav-icon" onClick={handleClick}> {click ? ( <span className="icon"> <RiCloseFill /> </span> ) : ( <span className="icon"> <CiMenuBurger /> </span> )} </div> </div> </nav> </> ); } export default Header; وفي مكون Dropdown، تأكد من أن الروابط لا تستخدم عناصر <a> داخل عناصر أخرى من نفس النوع: import React from 'react' import { useDispatch } from 'react-redux' import { logoutUser } from '../../redux/apiCalls/authApiCalls' import { Link } from 'react-router-dom' function Dropdown() { const dispatch = useDispatch() const logout = () => { dispatch(logoutUser()) } return ( <div className='dropdown'> <ul className="dropdown-menu"> <li className="dropdown-item" onClick={logout}> Logout </li> <li className="dropdown-item"> <Link className='dropdown-item-link' to='/favorites'> My Favorites </Link> </li> </ul> </div> ) } export default Dropdown بهذه الطريقة، تتجنب وجود عنصر <a> داخل عنصر آخر، مما يحل الخطأ الذي يظهر لك
  22. نعم أبرزها نوع التعلم حيث أن التصنيف (Classification) هو نوع من التعلم المراقب (Supervised Learning) حيث يتم استخدام مجموعة بيانات تحتوي على ملصقات (Labels) معروفة لتدريب النموذج. الهدف هو تصنيف البيانات الجديدة بناء على هذه الملصقات، بينما التجميع (Clustering) هو نوع من التعلم غير المراقب (Unsupervised Learning) حيث لا توجد ملصقات معروفة. الهدف هو تجميع البيانات إلى مجموعات (Clusters) بناء على التشابه بين العناصر دون معرفة مسبقة بالتصنيفات. كما أن طريقة التقييم تختلف ففي التصنيف يتم تقييم أداء النموذج بناءً على دقة التنبؤات مقارنة بالملصقات الحقيقية، باستخدام مقاييس مثل الدقة (Accuracy) والاحساس (Recall) والدقة الإيجابية (Precision)، بينما في التجميع يتم تقييم الأداء بناءً على جودة التجميع، باستخدام مقاييس مثل معامل ديفيس-بولدين (Davies-Bouldin index) أو معامل الشبه (Silhouette score).
  23. كل عام و أنت بخير علي، نعم يمكنك استخدام تعلم الآلة والتعلم العميق في مجال كرة القدم وهناك العديد من الاستخدامات المثيرة للاهتمام في هذا المجال، فيمكن استخدام تعلم الآلة لتحليل أداء اللاعبين والفرق من خلال دراسة البيانات الإحصائية للمباريات، كما يمكن تحليل الحركات، التمريرات، التسديدات، ومواقف الدفاع والهجوم لتقديم تقارير مفصلة تساعد المدربين في تحسين الأداء، و يمكن استخدام الذكاء الاصطناعي لتحسين تجربة المشجعين من خلال توفير تحليلات لحظية خلال المباريات، وإنشاء محتوى مخصص، والإجابة على استفسارات الجمهور عبر تطبيقات الدردشة الآلية. كل هذا و غيرها من الإستخدامات التي يمكن أن نطبقها في هذا المجال.
  24. منصة Google Scholar ليس مخصصا فقط لأبحاث مجال الذكاء الاصطناعي، بل هو محرك بحث أكاديمي شامل يمكن من خلاله العثور على أبحاث ودراسات في جميع المجالات العلمية، حيث يمكنك البحث عن أحدث الأبحاث والدراسات في مجال الذكاء الاصطناعي، وهذا سيساعدك على الاطلاع على التطورات الجديدة في هذا المجال وفهم النظريات والخوارزميات الجديدة، كما أن في كثير من الأحيان، يقوم الباحثون بنشر الأكواد المصدرية لمشاريعهم البحثية. يمكنك العثور على هذه الأكواد واستخدامها كأمثلة أو نقطة انطلاق لمشاريعك الخاصة. و إذا كنت تعمل على بحث أكاديمي أو مشروع يحتاج إلى توثيق، يمكنك استخدام Google Scholar للعثور على المراجع المناسبة والاستشهادات الأكاديمية، يعني هو عبارة عن أداة قوية تساعدك على البقاء على اطلاع دائم بآخر المستجدات في جميع المجالات التقنية وتطبيقها في عملك البرمجي.
  25. أكيد هناك مقاييس أخرى يمكن استخدامها لتقييم النموذج بشكل أفضل حسب السياق والهدف من النموذج: متوسط الخطأ المطلق (Mean Absolute Error - MAE): يقيس هذا المقياس متوسط قيمة الفروق المطلقة بين القيم المتوقعة والقيم الفعلية. يعتبر MAE أقل تأثرا بالقيم الشاذة مقارنة بـ MSE. جذر متوسط مربع الأخطاء (Root Mean Squared Error - RMSE): هو الجذر التربيعي لمتوسط مربع الأخطاء، وهو يعطي نفس وحدة القياس للبيانات الأصلية. متوسط النسبة المئوية للخطأ المطلق (Mean Absolute Percentage Error - MAPE): يقيس هذا المقياس نسبة الخطأ المطلق إلى القيم الفعلية، ويعبر عنه كنسبة مئوية. معامل التحديد (Coefficient of Determination - R²): يقيس مدى تناسب النموذج مع البيانات. تتراوح قيمته بين 0 و 1، حيث تشير القيمة الأقرب إلى 1 إلى نموذج أفضل. لتحديد أي مقياس هو الأفضل للاستخدام، يعتمد ذلك على طبيعة البيانات والهدف من النموذج، حيث إذا كنت تحتاج إلى مقياس يتعامل بشكل جيد مع القيم الشاذة، يمكن أن يكون MAE أو MAPE أفضل من MSE، بينما إذا كان لديك اهتمام بالوحدات الأصلية للبيانات، فإن RMSE يمكن أن يكون أكثر ملائمة، أما إذا كنت تبحث عن فهم نسبة التباين المفسر بواسطة النموذج، فإن R² سيكون الخيار الأنسب. و يمكنك أن تطلع أكثر على الموضوع من خلال هذه الأسئلة:
×
×
  • أضف...