• 大小: 3KB
    文件类型: .m
    金币: 2
    下载: 1 次
    发布日期: 2022-12-30
  • 语言: Matlab
  • 标签: PCA  

资源简介

为了说明什么是数据的主成分,先从数据降维说起。数据降维是怎么回事儿?假设三维空间中有一系列点,这些点分布在一个过原点的斜面上,如果你用自然坐标系x,y,z这三个轴来表示这组数据的话,需要使用三个维度,而事实上,这些点的分布仅仅是在一个二维的平面上,那么,问题出在哪里?如果你再仔细想想,能不能把x,y,z坐标系旋转一下,使数据所在平面与x,y平面重合?这就对了!如果把旋转后的坐标系记为x',y',z',那么这组数据的表示只用x'和y'两个维度表示即可!当然了,如果想恢复原来的表示方式,那就得把这两个坐标之间的变换矩阵存下来。

资源截图

代码片段和文件信息

clc; clear all; close all;
I1=importdata( ‘d00_te.dat‘);%从外部将文本或者数据文件如txt.dat导入到Matlab的workspace中
I2=importdata( ‘d01_te.dat‘);
%I3=importdata( ‘d00_te.dat‘);
X1(::)=I1(::);
X2(::)=I2(::);

                         %离线过程
%数据标准化,使用的是每一列的平均值和标准差
X_mean = mean(X1);  %按列求X1平均值                           
X_std = std(X1);    %求标准差                      
[X_rowX_col] = size(X1); %求X1行、列数               
X1=(X1-repmat(X_meanX_row1))./repmat(X_stdX_row1);

%求协方差矩阵
sigmaX1 = cov(X1);
%对协方差矩阵进行特征分解,lamda为特征值构成的对角阵,T的列为单位特征向量,且与lamda中的特征值一一对应:
[Tlamda] = eig(sigmaX1); 
%取对角元素(结果为一列向量),即lamda值,并上下反转使其从大到小排列,主元个数初值为1,若累计贡献率小于90%则增加主元个数
D = flipud(diag(lamda)); %diag取对角线元素,flipud矩阵翻转                           
num_pc = 1;                                         
while sum(D(1:num_pc))/sum(D) < 0.9  
num_pc = num_pc +1;
end                                                 
%取与lamda相对应的特征向量
P = T(:X_col-num_pc+1:X_col);%P是取得主元矩阵
%TT=X1*T;
%TT1=X1*P;
%求置信度为95%时的T^2统计控制限,利用F-分布确定                       
T2UCL1=num_pc*(X_row-1)*(X_row+1)*finv(0.95num_pcX_row - num_pc)/(X_row*(X_row - num_pc));
%置信度为95%的Q统计控制限
for i = 1:3

评论

共有 条评论