فراغ residuals لا يثبت بواقي فعلية صفرية؛ مثالنا يخالف ذلك. [1]
الفراغ ليس قياسًا للخطأ
فراغ residuals لا يثبت بواقي فعلية صفرية؛ مثالنا يخالف ذلك. [1]
مخرج residuals يجمع مربعات البواقي؛ لا يسرد مركبات المتجه b−A@x. لفراغه شرط مستقل. [1]
لن نستخدم الفراغ بوصفه رقمًا يساوي الصفر. سنعرض مدخلًا واحدًا يجعل الفراغ والخطأ غير الصفري ظاهرين معًا، ثم نغير المدخل في تحكمات معلنة.
شرط الإرجاع ومثال غير ملائم
يفرغ residuals إذا رتبة A<N أو M≤N؛ M للصفوف وN للأعمدة. [1]
في A وb أدناه، على NumPy 2.3.5، نجد x=[3,0] والرتبة 1 وresiduals=[]؛ لكن b−A@x=[0,2,−1] ومجموع مربعاته 5.
import numpy as np A=np.array([[1,0],[0,0],[0,0]],dtype=np.float64) b=np.array([3,2,-1],dtype=np.float64) x,residuals,rank,s=np.linalg.lstsq(A,b,rcond=None) r=b-A@x print(x,residuals,rank) print(r,r@r)
في هذا المدخل، لأي x=(u,v)، تكون الصورة A@x=(u,0,0). مجموع مربعات الفرق هو (3−u)²+2²+(−1)²=(3−u)²+5. أصغر قيمة 5 عند u=3؛ لا يمكن تغيير المركبتين الثانية والثالثة بالصورة. لا يغير v الصورة؛ اختيار v=0 يقلل طول الحل بين المتعادلات.
عند تعدد حلول أقل خطأ، يختار lstsq أقصرها إقليديًا. [1]
هذه قراءة لأعداد مثالنا، مع حل مستقل بكسور دقيقة في الفحص. ليست حجة بأن كل مصفوفة ناقصة الرتبة تعطي خطأ غير صفري.
عنصر صفري أم مصفوفة فارغة؟
بمدخل كامل الرتبة F أدناه يعود residuals=[1]؛ ومع طرف أيمن ملائم تمامًا يعود [0]، وهو مختلف عن [].
F=np.array([[1,0],[0,1],[0,0]],dtype=np.float64) np.linalg.lstsq(F,b,rcond=None) fit=np.array([3,2,0],dtype=np.float64) np.linalg.lstsq(F,fit,rcond=None)
مع b الأصلي، يطابق الحل [3,2] أول مركبتين، ويبقى المتجه [0,0,−1]، ومجموع مربعاته 1. ومع fit تكون الصورة [3,2,0] والباقي [0,0,0]. في الحالتين شكل residuals هو (1,)؛ قيمة العنصر 1 ثم 0.
إذا أبقينا A ناقصة الرتبة وبدلنا b إلى [3,0,0]، يصبح الباقي الفعلي صفريًا، لكن residuals يبقى فارغًا بشكل (0,). إذن المثال الرئيسي وهذا التحكم يتفقان في الفراغ ويختلفان في الخطأ.

راجع المدخل والحل معًا
تحكم: المدخل ناقص الرتبة الملائم تمامًا، والمدخل المستطيل U أدناه، يعطيان [] مع باقي فعلي صفري؛ نراجع الباقي المحسوب لا الفراغ وحده.
U=np.array([[1,0,0],[0,1,0]],dtype=np.float64) c=np.array([3,2],dtype=np.float64) np.linalg.lstsq(U,c,rcond=None)
في U ذات الحجم 2×3، الرتبة 2 والصورة [3,2] والباقي صفر؛ residuals فارغ لأن M≤N. [1]
نحسب r=b−A@x للمدخل الموافق، ثم r@r. الضرب @ هنا ضرب مصفوفة بمتجه. [2]
استخدمنا مصفوفات float64 صغيرة وطرفًا أيمن أحادي البعد، وrcond=None على NumPy 2.3.5 وCPython 3.12.14. لم نفحص بيانات كبيرة أو قيمًا مركبة أو حدودًا عامة للدقة العددية. بقيت المدخلات كما هي في فحوص المثال والتحكمات.
| المدخل | الرتبة | residuals | مجموع مربعات الباقي الفعلي |
|---|---|---|---|
| A وb | 1 | [] | 5 |
| F وb | 2 | [1] | 1 |
| F وfit | 2 | [0] | 0 |
| A و[3,0,0] | 1 | [] | 0 |
| U وc | 2 | [] | 0 |
للتوسع: انحدار Ridge.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
