2016-08-01 15 views
7

Tôi thấy khó liên kết lý thuyết với việc thực hiện. Tôi sẽ đánh giá cao sự giúp đỡ trong việc biết nơi hiểu biết của tôi là sai.Cách sử dụng dữ liệu đã giảm - đầu ra của phân tích thành phần chính

Ký hiệu - ma trận trong vốn đậm và vectơ trong phông chữ đậm lá thư nhỏ

**X** là một tập dữ liệu trên <code>n</code> quan sát, mỗi <code>d</code> biến. Vì vậy, với những quan sát <code>d</code> vectơ dữ liệu ba chiều, các <code>m</code> trục chính chiều là **w**<sub>j</sub>, cho j trong {1,...,m} nơi <code>m</code> là kích thước mục tiêu.

Các <code>m</code> thành phần chủ yếu của ma trận dữ liệu quan sát sẽ là **Y = X W** nơi ma trận **Y** in ℝ<sup> n x m</sup>, ma trận **X** in ℝ<sup> n x d</sup>, và ma trận **W** in ℝ<sup> d x m</sup>.

Cột của **W** tạo thành một cơ sở trực giao cho <code>m</code> tính năng và sản lượng **y**<sub>n</sub> là chiếu thành phần chính là giảm thiểu các lỗi tái squared:

∑<sub>n</sub> ||**x**<sub>n</sub> - **x̂**<sub>n</sub>||<sup>2</sup>
và xây dựng lại tối ưu **x**<sub>n</sub> được cung cấp bởi **x̂**<sub>n</sub> = **W*y**<sub>n</sub>.

Các mô hình dữ liệu là

X(i,j) = A(i,:)*S(:,j) + noise 

nơi PCA nên được thực hiện trên X để nhận được đầu ra S. S phải bằng Y.

Vấn đề 1: Các số liệu giảm Y không bằng S được sử dụng trong mô hình. Sự hiểu biết của tôi sai ở đâu?

Bài toán 2: Cách tái tạo lại sao cho lỗi tối thiểu?

Vui lòng trợ giúp. Cảm ơn bạn.

clear all 
clc 
n1 = 5; %d dimension 
n2 = 500; % number of examples 

ncomp = 2; % target reduced dimension 
%Generating data according to the model 
% X(i,j) = A(i,:)*S(:,j) + noise 
Ar = orth(randn(n1,ncomp))*diag(ncomp:-1:1); 
T = 1:n2; 
%generating synthetic data from a dynamical model 
S = [ exp(-T/150).*cos(2*pi*T/50) 
     exp(-T/150).*sin(2*pi*T/50) ]; 
% Normalizing to zero mean and unit variance 
S = (S - repmat(mean(S,2), 1, n2)); 
S = S ./ repmat(sqrt(mean(Sr.^2, 2)), 1, n2); 
Xr = Ar * S; 
Xrnoise = Xr + 0.2 * randn(n1,n2); 

h1 = tsplot(S); 


    X = Xrnoise; 

XX = X'; 
[pc, ~] = eigs(cov(XX), ncomp); 
Y = XX*pc; 

CẬP NHẬT [Tháng Tám 10]

Dựa trên trả lời, đây là toàn bộ mã mà

clear all 
clc 
n1 = 5; %d dimension 
n2 = 500; % number of examples 

ncomp = 2; % target reduced dimension 
%Generating data according to the model 
% X(i,j) = A(i,:)*S(:,j) + noise 
Ar = orth(randn(n1,ncomp))*diag(ncomp:-1:1); 
T = 1:n2; 
%generating synthetic data from a dynamical model 
S = [ exp(-T/150).*cos(2*pi*T/50) 
     exp(-T/150).*sin(2*pi*T/50) ]; 
% Normalizing to zero mean and unit variance 
S = (S - repmat(mean(S,2), 1, n2)); 
S = S ./ repmat(sqrt(mean(S.^2, 2)), 1, n2); 
Xr = Ar * S; 
Xrnoise = Xr + 0.2 * randn(n1,n2); 

    X = Xrnoise; 

XX = X'; 
[pc, ~] = eigs(cov(XX), ncomp); 
Y = XX*pc; %Y are the principal components of X' 
%what you call pc is misleading, these are not the principal components 
%These Y columns are orthogonal, and should span the same space 
%as S approximatively indeed (not exactly, since you introduced noise). 

%If you want to reconstruct 
%the original data can be retrieved by projecting 
%the principal components back on the original space like this: 
Xrnoise_reconstructed = Y*pc'; 

%Then, you still need to project it through 
%to the S space, if you want to reconstruct S 
S_reconstruct = Ar'*Xrnoise_reconstructed'; 


plot(1:length(S_reconstruct),S_reconstruct,'r') 
hold on 
plot(1:length(S),S) 

Cốt truyện là plot đó là rất khác so với những gì thể hiện trong Câu trả lời. Chỉ một thành phần của S khớp chính xác với S_reconstructed. Không nên toàn bộ không gian 2 chiều nguyên bản của đầu vào nguồn S được xây dựng lại? Ngay cả khi tôi cắt bỏ tiếng ồn, thì cũng có một thành phần của S được tái tạo chính xác.

+0

Tôi đoán câu hỏi này phù hợp hơn cho việc xử lý tín hiệu stackexchange http://dsp.stackexchange.com/, vì nó đề cập nhiều hơn với lý thuyết so với việc thực thi mã –

+0

'Sr' trong dòng này' S = S ./ repmat (sqrt (trung bình (Sr.^2, 2)), 1, n2); '? –

Trả lời

3

tôi thấy không ai trả lời câu hỏi của bạn, vì vậy ở đây đi:

gì bạn tính toán trong Y là những thành phần chủ yếu của X' (những gì bạn gọi pc là sai lầm, đây không phải là thành phần chủ yếu). Các cột Y này là trực giao và phải trải rộng cùng một không gian như S gần đúng (không chính xác, vì bạn đã giới thiệu tiếng ồn).

Nếu bạn muốn xây dựng lại Xrnoise, bạn phải nhìn vào lý thuyết (ví dụ here) và áp dụng nó một cách chính xác: các dữ liệu ban đầu có thể được lấy ra bằng cách chiếu các thành phần chủ yếu lại không gian ban đầu như thế này:

Xrnoise_reconstructed = Y*pc' 

Sau đó, bạn vẫn cần chuyển đổi nó qua pinv(Ar)*Xrnoise_reconstructed, nếu bạn muốn xây dựng lại S.

Matches độc đáo cho tôi: Xrnoise and reconstruction

câu trả lời cho CẬP NHẬT [10 Tháng 8]: (EDITED 12 tháng 8)

ma trận Ar của bạn không xác định một cơ sở trực chuẩn, và như vậy, các transpose Ar' không phải là chuyển đổi ngược. Câu trả lời trước đó tôi cung cấp là sai. Câu trả lời đã được sửa chữa ở trên.

+0

Cảm ơn bạn đã trả lời. Tôi có một nghi ngờ: Là tuyên bố Y = XX * pc; sai? – SKM

+0

'Y = XX * pc;' không phải là một câu lệnh, nó là một phương trình thiết lập định nghĩa 'Y'. Vì vậy, nó không phải là vốn đã chính xác hoặc không chính xác. Nhưng nó tính toán hiệu quả các thành phần chính, vì vậy 'Y' đại diện cho hai thành phần chính đầu tiên của' X'. –

+0

Bạn có thể xem Bản cập nhật không? Nó bao gồm việc thực hiện đầy đủ bao gồm câu trả lời của bạn. Cốt truyện của tôi trông khá khác với cốt truyện của bạn. Chỉ một thành phần của S khớp chính xác với S_reconstructed. (Câu hỏi 1) Không phải toàn bộ không gian 2 chiều nguyên bản của đầu vào nguồn S được tái tạo chưa? Việc thực hiện và sự hiểu biết của tôi không chính xác? (Câu hỏi 2) PCA có hoạt động trên dữ liệu nhị phân không? Tôi có thể áp dụng cùng một chương trình cho pca nhị phân không? Cảm ơn bạn đã dành thời gian và nỗ lực của bạn. – SKM

-3

Bạn có thể sử dụng chức năng pca từ hộp công cụ Thống kê.

coeff = pca(X) 

Từ documentation, mỗi cột của coeff chứa hệ số cho một thành phần chính. Vì vậy, bạn có thể tái tạo lại dữ liệu quan sát được X bằng cách nhân với coeff, ví dụ: X*coeff

2

Hiểu biết của bạn khá đúng. Một trong những lý do khiến ai đó sử dụng PCA là giảm kích thước của dữ liệu. Thành phần chính đầu tiên có phương sai mẫu lớn nhất trong số tất cả các kết hợp tuyến tính chuẩn hóa của các cột X. Thành phần chính thứ hai có phương sai tối đa tuân theo trực giao, vv. trên tập dữ liệu và quyết định cắt bỏ thành phần chính cuối cùng hoặc một số thành phần chính cuối cùng của dữ liệu. Điều này được thực hiện để giảm hiệu ứng của lời nguyền về chiều kích. Lời nguyền của chiều là một thuật ngữ được sử dụng để chỉ ra một thực tế là bất kỳ nhóm vectơ nào thưa thớt trong một không gian chiều tương đối cao. Ngược lại, điều này có nghĩa là bạn sẽ cần một lượng dữ liệu vô lý để tạo bất kỳ mô hình nào trên tập dữ liệu thứ nguyên khá cao, chẳng hạn như biểu đồ từ của tài liệu văn bản có thể có hàng chục nghìn thứ nguyên.

Có hiệu lực giảm kích thước bằng PCA sẽ xóa các thành phần có liên quan chặt chẽ. Ví dụ chúng ta hãy nhìn vào một bức tranh:

Cameraman

Như bạn có thể thấy, hầu hết các giá trị là gần như giống nhau, liên quan chặt chẽ. Bạn có thể hàn một số pixel tương quan bằng cách loại bỏ các thành phần chính cuối cùng. Điều này sẽ làm giảm kích thước của hình ảnh, đóng gói nó, bằng cách loại bỏ một số thông tin trong hình ảnh.

Không có cách kỳ diệu để xác định số tiền tốt nhất của các thành phần chính hoặc tái thiết tốt nhất mà tôi biết.

2

Tha thứ cho tôi nếu tôi không nghiêm túc về mặt toán học. Nếu chúng ta nhìn vào phương trình: X = A * S chúng ta có thể nói rằng chúng ta đang lấy một số dữ liệu hai chiều và chúng ta ánh xạ nó tới một không gian con 2 chiều trong không gian 5 chiều. A là một số cơ sở cho không gian con 2 chiều đó.

Khi chúng tôi giải quyết vấn đề PCA cho X và nhìn vào PC (compononet chính), chúng ta thấy rằng hai eignvectors lớn (mà coresponds cho hai eignvalues ​​lớn nhất) span cùng một không gian con mà A đã làm. (multpily A '* PC và thấy rằng cho ba eignvectors nhỏ đầu tiên chúng ta nhận được 0 có nghĩa là các vectơ trực giao với A và chỉ cho hai lớn nhất chúng ta nhận được các giá trị khác 0). Vì vậy, những gì tôi nghĩ rằng lý do tại sao chúng tôi có được một cơ sở khác cho không gian hai chiều này là vì X = A * S có thể là sản phẩm của một số A1 và S1 và cũng cho một số A2 và S2 khác và chúng tôi vẫn sẽ nhận được X = A1 * S1 = A2 * S2. PCA cung cấp cho chúng tôi là một cơ sở cụ thể tối đa hóa phương sai trong mỗi thứ nguyên.

Vậy làm thế nào để giải quyết vấn đề bạn gặp phải? Tôi có thể thấy rằng bạn đã chọn làm dữ liệu thử nghiệm một số lần theo hàm mũ sin và cos vì vậy tôi nghĩ bạn đang xử lý một loại dữ liệu cụ thể. Tôi không phải là một chuyên gia trong xử lý tín hiệu nhưng nhìn vào thuật toán MUSIC.

+0

Cảm ơn bạn đã trả lời. Dữ liệu thử nghiệm S của tôi có thể được tạo từ bất kỳ hệ thống nào. Nó cũng có thể là ngẫu nhiên. X = A * S + tiếng ồn (eq1) là mô hình dữ liệu và giảm kích thước trên X được thực hiện bằng cách sử dụng phương trình S = AX cho các thành phần chính và là dữ liệu trong chiều hướng giảm. Tôi có 2 câu hỏi, bạn có thể vui lòng giúp đỡ? – SKM

+0

S biểu thị dữ liệu thứ nguyên đã giảm mà dữ liệu chiều cao được quan sát thực tế là X có thứ nguyên cần phải được giảm. Nó cũng có thể là ngẫu nhiên. X = A * S + tiếng ồn (eq1) là mô hình dữ liệu và giảm kích thước trên X được thực hiện bằng cách sử dụng phương trình S = AX cho các thành phần chính và là dữ liệu trong chiều hướng giảm. Tôi có 2 câu hỏi, bạn có thể vui lòng giúp đỡ? – SKM

+0

(1) Điều không rõ ràng là ở dòng cuối cùng của việc triển khai nơi tôi đã làm Y = XX * pc. Câu lệnh này có cho Y là dữ liệu chiều giảm được bằng S được sử dụng trong eq1 không? Mục đích là vì tôi cần áp dụng bộ ước lượng vuông nhỏ nhất để ước tính A và S từ mô hình trong eq1. Sau khi ước tính, tôi sẽ có thể tính sai số trung bình giữa S và ước tính của nó. Sự hiểu biết của tôi sai ở đâu? – SKM

Các vấn đề liên quan