Trước hết, giảm kích thước được sử dụng khi bạn có nhiều kích thước đồng biến và muốn giảm kích thước bài toán bằng cách xoay các điểm dữ liệu thành cơ sở trực giao mới và chỉ lấy các trục có phương sai lớn nhất. Với 8 biến (cột), không gian của bạn đã có chiều thấp, việc giảm số lượng biến hơn nữa không thể giải quyết các vấn đề kỹ thuật với kích thước bộ nhớ, nhưng có thể ảnh hưởng rất nhiều đến chất lượng dữ liệu. Trong trường hợp cụ thể của bạn, hứa hẹn sẽ có một cái nhìn về học tập trực tuyếnphương pháp. Nói một cách đơn giản, thay vì làm việc với toàn bộ tập dữ liệu, các phương thức này chiếm một phần nhỏ trong số chúng (thường được gọi là "các lô nhỏ") tại một thời điểm và xây dựng mô hình tăng dần. (Cá nhân tôi thích diễn giải từ "trực tuyến" là một tham chiếu đến một nguồn dữ liệu dài vô tận từ Internet như nguồn cấp dữ liệu Twitter, nơi bạn không thể tải toàn bộ dữ liệu cùng một lúc).
Nhưng nếu bạn thực sự muốn áp dụng kỹ thuật giảm kích thước như PCA cho bộ dữ liệu không phù hợp với bộ nhớ thì sao? Thông thường một tập dữ liệu được biểu diễn dưới dạng ma trận dữ liệu X có kích thước n x m , trong đó n là số lượng quan sát (hàng) và m là một số biến (cột). Thông thường các vấn đề với bộ nhớ chỉ đến từ một trong hai số này.
Quá nhiều quan sát (n >> m)
Khi bạn có quá nhiều quan sát , nhưng số lượng biến là từ nhỏ đến trung bình, bạn có thể xây dựng ma trận hiệp phương sai tăng dần . Thật vậy, PCA điển hình bao gồm xây dựng một ma trận hiệp phương sai có kích thước m x m và áp dụng phân rã giá trị số ít cho nó. Với m = 1000 biến kiểu float64, ma trận hiệp phương sai có kích thước 1000 * 1000 * 8 ~ 8Mb, dễ dàng phù hợp với bộ nhớ và có thể được sử dụng với SVD. Vì vậy, bạn chỉ cần xây dựng ma trận hiệp phương sai mà không tải toàn bộ dữ liệu vào bộ nhớ - nhiệm vụ khá dễ điều khiển .
Ngoài ra, bạn có thể chọn một mẫu đại diện nhỏ từ tập dữ liệu của mình và xấp xỉ ma trận hiệp phương sai . Ma trận này sẽ có tất cả các thuộc tính giống như bình thường, chỉ kém chính xác hơn một chút.
Quá nhiều biến số (n << m)
Mặt khác, đôi khi, khi bạn có quá nhiều biến , chính ma trận hiệp phương sai sẽ không phù hợp với bộ nhớ. Ví dụ: nếu bạn làm việc với hình ảnh 640x480, mọi quan sát có 640 * 480 = 307200 biến, dẫn đến ma trận hiệp phương sai 703Gb! Đó chắc chắn không phải là những gì bạn muốn giữ trong bộ nhớ của máy tính của bạn, hoặc thậm chí trong bộ nhớ của cụm của bạn. Vì vậy, chúng ta cần giảm kích thước mà không cần xây dựng ma trận hiệp phương sai.
Phương pháp yêu thích của tôi để làm điều đó là Chiếu ngẫu nhiên . Nói tóm lại, nếu bạn có tập dữ liệu X có kích thước n x m , bạn có thể nhân nó với một số ma trận ngẫu nhiên thưa thớt R có kích thước m x k (với k << m ) và thu được ma trận X ' mới có kích thước nhỏ hơn nhiều n x k với các thuộc tính gần giống như bản gốc. Tại sao nó hoạt động? Chà, bạn nên biết rằng PCA nhằm mục đích tìm tập hợp các trục trực giao (thành phần chính) và chiếu dữ liệu của bạn lên k đầu tiêncủa họ. Nó chỉ ra rằng các vectơ ngẫu nhiên thưa thớt gần như trực giao và do đó cũng có thể được sử dụng làm cơ sở mới.
Và, tất nhiên, bạn không phải nhân toàn bộ tập dữ liệu X với R - bạn có thể dịch mọi quan sát x sang cơ sở mới một cách riêng biệt hoặc theo từng đợt nhỏ.
Cũng có một số thuật toán tương tự được gọi là Random SVD . Tôi không có bất kỳ kinh nghiệm thực tế nào với nó, nhưng bạn có thể tìm thấy mã ví dụ với các giải thích ở đây .
Là điểm mấu chốt, đây là danh sách kiểm tra ngắn để giảm kích thước của các bộ dữ liệu lớn:
- Nếu bạn không có nhiều thứ nguyên (biến), chỉ cần sử dụng thuật toán học trực tuyến.
- Nếu có nhiều quan sát, nhưng số lượng biến vừa phải (ma trận hiệp phương sai phù hợp với bộ nhớ), xây dựng ma trận tăng dần và sử dụng SVD bình thường.
- Nếu số lượng biến quá cao, hãy sử dụng thuật toán gia tăng.