matlab 数据降维和重构_核主成分分析(Kernel PCA, KPCA)的MATLAB 实现

matlab 数据降维和重构_核主成分分析(Kernel PCA, KPCA)的MATLAB 实现_第1张图片

前言

核主成分分析 (KPCA) 是一种非线性数据处理方法,其核心思想是通过一个非线性映射把原始空间的数据投影到高维特征空间, 然后在高维特征空间中进行基于主成分分析 (PCA) 的数据处理。KPCA通常有以下主要应用:

  • 降维
  • 特征提取
  • 去噪
  • 故障检测

由于 KPCA 的原理已经有很多文章介绍了,本文不再赘述,侧重是介绍 KPCA 的 MATLAB 实现。

KPCA 建模流程

KPCA 的建模流程如下[1]

  1. 获取训练数据
  2. 计算核矩阵
  3. 核矩阵中心化
  4. 特征值分解
  5. 特征向量的标准化处理
  6. 主成分个数的选取
  7. 计算非线性主成分
  8. 计算 SPE 和 T2 统计量
  9. 计算 SPE 和 T2 统计量的控制限

通过步骤1-7可以实现数据降维或者特征提取(即非线性主成分)。另外,基于 KPCA 的数据重构一般是通过求解近似的逆映射,把所获取的非线性主成分重构到原始空间,本文参考以下资料来实现 KPCA 数据重构[2]的MATLAB实现:

  1. Python 的机器学习库 Scikit-learn (sklearn)[3]:sklearn.decomposition.KernelPCA.inverse_transform
  2. Bakır G H, Weston J, Schölkopf B. Learning to find pre-images [J]. Advances in neural information processing systems, 2004, 16: 449-456.

通过步骤1-9实现故障检测模型的建立。对于测试数据,在获取 KPCA 模型的基础上,实现故障检测的流程为:

  1. 获取测试数据
  2. 计算核矩阵
  3. 核矩阵中心化
  4. 计算测试数据的非线性主成分
  5. 计算 SPE 和 T2 统计量
  6. 与 SPE 和 T2 统计量的控制限进行比较
  7. 若超过控制限,则判断为故障,并进行故障诊断。

对于步骤7, 通过计算故障区间的 SPE 和 T2 统计量的贡献率来实现故障诊断。本文参考以下资料来实现KPCA故障检测和故障诊断[4]

  1. Lee J M, Yoo C K, Choi S W, et al. Nonlinear process monitoring using kernel principal component analysis[J]. Chemical engineering science, 2004, 59(1): 223-234. (故障检测)
  2. Deng X, Tian X. A new fault isolation method based on unified contribution plots[C]//Proceedings of the 30th Chinese Control Conference. IEEE, 2011: 4280-4285. (故障诊断)

KPCA 的 MATLAB 实现

笔者在上述资料的基础上,编写了 KPCA 的 MATLAB 实现代码,主要特点有:

  • 易于使用的函数接口
  • 支持多种常用的核函数
  • 支持数据降维和重构
  • 支持故障检测和故障诊断

源代码已经发布在 MATLAB 中文论坛、 GitHub 和 MathWorks 的 File Exchange:

核主元分析 (KPCA)的降维、特征提取以及故障检测应用​www.ilovematlab.cn
matlab 数据降维和重构_核主成分分析(Kernel PCA, KPCA)的MATLAB 实现_第2张图片
https://github.com/iqiukp/Kernel-Principal-Component-Analysis-KPCA​github.com Kernel Principal Component Analysis (KPCA)​ww2.mathworks.cn
matlab 数据降维和重构_核主成分分析(Kernel PCA, KPCA)的MATLAB 实现_第3张图片

下面介绍代码的组成。

核函数

类 Kernel 提供了以下6种核函数 :

  1. linear kernel function
  2. gaussian kernel function
  3. polynomial kernel function
  4. sigmoid kernel function
  5. exponential kernel function
  6. laplacian kernel function

KPCA

KPCA的训练、测试和可视化由类 KernelPCA 、类 KernelPCAFunction 和 类 Visualization实现。

类 KernelPCA 是核心模块,方法包括:

  1. KernelPCA:构造函数
  2. train:模型训练
  3. test:模型测试
  4. reconstruct:数据重构
  5. computeEigenvalue:特征值分解
  6. computeControlLimit:计算统计量的控制限
  7. diagnose:故障诊断
  8. computeContribution:统计量的贡献率

类 KernelPCAFunction 实现一些辅助功能,方法包括:

  1. checkInput:初始化参数
  2. displayTrain:模型的信息输出
  3. displayTest:模型的信息输出

类 Visualization 实现实验结果的可视化,方法包括:

  1. map:可视化降维数据(dim = 2)
  2. prediction:可视化故障检测结果
  3. reconstruct:可视化数据重构结果
  4. diagnose:可视化故障重构结果

数据降维 (特征提取) 示例 (circle 数据 和 banana 数据,高斯核函数)

clc

为了方便可视化,circle 数据 和 banana 数据都是只有2个特征的数据。其降维(特征提取)结果为:

matlab 数据降维和重构_核主成分分析(Kernel PCA, KPCA)的MATLAB 实现_第4张图片
circle 数据的降维 (特征提取) 结果

matlab 数据降维和重构_核主成分分析(Kernel PCA, KPCA)的MATLAB 实现_第5张图片
banana 数据的降维 (特征提取) 结果

数据重构示例 (circle 数据 和 banana 数据,高斯核函数)

clc

数据重构结果为:

matlab 数据降维和重构_核主成分分析(Kernel PCA, KPCA)的MATLAB 实现_第6张图片
circle 数据的重构结果

matlab 数据降维和重构_核主成分分析(Kernel PCA, KPCA)的MATLAB 实现_第7张图片
banana 数据的重构结果

故障检测示例 (TE 过程数据,高斯核函数)

clc

TE过程是一个典型的工业过程,本文实验的训练数据为500*52,测试数据为960*52,数据矩阵的行为样本个数,列为特征个数。故障检测结果为:

matlab 数据降维和重构_核主成分分析(Kernel PCA, KPCA)的MATLAB 实现_第8张图片
故障检测结果

故障诊断示例 (TE 过程数据,高斯核函数)

clc

诊断结果:

matlab 数据降维和重构_核主成分分析(Kernel PCA, KPCA)的MATLAB 实现_第9张图片
故障诊断结果

注意

  1. 模型训练和测试结果存储在类 KernelKPCA 创建对象的属性 model 和 prediction 中
  2. 参数说明请阅读 contents.m 文件
  3. 核心模块采用 classdef ... end 的类定义,代码适用的 MATLAB 最低版本为 R2008a
  4. 此代码仅供参考

小尾巴

如果这篇文章对您有所帮助,欢迎点赞、关注、收藏,同时也欢迎专注我的个人专栏,分享与交流机器学习算法和编程实践心得。

机器学习与编程实践​zhuanlan.zhihu.com
7d22105f18a35ebc80d6f50790d8060e.png

参考

  1. ^Lee J M, Yoo C K, Choi S W, et al. Nonlinear process monitoring using kernel principal component analysis[J]. Chemical engineering science, 2004, 59(1): 223-234.
  2. ^Bakır G H, Weston J, Schölkopf B. Learning to find pre-images [J]. Advances in neural information processing systems, 2004, 16: 449-456
  3. ^https://github.com/scikit-learn/scikit-learn/blob/95d4f0841/sklearn/decomposition/_kernel_pca.py#L341
  4. ^Deng X, Tian X. A new fault isolation method based on unified contribution plots[C]//Proceedings of the 30th Chinese Control Conference. IEEE, 2011: 4280-4285.

你可能感兴趣的:(matlab,数据降维和重构,matlab,高斯迭代代码,matlab交通通行量模型,主成分分析matlab代码)