ใช้ PCA กับเมทริกซ์เบาบางขนาดใหญ่มาก


16

ฉันกำลังทำงานจัดหมวดหมู่ข้อความด้วย R และฉันได้รับเมทริกซ์คำศัพท์เอกสารที่มีขนาด 22490 คูณ 120,000 (เฉพาะรายการที่ไม่เป็นศูนย์ 4 ล้านรายการน้อยกว่า 1%) ตอนนี้ฉันต้องการลดขนาดโดยใช้ PCA (การวิเคราะห์องค์ประกอบหลัก) น่าเสียดายที่ R ไม่สามารถจัดการเมทริกซ์ขนาดใหญ่นี้ได้ดังนั้นฉันจึงจัดเก็บเมทริกซ์แบบกระจัดกระจายในไฟล์ใน "รูปแบบตลาดเมทริกซ์" หวังว่าจะใช้เทคนิคอื่นเพื่อทำ PCA

ใครก็ตามสามารถให้คำแนะนำแก่ฉันเกี่ยวกับห้องสมุดที่มีประโยชน์ (ไม่ว่าจะเป็นภาษาการเขียนโปรแกรม) ซึ่งสามารถทำ PCA กับเมทริกซ์ขนาดใหญ่นี้ได้อย่างง่ายดายหรือทำ PCA แบบยาวด้วยตัวเองในคำอื่น ๆคำนวณเมทริกซ์ความแปรปรวนร่วม แล้วคำนวณเวกเตอร์ลักษณะเฉพาะสำหรับเมทริกซ์ความแปรปรวนร่วม

สิ่งที่ผมต้องการคือการคำนวณเครื่องคอมพิวเตอร์ทั้งหมด (120,000) และเลือกเฉพาะด้านบน N พีซีที่บัญชีสำหรับ 90% แปรปรวน เห็นได้ชัดว่าในกรณีนี้ฉันต้องให้ค่าเกณฑ์เบื้องต้นเพื่อตั้งค่าความแปรปรวนเล็ก ๆ ให้เป็น 0 (ในเมทริกซ์ความแปรปรวนร่วม) มิฉะนั้นเมทริกซ์ความแปรปรวนร่วมจะไม่กระจัดกระจายและขนาดจะเท่ากับ 120,000 โดย 120,000 ซึ่งเป็น เป็นไปไม่ได้ที่จะจัดการด้วยเครื่องเดียว นอกจากนี้การโหลด (eigenvectors) จะมีขนาดใหญ่มากและควรเก็บไว้ในรูปแบบเบาบาง

ขอบคุณมากสำหรับความช่วยเหลือใด ๆ !

หมายเหตุ: ฉันกำลังใช้เครื่องที่มี 24GB RAM และ 8 cpu cores


เมทริกซ์กระจัดกระจายแค่ไหน? คุณจะใช้ SVD ที่ได้อย่างไร หากคุณต้องการเพียงบางส่วนคุณอาจประมาณว่าถูกกว่ามาก
Arnold Neumaier

@ArnoldNeumaier ขออภัยฉันลืมเพิ่มข้อมูลเบาบาง ฉันได้อัปเดตโพสต์พร้อมกับแนวคิดที่สมบูรณ์แล้ว
Ensom Hodder

SLEPc, mahout และ irlba แต่ละคนแนะนำในคำตอบเพื่อให้ดูเหมือนว่าเหมาะสำหรับปัญหาของคุณ
Arnold Neumaier

1
ทำไมคุณต้องการคำนวณ120k ทั้งหมด ดูเหมือนว่าคุณแค่ต้องการบัญชีที่มีความแปรปรวน 90% ซึ่งน่าจะถูกกว่ามากในการคำนวณ
Jed Brown

@JedBrown สวัสดี Jed คุณพูดถูก! ฉันสนใจเฉพาะผู้ที่บัญชีความแปรปรวน 90% และ eigenvectors ที่สอดคล้องกัน (สำหรับการเปลี่ยนชุดข้อมูลการทดสอบในภายหลัง) คุณช่วยบอกฉันด้วยวิธีการที่ถูกกว่าได้ไหม?
Ensom Hodder

คำตอบ:


4

ฉันแนะนำแพ็คเกจ irlba - มันให้ผลลัพธ์เหมือนกับ svd จริง แต่คุณสามารถกำหนดค่าเอกพจน์ที่น้อยลงเพื่อแก้ปัญหา ตัวอย่างเช่นการใช้เมทริกซ์กระจัดกระจายเพื่อแก้ปัญหารางวัล Netflix สามารถดูได้ที่นี่: http://bigcomputing.blogspot.de/2011/05/bryan-lewiss-vignette-on-irlba-for-svd.html


ขอบคุณสำหรับความคิดเห็นของคุณ ในความเป็นจริงฉันดูวิดีโอนั้นและลองใช้แพคเกจirlbaเมื่อวานนี้ แต่ดูเหมือนว่าจะสามารถใช้เพื่อคำนวณค่าเอกพจน์เพียงไม่กี่ตัวเท่านั้น อย่างไรก็ตามตามที่ระบุไว้ในโพสต์ฉันต้องการคำนวณค่าเอกพจน์ทั้งหมด (120,000) เพื่อเลือกจำนวนพีซีที่เหมาะสมตามความแปรปรวนที่บัญชีใช้ ในกรณีนี้ฉันคิดว่าirlbaไม่เหมาะสมอีกต่อไป
Ensom Hodder

คุณสามารถใช้ผลลัพธ์ของ SVD ในลักษณะที่คล้ายคลึงกับ PCA ได้หรือไม่? คุณไม่จำเป็นต้องจัดศูนย์กลางข้อมูลไว้ก่อนทำ SVD เพื่อดำเนินการ PCA หรือไม่
ซัค

@Zach - SVD เป็นอัลกอริทึมหลักที่อยู่เบื้องหลัง PCA (ดู prcomp - stat.ethz.ch/R-manual/R-patched/library/stats/html/prcomp.html ) การจัดศูนย์ข้อมูลเป็นขั้นตอนมาตรฐานก่อนขึ้นอยู่กับ PCA ถึงแม้ว่าจะมีตัวเลือกที่หลากหลายขึ้นอยู่กับคำถามของคุณ (เช่นอาจมีการปรับสเกลประเภทต่าง ๆ ด้วย)
Marc ในกล่อง

ดีลใหญ่แค่ไหนถ้าฉันไม่ได้จัดศูนย์ข้อมูลไว้ก่อนหน้าแผนกบริการ? ฉันมีเมทริกซ์กระจัดกระจายที่เหมาะกับหน่วยความจำ แต่การจัดกึ่งกลางจะทำให้หนาแน่นและใหญ่เกินกว่าจะใส่ลงในหน่วยความจำได้
ซัค

@Zach - มันขึ้นอยู่กับว่าคุณต้องการให้ตัวอย่างของคุณสัมพันธ์กันอย่างไร หากคุณไม่สามารถทำงานกับข้อมูลที่อยู่ตรงกลางเนื่องจากข้อ จำกัด ของหน่วยความจำฉันก็คิดว่าการตัดสินใจนั้นถูกสร้างขึ้นมาเพื่อคุณ โดยทั่วไปข้อมูลที่อยู่ตรงกลางมี PCA ทำงานบนเมทริกซ์ความแปรปรวนร่วมของตัวอย่างในขณะที่การจัดกึ่งกลางและการปรับขนาดของข้อมูลมี PCA ทำงานบนเมทริกซ์สหสัมพันธ์ หากต้องการข้อมูลเชิงลึกเกี่ยวกับการตัดสินใจเหล่านี้คุณอาจลองถามคำถามมากกว่านี้ที่stats.stackexchange.comหรือค้นหาคำตอบที่มีอยู่เกี่ยวกับ PCA
Marc ในกล่อง

8

ฉันแนะนำให้ใช้SLEPcเพื่อคำนวณ SVD บางส่วน ดูบทที่ 4 ของคู่มือผู้ใช้และหน้าคู่มือSVDสำหรับรายละเอียด


1
เนื่องจากเขาต้องการ PCA เขาจะต้องศูนย์ข้อมูลก่อนคำนวณ SVD สิ่งนี้จะทำลายความเป็นเบาบาง มีวิธีใดบ้างที่ SLEPc รองรับสำหรับสิ่งนี้?
dranxo

3
นั่นเป็นเพียงเบาบาง + อันดับต่ำ SLEPc ไม่ต้องการรายการเมทริกซ์เพียงตัวดำเนินการเชิงเส้นซึ่งสามารถใช้เป็นเมทริกซ์เบาบางบวกการแก้ไข
Jed Brown

2

ฉันลงคะแนนให้ควาญช้างซึ่งดีต่องาน NLP / TA อื่น ๆ และใช้แผนที่ / ลด


ใช่คุณพูดถูกควาญอยู่ในแผนที่ถนนของฉัน แต่ฉันชอบที่จะสร้างต้นแบบด้วยเทคนิค "ง่าย ๆ " (ฉันคิดว่า) ล่วงหน้า
Ensom Hodder

1

ฉันขอแนะนำให้ใช้การสลายตัวค่าเอกพจน์ที่เพิ่มขึ้นซึ่งมีจำนวนมากในวรรณคดี ตัวอย่างเช่น

วิธีการเหล่านี้ทั้งหมดลดลงเป็นดังต่อไปนี้:

  • เริ่มต้นด้วยชุดข้อมูลขนาดเล็ก
  • คำนวณ SVD อย่างใด (ขั้นตอนนี้ไม่สำคัญสำหรับเมทริกซ์คอลัมน์เดียว)
  • ทำซ้ำจนกว่าจะเสร็จ:
    • เพิ่มชุดข้อมูลใหม่
    • ใช้ SVD และกฎการอัพเดทที่มีอยู่เพื่อคำนวณ SVD ของชุดข้อมูลใหม่

ยังไม่มีข้อความ


0

คุณยังสามารถใช้ R

Revolution Rคือ build ของ R ที่จัดการชุดข้อมูลที่มีขนาดใหญ่กว่า RAM princompใช้ฟังก์ชั่น

นอกจากนี้ยังมีฟังก์ชั่นสถิติอย่างเต็มรูปแบบที่ออกแบบมาโดยเฉพาะสำหรับปัญหาสไตล์ข้อมูลขนาดใหญ่ที่ไม่พอดีกับ RAM เช่นการถดถอยเชิงเส้นการถดถอยแบบลอจิสติกควอนไทล์ ฯลฯ

คุณสามารถดาวน์โหลดเวอร์ชันด้านการศึกษาที่มีคุณสมบัติครบถ้วนได้ฟรีโดยทำเครื่องหมายที่ช่อง "ฉันเป็นนักวิชาการ"

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