วิธีการ PCA สำหรับข้อมูลมิติสูงมาก?


12

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

ฉันได้อ่านว่ามันเป็นไปได้ที่จะใช้เวลาเพียงแค่ข้อมูลเมทริกซ์ของคุณและคำนวณแทนD ^ \ D ด้านบน / nแต่ที่ไม่ทำงานสำหรับฉัน ดีฉันไม่แน่ใจอย่างแน่นอนว่าฉันเข้าใจความหมายของมันนอกเหนือจากข้อเท็จจริงที่ว่ามันควรจะเป็นเมทริกซ์n \ times nแทนที่จะเป็นp \ times p (ในกรณีของฉันp \ gg n ) ฉันอ่านเกี่ยวกับบทเรียนเหล่านี้ใน eigenfaces แต่ดูเหมือนว่าไม่มีใครอธิบายได้ในแบบที่ฉันจะได้รับD D / n D D / n n × n P × พีพี» nDDD/nDD/nn×nพี×พีพี»n

ในระยะสั้นมีคำอธิบายอัลกอริทึมง่าย ๆ ของวิธีนี้เพื่อให้ฉันสามารถปฏิบัติตามมันได้หรือไม่


สิ่งที่คุณอ่านถูกต้อง เมทริกซ์เรียกว่าเมทริกซ์แกรม eigenvectors มันเป็น (ปรับขนาด) องค์ประกอบหลัก ลักษณะเฉพาะของมันเหมือนกันว่าขึ้นอยู่กับปัจจัยเพื่อค่าลักษณะเฉพาะของความแปรปรวนเมทริกซ์ n 1 / n D D / nDD1/nDD/n
อะมีบา

คำตอบ:


10

วิธีที่ง่ายที่สุดในการทำมาตรฐาน PCA คือการจัดวางคอลัมน์ของเมทริกซ์ข้อมูลของคุณ (สมมติว่าคอลัมน์สอดคล้องกับตัวแปรต่าง ๆ ) โดยการลบค่าเฉลี่ยของคอลัมน์แล้วดำเนินการ SVD เวกเตอร์เอกพจน์ทางซ้ายคูณด้วยค่าเอกพจน์ที่สอดคล้องกันสอดคล้องกับองค์ประกอบหลัก (โดยประมาณ) เวกเตอร์เอกพจน์ที่ถูกต้องสอดคล้องกับทิศทางองค์ประกอบหลัก (โดยประมาณ) - สิ่งเหล่านี้เหมือนกับ eigenvectors ที่กำหนดโดย PCA ค่าเอกพจน์สอดคล้องกับส่วนเบี่ยงเบนมาตรฐานขององค์ประกอบหลัก (คูณด้วยปัจจัยของรูท n โดยที่ n คือจำนวนแถวในเมทริกซ์ข้อมูลของคุณ) - เหมือนกับรากที่สองของค่าลักษณะเฉพาะที่กำหนดโดย PCA

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

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

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


แก้ไขให้ถูกต้องหากฉันผิด แต่ฉันคิดว่าอัลกอริทึมของ Lanczos มีประสิทธิภาพ eigendecomposition ไม่ใช่ SVD
อะมีบา

1
ผู้อ่านที่สนใจสามารถดูที่นี่สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการดำเนินการ PCA ผ่าน SVD: ความสัมพันธ์ระหว่าง SVD และ PCA วิธีการใช้ SVD เพื่อทำ PCA
อะมีบา

10

สิ่งที่คุณกำลังทำอยู่ในขณะนี้อยู่ใกล้ แต่คุณต้องให้แน่ใจว่าคุณคูณ eigenvectors ของ(data . data.T) / linesด้านซ้ายโดยdata.Tในการสั่งซื้อที่จะได้รับ eigenvectors (data.T . data) / linesของ บางครั้งสิ่งนี้เรียกว่า

AAATA

Aม.×nn>>ม.ATAn×nATAม.×ม.AATATAAAT

โวลต์AATλ

  • AATโวลต์=λโวลต์
  • AT(AATโวลต์)=AT(λโวลต์)
  • (ATA)(ATโวลต์)=λ(ATโวลต์)

โวลต์AATATโวลต์ATAAATAโวลต์AATATATโวลต์ATA


1
ดูเหมือนว่า "kernel trick" ที่ใช้กับ PCA en.wikipedia.org/wiki/Kernel_PCAเป็นวิธีที่ดีมากในการจัดการเมทริกซ์ขนาดใหญ่
Gilead

AA

8

ดูเหมือนสิ่งที่คุณต้องการคืออัลกอริทึม NIPALS สำหรับการแสดง PCA มันเป็นอัลกอริทึมที่นิยมมากในหมู่นักสถิติ มันมีข้อดีหลายประการ:

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

คำอธิบาย
http://en.wikipedia.org/wiki/Non-linear_iterative_partial_least_squares

อัลกอริทึม
นี่คือคำอธิบายที่ง่ายและยอดเยี่ยมของอัลกอริทึม (ในส่วนที่ 1.2)
http://stats4.eng.mcmaster.ca/w/mediafiles/mediawiki/f/f7/Section-Extra-Class-1.pdf

โปรดจำไว้ว่าต้องกำหนดค่าเฉลี่ยระดับกลางก่อนทำ PCA เนื่องจากละเอียดอ่อนต่อขนาด


4

เพื่อเพิ่มคำตอบของ Gilead พวกเขาเป็นขั้นตอนวิธีการคำนวณที่ราคาไม่แพงสำหรับ PCAs ที่ถูกตัดทอน NIPALS ได้รับความนิยมอย่างมาก แต่ฉันมีความสำเร็จมากมายด้วยวิธีการประมาณที่ใช้แทนข้อมูลบางส่วน (สิ่งที่มักเรียกว่า PCA จากการฉายแบบสุ่ม) สิ่งนี้ถูกกล่าวถึงในmetaoptimize thread

ดังที่คุณพูดถึง Python ให้ฉันชี้ให้เห็นว่าอัลกอริทึมนั้นถูกนำไปใช้ในการเรียนรู้ scikit : ชั้นเรียนPCA โดยเฉพาะอย่างยิ่งมีการใช้ในตัวอย่างที่แสดงให้เห็นถึงeigenfaces

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