Matlab:信号的主成分分析(光谱解混)

时间:2017-04-07 10:39:43

标签: matlab pca spectrum mixing

我有一个光谱(波长(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输出应用于unmix(y)到组件ya和yb?我没有PCA的经验,也无法在线找到这个应用程序的好教程。是否最好生成用于训练频谱的特征向量,然后与测试频谱进行比较?感谢

enter image description here

1 个答案:

答案 0 :(得分:0)

本文第3.3节内容丰富:https://brage.bibsys.no/xmlui//bitstream/handle/11250/2371385/12296_FULLTEXT.pdf?sequence=1&isAllowed=y

" PCA本身不是一种分类方法,但这是基于哪种吸收光谱属于哪种材料的知识来完成的。然而,PCA可以用作分类工具。为了做到这一点,人们需要 培训数据。 PCA在训练数据上执行,并且一些测试数据被投射到训练数据的基础上。这称为PCA分解。"

所以我认为我可以使用上面的代码作为起点。