أساس الـ Machine Learning
الـ linear regression (الانحدار الخطي) هو أبسط models الـ Machine Learning (التعلم الآلي) وأكترهم استخدامًا. بيلاقي أحسن خط مستقيم يناسب نقط البيانات — تدّيله مجموعة inputs، يتنبأ بـ output مستمر. ومع إنه بسيط، الأفكار الأساسية اللي هتتعلّمها هنا — الـ cost functions (دوال التكلفة)، والـ gradient descent (النزول التدرجي)، والـ optimization — بتنطبق على طول على الـ neural networks اللي فيها ملايين الـ parameters.
لو فهمت الـ linear regression كويس، تبقى فهمت المحرك اللي بيسوق كل الـ supervised learning.
الـ linear model
في الأساس، الـ linear regression خط مستقيم: تدّيله input x، يتنبأ بـ output ŷ. والـ model ليه parameterين بيتعلّمهم — weight (وزن) (الميل، بيتحكم x بيأثّر على الـ prediction قد إيه) وbias (انحياز) (نقطة التقاطع مع محور y، يعني الـ prediction لما x يبقى صفر).
الـ multiple linear regression
نادرًا ما المسائل الحقيقية بتعتمد على input واحد. أسعار البيوت بتعتمد على المساحة وعدد أوض النوم والمكان والعمر وغيرهم. الـ multiple linear regression (الانحدار الخطي المتعدد) بيوسّع الـ model عشان يتعامل مع أي عدد من الـ features (الميزات) — كل feature ليها الـ weight بتاعها، والـ model بيتعلّم كل feature مهمة قد إيه.
بكتابة الـ matrices، الـ multiple regression بيبقى ŷ = Xw، وX هي matrix البيانات وw هو vector الـ weights. الشكل المختصر ده بيخلّي التنفيذ سريع، وهو الطريقة اللي libraries زي NumPy بتحسبه بيها فعلًا.
الـ cost function: متوسط مربع الخطأ
نعرف إزاي إن الخط بتاعنا كويس؟ محتاجين طريقة نقيس بيها الـ predictions بتاعتنا غلط قد إيه. أشهر مقياس هو متوسط مربع الخطأ (MSE) — بياخد متوسط مربعات الفروق بين القيم المتوقعة والقيم الحقيقية.
ليه التربيع؟ بيخلّي كل الأخطاء موجبة (مفيش إلغاء بين التوقع الزيادة والناقص)، وينفع نفاضله (ودي لازمة للـ optimization)، وبيعاقب الأخطاء الكبيرة أكتر من الصغيرة.
سطح الـ loss
لو رسمت الـ MSE كـ function في قيم الـ weights، هيطلعلك سطح شكله طاسة (رياضيًا، paraboloid محدّب). قاع الطاسة هو مجموعة الـ weights اللي بتقلّل الغلط — الحل الأمثل. وفي الـ linear regression، الطاسة دي ليها global minimum واحد بس. مفيش local minima تحبسك، ولا saddle points — بس نزول ناعم ونضيف لأحسن إجابة.
نلاقي أحسن weights: الـ gradient descent
الـ gradient descent هو المحرك الأساسي للـ optimization في الـ Machine Learning. تخيّل إنك واقف على جنب الطاسة دي وسط ضباب. مش شايف القاع، بس حاسس بالاتجاه اللي نازل. خد خطوة في الاتجاه ده. حس بالميل تاني. خد خطوة تاني. وعيد لحد ما توصل للقاع.
الـ learning rate (معدل التعلم) α بيتحكم في حجم الخطوة. لو كبير أوي هتعدّي الـ minimum، وتفضل تتهز رايح جاي أو حتى تبعد خالص. ولو صغير أوي التدريب هيفضل للأبد، بيزحف ناحية الحل ببطء شديد. وإنك تلاقي الـ learning rate المناسب من أهم المهارات العملية في الـ Machine Learning.
الـ normal equation: حل مباشر
في الـ linear regression بالذات، فيه طريق مختصر. بدل ما نكرّر، نقدر نحسب الـ weights المثلى بالظبط في خطوة واحدة بالتفاضل — نخلّي الـ gradient يساوي صفر ونحل.
استخدم الـ normal equation (المعادلة العادية) لما يبقى عندك أقل من ~10,000 feature — دقيقة ومش محتاجة تظبط hyperparameters. واستخدم الـ gradient descent مع مجموعات الـ features الأكبر — عكس الـ matrix تعقيده O(n³)، وده مكلّف جدًا للبيانات اللي أبعادها كتير.
الـ feature scaling
لما الـ features تبقى على مقاييس مختلفة خالص — زي المساحة (0–5,000) وعدد أوض النوم (0–10) — سطح الـ loss بيبقى ellipse ممطوط بدل طاسة مدوّرة. والـ gradient descent بيفضل يتعرّج من غير فايدة على طول الاتجاه الضيق.
والحل بسيط: نعمل normalization للـ features لنطاقات قريبة من بعض. أشهر الطرق الـ min-max scaling (تحويل لـ [0,1]) والـ standardization (نطرح المتوسط، ونقسم على الـ standard deviation). وبعد الـ scaling (تحجيم الميزات)، الـ gradient descent بيتقارب أسرع بشكل واضح — غالبًا بعدد iterations أقل 20 مرة.
الـ polynomial regression
طب لو العلاقة مش خطية؟ الخط المستقيم مش هيقدر يمسك pattern على شكل U أو pattern أُسّي. الحيلة: اعمل polynomial features — زوّد x²، x³، إلخ. — وطبّق الـ linear regression على مجموعة الـ features الأوسع.
بس خد بالك: الـ polynomials اللي درجتها عالية بتناسب بيانات التدريب بالظبط بس بتعمّم وحش على البيانات الجديدة. ده الـ overfitting (الإفراط في التخصيص) — وده بيمهّد للموضوع الجاي: الـ regularization، اللي بيتحكم في تعقيد الـ model عشان يمنعه.
- الـ linear regression بيناسب خط (أو hyperplane) عن طريق إنه يقلّل متوسط مربع الخطأ — متوسط مربعات أخطاء الـ prediction.
- الـ gradient descent بيعدّل الـ weights مرة ورا مرة وهو ماشي في أشد اتجاه نازل على سطح الـ loss.
- الـ normal equation بتدّي الـ weights المثلى على طول — بس مبتكبرش مع مجموعات الـ features الكبيرة جدًا بسبب عكس الـ matrix اللي تعقيده O(n³).
- الـ feature scaling بيعمل normalization للـ inputs لنطاقات قريبة من بعض، وده بيسرّع تقارب الـ gradient descent بشكل واضح.
- الـ polynomial regression بيناسب منحنيات بإنه يزوّد polynomial features لنفس الإطار الخطي — بس خد بالك من الـ overfitting.