资源简介
matlab 实现PCA故障诊断功能,带测试测试数据,可直接运行
代码片段和文件信息
%建立模型:
Xtrain = CC(1:1000:);
Xtrain_Store = Xtrain;
%测试数据
Xtest = CC(1001:1500:);
Xtest_Store = Xtest;
size_= size(Xtest);
test_Count = size_(1);
%总输入变量个数
in_count = 10;
%标准化处理:
X_mean = mean(Xtrain); %按列求Xtrain平均值
X_std = std(Xtrain); %求标准差
[X_rowX_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_meanX_row1))./repmat(X_stdX_row1);
%求协方差矩阵
sigmaXtrain = cov(Xtrain);
%对协方差矩阵进行特征分解,lamda为特征值构成的对角阵,T的列为单位特征向量,且与lamda中的特征值一一对应:
[Tlamda] = eig(sigmaXtrain);
% disp(‘特征根(由小到大)‘);
% disp(lamda);
% disp(‘特征向量:‘);
% disp(T);
%取对角元素(结果为一列向量),即lamda值,并上下反转使其从大到小排列,主元个数初值为1,若累计贡献率小于90%则增加主元个数
D = flipud(diag(lamda));
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);
%求置信度为99%、95%时的T2统计控制限
T2UCL1=num_pc*(X_row-1)*(X_row+1)*finv(0.999num_pcX_row - num_pc)/(X_row*(X_row - num_pc));
T2UCL2=num_pc*(X_row-1)*(X_row+1)*finv(0.95num_pcX_row - num_pc)/(X_row*(X_row - num_pc));
%置信度为99%的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.99901); %正态累积分布的反函数
QUCL = theta(1)*(h0*ca*sqrt(2*theta(2))/theta(1) + 1 + theta(2)*h0*(h0 - 1)/theta(1)^2)^(1/h0);
%测试:
%标准化处理
n = size(Xtest1);
Xtest=(Xtest-repmat(X_meann1))./repmat(X_stdn1);
%求T2统计量,Q统计量
[ry] = size(P*P‘);
I = eye(ry);
T2 = zeros(n1);
Q = zeros(n1);
for i = 1:n
T2(i)=Xtest(i:)*P*inv(lamda(in_count-num_pc+1:in_countin_count-num_pc+1:in_count))*P‘*Xtest(i:)‘;
Q(i) = Xtest(i:)*(I - P*P‘)*Xtest(i:)‘;
end
%绘图
%figure
subplot(211);
plot(1:nT2‘k‘);
title(‘主元分析统计量变化图‘);
xlabel(‘采样数‘);
ylabel(‘T^2‘);
hold on;
line([0n][T2UCL1T2UCL1]‘Linestyle‘‘--‘‘Color‘‘r‘);
line([0n][T2UCL2T2UCL2]‘Linestyle‘‘--‘‘Color‘‘g‘);
subplot(212);
plot(1:nQ‘k‘);
xlabel(‘采样数‘);
ylabel(‘Q‘);
hold on;
line([0n][QUCLQUCL]‘Linestyle‘‘--‘‘Color‘‘r‘);
%贡献图
%1.确定造成失控状态的得分
S = Xtest(test_Count:)*P(:1:num_pc);
r = [ ];
for i = 1:num_pc
if S(i)^2/lamda(i) > T2UCL1/num_pc
r = cat(2ri);
end
end
%2.计算每个变量相对于上述失控得分的贡献
cont = zeros(length(r)in_count);
for i = length(r)
for j = 1:in_count
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3756 2014-04-25 16:32 Test2.m
文件 355986 2014-04-25 16:34 PCAdata.mat
----------- --------- ---------- ----- ----
359742 2
相关资源
- 高光谱图像pca分析特征提取
- pca源码matlab
- PCA人脸识别Eigenface特征脸Matlab
- RPCA图像去噪算法
- MATLAB 对iris数据集进行PCA
- 遥感影像融合_数字图像处理的matlab程
- EEMD集成经验模态分解matlab程序.rar
- 轴承故障诊断matlab代码四种方法
- 基于TE过程的PCA程序matlab
- 基于PCA和SVM的人脸识别.zip
- PCA算法实现人脸识别基于matlab GUI界面
- 基于matlab的人脸识别271850
- 2D2DPCA人脸识别matlab代码/ORL库
- PCA人脸识别MATLAB代码/ORL库
- PCA人脸识别论文附MATLAB程序
- KPCA matlab实现
- 基于K-L变换的人脸识别系统
- 基于PCA使用Yale人脸数据库的人脸识别
- 降维技术matlab工具箱
- 基于小波包能量分析的轴承故障诊断
- 2dpca的matlab源码
- 基于pca的图像压缩与重建代码
- 基于pca的图像压缩算法
- 流形学习——轴承振动数据和Matlab处
- 2DPCA的matlab代码
- 基于PCA算法实现人脸识别完整代码文
- MATLAB下人脸图像的PCA重构
- LDA与PCA的讲解与matlab演示
- 基于PCA的点云位姿估计与粗拼接,m
- 基于PCA的人脸识别matlab)
评论
共有 条评论