⛄一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【故障诊断】基于matlab核主成分分析KPCA故障诊断(含SPE统计量 T2统计量)【含Matlab源码 4782期】
获取代码方式2:
付费专栏Matlab信号处理(初级版)
备注:
点击上面蓝色字体付费专栏Matlab信号处理(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab信号处理(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码
⛄二、部分源代码
clc
clear all
close all
%% KPCA
%% 读取数据(数据的行数为采样点个数,列数为传感器个数)
load trainData
load testData
%% 参数设置
beta =0.99; % 置信系数
PCContributionRate = 0.85; % 主元贡献率
KernelWidth = 20; % 高斯核函数参数:核宽度,
ker = struct(‘type’,‘gauss’,‘width’,KernelWidth);
%% 预处理
trainData_mean = mean(trainData,1); % 训练数据的均值
trainData_std = std(trainData); % 训练数据的标准差
trainData_zscore = zscore(trainData);% 标准化
trainDataLength = length(trainData);
%% KPCA
K = computeKernelMatrix(ker,trainData_zscore,trainData_zscore); % 核矩阵
UnitTrain = ones(trainDataLength,trainDataLength)/trainDataLength;
K_Centering = K-UnitTrainK-KUnitTrain+UnitTrainKUnitTrain; % 核矩阵中心化
K_Scaling = K_Centering*(trainDataLength -1)/(trace(K_Centering)); % 核矩阵方差归一化
[V,D] = eigs(K_Centering);% 特征值分解并排序
lamda = diag(D);
lamdaLength = length(lamda); % 特征值个数
Vseq_Zscore = cell2mat(arrayfun(@(n) V(:,n)/(norm(V(:,n))sqrt(lamda(n,1))), …
1:lamdaLength , ‘UniformOutput’, 0)); % 特征向量标准化
% 求取主元个数
PCNumber = find(cumsum(lamda/sum(lamda)) >= PCContributionRate,1, ‘first’);
% PCNumber = 1;
LoadingMatrix = Vseq_Zscore(:,1:PCNumber);
% 求取主成分
ScoreMatrix = K_ScalingLoadingMatrix ;
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除