การแก้ระบบสมการเชิงเส้นโดยใช้เมทริกซ์และ Python
เมทริกซ์จะอยู่บนพื้นฐานของคณิตศาสตร์ทั้งหมดที่ใช้สำหรับ ML มาทำความเข้าใจว่าทำไมจึงเป็นเช่นนั้น และวิธีที่เมทริกซ์สามารถใช้เพื่อแก้ระบบสมการเชิงเส้นจากมุมมองของ 2 วิธีที่แตกต่างกัน
ระบบสมการเชิงเส้นใน ML
งานมาตรฐานที่วิธี ML แก้ไขโดยทั่วไปสามารถแสดงได้ดังนี้:
เราจัดการกับชุดคุณลักษณะ โดยมี "ตาราง" ที่มีค่าคุณลักษณะและค่าเป้าหมายรวมกัน เรามีค่าเป้าหมายที่กำหนดไว้สำหรับชุดย่อยของข้อมูลที่เราสามารถใช้เพื่อเรียนรู้ หลังจากการเรียนรู้เสร็จสิ้น เราก็สามารถนำสิ่งที่เราค้นพบไปใช้เพื่อให้ได้ผลลัพธ์สำหรับชุดข้อมูลที่ไม่ทราบค่าเป้าหมาย:
ดังที่เราจำได้จากคณิตศาสตร์ ฟังก์ชันเส้นสามารถแสดงเป็น:
นี่คือตัวอย่างมิติเดียว และสำหรับ 2 มิติขึ้นไป:
ตอนนี้หากเราถือว่า x1
, x2
และอื่นๆ ของเราเป็นคุณลักษณะของเราและ f
เป็นค่าเป้าหมาย เราสามารถเขียนชุดข้อมูลการเรียนรู้เริ่มต้นของเราใหม่ให้อยู่ในรูปของสมการเชิงเส้น:
และตอนนี้ โดยพื้นฐานแล้ว เราแค่ต้องเขียนมันเป็นระบบสมการเชิงเส้น แล้วแก้มัน:
หลังจากแก้ไขแล้ว เราจะได้ค่าเฉพาะ a1
, a2
… (หรือที่เรียกว่าน้ำหนัก) ซึ่งเราจะใช้ในฟังก์ชันเชิงเส้นของเราเพื่อค้นหาค่าเป้าหมายที่ไม่รู้จัก (f
) ที่มีค่าคุณลักษณะที่ทราบ (x
) และฟังก์ชันสุดท้ายที่มีน้ำหนักจากการคำนวณคือสิ่งที่เรียกว่า โมเดล ML
บันทึกสดจริง
ดังที่คุณอาจสังเกตเห็นแล้วว่านี่ฟังดูง่ายเกินไปที่จะเป็นส่วนหนึ่งของอุตสาหกรรม ML ที่ทรงพลัง อันที่จริง นี่เป็นกรณีในอุดมคติ ในชีวิตจริง คุณไม่มีทางมีข้อมูลเพียงพอที่จะสร้างแบบจำลองในอุดมคติได้ นั่นคือเหตุผลว่าทำไมคุณถึงได้โซลูชันที่ไม่มีที่สิ้นสุดหรือไม่มีโซลูชันเลยโดยใช้แนวทางนี้ ในทางปฏิบัติ สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือหาวิธีแก้ปัญหาที่ใกล้เคียงกับวิธีแก้ปัญหาในอุดมคติ แต่ในทางปฏิบัติ ในกรณีส่วนใหญ่สิ่งนี้ก็เกินพอแล้ว
วิศวกร ML ยังคงจัดการกับระบบสมการเชิงเส้น แต่อยู่ในระดับที่แตกต่างกัน แทนที่จะแก้ฟังก์ชันค่าเป้าหมายโดยตรงของสมการคุณลักษณะ เราจะแก้สมการที่ช่วยเราลดสิ่งที่เรียกว่าข้อผิดพลาด (ระยะห่างระหว่างค่าเป้าหมายจริงกับค่าที่คำนวณตามน้ำหนักที่กำหนด) เช่น. ถ้าเราใช้ MSE ตามมาตรฐานแบบยุคลิด:
ฉันจะเขียนเพิ่มเติมเกี่ยวกับการถดถอยเชิงเส้นและการปรับฟังก์ชันข้อผิดพลาดให้เหมาะสมในภายหลัง และสำหรับตอนนี้ เรามาลืมเรื่องนี้เสียก่อน และกลับสู่ระบบสมการ และวิธีการใช้เมทริกซ์เพื่อแก้ปัญหาเหล่านั้น
รูปแบบเมทริกซ์ของระบบสมการเชิงเส้น
แล้วเมทริกซ์เกี่ยวข้องกับระบบสมการเชิงเส้นอย่างไร? สมมติว่าเรามีระบบสมการเชิงเส้นที่ต้องแก้ดังนี้:
ตอนนี้เรามาสร้างเมทริกซ์ของน้ำหนัก (ตัวเลขเหล่านั้นก่อน x1…3
ของเรา) และเวกเตอร์สองตัว — X
และค่าเป้าหมาย Y
:
ดังที่เราทราบ "เมทริกซ์สามารถคูณได้" นั่นคือสาเหตุที่การเขียนสิ่งต่อไปนี้ในรูปของเมทริกซ์ (เวกเตอร์) ก็เหมือนกับการเขียนระบบสมการเชิงเส้นเริ่มต้นของเรา:
เยี่ยมมาก ตอนนี้เรารู้แล้วว่าเมทริกซ์เหมาะสำหรับการเขียนน้อยลง แต่ไม่เพียงเท่านั้น เราสามารถใช้เมทริกซ์เพื่อหาคำตอบของสมการได้เช่นกัน
การหาคำตอบโดยใช้เมทริกซ์ผกผัน
พีชคณิตเชิงเส้นช่วยให้เราหาคำตอบในรูปแบบเมทริกซ์ได้อย่างง่ายดาย:
โดยที่ w
แปลกๆ ที่มี -1
นี้เรียกว่า เมทริกซ์ผกผัน สามารถพบได้ง่ายด้วย Python และ X
vector หลังจากคูณเมทริกซ์กลับด้านด้วย Y
:
ที่นี่เราพบ w_inv
โดยใช้วิธี np.linalg.inv
และเมทริกซ์ w_inv
คูณด้วย Y
(ซึ่งเป็นเวกเตอร์) เพื่อให้ได้ผลลัพธ์ X
เวกเตอร์ สคริปต์นี้ให้สิ่งต่อไปนี้แก่เรา:
[[1.] [2.] [3.]]
ซึ่งเป็นเวกเตอร์ X
ที่คำนวณได้:
วิธีการกำจัดแบบเกาส์เซียน
แม้ว่าวิธีการก่อนหน้านี้จะเป็นวิธีที่ดี แต่ก็เป็นเรื่องยากสำหรับคอมพิวเตอร์ เนื่องจากความซับซ้อนในการคำนวณเมทริกซ์แบบกลับด้านจะเพิ่มขึ้นอย่างมากตามจำนวนวัตถุและขนาดในเมทริกซ์
อีกวิธีหนึ่ง (ใช้โดยกลุ่มของวิธีการ) คือการแปลงเมทริกซ์ w
ให้อยู่ในรูปแบบที่การแก้สมการกลายเป็นเรื่องง่าย รูปแบบนี้เรียกว่ารูปแบบสามเหลี่ยมของเมทริกซ์ และวิธีการนั้นเรียกว่าการกำจัดแบบเกาส์เซียน (เพราะจริงๆ แล้วเรากำจัดองค์ประกอบบางอย่างของเมทริกซ์ออกไป)
กระบวนการแปลงหากทำหลายครั้งและอนุญาตให้ทำสิ่งต่อไปนี้:
- คูณแถวใด ๆ ด้วยตัวเลขใดก็ได้ (ยกเว้นศูนย์แน่นอน)
- เพิ่มแถวใด ๆ ลงในแถวอื่น ๆ
- สลับแถวใดก็ได้
อีกสิ่งหนึ่งที่วิธีเกาส์เซียนขอให้เราทำคือการผนวกเวกเตอร์ Y
ของเราเข้ากับเมทริกซ์ w
ของเราเพื่อให้ได้เมทริกซ์แบบขยาย:
ตอนนี้เรามาดูกันเพื่อให้ได้รูปแบบสามเหลี่ยมสุดท้าย ก่อนอื่น เรามาสลับแถวแรกและแถวสุดท้ายกัน:
ทีนี้ลองลบแถวแรกคูณด้วย 4 จากแถวที่สาม:
ต่อไปเราจะเพิ่มแถวแรกเข้าไปในแถวที่สอง:
ดี เราต้องทำสิ่งสุดท้ายเพื่อให้ได้รูปสามเหลี่ยม — รับ 0
โดยที่เรามี -6
เพื่อให้บรรลุเป้าหมายนี้ เราจะต้องคูณแถวที่สองด้วย 6/8
และเพิ่มลงในแถวที่สาม:
นี่คือรูปแบบสุดท้ายของเมทริกซ์ เนื่องจากเรามีศูนย์อยู่ใต้เส้นทแยงมุม (นี่คือรูปแบบสามเหลี่ยมที่เราค้นหา) อย่างที่เราจำได้ เมทริกซ์นี้แสดงถึงเวกเตอร์ w
สำหรับ X
และเวกเตอร์ Y
ทางด้านขวา ดังนั้นเราจึงสามารถเขียนระบบที่อัปเดตตามรูปแบบเมทริกซ์ใหม่:
นี่คือรูปแบบระบบเล็กๆ น้อยๆ ที่เราจะวนซ้ำจากสมการที่สามไปเป็นสมการแรกโดยใช้วิธีแก้ปัญหาการวนซ้ำที่ต่ำกว่าในการวนซ้ำบน:
ใน Python scipy
สามารถใช้เพื่อรับเมทริกซ์สามเหลี่ยมที่ปรับให้เหมาะสม:
โปรดทราบว่า scipy
จะส่งกลับเมทริกซ์ที่แตกต่างจากที่เราทำซ้ำ เนื่องจาก scipy
เลือกแถวอื่นเป็นแถวแรก (ใช้องค์ประกอบที่มีค่าแรกสูงสุด) แต่ถึงกระนั้น วิธีแก้ปัญหาของระบบโดยใช้เมทริกซ์นี้จะเหมือนกับที่เรามี เมทริกซ์ตัวเดียวอาจมีรูปแบบสามเหลี่ยมต่างกันได้
สรุป
เราสามารถเขียนระบบสมการเชิงเส้นใดๆ ในรูปแบบเมทริกซ์ได้ และจากนั้นเราสามารถใช้การแปลงเมทริกซ์เพื่อค้นหาคำตอบของระบบได้ เช่น การใช้เมทริกซ์ผกผัน: