สมมติว่าผมมีความหนาแน่นเมทริกซ์ของขนาดที่มีการสลายตัว SVDในฉันสามารถคำนวณ SVD ได้ดังนี้: .
R
svd(A)
หากมีการเพิ่ม -th ใหม่ลงในสามารถคำนวณการแยกย่อย SVD ใหม่ตามแบบเก่า (เช่นโดยใช้ , , และ ) โดยไม่ต้องคำนวณใหม่ SVD ตั้งแต่ต้น?
สมมติว่าผมมีความหนาแน่นเมทริกซ์ของขนาดที่มีการสลายตัว SVDในฉันสามารถคำนวณ SVD ได้ดังนี้: .
R
svd(A)
หากมีการเพิ่ม -th ใหม่ลงในสามารถคำนวณการแยกย่อย SVD ใหม่ตามแบบเก่า (เช่นโดยใช้ , , และ ) โดยไม่ต้องคำนวณใหม่ SVD ตั้งแต่ต้น?
คำตอบ:
ใช่หนึ่งสามารถอัปเดตการแยกย่อย SVD หลังจากเพิ่มหนึ่งแถวใหม่ไปยังเมทริกซ์ที่มีอยู่
โดยทั่วไปนี้ " เพิ่มหนึ่งเพื่อ " การกำหนดปัญหาที่รู้จักกันว่าการอัปเดตอันดับหนึ่ง ลิงก์ MathOverflow จัดทำโดย @amoeba ใน "การปรับปรุงอันดับสองที่มีประสิทธิภาพของการแยกค่า eigenvalue " เป็นขั้นตอนแรกที่ยอดเยี่ยมหากคุณต้องการเริ่มมองลึกลงไปในเรื่องนี้ บทความแรกให้คำตอบที่ชัดเจนสำหรับคำถามเฉพาะของคุณ เพียงเพื่อชี้แจงสิ่งที่อันดับหนึ่งและอันดับสองเฉลี่ยเพื่อให้คุณไม่ได้รับสับสนหากใหม่ของคุณ*เป็นเช่นที่:
โดยที่และvเป็นเวกเตอร์คุณต้องอ้างถึงสิ่งนี้ว่าเป็นการอัปเดตอันดับหนึ่ง (หรือการก่อกวน ) พื้นฐานของการอัปเดตนี้ถูกกำหนดโดยสูตร Sherman-Morrison . หากการก่อกวนนั้นมีมากกว่าหนึ่งอันดับนั่นก็คือ A ∗ = A - U V T
สูตรวูดมาลงเล่น หากคุณเห็นสูตรเหล่านี้คุณจะสังเกตเห็นว่ามีการผกผันเกี่ยวข้องมากมาย คุณไม่ได้แก้ปัญหาเหล่านี้โดยตรง ในขณะที่คุณได้แก้ไขระบบย่อยของพวกเขาแล้ว (เช่นคุณมีการคำนวณการย่อยสลายอยู่แล้ว) คุณใช้สิ่งเหล่านี้เพื่อให้ได้ประมาณการที่เร็วขึ้นและ / หรือมีเสถียรภาพมากขึ้น (นั่นเป็นเหตุผลที่ผู้คนยังคงค้นคว้าข้อมูลในสาขานี้) ฉันได้ใช้หนังสือ " สถิติการคำนวณ " โดย JE Gentle เป็นข้อมูลอ้างอิงเป็นจำนวนมาก ฉันคิดว่า Chapt 5 พีชคณิตเชิงเส้นเชิงตัวเลขจะตั้งค่าคุณอย่างเหมาะสม (The uber-classic: " พีชคณิตเมทริกซ์จากมุมมองของนักสถิติ " โดย Harville โชคไม่ดีที่ไม่ได้สัมผัสกับการอัปเดตอันดับเลย)
เมื่อพิจารณาถึงสถิติ / แอปพลิเคชั่นของสิ่งต่าง ๆ การอัปเดตอันดับหนึ่งเป็นเรื่องธรรมดาในระบบผู้แนะนำเพราะอาจมีลูกค้าหลายพันรายและทำการคำนวณ SVD ใหม่ (หรือการย่อยสลายที่กำหนดสำหรับเรื่องนั้น) ในแต่ละครั้งที่ผู้ใช้ใหม่หรือผลิตภัณฑ์ใหม่ การเพิ่มหรือลบออกค่อนข้างสิ้นเปลือง (หากไม่สามารถบรรลุได้) โดยปกติการฝึกอบรมระบบผู้แนะนำจะกระจัดกระจายและสิ่งนี้ทำให้อัลกอริทึมมีประสิทธิภาพมากขึ้น เอกสารฉบับแรกที่สามารถเข้าถึงได้คือ " การปรับปรุง SVD ออนไลน์อย่างรวดเร็วสำหรับระบบผู้แนะนำที่มีน้ำหนักเบา " ต้นฉบับโดย M. Brand ไปสู่การฝึกอบรมที่หนาแน่นฉันคิดว่าการดูเอกสารจากการจดจำรูปแบบและการประมวลผลการถ่ายภาพสามารถช่วยให้คุณใช้วิธีอัลกอริทึมที่แท้จริงได้ ตัวอย่างเช่นเอกสาร:
ทุกคนดูเหมือนจะแก้ปัญหาเดียวกันในแกนกลางของพวกเขา; คุณสมบัติใหม่ที่เข้ามาและเราจำเป็นต้องปรับปรุงการแสดงของเราตามไปอย่างรวดเร็ว ขอให้สังเกตว่าการฝึกอบรมเหล่านี้ไม่ได้เป็นสมมาตรหรือแม้กระทั่งสแควร์ งานอีกชิ้นของ M. Brand สามารถแก้ไขปัญหานี้ได้ (ดูบทความ " การปรับเปลี่ยนระดับต่ำอย่างรวดเร็วของการสลายตัวของค่าเอกพจน์บาง (2006) " - สิ่งนี้ยังกล่าวถึงในลิงก์ MO ที่ให้ไว้ในตอนต้นของโพสต์) เอกสารที่ดีจำนวนมากเกี่ยวกับเรื่องนี้ แต่ส่วนใหญ่มีแนวโน้มที่จะเป็นคณิตศาสตร์อย่างหนัก (เช่นกระดาษ Benaych-Georgesa และ Nadakuditi บน " ค่าเอกพจน์และเวกเตอร์ของการรบกวนต่ำอันดับของเมทริกซ์สุ่มรูปสี่เหลี่ยมผืนผ้าขนาดใหญ่ (2012)") และฉันไม่คิดว่าพวกเขาจะช่วยแก้ปัญหาในไม่ช้าฉันขอแนะนำให้คุณมุ่งเน้นไปที่วรรณกรรมการประมวลผลภาพ
น่าเสียดายที่ฉันยังไม่เจอการใช้งาน R สำหรับการอัพเดทอันดับหนึ่ง คำตอบเกี่ยวกับ " การใช้งาน SVD ที่อัพเดตได้ใน Python, C หรือ Fortran? " จาก Computational Science SE ให้การใช้งาน MATLAB และ C ++ เป็นจำนวนมากซึ่งคุณอาจต้องการพิจารณา โดยทั่วไปแล้วการใช้ R, Python และอื่น ๆ คือการวางล้อมรอบการปรับใช้ C, C ++ หรือ FORTRAN
rank 1 updates
ตรวจสอบวรรณกรรมของ การปรับปรุง SVD ออนไลน์อย่างรวดเร็วสำหรับระบบผู้แนะนำที่มีน้ำหนักเบาโดย Brand เป็นเอกสารฉบับแรกที่เข้าถึงได้ ฉันไม่เห็นบางสิ่งสำหรับ SVD ที่ใช้งานไปแล้วใน R อย่างน่าเสียดาย มีการอัปเดตของ Cholesky อยู่ (updown
จากMatrix
) ขอบคุณ CHOLMOD ความกระจ่างของเมทริกซ์ของคุณจะสร้างความแตกต่างให้กับโซลูชั่นสุดท้ายของคุณ คุณคิดว่าเป็นเมทริกซ์หนาแน่นหรือไม่?