NumPy แก้ปัญหากำลังสองน้อยที่สุดสำหรับระบบที่บ่อนทำลายได้อย่างไร


14

สมมุติว่าเรามีรูปร่าง X (2, 5)
และรูปร่าง y (2,)

งานนี้: np.linalg.lstsq(X, y)

เราคาดหวังว่าสิ่งนี้จะทำงานได้ก็ต่อเมื่อ X มีรูปร่าง (N, 5) โดยที่ N> = 5 แต่ทำไมและอย่างไร

เราได้รับน้ำหนักกลับมา 5 เท่าตามที่คาดไว้ แต่วิธีนี้แก้ไขได้อย่างไร

มันไม่เหมือนเรามี 2 สมการและ 5 ไม่รู้จักใช่ไหม
วิธีแก้ปัญหาแบบนี้ได้ดีแค่ไหน?
มันต้องทำอะไรซักอย่างเพื่อการสร้างสมการประดิษฐ์ขึ้นมาอีก ..


3
ทำไมมันไม่ทำงาน ระบบบึกบึนมีโซลูชั่นมากมาย
Matthew Gunn

คุณอาจมีลิงก์ไปยังทฤษฎีที่เกี่ยวข้องหรือไม่ ..
George Pligoropoulos

เกี่ยวข้อง: stackoverflow.com/questions/46879411/…
Pinocchio

คำตอบ:


19

ความเข้าใจของฉันอยู่ที่numpy.linalg.lstsqอาศัยLAPACKประจำdgelsd

ปัญหาคือการแก้ปัญหา:

minimize(overx)Axb2

ของหลักสูตรนี้ไม่ได้มีที่ไม่ซ้ำกันโซลูชั่นสำหรับเมทริกซ์ที่มียศน้อยกว่าความยาวของเวกเตอร์{ข} ในกรณีของระบบที่ไม่ได้ระบุให้จัดเตรียมโซลูชันเช่นนั้น:bdgelsdz

  • Az=b
  • z2x2สำหรับทุกที่ตอบสนอง{ข} (ieเป็นวิธีแก้ปัญหาบรรทัดฐานขั้นต่ำสำหรับระบบที่ไม่ได้ระบุxAx=bz

ตัวอย่างเช่นถ้าระบบเป็น , numpy.linalg.lstsq จะกลับมา0.5x+y=1x=.5,y=.5

dgelsd ทำงานอย่างไร

รูทีนdgelsdคำนวณการแยกค่าเอกเทศ (SVD) ของ A

ฉันจะวาดภาพความคิดเบื้องหลังการใช้ SVD เพื่อแก้ปัญหาระบบเชิงเส้น การสลายตัวของค่าเอกพจน์คือการแยกตัวประกอบโดยที่และเป็นเมทริกซ์มุมฉากและเป็นเมทริกซ์แนวทแยงมุมUΣV=AUVΣ

ยศที่มีประสิทธิภาพของเมทริกซ์จะเป็นจำนวนค่าเอกพจน์ที่มีประสิทธิภาพไม่เป็นศูนย์ (เช่นมีความแตกต่างจากศูนย์ที่สัมพันธ์กับความแม่นยำของเครื่องจักร ฯลฯ ... ) ให้เป็นเมทริกซ์แนวทแยงของค่าเอกพจน์ที่ไม่เป็นศูนย์ SVD จึงเป็น:AS

A=U[S000]V

หลอกผกผันของจะได้รับโดย:A

A=V[S1000]U

พิจารณาแก้ปัญหา{ข} แล้ว:x=Ab

Axb=U[S000]VV[S1000]Ubb=U[I000]Ubb

โดยทั่วไปมีสองกรณีที่นี่:

  1. จำนวนไม่ใช่ศูนย์ค่าเอกพจน์ (เช่นขนาดของเมทริกซ์ ) น้อยกว่าความยาวของ{ข} ทางออกที่นี่จะไม่แน่นอน เราจะแก้ระบบเชิงเส้นอย่างน้อยกำลังสองIb
  2. Axb=0

ส่วนสุดท้ายนี้ค่อนข้างยุ่งยาก ... จำเป็นต้องติดตามมิติของเมทริกซ์และใช้นั้นเป็นเมทริกซ์มุมฉากU

ความเท่าเทียมของหลอกผกผัน

เมื่อมีแถวที่เป็นเส้นตรงอิสระ (เช่นเรามีเมทริกซ์แบบไขมัน) ดังนั้น: A

A=A(AA)1

สำหรับระบบที่ไม่บึกบึนคุณสามารถแสดงให้เห็นว่าระบบหลอกหลอกจะให้วิธีแก้ปัญหาเชิงบรรทัดฐานขั้นต่ำแก่คุณ

เมื่อมีคอลัมน์อิสระเชิงเส้นตรง (เช่นเรามีเมทริกซ์ผอม) ดังนั้น: A

A=(AA)1A


dgelsd ใช้ SVD แต่ R lm ใช้ QR?
Haitao Du

@ hxd1011R lmใช้การแยกตัวประกอบแบบ QR ตามค่าเริ่มต้น แต่คุณสามารถระบุทางเลือกได้
Sycorax พูดว่า Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.