• batch process
    了解作者
  • matlab
    开发工具
  • 3KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 2
    下载次数
  • 2020-04-10 23:15
    上传日期
核主元分析是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的低维特性。
PCA.zip
  • pca_qms.m
    3.6KB
  • PCA-TE(GL).m
    2.1KB
  • KPCA.m
    1.9KB
内容介绍
%%TE过程的传统主元分析在Matlab中的仿真程序 %建立模型: %载入模型数据 Xtrain = load('F:\matlab_program\data\Xtrain0.5.txt'); Xtrain = double(Xtrain); %载入测试数据,变量2,10% Xtest = load('F:\matlab_program\data\Xtest0.5_4.txt'); Xtest = double(Xtest); %标准化处理 X_mean = mean(Xtrain); %求阵列Xtrain的平均值; X_std = std(Xtrain); %求阵列Xtrain的标准差; [X_row,X_col] = size(Xtrain); %求Xtrain的行数、列数; % for i = 1:X_col % Xtrain(:,i) = (Xtrain(:,i) - X_mean(i)./X_std(i)); % Xtest(:,i) = (Xtest(:,i) - X_mean(i)./X_std(i)); % end Xtrain = (Xtrain - repmat(X_mean,X_row,1))./repmat(X_std,X_row,1); %求协方差矩阵,并对协方差矩阵进行特征分解 sigmaXtrain = cov(Xtrain); [T,lamda] = eig(sigmaXtrain); % disp('特征根(由小到大)'); % disp(lamda); % disp('特征向量:'); % disp(T); %取对角元素,即lamda值,并上下反转使其从大到小排列,主元个数初值为1,若累计贡献率小于85%则增加主元个数 D = flipud(diag(lamda)); num_pc = 1; while sum(D(1:num_pc))/sum(D) < 0.9 num_pc = num_pc +1; end pareto(diag(lamda)); double mypareto(X_col,D'); %取与lamda相对应的特征向量 P = T(:,X_col-num_pc+1:X_col); %求置信度为99%、95%时的T2统计控制限 T2UCL1 = num_pc*(X_row - 1)*(X_row + 1)*finv(0.99,num_pc,X_row - num_pc)/(X_row*(X_row - num_pc)); % T2UCL2 = num_pc*(X_row - 1)*(X_row + 1)*finv(0.95,num_pc,X_row - num_pc)/(X_row*(X_row - num_pc)); %置信度为95%的Q统计控制限 for i = 1:3 theta(i) = sum((D(num_pc+1:X_col)).^i); end h0 = 1 - 2*theta(1)*theta(3)/(3*theta(2)^2); ca = norminv(0.95,0,1); QUCL = theta(1)*(h0*ca*sqrt(2*theta(2))/theta(1) + 1 + theta(2)*h0*(h0 - 1)/theta(1)^2)^(1/h0); %在线监测: %标准化处理 n = size(Xtest,1); Xtest = (Xtest - repmat(X_mean,n,1))./repmat(X_std,n,1); %求T2统计量,Q统计量 [r,y] = size(P*P'); I = eye(r,y); T2 = zeros(n,1); Q = zeros(n,1); for i = 1:n T2(i) = Xtest(i,:)*P*inv(lamda(18-num_pc+1:18,18-num_pc+1:18))*P'*Xtest(i,:)'; Q(i) = Xtest(i,:)*(I - P*P')*Xtest(i,:)'; end %绘图 figure subplot(2,1,1); plot(1:n,T2,'k'); title('主元分析统计量变化图'); xlabel('采样数'); ylabel('T^2'); hold on; line([0,n],[T2UCL1,T2UCL1],'LineStyle','--','Color','r'); % line([0,n],[T2UCL2,T2UCL2],'LineStyle','--','Color','g'); subplot(2,1,2); plot(1:n,Q,'k'); xlabel('采样数'); ylabel('Q'); hold on; line([0,n],[QUCL,QUCL],'LineStyle','--','Color','r'); %贡献图 %1.确定造成失控状态的得分 S = Xtest(800,:)*P(:,1:num_pc); r = [ ]; for i = 1:num_pc if S(i)^2/lamda(i) > T2UCL1/num_pc r = cat(2,r,i); end end %2.计算每个变量相对于上述失控得分的贡献 cont = zeros(length(r),18); for i = length(r) for j = 1:18 cont(i,j) = abs(S(i)/D(i)*P(j,i)*Xtest(800,j)); end end %3.计算每个变量的总贡献 CONTJ = zeros(18,1); for j = 1:18 CONTJ(j) = sum(cont(:,j)); end %4.计算每个变量对Q的贡献 e = Xtest(800,:)*(I - P*P'); contq = e.^2; %5. 绘制贡献图 figure; subplot(2,1,1); bar(CONTJ,'k'); xlabel('变量号'); ylabel('T^2贡献率 %'); subplot(2,1,2); bar(contq,'k'); ylabel('Q贡献率 %'); xlabel('变量号');
评论
    相关推荐