matlab PCA程序包含数据

  • k5_705077
    了解作者
  • matlab
    开发工具
  • 502.6KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-02-23 09:49
    上传日期
matlab编程PCA程序,包含数据,直接运行可出结果。
matlab PCA程序包含数据
  • 新建文件夹 (2)
  • PCA.m
    3.2KB
  • zc.xls
    917.5KB
  • gz.xls
    917.5KB
内容介绍
close;clc;clear all; %-------------------------------------------------------------------------- % 载入数据 d1=xlsread('zc.xls'); d2=xlsread('gz.xls'); %-------------------------------------------------------------------------- % 数据的标准化 stantData=d1(:,:); %引入标准数据 c=d2; %引入待检测数据 c1=ones(960,1); Xmean=mean(stantData);%标准数据的均值 Xstd=std(stantData); %标准数据的方差 X=(c-c1*Xmean)./(c1*Xstd); %用待检测数据减去标准数据的均值并除以方差后,得到标准化的待检测数据 %X=zscore(c); %标准化 %在此之所以用标准数据,是为了知道检测数据的偏离程度,因而减去标准数据的均值和方差 %为什么在此用标准数据的均值和方差 [P, T, LATENT, TSQUARED] = princomp(X); % LATENT是X的特征值;T=T得分向量;P=P负荷矩阵;(即T=XP) %-------------------------------------------------------------------------- %确定主元素个数k percent = input('确定方差贡献率限(0~1):'); % alpha0 是预设的贡献率,通常为85% k=0; for i=1:size(LATENT,1); %应用size函数返回LATENT的行维数(语法r=size(A,n)返回n指定的A的方向的维数:n=1为行方向的维数;n=2为列方向的维数) alpha(i)=sum(LATENT(1:i))/sum(LATENT); %求解贡献率 if alpha(i)>=percent ; %判断是否大于给定贡献率 k=i; %把主元个数提供给K break; end; end; %-------------------------------------------------------------------------- %存储新的变量 Xp=zeros(size(X)); for j=1:k; Xp=Xp+T(:,j)*P(:,j)'; %Xp是新的变量 end %-------------------------------------------------------------------------- beta = input('确定统计阈值置信水平(0~1):');%0.9 --0.99 theta=zeros(4,1); for i=1:3 ; for j=k+1:size(X,2) ; %j=k+1:52 theta(i)=theta(i)+LATENT(j)^(i); end end h0=1-2*theta(1)*theta(3)/[3*(theta(2)^2)];%h0=1-2*theta(1)*theta(3)/3/(theta(2)^2); SPEbeta=theta(1)*(norminv(beta)*(2*theta(2)*h0^2)^0.5/theta(1)+1+theta(2)*h0*(h0-1)/(theta(1)^2))^(1/h0);%求取SPE的阈值 T2knbeta=finv(beta,k,(size(X,1)-k))*k*(size(X,1)^2-1)/(size(X,1)*(size(X,1)-k)); %利用F分布来求T2统计的阈值 %-------------------------------------------------------------------------- %求取T2的公式 T2=zeros(960,1); for i=1:960; T2(i)=X(i,:)*P(:,1:k)*inv(diag(LATENT(1:k)))*P(:,1:k)'*X(i,:)'; % 书上的公式 end %-------------------------------------------------------------------------- % 求取Q的公式 Q=zeros(960,1); for i=1:960; Q(i)=X(i,1:k)*(eye(k)-P(1:k,1:k)*P(1:k,1:k)')'*(eye(k)-P(1:k,1:k)*P(1:k,1:k)')*X(i,1:k)'; % 书上的公式 end %-------------------------------------------------------------------------- figure(1); plot(T2(1:960)); hold on; TS=T2knbeta*ones(960,1); %产生全1矩阵{size(X,1) x 1}维,目的是画一条直线 plot(TS,'r--'); xlabel('采样次数'); ylabel('T2统计图'); hold off; print -djpeg 144T2; %保存t2统计图像 k; SPEbeta; T2knbeta; %-------------------------------------------------------------------------- figure(2); plot(Q(1:960)); hold on; SPES=SPEbeta*ones(960,1);%产生全1矩阵{size(X,1) x 1}维,目的是画一条直线 plot(SPES,'r--'); xlabel('采样次数'); ylabel('SPE统计图'); hold off; print -djpeg 144SPE; %保存SPE统计图像
评论
    相关推荐
    • Matlab合集
      冈萨雷斯数字图像处理MATLAB版.中文版+数字图像处理第二版中文版(冈萨雷斯)+MATLAB-R2014a完全自学一本通+MATLAB R2016a完全自学一本通 素材文件+[模式识别与智能计算:MATLAB技术实现(第2版)].杨淑莹.扫描版
    • Matlab教程
      MatlaB经典ppt,主要讲解了MatlaB的入门知识,图形编程以及仿真。
    • matlab 课件
      matlab 功能很强大,本课件详细的介绍了matlab在科学计算中的应用。
    • matlab编译器
      matlab编译为exe文件所需要的文件; 使用时解压,将解压后文件拖入至matlab命令行即可
    • matlab
      matlab的基础知识进行介绍
    • MatLab
      “#MatLab
    • MATLAB编译器
      基于MATLAB 2018b版本介绍MATLAB编译器。介绍如何利用编译器将MATLAB代码编译为独立应用程序或组件,并在没有安装MATLAB的计算机上进行部署。
    • matlab入门
      matlab的入门教程,很值得仔细看看,对提高matlab能力有帮助
    • matlab
      matlab经典课堂讲义
    • matlab
      matlab