Matlab:信号的主成分分析(光谱分解)
Matlab: Principle component analysis on signal (spectral unmixing)
我有一个光谱(波长 (x) 与吸收 (y)),它是两个信号 (xa,ya) 和 (xb,yb) 的混合。我正在尝试使用 PCA(我在网上找到的代码)来分解 (x,y) 中的信号:
%step 1, input data
numdata=length(data(:,1));
x=data(:,1);
y=data(:,1);
%step 2, finding a mean and subtracting
xmean=mean(x);
ymean=mean(y);
xnew=x-xmean*ones(numdata,1);
ynew=y-ymean*ones(numdata,1);
subplot(3,1,1);
plot(x,y, 'o');
title('Original Data');
%step 3, covariance matrix
covariancematrix=cov(xnew,ynew);
%step 4, Finding Eigenvectors
[V,D] = eig(covariancematrix);
D=diag(D);
maxeigval=V(:,find(D==max(D)));
%step 5, Deriving the new data set
%finding the projection onto the eigenvectors
finaldata=maxeigval'*[xnew,ynew]';
subplot(3,1,2);
stem(finaldata, 'DisplayName', 'finaldata', 'YDataSource', 'finaldata');
title('PCA 1D output ')
%we do a classification now
subplot(3,1,3);
title('Final Classification')
hold on
for i=1:size(finaldata,2)
if finaldata(i)>=0
plot(x(i),y(i),'o')
plot(x(i),y(i),'r*')
else
plot(x(i),y(i),'o')
plot(x(i),y(i),'g*')
end
end
如何最好地应用 PCA 输出将 (y) 分解为分量 ya 和 yb?我没有使用 PCA 的经验,也找不到任何关于此应用程序的在线教程。最好为训练谱生成特征向量,然后与测试谱进行比较吗?谢谢
本论文第3.3节内容丰富:https://brage.bibsys.no/xmlui//bitstream/handle/11250/2371385/12296_FULLTEXT.pdf?sequence=1&isAllowed=y
“PCA 本身不是一种分类方法,但这是基于哪个吸收光谱属于哪个 material 的知识完成的。但是,PCA 可以用作分类工具。为了这样做,需要
训练数据。 PCA 是在训练数据上进行的,并且一些测试数据被投影到训练数据的基础上。这称为 PCA 分解。"
所以我想我可以使用上面的代码作为起点。
我有一个光谱(波长 (x) 与吸收 (y)),它是两个信号 (xa,ya) 和 (xb,yb) 的混合。我正在尝试使用 PCA(我在网上找到的代码)来分解 (x,y) 中的信号:
%step 1, input data
numdata=length(data(:,1));
x=data(:,1);
y=data(:,1);
%step 2, finding a mean and subtracting
xmean=mean(x);
ymean=mean(y);
xnew=x-xmean*ones(numdata,1);
ynew=y-ymean*ones(numdata,1);
subplot(3,1,1);
plot(x,y, 'o');
title('Original Data');
%step 3, covariance matrix
covariancematrix=cov(xnew,ynew);
%step 4, Finding Eigenvectors
[V,D] = eig(covariancematrix);
D=diag(D);
maxeigval=V(:,find(D==max(D)));
%step 5, Deriving the new data set
%finding the projection onto the eigenvectors
finaldata=maxeigval'*[xnew,ynew]';
subplot(3,1,2);
stem(finaldata, 'DisplayName', 'finaldata', 'YDataSource', 'finaldata');
title('PCA 1D output ')
%we do a classification now
subplot(3,1,3);
title('Final Classification')
hold on
for i=1:size(finaldata,2)
if finaldata(i)>=0
plot(x(i),y(i),'o')
plot(x(i),y(i),'r*')
else
plot(x(i),y(i),'o')
plot(x(i),y(i),'g*')
end
end
如何最好地应用 PCA 输出将 (y) 分解为分量 ya 和 yb?我没有使用 PCA 的经验,也找不到任何关于此应用程序的在线教程。最好为训练谱生成特征向量,然后与测试谱进行比较吗?谢谢
本论文第3.3节内容丰富:https://brage.bibsys.no/xmlui//bitstream/handle/11250/2371385/12296_FULLTEXT.pdf?sequence=1&isAllowed=y
“PCA 本身不是一种分类方法,但这是基于哪个吸收光谱属于哪个 material 的知识完成的。但是,PCA 可以用作分类工具。为了这样做,需要 训练数据。 PCA 是在训练数据上进行的,并且一些测试数据被投影到训练数据的基础上。这称为 PCA 分解。"
所以我想我可以使用上面的代码作为起点。