ก่อนอื่นการลดขนาดจะถูกนำมาใช้เมื่อคุณมีหลายมิติร่วมกันและต้องการลดขนาดของปัญหาด้วยการหมุนจุดข้อมูลไปสู่พื้นฐานมุมฉากใหม่และใช้แกนที่มีความแปรปรวนมากที่สุดเท่านั้น ด้วยตัวแปร 8 ตัว (คอลัมน์) พื้นที่ของคุณอยู่ในระดับต่ำอยู่แล้วการลดจำนวนตัวแปรต่อไปจึงไม่น่าจะแก้ปัญหาทางเทคนิคกับขนาดหน่วยความจำ แต่อาจส่งผลต่อคุณภาพของชุดข้อมูลเป็นจำนวนมาก ในกรณีที่เป็นรูปธรรมของคุณมีแนวโน้มมากขึ้นที่จะดูการเรียนรู้ออนไลน์วิธีการ การพูดอย่างคร่าวๆแทนที่จะทำงานกับชุดข้อมูลทั้งหมดวิธีการเหล่านี้มีส่วนเล็ก ๆ ของพวกเขา (มักเรียกว่า "ชุดเล็ก") ในแต่ละครั้งและสร้างแบบจำลองเพิ่มขึ้นทีละส่วน (ส่วนตัวแล้วฉันชอบตีความคำว่า "ออนไลน์" เป็นการอ้างอิงถึงแหล่งข้อมูลที่ยาวอย่างไม่สิ้นสุดจากอินเทอร์เน็ตเช่นฟีด Twitter ซึ่งคุณไม่สามารถโหลดชุดข้อมูลทั้งหมดได้ในครั้งเดียว)
แต่ถ้าคุณต้องการใช้เทคนิคการลดขนาดเช่น PCA กับชุดข้อมูลที่ไม่เหมาะกับหน่วยความจำจริงๆ โดยปกติชุดข้อมูลจะแสดงเป็นเมทริกซ์ข้อมูลX ที่มีขนาดn x mโดยที่nคือจำนวนการสังเกต (แถว) และmคือจำนวนตัวแปร (คอลัมน์) โดยทั่วไปปัญหาเกี่ยวกับหน่วยความจำมาจากหนึ่งในสองหมายเลขเท่านั้น
มีการสังเกตมากเกินไป (n >> m)
เมื่อคุณมีข้อสังเกตมากเกินไปแต่จำนวนของตัวแปรที่มีตั้งแต่ขนาดเล็กถึงปานกลางคุณสามารถสร้างเมทริกซ์ความแปรปรวนขึ้นเรื่อย ๆ อันที่จริง PCA ทั่วไปประกอบด้วยการสร้างเมทริกซ์ความแปรปรวนร่วมของขนาดm x mและใช้การสลายตัวของค่าเอกพจน์กับมัน ด้วยm = 1,000 ตัวแปรชนิด float64 เมทริกซ์ความแปรปรวนร่วมมีขนาด 1,000 * 1,000 * 8 ~ 8Mb ซึ่งเหมาะกับหน่วยความจำและอาจใช้กับ SVD ได้อย่างง่ายดาย ดังนั้นคุณจึงต้องการเพียงเพื่อสร้างเมทริกซ์ความแปรปรวนร่วมโดยไม่ต้องโหลดชุดข้อมูลทั้งหมดลงในหน่วยความจำ - งานเวไนยสวย
หรือคุณสามารถเลือกตัวอย่างที่เป็นตัวแทนขนาดเล็กจากชุดข้อมูลของคุณและใกล้เคียงกับเมทริกซ์ความแปรปรวนร่วม เมทริกซ์นี้จะมีคุณสมบัติเหมือนกันทั้งหมดตามปกติมีความแม่นยำน้อยกว่าเล็กน้อย
มีตัวแปรมากเกินไป (n << m)
ในอีกทางหนึ่งบางครั้งเมื่อคุณมีตัวแปรมากเกินไปเมทริกซ์ความแปรปรวนร่วมนั้นจะไม่เข้ากับหน่วยความจำ เช่นถ้าคุณทำงานกับภาพ 640x480 ทุกการสังเกตมีตัวแปร 640 * 480 = 307200 ซึ่งส่งผลให้เมทริกซ์ความแปรปรวนร่วม 703Gb! นั่นไม่ใช่สิ่งที่คุณต้องการเก็บไว้ในหน่วยความจำของคอมพิวเตอร์หรือในหน่วยความจำของคลัสเตอร์ ดังนั้นเราต้องลดขนาดโดยไม่ต้องสร้างเมทริกซ์ความแปรปรวนร่วมเลย
วิธีการโปรดของฉันสำหรับการทำมันเป็นแบบสุ่มฉาย ในระยะสั้นหากคุณมีชุดXขนาดn x เมตรคุณสามารถคูณด้วยบางเบาบางเมทริกซ์แบบสุ่มRขนาดเมตร x k (กับk << ม. ) และได้รับเมทริกซ์ใหม่X'ที่มีขนาดเล็กกว่ามากn x kมีคุณสมบัติใกล้เคียงกับคุณสมบัติดั้งเดิมโดยประมาณ ทำไมมันทำงาน ทางที่ดีคุณควรจะรู้ว่าจุดมุ่งหมาย PCA ในการค้นหาการตั้งค่าของแกนมุมฉาก (องค์ประกอบหลัก) และโครงการข้อมูลของคุณบนแรกkของพวกเขา. ปรากฎว่าเวกเตอร์สุ่มเบาบางเกือบจะตั้งฉากและดังนั้นจึงอาจใช้เป็นพื้นฐานใหม่
และแน่นอนว่าคุณไม่จำเป็นต้องคูณชุดข้อมูลทั้งหมดXด้วยR - คุณสามารถแปลการสังเกตทุกxเป็นพื้นฐานใหม่แยกจากกันหรือในชุดมินิ
นอกจากนี้ยังมีขั้นตอนวิธีการที่เรียกว่าค่อนข้างคล้ายสุ่ม SVD ฉันไม่ได้มีประสบการณ์จริงใด ๆ กับมัน แต่คุณสามารถค้นหาโค้ดตัวอย่างที่มีคำอธิบายที่นี่
ในฐานะที่เป็นบรรทัดล่างนี่คือรายการตรวจสอบสั้น ๆ สำหรับการลดมิติข้อมูลของชุดข้อมูลขนาดใหญ่:
- หากคุณมีหลายมิติ (ตัวแปร) ไม่มากนักเพียงแค่ใช้อัลกอริทึมการเรียนรู้ออนไลน์
- หากมีข้อสังเกตมากมาย แต่มีตัวแปรจำนวนปานกลาง (เมทริกซ์ความแปรปรวนร่วมพอดีกับหน่วยความจำ) ให้สร้างเมทริกซ์ทีละน้อยและใช้ SVD ปกติ
- หากจำนวนตัวแปรสูงเกินไปให้ใช้อัลกอริทึมแบบเพิ่มหน่วย