核主成分分析(KPCA)
使用KPCA进行降维、故障检测和故障诊断的MATLAB代码
版本2.2,14 - 5 - 2021
电子邮件:iqiukp@outlook.com
主要特点
- 简单易用的API用于KPCA模型的培训和测试
- 金宝app支持降维、数据重构、故障检测和故障诊断
- 多种核函数(线性、高斯、多项式、s型、拉普拉斯)
- 培训和测试结果的可视化
- 根据给定的解释水平或给定的数字确定组件数量
通知
- 仅支持高斯核的故障诊断。金宝app
- 此代码仅供参考。
如何使用
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 = rand(5, 2);Y = rand(3,2);kernel = kernel ('type', '高斯','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)
04.组件数量确定
组件编号可以根据给定的解释级别或给定的编号来确定。
案例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', '高斯','gamma', 1/128^2);struct('numComponents', 0.75,…kernelFunc,内核);%构建一个KPCA对象% training KPCA模型KPCA .train(trainData);% Visualization kplot = KernelPCAVisualization();kplot.cumContribution (kpca)
如图所示,当分量数为21时,累积贡献率为75.2656%,超过了给定的解释水平(0.75)。
案例2
组件的数量由给定的数量决定。例如,当给定的数字设置为24时,参数设置为:
struct('numComponents', 24,…kernelFunc,内核);
代码是
clc clear all close all addpath(genpath(pwd)) load('.\data\TE。mat', 'trainData') kernel = kernel ('type', '高斯','gamma', 1/128^2);struct('numComponents', 24,…kernelFunc,内核);%构建一个KPCA对象% training KPCA模型KPCA .train(trainData);% Visualization kplot = KernelPCAVisualization();kplot.cumContribution (kpca)
如图所示,当分量数为24时,累积贡献率为80.2539%。
05.故障检测
使用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,需要将开始时间设置为结束时间。例如,'diagnosis', [500,500]
- 如果要计算某一时间段的平均CPS,需要分别设置开始时间和结束时间。“诊断”,(300、500)
- 该故障诊断模块仅支持高斯核函数,当训练数据量较大时,故障诊断需要较长时金宝app间。
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
KernelPCA
要查看或报告这个GitHub插件中的问题,请访问GitHub库.
要查看或报告这个GitHub插件中的问题,请访问GitHub库.