核主成分分析(KPCA)
MATLAB代码降维,故障检测,故障诊断使用KPCA
2.2版,2021年5月14日
电子邮件:iqiukp@outlook.com
主要特点
- 易于使用的API训练和测试KPCA模型
- 万博1manbetx支持降维、数据重构、故障检测和故障诊断
- 多种核函数(线性、高斯、多项式、sigmoid、拉普拉斯)
- 训练和测试结果的可视化
- 根据给定的解释电平或给定的数来确定组件数
通知
- 仅支持高斯内核的故障诊断。万博1manbetx
- 此代码仅供参考。
如何使用
01.内核函数
一个名为内核定义为计算核函数矩阵。
% {类型,线性:k(x,y) = x'*y多项式:k(x,y) = (γ*x'*y+c)^d高斯:k(x,y) = exp(-γ*||x-y||^2)Sigmoid: k(x,y) = tanh(γ*x'*y+c)拉普拉斯函数:k(x,y) = exp(-γ*||x-y||)度- d偏移量- cγ - γ%}内核=内核('类型','高斯','γ',价值);内核=内核('类型','多项式','学位',价值);内核=内核('类型','线性');内核=内核('类型','乙状结肠','γ',价值);内核=内核('类型','拉普拉斯算子','γ',价值);
例如,计算之间的核矩阵X和Y
X=兰德(5,2);Y=兰德(3.,2);内核=内核('类型','高斯','γ',2);kernelMatrix=内核.computeMatrix(X,Y);>>kernelMatrixkernelMatrix=0.56840.56070.40070.46510.83830.50910.83920.71160.98340.47310.88160.80520.50340.98070.7274
02.简单的KPCA降维模型
clc清晰的所有关闭所有目录(genpath(松材线虫病))负载('\ \ helix.mat数据','数据')内核=内核('类型','高斯','γ',2);参数=结构体('numComponents',2,……'kernelFunc',内核);%构建一个KPCA对象kpca=KernelPCA(参数);%训练KPCA模型kpca.火车(数据);% mapping datamappingData=kpca.分数;%可视化kplot=KernelPCAVisualization();%可视化映射数据kplot.分数(kpca)
训练结果(降维):
* * *KPCA模型培训完成了* * *运行时间= 0.2798秒内核函数=高斯数量样本的数量= 1000数量特征= 3数量分量= 2数量T2报警= 135数量SPE告警= 0精度T2 = 86.5000%精度的SPE = 100.0000%
另一个使用香蕉形状数据的应用程序:
03.简单的KPCA重建模型
clc清晰的所有关闭所有目录(genpath(松材线虫病))负载('\ \ circle.mat数据','数据')内核=内核('类型','高斯','γ',0.2);参数=结构体('numComponents',2,……'kernelFunc',内核);%构建一个KPCA对象kpca=KernelPCA(参数);%训练KPCA模型kpca.火车(数据);% reconstructed datareconstructedData=kpca.newData;%可视化kplot=KernelPCAVisualization();kplot.重建(kpca)
04.元件编号的确定
组件编号可以根据给定的解释级别或给定的编号确定。
案例1
组件的数量由给定的解释级别决定。给定的被解释级别应该是0 <被解释级别< 1。例如,当被解释级别设置为0.75时,参数应设置为:
参数=结构体('numComponents',0.75,……'kernelFunc',内核);
代码是
clc清晰的所有关闭所有目录(genpath(松材线虫病))负载('\ \ TE.mat数据','trainData')内核=内核('类型','高斯','γ',1/128^2);参数=结构体('numComponents',0.75,……'kernelFunc',内核);%构建一个KPCA对象kpca=KernelPCA(参数);%训练KPCA模型kpca.火车(trainData);%可视化kplot=KernelPCAVisualization();kplot.cumContribution(kpca)
如图所示,组分数为21时,累积贡献率为75.2656%,超过给定的解释水平0.75。
案例2
组件的数量由给定的数量决定。例如,当给定的数字设置为24时,参数应该设置为:
参数=结构体('numComponents',24,……'kernelFunc',内核);
代码是
clc清晰的所有关闭所有目录(genpath(松材线虫病))负载('\ \ TE.mat数据','trainData')内核=内核('类型','高斯','γ',1/128^2);参数=结构体('numComponents',24,……'kernelFunc',内核);%构建一个KPCA对象kpca=KernelPCA(参数);%训练KPCA模型kpca.火车(trainData);%可视化kplot=KernelPCAVisualization();kplot.cumContribution(kpca)
如图所示,当组分数为24时,累积贡献率为80.2539%。
05.故障检测
使用KPCA (TE过程数据)进行故障检测的演示
clc清晰的所有关闭所有目录(genpath(松材线虫病))负载('\ \ TE.mat数据','trainData','testData')内核=内核('类型','高斯','γ',1/128^2);参数=结构体('numComponents',0.65,……'kernelFunc',内核);%构建一个KPCA对象kpca=KernelPCA(参数);%训练KPCA模型kpca.火车(trainData);%测试KPCA模型结果=kpca.测试(testData);%可视化kplot=KernelPCAVisualization();kplot.cumContribution(kpca)kplot.trainResults(kpca)kplot.检测结果(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]
- 故障诊断模块仅支持高斯核函数,当训练数据量较大时,可能需要较长的时间。万博1manbetx
clc清晰的所有关闭所有目录(genpath(松材线虫病))负载('\ \ TE.mat数据','trainData','testData')内核=内核('类型','高斯','γ',1/128^2);参数=结构体('numComponents',0.65,……'kernelFunc',内核,……'诊断', (300,500]);%构建一个KPCA对象kpca=KernelPCA(参数);%训练KPCA模型kpca.火车(trainData);%测试KPCA模型结果=kpca.测试(testData);%可视化kplot=KernelPCAVisualization();kplot.cumContribution(kpca)kplot.trainResults(kpca)kplot.检测结果(kpca,结果)kplot.诊断(结果)
诊断结果:
* * *的错诊断* * *的错诊断开始……的错诊断完成。运行时间= 18.2738秒开始点= 300结束点= 500的错变量(T2) = 44 1的错变量(SPE) = 1 44 18
引用作为
邱克鹏(2023)。核主成分分析(KPCA)GitHub (https://github.com/iqiukp/KPCA-MATLAB)。检索.
KernelPCA
无法下载使用GitHub默认分支的版本
版本 | 发表 | 发布说明 | |
---|---|---|---|
2.2.1 | *增加描述 |
|
|
2.2 | 请访问https://github.com/iqiukp/Kernel-Principal-Component-Analysis-KPCA有关详细信息。 |
|
|
2.1.2 | 1.增加了一些描述 |
|
|
2.1.1 | 1.增加了一些描述 |
|
|
2.1 | 1.增加了对数据万博1manbetx重构的支持 |
|
|
2.0 | 1.采用OOP重写部分模块。 |
|
|
1.2 | 1.修正了一些错误 |
|
|
1.1.1 | 1.修正了一些错误 |
|
|
1.1 | 1.修正了一些错误 |
|
|
1.0.0 |
|
要查看或报告此GitHub插件中的问题,请访问GitHub库.
要查看或报告此GitHub插件中的问题,请访问GitHub库.