Giảm kích thước bằng SVD Python

Chính xác thì phân tích thành phần chính và phân tách giá trị số ít có liên quan như thế nào và cách triển khai bằng cách sử dụng numpy

Phân tích thành phần chính [PCA] và phân tách giá trị số ít [SVD] là các phương pháp giảm kích thước thường được sử dụng trong phân tích dữ liệu khám phá [EDA] và Machine Learning. Cả hai đều là các phương pháp giảm kích thước tuyến tính cổ điển cố gắng tìm các tổ hợp tuyến tính của các tính năng trong ma trận dữ liệu nhiều chiều ban đầu để xây dựng biểu diễn có ý nghĩa của tập dữ liệu. Chúng được ưa thích bởi các lĩnh vực khác nhau khi giảm kích thước. PCA thường được các nhà sinh học sử dụng để phân tích và trực quan hóa các phương sai nguồn trong bộ dữ liệu từ di truyền quần thể, phiên mã, proteomics và microbiome. Trong khi đó, SVD, đặc biệt là phiên bản rút gọn của SVD, phổ biến hơn trong lĩnh vực xử lý ngôn ngữ tự nhiên để đạt được biểu diễn của ma trận tần số từ khổng lồ trong khi thưa thớt.

Người ta có thể thấy các biểu diễn kết quả từ PCA và SVD giống nhau trong một số dữ liệu. Trên thực tế, PCA và SVD có liên quan mật thiết với nhau. Trong bài đăng này, tôi sẽ sử dụng một số đại số tuyến tính và một vài dòng mã gọn gàng để minh họa mối quan hệ của chúng

0. Ôn tập đại số tuyến tính

Trước tiên, hãy nhanh chóng xem lại một số điều cơ bản từ đại số tuyến tính vì cả PCA và SVD đều liên quan đến một số phân tích ma trận

  • chuyển vị ma trận. lập chỉ mục lại ma trận 2-D A để chuyển đổi chỉ số hàng và cột, thay thế hiệu quả tất cả các phần tử của nó a_{ij} bằng a_{ji}. Ký hiệu cho phép chuyển vị là ký hiệu ⊤ hoặc ' trên ma trận. Trong numpy, bạn có thể gọi. T hoặc. phương thức transpose[] của np. đối tượng ndarray để hoán vị một ma trận
  • Tích vô hướng và phép nhân ma trận. tích C=AB của hai ma trận A[n×m] và B[m×p] nên có dạng n×p. Hai ma trận chỉ có thể được nhân khi kích thước thứ hai của ma trận trước khớp với kích thước đầu tiên của ma trận sau. Phần tử c_{ij} trong ma trận kết quả C được tính là

Các phần tử trong ma trận tích của hai ma trận là tích vô hướng của các vectơ hàng và vectơ cột tương ứng

Bạn có thể nhận ra rằng phần tử trong ma trận tích C là tích vô hướng của vectơ hàng và vectơ cột tương ứng trong ma trận A và B, tương ứng

  • Nghịch đảo ma trận. chỉ ma trận vuông mới có thể nghịch đảo, tích của ma trận A [n×n] với ma trận nghịch đảo A^[-1] là ma trận đơn vị I, trong đó các phần tử trên đường chéo là 1, các phần tử khác là 0. Trong numpy, một ma trận có thể được đảo ngược bởi np. linalg. chức năng inv
  • chuyển vị liên hợp. được định nghĩa là chuyển vị của ma trận liên hợp. Thường được biểu thị bằng * hoặc H [Hermitian] dưới dạng chỉ số trên. Ma trận liên hợp là ma trận thu được từ việc lấy phức liên hợp của tất cả các phần tử trong ma trận ban đầu

chuyển vị liên hợp

Nhớ lại các số phức, trong đó một số bao gồm một phần thực và một phần ảo. Chẳng hạn, a + i b là một số phức trong đó i là đơn vị ảo bằng căn bậc hai của -1. Liên hợp phức của a + i b là a - i b. Vì hầu hết các bộ dữ liệu mà chúng tôi xử lý là ma trận của các số thực, nên phép chuyển vị liên hợp của ma trận tương đương với phép chuyển vị thông thường

  • ma trận đơn vị. được định nghĩa là một ma trận vuông có chuyển vị liên hợp cũng là nghịch đảo của nó. Đối với một ma trận đơn vị, chúng ta có chuyển vị của nó bằng nghịch đảo của nó

Ma trận đơn nhất, trong đó chuyển vị liên hợp bằng ma trận nghịch đảo
  • Ma trận hiệp phương sai. hiệp phương sai định lượng độ biến thiên chung giữa hai biến ngẫu nhiên X và Y và được tính như

hiệp phương sai

Ma trận hiệp phương sai C là một ma trận vuông gồm các hiệp phương sai theo cặp của các đặc trưng từ ma trận dữ liệu X [n mẫu × m đặc trưng]. Quan sát từ định nghĩa của hiệp phương sai, nếu hai biến ngẫu nhiên đều có tâm bằng 0, thì kỳ vọng của các biến ngẫu nhiên trở thành 0 và hiệp phương sai có thể được tính là tích vô hướng của hai vectơ đặc trưng x và y. Do đó, ma trận hiệp phương sai của ma trận dữ liệu với tất cả các tính năng được căn giữa có thể được tính là

Ma trận hiệp phương sai của ma trận 0 tâm X

Được rồi, nó mang lại một số kỷ niệm đẹp từ đại số tuyến tính đại học. Bây giờ chúng ta hãy tìm hiểu các nhân vật chính của bài viết này

1. PCA

PCA nhằm mục đích tìm các trục trực giao không tương quan tuyến tính, còn được gọi là các thành phần chính [PC] trong không gian m chiều để chiếu các điểm dữ liệu lên các PC đó. PC đầu tiên ghi lại phương sai lớn nhất trong dữ liệu. Hãy hiểu PCA bằng trực giác bằng cách khớp nó trên ma trận dữ liệu 2 chiều, có thể được biểu diễn thuận tiện bằng biểu đồ phân tán 2 chiều

Hiểu ý nghĩa của PCA bằng cách khớp với tập dữ liệu 2-D [nguồn]

Vì tất cả các PC đều trực giao với nhau nên chúng ta có thể sử dụng một cặp đường thẳng vuông góc trong không gian 2 chiều làm hai PC. Để làm cho PC đầu tiên thu được phương sai lớn nhất, chúng tôi xoay cặp PC của mình để làm cho một trong số chúng căn chỉnh tối ưu với sự trải rộng của các điểm dữ liệu. Tiếp theo, tất cả các điểm dữ liệu có thể được chiếu lên PC và các phép chiếu của chúng [các chấm đỏ trên PC1] về cơ bản là biểu diễn giảm kích thước thu được của tập dữ liệu. Viola, chúng tôi vừa giảm ma trận từ 2-D xuống 1-D trong khi vẫn giữ phương sai lớn nhất

Các PC có thể được xác định thông qua phân tách riêng của ma trận hiệp phương sai C. Xét cho cùng, ý nghĩa hình học của phép tách riêng là tìm một hệ tọa độ mới của các vectơ riêng cho C thông qua các phép quay

Thành phần riêng của ma trận hiệp phương sai C

Trong phương trình trên, ma trận hiệp phương sai C[m×m] được phân tách thành ma trận của các vectơ riêng W[m×m] và ma trận đường chéo của m giá trị riêng Λ. Các vectơ riêng, là các vectơ cột trong W, thực tế là các PC mà chúng tôi đang tìm kiếm. Sau đó, chúng ta có thể sử dụng phép nhân ma trận để chiếu dữ liệu lên không gian PC. Với mục đích giảm kích thước, chúng ta có thể chiếu các điểm dữ liệu lên k PC đầu tiên dưới dạng biểu diễn dữ liệu

Chiếu dữ liệu lên k PC đầu tiên

PCA có thể được triển khai rất dễ dàng với numpy là chức năng chính thực hiện phân tách bản địa [np. linalg. eig] đã được tích hợp sẵn

2. SVD

SVD là một phương pháp phân tách khác cho cả ma trận thực và ma trận phức tạp. Nó phân rã một ma trận thành tích của hai ma trận đơn vị [U, V*] và một ma trận đường chéo hình chữ nhật của các giá trị đơn nhất [Σ]

Hình minh họa của SVD, sửa đổi từ

Trong hầu hết các trường hợp, chúng tôi làm việc với ma trận thực X và các ma trận đơn vị kết quả U và V cũng sẽ là ma trận thực. Do đó, chuyển vị liên hợp của U chỉ đơn giản là chuyển vị thông thường

SVD cũng đã được triển khai trong numpy như np. linalg. svd. Để sử dụng SVD để chuyển đổi dữ liệu của bạn

3. Mối quan hệ giữa PCA và SVD

PCA và SVD là các phương pháp liên quan chặt chẽ và có thể được áp dụng để phân tích bất kỳ ma trận hình chữ nhật nào. Chúng ta có thể xem xét mối quan hệ của chúng bằng cách biểu diễn SVD trên ma trận hiệp phương sai C

Từ dẫn xuất trên ta nhận thấy kết quả là đồng dạng với phân tích riêng của C, dễ dàng nhận thấy mối quan hệ giữa giá trị riêng [Σ] và giá trị riêng [Λ]

Mối quan hệ giữa giá trị riêng và giá trị số ít

Để xác nhận điều đó với numpy

Vì vậy, điều này có nghĩa là gì? . Trên thực tế, hầu hết các triển khai PCA thực sự sử dụng SVD thực hiện dưới mui xe thay vì thực hiện phân tách bản địa trên ma trận hiệp phương sai vì SVD có thể hiệu quả hơn nhiều và có thể xử lý các ma trận thưa thớt. Ngoài ra, còn có các dạng SVD rút gọn thậm chí còn kinh tế hơn khi tính toán

Trong bài đăng tiếp theo, tôi sẽ đi sâu vào sự phức tạp của các trình giải quyết và triển khai SVD khác nhau, bao gồm numpy, scipy và thư viện autograd mới được phát triển Google JAX

Làm cách nào để sử dụng SVD để giảm kích thước Python?

Vậy, làm cách nào để giảm kích thước bằng SVD? . U giảm này hiện có thể được sử dụng làm proxy cho dữ liệu ma trận có ít cột hơn. use the first k columns of V and S and achieve U' with fewer columns. This reduced U can now be used as a proxy for matrix dat with fewer columns.

SVD có thể được sử dụng cho PCA không?

Phân tích thành phần chính [PCA] thường được giải thích thông qua phân tách riêng của ma trận hiệp phương sai. Tuy nhiên, nó cũng có thể được thực hiện thông qua phân tách giá trị số ít [SVD] của ma trận dữ liệu X .

SVD có tốt hơn PCA không?

SVD tổng quát hơn và cũng có thể. g. được áp dụng cho ma trận khoảng cách hoặc độ tương tự. Nếu bạn có dữ liệu điểm truyền thống từ các bản phân phối liên tục trong không gian Euclide, thì PCA thường sẽ hoạt động tốt hơn . Đặc biệt, kết quả được giải thích tốt hơn nhiều.

Làm thế nào để SVD tiết kiệm không gian?

Chúng tôi có thể quan sát thấy rằng quy trình SVD có thể được sử dụng để nén hình ảnh nhằm tiết kiệm dung lượng lưu trữ bằng cách xóa các giá trị đơn lẻ đóng góp ít nhất vào thông tin chứa trong . .

Chủ Đề