核主成分分析(KPCA)
使用KPCA进行降维、故障检测和故障诊断的MATLAB代码
版本2.2,2021年5月14日
电邮:iqiukp@outlook.com
主要特征
- 用于培训和测试KPCA模型的易用API
- 万博1manbetx支持降维、数据重建、故障检测和故障诊断
- 多种核函数(线性、高斯、多项式、S形、拉普拉斯)
- 培训和测试结果的可视化
- 根据给定的解释级别或给定的编号确定部件编号
通知
- 仅支持高斯核的故障诊断。万博1manbetx
- 此代码仅供参考。
如何使用
01.核函数
一个类命名内核定义了计算核函数矩阵的方法。
%{类型-线性:k (x, y) = x ' * y多项式:k (x, y) =(γ* x ' * y + c) ^ d高斯:k (x, y) = exp(-γ* | | x - y | | ^ 2)乙状结肠:k (x, y) =双曲正切(γ* x ' * y + c)拉普拉斯算子:k (x, y) = exp(-γ* | | x - y | |)学位- d抵消cγ-γ%}内核=内核(“类型”、“高斯”、“伽马”,值);kernel = kernel ('type', '多项式','degree', value);kernel = kernel ('type', 'linear');kernel = kernel ('type', 'sigmoid', 'gamma', value);kernel = kernel ('type', 'laplacian', 'gamma', value);
例如,计算X和Y
X=兰特(5,2);Y=兰特(3,2);内核=内核('type','gaussian','gamma',2);kernelMatrix=kernel.computeMatrix(X,Y);>>kernelMatrix kernelMatrix=0.5684 0.5607 0.4007 0.4651 0.8383 0.5091 0.8392 0.7116 0.9834 0.4731 0.8816 0.8052 0.5034 0.9807 0.7274
02.用于降维的简单KPCA模型
CLC clear all close all addpath(genpath(pwd)) load('.\data\helix。mat', 'data') kernel = kernel ('type', '高斯','gamma', 2);struct('numComponents', 2,…kernelFunc,内核);%构建一个KPCA对象% train KPCA模型KPCA .train(数据);% mapping数据mapingdata = kpca.score;% Visualization kplot = KernelPCAVisualization();可视化映射数据kplot.score(kpca)
训练结果(降维):
***KPCA模型培训完成***运行时间=0.2798秒核函数=高斯样本数=1000个特征数=3个组件数=2个T2报警数=135个SPE报警数=0个T2准确度=86.5000%SPE准确度=100.0000%
另一个使用香蕉形数据的应用程序:
03.简单的KPCA模型用于重建
CLC clear all close all addpath(genpath(pwd)) load('.\data\circle. txt . txt . txt . txt . txt . txt . txt . txt。mat', 'data') kernel = kernel ('type', '高斯','gamma', 0.2);struct('numComponents', 2,…kernelFunc,内核);%构建一个KPCA对象% train KPCA模型KPCA .train(数据);%重构数据reconstructedData = kpca.newData;% Visualization kplot = KernelPCAVisualization();kplot.reconstruction (kpca)
4成分数测定
可以根据给定的解释级别或给定的编号确定部件编号。
案例1
组件的数量由给定的解释水平决定。给定的解释级别应该是0 <解释级别< 1。例如,当解释级别设置为0.75时,参数设置为:
struct('numComponents', 0.75,…kernelFunc,内核);
代码是
clc clear all close all addpath(genpath(pwd))load('.\data\TE.mat',trainData')kernel=kernel('type','gaussian','gamma',1/128^2);parameter=struct('numComponents',0.75,'kernelFunc',kernel kernel);%构建KPCA对象KPCA=KernelPCA(parameter);%训练KPCA模型KPCA.train(trainData);%可视化kplot=kernelPCavisization();kplot.CUMCA(kpca)
如图所示,当组件数量为21时,累积贡献率为75.2656%,超过给定的解释水平(0.75)。
案例2
组件的数量由给定的数量决定。例如,当给定数字设置为24时,参数应设置为:
参数=struct('numComponents',24,…'kernelFunc',kernel);
代码是
clc clear all close all addpath(genpath(pwd))加载('.\data\TE.mat','trainData')内核=内核('type','gaussian','gammar',1/128^2);参数=struct('numComponents',24,'kernelFunc',kernel);%生成KPCA对象KPCA=KernelPCA(参数);%列车KPCA模型KPCA列车(列车数据);%可视化kplot=KernelPCAVisualization();kplot.CUMCA(kpca)
如图所示,当组件数量为24时,累积贡献率为80.2539%。
5故障检测
使用KPCA(TE过程数据)进行故障检测的演示
clc clear all close all addpath(genpath(pwd)) load('.\data\TE。kernel = kernel ('type', '高斯','gamma', 1/128^2);struct('numComponents', 0.65,…kernelFunc,内核);%构建一个KPCA对象% training KPCA模型KPCA .train(trainData);% test KPCA模型结果= KPCA .test(testData);% Visualization kplot = KernelPCAVisualization();kplot.cumContribution (kpca) kplot.trainResults kplot (kpca)。检测结果(kpca、结果)
培训结果如下:
* * * * * * KPCA模型训练结束运行时间= 0.0986 = 500秒高斯核函数=数量的样本特征的数量= 52组件的数量= 16 T2警报的数量= 16 SPE警报的数量= 17 T2 = 96.8000%的准确性SPE = 96.6000%的准确性
测试结果如下:
*** KPCA模型试验完毕***运行时间= 0.0312秒试验数据数= 960条T2告警数= 799条SPE告警数= 851条
06.故障诊断
注意
- 如果要计算某个时间的CPS,应将开始时间设置为结束时间。例如,“诊断”[500500]
- 如果要计算一段时间的平均CPS,则应分别设置开始时间和结束时间。”诊断',[300500]
- 故障诊断模块仅支持高斯核函数,当训练数据较多时,可能需要较长的时间。万博1manbetx
clc clear all close all addpath(genpath(pwd)) load('.\data\TE。kernel = kernel ('type', '高斯','gamma', 1/128^2);struct('numComponents', 0.65,…kernelFunc,内核,…“诊断”,300年、500年);%构建一个KPCA对象% training KPCA模型KPCA .train(trainData);% test KPCA模型结果= KPCA .test(testData);% Visualization kplot = KernelPCAVisualization();kplot.cumContribution (kpca) kplot.trainResults kplot (kpca)。检测结果(kpca、结果)kplot.diagnosis(结果)
诊断结果:
***故障诊断***故障诊断启动…完成故障诊断。运行时间= 18.2738秒起点= 300终点= 500故障变量(T2) = 44 1 4故障变量(SPE) = 1 44 18
核主成分分析
要查看或报告此GitHub加载项中的问题,请访问GitHub库.
要查看或报告此GitHub加载项中的问题,请访问GitHub库.