วิธีคำนวณ SVD ของเมทริกซ์กระจัดกระจายขนาดใหญ่?


26

วิธีที่ดีที่สุดในการคำนวณการแยกย่อยค่าเอกเทศ (SVD) ของเมทริกซ์เชิงบวกที่มีขนาดใหญ่มาก (65M x 3.4M) คือที่ที่ข้อมูลกระจัดกระจายมาก?

เมทริกซ์น้อยกว่า 0.1% ไม่ใช่ศูนย์ ฉันต้องการวิธีที่:

  • จะพอดีกับหน่วยความจำ (ฉันรู้ว่ามีวิธีการออนไลน์อยู่)
  • จะถูกคำนวณในเวลาที่เหมาะสม: 3,4 วัน
  • จะแม่นยำ แต่ความแม่นยำไม่ใช่ประเด็นหลักของฉันและฉันต้องการที่จะควบคุมปริมาณทรัพยากรที่ฉันใส่เข้าไป

มันจะดีถ้ามี Haskell, Python, C # และไลบรารี่ที่ใช้มัน ฉันไม่ได้ใช้ mathlab หรือ R แต่ถ้าจำเป็นฉันสามารถไปกับ R ได้


3
คุณมีหน่วยความจำเท่าไหร่ 0.1% ของ 65M * 3.4M ยังคงเป็น 221e9 ค่าที่ไม่ใช่ศูนย์ หากคุณใช้ 4 ไบต์ต่อค่านั่นคือยังคงเกิน 55 gb โดยไม่มีค่าใช้จ่ายดังนั้นความกระจัดกระจายยังไม่สามารถแก้ปัญหาได้ ... คุณต้องโหลดทั้งชุดลงในหน่วยความจำทันทีหรือไม่?
Bitwise

ฉันควรจะแม่นยำมากขึ้น ไม่เกิน 250-500mb พร้อมเลขจำนวนเต็ม 32 บิต อาจจะน้อยกว่ามาก แต่ปัญหามิติคือปัญหาที่ฉันเข้าใจ ฉันมีเครื่อง 16GB
Sonia

แล้วเรื่องนี้ล่ะ quora.com/…
Bitwise

หน้าเว็บนี้เชื่อมโยงไปยังห้องสมุด Python ซึ่งใช้ "อัลกอริธึม SVD ขนาดใหญ่ที่เพิ่มหน่วยความจำต่ำและรวดเร็ว": en.wikipedia.org/wiki/Latent_semantic_analysis
Bitwise

ดูเพิ่มเติมstats.stackexchange.com/questions/2806
อะมีบาพูดว่า Reinstate Monica

คำตอบ:


21

ถ้ามันเหมาะกับหน่วยความจำให้สร้างเมทริกซ์แบบกระจายใน R โดยใช้แพ็คเกจเมทริกซ์แล้วลองirlbaสำหรับ SVD คุณสามารถระบุจำนวนเวกเตอร์เอกพจน์ที่คุณต้องการในผลลัพธ์ซึ่งเป็นอีกวิธีหนึ่งในการ จำกัด การคำนวณ

นั่นเป็นเมทริกซ์ที่ค่อนข้างใหญ่ แต่ฉันเคยได้ผลลัพธ์ที่ดีมากกับวิธีนี้ในอดีต irlbaสวยล้ำสมัย จะใช้ขั้นตอนวิธีการเริ่มต้นใหม่โดยปริยาย Lanczos สอง diagonalization

สามารถเคี้ยวผ่านชุดข้อมูลรางวัล netflix (480,189 แถวคูณ 17,770 คอลัมน์, 100,480,507 รายการที่ไม่ใช่ศูนย์) ในหน่วยมิลลิวินาที ชุดข้อมูลของคุณใหญ่กว่าชุดข้อมูล Netflix ~ 200,000 เท่าดังนั้นจึงใช้เวลานานกว่านั้นมาก อาจมีเหตุผลที่คาดว่าจะสามารถทำการคำนวณได้ในสองสามวัน


data matrix เหมาะสมกับหน่วยความจำ irlba จะจัดการกับการสลายตัวในหน่วยความจำได้อย่างมีประสิทธิภาพเช่นกัน
Sonia

@Sonia: irlba เป็นหน่วยความจำที่มีประสิทธิภาพมาก: มันคำนวณวิธีแก้ปัญหาโดยประมาณคุณสามารถ จำกัด จำนวนของเวกเตอร์เอกพจน์และมันถูกออกแบบมาเพื่อทำงานกับเมทริกซ์กระจัดกระจาย เท่าที่ฉันรู้มันเป็นเร็วเท่าที่คุณจะได้รับสำหรับการคำนวณ SVD บางส่วน
Zach

@Sonia: โชคดี!
Zach

ให้มันลองใช้กับหน่วยความจำ ... ฉันจะคำนวณรูปสามเหลี่ยมบล็อกก่อนเรียกใช้
Sonia

@Sonia คุณเก็บมันแบบเบาบางMatrixหรือไม่? ลอง จำกัด จำนวนค่าเอกฐานที่คุณคำนวณ ... อาจดูที่ 10 อันดับแรกใช่ไหม
Zach

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