Giảm chiều dữ liệu với PCA. Trị riêng và vector riêng của ma trận

Làm người nghiên cứu, kỵ nhất là ko hiểu lý thuyết đằng sau mà nhảy ngay vào công thức và lên hỏi thế này! Anh khuyên @hell6w9rld nếu muốn tiếp tục con đường nghiên cứu thì nên chăm học lý thuyết, anh có post ở đây rồi, ít ra cũng đọc cái quyển đầu tiên nhé

Còn ở đây có lý thuyết về PCA
https://github.com/liyanghua/Principal-component-analysis-

4 Likes

Em cũng biết thế. Nhưng e đi thực tập thầy k cho tiếp cận theo hướng dưới lên. Mà từ trên xuống. K học hiểu lý thuyết hết cặn kẽ rồi mới qua ứng dụng. Mà trước hết cần hiểu tổng quan, các bước và làm cho nó chạy đã. Nếu cứ chăm chú lý thuyết đào sâu tiêu tiết thì k biết bh xong. Vì càng đâu vào nền lý thuyết bên sau thì càng ra nhiều vấn đề. Và đó k phải là cách tiếp cận tốt cho ng mới bắt đầu. Đó là cách khi đã nghiên cứu lâu dài. Trước tiên là phải chạy và hiểu tổng quan rồi mới đào sâu dần. Em đã tìm hiểu lý thuyết về pca trước khi vào các bước. Và câu trên trong link bài e cmt. Đúng là sai.

2 Likes

Học từ trên xuống thì ko những hổng lý thuyết mà còn hổng luôn cả keyword để có thể search, vì đây là mấy từ khóa bên xác suất thống kê, ma trận, nó rất cơ bản mà em với các bạn cứ cãi nhau!
Trước mắt em cứ làm theo thầy của em cho xong, nhưng song song đó phải chăm đọc lý thuyết, nhất là lý thuyết ma trận, sau đó tới xác suất!

4 Likes

E chỉ thấy nhập nhằng trong câu.
Các vector riêng hoàn toàn độc lập tuyến tính (nghĩa là trực giao đôi 1) trong bài trên :3. Đáng ra là các vector riêng độc lập tuyến tính và trực giao đôi 1 thì đúng hơn

3 Likes

Mình cũng vậy thôi, học tới biến đổi sơ cấp là hết bài :smiley: basis span sub eigen gì là tự tìm hiểu cả.

Thực ra trực giao thì phải độc lập tuyến tính chứ, vì trực giao đôi một thì hợp thành cơ sở được rồi.

4 Likes

Bạn đã thông suốt pca chưa. Mình còn mắc 1 chút ở pca cho toàn tập dữ liệu. M đã hiểu đến chỗ qua chuẩn hóa vector eigen. Nhưng mình mắc ở bước tính features , rút gọn chiều cho từng ảnh. Pca trên từng ảnh mình đã hiểu. Bạn hiểu r mình inbox hỏi mấy câu với :smiley:

2 Likes

Bạn xem link bên khanacademy :slight_smile:

Ngay sau bước trải phẳng thì hai bước sau chính là tính ma trận cov. Nhưng AA* mới đúng là ma trận cov theo định nghĩa vì chuẩn hóa theo dòng mà, chứ A*A thì có ý nghĩa gì nhỉ? :pensive:

2 Likes

PCA có 2 cách tiếp cận

  1. PCA cho từng ảnh, thì ma trận dùng để giảm chiều dữ liệu (ghép từ k vector eigen thành phần chính) cho từng ảnh được tìm trực tiếp trên từng ảnh đó
  2. PCA cho cả tập dữ liệu thì các vector eigen dùng để giảm chiều dữ liệu (không ghép như cách 1 mà để riêng) cho từng ảnh được tính tư cả tập dữ liệu

Về cơ bản A(T)A và AA(T) cho cùng eigen value và eigen vector. Nhưng AA(T) cho cỡ ma trận hiệp phương sai lớn hơn A(T)A nhiều. Nên người ta tính eigen vector cho AA(T) thông qua A(T)A có cỡ nhỏ hơn nhiều
PCA trên từng ảnh , nếu ảnh gốc k đưa về cùng cỡ thì không dùng được AA(T) mà chỉ dùng A(T)A. Do đến bước nhân ma trận giảm chiều với ma trận ảnh gốc không nhân được do cột ma trận này k bằng hàng ma trận kia (phép chiếu)
Còn PCA trên cả tập thì người ta dùng A(T)A hay AA(T) cũng được nhưng ng ta tính eigen cho A(T)A vì lý do mình nói trên từ đó thông qua eigen vector của A(T)A tính cho AA(T)
Cụ thể hơn

A là vector cột, mỗi 1 cột là 1 ảnh (có thể có cách theo dòng nhưng mình tìm hiểu thấy theo cột cả)
Các ảnh trong tập huấn luyên có M ảnh. Mỗi ảnh NXN
Khi chuyển về vector thì có cỡ N^2 x 1
AA(T) = N^2 x M nhân cho M x N^2 ra matrix cov là N^2 x N^2 nên người ta mới dùng A(T)A rồi quay lai tính cho AA(T) vì A(T)A chỉ có cỡ M x M mà thôi

Mình đang mắc chỗ này

Cách giảm chiều vector ảnh gốc ban đâu N^2 x 1 về K x 1
ở hình vuông màu xanh thì mình hiêu cách tính
Nhưng ở hình vuông màu đỏ mình k hiểu công thức này làm gì
Nếu tính theo công thức ở hình vuông màu đỏ thì cho ra vector N^2 x 1 bằng cỡ ảnh gốc rồi

1 Like

Hai cách viết như nhau. Cách viết thứ 2 được xác định khi công nhận tập vector riêng là quy chiếu (không gian để biểu diễn).

Để giải thik cách viết thứ 2 (màu đỏ) từ đâu mà ra.

Hình như có gì sai sai
Theo công thức này
[DEAD LINK]

Ví dụ như sau

Còn theo công thức này
[DEAD LINK]

thì ví dụ như thế này
[DEAD LINK]

Mà mình thấy PCA trên tập ảnh thì có thể chọn k thành phần chính giữ lại tương đương eigenvector cuối cùng có k chiều. Còn PCA trên từng ảnh thì không.

1 Like

Bạn lại tính lộn về không gian cũ nên mới thế.

Chuyển sang hệ quy chiếu mới (Không gian mới) nó đơn giản là:

[DEAD LINK]
Đến đây được rồi, chính là biểu diễn trong không gian mới.

Hay viết gọn
[DEAD LINK]

Mình chẳng biết PCA gì gì, mình chỉ comment về toán.

công thức còn sum mà bạn

[dead link]

là sao nhỉ

1 Like

Mình không hiêu đoạn này
Sau khi nhân w1u1 được 1 vecor x chẳng hạn
w2u2 được vector y
x + y = 1 vector có 3 thành phần mà

1 Like

Bạn đừng lùa theo và test công thức nữa. Bạn dành time hiểu toán tuyến tính đi!
Bây giờ mình phải đi đã

Vậy là bạn chưa xem link mình đưa :slight_smile:

2 Likes

Link nào nhỉ. Mình hiểu rồi. Cái công thức vòng đỏ là ý nói ảnh ban đầu có thể biểu diễn bởi tổ hợp tuyến tính đó. Còn feature được tính bằng công thức xanh. Từ qua đến giờ đọc mấy công thức mà váng hết cả đầu :3 nên nhầm lẫn .Tks bạn

1 Like

Đúng rồi! nhưng là trên hệ cũ. Hệ mới lấy u1, u2 làm cơ sở thì bạn chỉ còn 2 thôi. Và tọa độ mới biểu diễn A là (w1, w2).

OK?

1 Like

Ok mình hiểu rồi. Tks bạn :grin:

1 Like

Giờ mình tổng hợp note :slight_smile:

Các bước của PCA qua eigen (còn kiểu qua SVD nữa)

  • Trải phẳng n ảnh cùng độ phân giải thành các vector cột H[i] với kích cỡ (size*1)
  • Chuẩn hóa (centered): avgH = 1/n*sigma_all(H), i=1…n: H[i] <- H[i] - avgH
  • H = [H[1] H[2] … H[n]] kích cỡ (size*n)
  • M = T(H) * H với n < size (Gram matrix)
  • Trích eigvec(M) ứng với eigval(M) cao nhất lập thành V = [v[1] | v[2] | … | v[k]]
  • Chuẩn hóa (Euclidean) norm trên V để lập thành cơ sở trực chuẩn (do spectral theorem) cho subspace S có k chiều: v[i] <- v[i] / norm2(v[i])^2
  • Chiếu tất cả các vector H[i] xuống subspace này thành H’[i]: H’[i] = T(H[i]) * V
  • Lưu H’[1…n], avgH, và v[1…k] ứng với lambda[1..k] (eigval)

Cơ sở:

  • Vì sao để cực tiểu MSE phải cực đại phương sai theo principal axis? https://stats.stackexchange.com/a/136072 (từ khóa: Frobenius norm).
  • Một phần của spectral theorem: ma trận đối xứng luôn có đủ vector riêng với giá trị riêng thực & chúng đôi một trực giao.
  • Gram matrix: ta có cov(H) = H*T(H) là ma trận đx nên có eigenvalue thực. Với v là một eigenvector của cov(H) ta có
    H*T(H)*v = lambda*v <=> T(H)*H*T(H)*v = lambda*T(H)*v <=> T(H)*H * (T(H)*v) = lambda * (T(H)*v)
    vậy theo đn T(H)*v là eigenvector của Gram matrix với cùng eigenvalue.
  • Phép chiếu: Cho một subspace S với orthonormal basis {u[1…k]}. Một vector v trong R^n luôn tách được thành: v = hình chiếu trên S + vector trực giao (?pháp tuyến?) với S.
    Với j trong [1…k]: (phép . là tích vô hướng)
v.u[j] = (sigma(i=1..k) c[i]*u[i]).u[j] + 0
= sigma(i=1..k && i != j) c[i]*(u[i].u[j]) + c[j]*(u[j].u[j])
= 0 + c[j]*1 = c[j].

Hay Proj(v) = [v.u[1] | v.u[2] | … | v.u[k]], tức là bằng T(v) * U.

Chắc còn thiếu mong mọi người góp ý bổ sung :slight_smile: Nhưng nhìn qua thì thấy một nhịp còn thiếu là phương sai theo trục cực đại (Cov(x, x), Cov(y, y), Cov(z, z) max) -> ? -> chọn eigenvalue của cov (hay Gram) cực đại.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?