ฉันเข้าใจความสัมพันธ์ระหว่างการวิเคราะห์องค์ประกอบหลักและการสลายตัวของค่าเอกพจน์ในระดับพีชคณิต / แน่นอน คำถามของฉันเป็นเรื่องเกี่ยวกับการดำเนินงาน scikit เรียนรู้
เอกสารกล่าวว่า: " [TruncatedSVD] คล้ายกับ PCA มาก แต่ทำงานกับเวกเตอร์ตัวอย่างโดยตรงแทนที่จะเป็นเมทริกซ์ความแปรปรวนร่วม " ซึ่งจะสะท้อนความแตกต่างพีชคณิตระหว่างทั้งสองวิธี อย่างไรก็ตามภายหลังได้กล่าวว่า: " ตัวประมาณนี้ [TruncatedSVD] รองรับสองอัลกอริทึม: ตัวแก้ SVD แบบสุ่มที่รวดเร็วและอัลกอริทึม“ ไร้เดียงสา” ที่ใช้ ARPACK เป็น eigensolver บน (X * XT) หรือ (XT * X) มีประสิทธิภาพ ". เกี่ยวกับPCAมันบอกว่า: "การลดขนาดเชิงเส้นโดยใช้การแยกส่วนประกอบของข้อมูลเพื่อฉายภาพ ... " และการติดตั้ง PCA รองรับสองอัลกอริทึม (สุ่มและ ARPACK) ตัวแก้ปัญหาบวกอีกหนึ่ง LAPACK เมื่อมองดูโค้ดฉันจะเห็นว่าทั้ง ARPACK และ LAPACK ทั้งใน PCA และ TruncatedSVD ทำ svd บนข้อมูลตัวอย่าง X, ARPACK สามารถจัดการกับเมทริกซ์กระจัดกระจาย (ใช้ svds)
ดังนั้นนอกเหนือจากคุณสมบัติและวิธีการที่แตกต่างกันและ PCA ยังสามารถทำการแยกสลายค่าเอกพจน์ที่แน่นอนโดยใช้ LAPACK, PCA และ TruncatedSVD การใช้งาน scikit-Learn ดูเหมือนจะเป็นอัลกอริทึมเดียวกัน คำถามแรก: ถูกต้องหรือไม่
คำถามที่สอง: แม้ว่า LAPACK และ ARPACK ใช้ scipy.linalg.svd (X) และ scipy.linalg.svds (X) เป็น X เมทริกซ์ตัวอย่างพวกเขาคำนวณการสลายตัวของเอกพจน์หรือ eigen-decomposition ของหรือภายใน ในขณะที่ตัวแก้แบบ "สุ่ม" ไม่จำเป็นต้องคำนวณผลิตภัณฑ์ (สิ่งนี้เกี่ยวข้องกับความมั่นคงเชิงตัวเลขดูที่เหตุใด PCA ของข้อมูลโดยใช้ SVD ของข้อมูล ) ถูกต้องหรือไม่X ∗ X T
Xtimes()
Xt_times()