อัลกอริทึม PCA ที่เร็วที่สุดสำหรับข้อมูลมิติสูง


11

ฉันต้องการแสดง PCA บนชุดข้อมูลซึ่งประกอบด้วยตัวอย่างประมาณ 40,000 ตัวอย่างแต่ละตัวอย่างแสดงคุณสมบัติประมาณ 10,000 รายการ

การใช้ฟังก์ชั่น princomp Matlab ใช้เวลาอย่างต่อเนื่องมากกว่าครึ่งชั่วโมงซึ่งเป็นจุดที่ฉันฆ่ากระบวนการ ฉันต้องการค้นหาการนำไปใช้ / อัลกอริทึมที่ใช้เวลาน้อยกว่า 10 นาที อัลกอริทึมที่เร็วที่สุดคืออะไร ต้องใช้เวลานานเท่าไรกับ i7 dual core / 4GB Ram?


ใช่คุณพูดถูกฉันควรจะแม่นยำกว่านี้ ใช้เวลามากกว่าครึ่งชั่วโมงจากนั้นฉันตัดสินใจที่จะฆ่ากระบวนการ ฉันต้องทำเช่นนี้อย่างน้อยครั้งหนึ่งในสิบทำมันจะดีที่จะมีสิ่งที่ผลงานในเวลาน้อยกว่า 10 นาที
กลมกล่อม

เมทริกซ์ของคุณเบาบางแค่ไหน?
Arnold Neumaier

เปอร์เซ็นต์ของศูนย์ในเมทริกซ์สูงกว่า 80%
กลมกล่อม

ลองใช้ kernal-PCA เช่นกัน
meawoppl

คำตอบ:


11

ก่อนอื่นคุณควรระบุว่าคุณต้องการส่วนประกอบทั้งหมดหรือส่วนประกอบที่สำคัญที่สุดหรือไม่?

ARN×MNM

CRM×MO(NM2)O(M3)O(2M2)1.5A

AA

C


2

ฉันเดาว่าคุณต้องการเพียงคู่หรือคู่เอกฐาน (หรือไม่กี่ร้อย) ที่โดดเด่นมูลค่า จากนั้นจึงเป็นการดีที่สุดที่จะใช้วิธีการวนซ้ำซึ่งจะเร็วกว่ามากและใช้หน่วยความจำน้อยกว่ามาก

ใน Matlab ดู

ช่วย svds


ใช่ดูเหมือนว่าวิธีการวนซ้ำนั้นเร็วกว่านี้หากฉันต้องการเพียงแค่ส่วนประกอบแรกร้อยเท่านั้น
กลมกล่อม

เท่าที่ svds เกี่ยวข้องฉันพยายามที่จะทำให้เมทริกซ์ของฉันอยู่ในรูปแบบกระจัดกระจายและปรับเปลี่ยนฟังก์ชั่น princomp เพื่อใส่ svds แทน svd และทำให้ฉันประหลาดใจมากที่เมทริกซ์ 2000 * 4000 (180 วินาทีแทนที่จะเป็น 15 วินาที) ) ที่แปลกประหลาด ...
กลมกล่อม

1
ไม่จำเป็นต้องเปลี่ยนเป็นรูปแบบกระจัดกระจาย นอกจากนี้คุณต้องลดจำนวนเวกเตอร์เอกพจน์ที่คุณต้องการคำนวณ สำหรับการคำนวณ fiull svd svds ไม่เหมาะ
Arnold Neumaier

2
หมายเหตุของโหมดเด่นคือวิธี svd แบบสุ่มที่ใหม่กว่าเช่นเดียวกับในstanford.edu/group/mmds/slides2010/Martinsson.pdf
Nick Alger

2

คุณสามารถตรวจสอบคำตอบของฉันบนไม้กางเขนในการตรวจสอบ ฉันไม่ต้องการคัดลอกที่นี่ โดยทั่วไปคุณสามารถใช้ SVD ที่เร็วและสุ่มเพื่อคำนวณพื้นฐาน PCA และค่าสัมประสิทธิ์


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