资源简介
pca用于对TE的过程故障诊断中,很好用的一个程序。希望采纳
代码片段和文件信息
function qn=kpca(dtrainkernelqFaCa);
% KPCA -核主成分分析
%
% 使用 [trainFeatbj]=kpca(datakernelp1p2)
% 输入 data - 原始数据文件名
% kernel - 核函数
% p1 p2 - 核函数参数
% q - 投影后的维数
% 输出 trainFeat - 映射到特征空间的样本
%训练样本
% global pp1FaCa
global pp1
[m n]=size(dtrain);
k=zeros(mm);
% 计算核矩阵
for i=1:m
for j=1:m
k(ij) = svkernel(kerneldtrain(i:)dtrain(j:));
end
end
D=mean(k1);%列均 运行时注意查看一下D和C是否与原来的J和J’相等
% C=mean(k2);%行均
E=mean(D);
J=repmat(Dm1);
% J‘
% J1=repmat(D‘1m);
% J2=repmat(C‘m1);%利用这种方法得到的结果和利用J和J‘得到的结果是一样的
k=k-J-J‘+repmat(Emm); %将核矩阵中心化
[pcsevalue]=eigs(kq‘LM‘); %核矩阵的特征向量和特征值;这里的q只是粗选q个最大的特征值,这样应该可以减小后面的计算量
%注意:使用eigs函数取的最大的q个特征值后,matlab将自动将这些特征值当做是一个q阶矩阵产生的
%的特征值。为此,在下面计算贡献率时,它将q个特征值的贡献率当做为100%,将和实际的样本贡献率发生很大的差别
% evoctor=pcs;%%%%%%%%%
%EIGS(AKSIGMA) and EIGS(ABKSIGMA) return K eigenvalues based on SIGMA:
%‘LM‘ or ‘SM‘ - Largest or Smallest Magnitude
%特征向量规范化
sqrtL=1./sqrt(diag(evalue));
invsqrtL=diag(sqrtL);
clear sqrtL
%sqrtL=diag(sqrt(evalue));
%invsqrtL=diag(1./diag(sqrtL));%注意,这里最后得到的invsqrtL变量是以ai为元素的对角矩阵!!!!!!!!!!!!
% pcs=invsqrtL*pcs‘;%这里是是根据公式将a的模值等于特征值的根号分之一
pcs=invsqrtL*pcs‘;
value=sum(evalue);
eev=value;
Tnew=pcs*k‘;%映射到主成分空间;取对应主元个数个ai系数
Tnew=Tnew‘;%%测试样本经过投影映射后得到的主元矩阵%Tnew是m1*pnum维的
es=inv(diag(eev));
for i=1:m
T2(i)=Tnew(i:)*es*Tnew(i:)‘;
end
c1=ones(m1);
ep=(1/(m^2))*sum(sum(k));
epp=repmat(epm1);
SPE=c1-(2/m).*sum(k2)+epp-diag(Tnew*Tnew‘);%对于每一个新样本的SPE值是按照《故障诊断与容错控制》PPT上140页的公式2.64计算的,
tts=length(SPE);
ttt=1:1:tts;
figure(2)
plot(tttSPE‘g-o‘);
num=ceil(0.08*m);%去掉总数的10%,将其当作误差
sortts1=sort(T2‘descend‘);
sortts2=sort(SPE‘descend‘);
ddt=sortts2(1:num);
tt=length(ddt);
qn=[];
for i=1:tt
qn=[qnfind(ddt(i)==SPE)];
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2201 2009-03-21 10:05 kKKKKKPCA.m
评论
共有 条评论