KPCA代码

2023-11-11

KPCA算法介绍

    KPCA算法为一种核学习算法,可用于具有非线性特性的故障检测中。其主要思路为:首先通过一个未知的非线性映射讲原始低维空间中的非线性数据映射到特征空间变成线性可分的高维数据,然后利用PCA方法在高维特征空间提取主成分信息,并进一步计算表征过程运行特征的统计量来进行监测。
    其故障监测步骤如下:
    1.读取训练数据
    2.求核矩阵
    3.核矩阵中心化和方差归一化
    4.求取特征值和特征向量
    5.求取非线性主元
    6.求出训练数据的SPE统计量和T2统计量
    7.求出统计量的控制西安
    8.读取测试数据
    9.求新的核矩阵
    10.核矩阵的中心化和方差归一化
    11.求取非线性主元
    12.求出测试数据的SPE统计量和T2统计量
    
           下面简单介绍KPCA算法在TE过程故障诊断的应用,代码如下:

KPCA代码

数据预处理


patterns=zscore(train);对训练样本进行标准化处理
%%对测试样本进行标准化处理
m=mean(train);
s=std(train);
n=size(test,1);%使用正常数据的标准化模式
test_patterns=(test-repmat(m,n,1))./repmat(s,n,1);
train_num=size(patterns,1);%训练样本(样本维数)
test_num=size(test_patterns,1);%测试样本(样本维数)
cov_size = train_num;
cov_size2 = test_num;

计算核矩阵

for i=1:cov_size
for j=i:cov_size
K(i,j) = exp(-norm(patterns(i,:)-patterns(j,:))^2/rbf_var);
K(j,i) = K(i,j);
end
end
unit = ones(cov_size, cov_size)/cov_size;

中心化核矩阵

K_n = K - unit*K - K*unit + unit*K*unit;

协方差矩阵的特征值分解

[evectors,evaltures] = eig(K_n);
[x,index]=sort(real(diag(evaltures))); 
 evals=flipud(x);%翻转函数
 index=flipud(index);
evaltures=real(diag(evaltures));

确定主元个数

umpc=1;
 while sum(evals(1:numpc))/sum(evals)<0.85
    numpc=numpc+1;
 end
 a=numpc;

将特征向量按特征值的大小顺序排序

evectors=evectors(:,index);

单位化特征向量

for i=1:cov_size,
evecs(:,i) = evectors(:,i)/sqrt(evals(i));
end 
index=numpc;
train_kpca=K_n * evecs(:,1:index(1)); %%主成分对应的得分函数
scoresp=K_n*evecs; %%%原始数据做分线性变换后的在主成分中间下的坐标

重建测试数据

unit_test = ones(test_num,cov_size)/cov_size;
K_test = zeros(test_num,cov_size);
for i=1:test_num
    for j=1:cov_size
        K_test(i,j) = exp(-norm(test_patterns(i,:)-patterns(j,:))^2/rbf_var);
    end
end
K_test_n = K_test - unit_test*K - K_test*unit + unit_test*K*unit;%将测试数据标准化
test_kpca = K_test_n * evecs(:,1:index(1));%%测试样本的得分函数
scoresp2=K_test_n*evecs; %%%测试数据做分线性变换后的在主成分中间下的坐标

控制限的设定

for i=1:cov_size
        T12(i)=(K_n(i,:)*evecs(:,1:a)*inv(diag(evals(1:index(1)))/train_num)*evecs(:,1:a)'*K_n(i,:)');%正常样本建模
end
Q1=(sum(scoresp.^2, 2)-sum(train_kpca.^2, 2))';
T2cfdLimit = ksdensity(T12,0.99,'function','icdf');%icdf:inverse cdf 逆累计分布函数 
SPEcfdLimit = ksdensity(Q1,0.99,'function','icdf');

故障数据的检测

for i=1:cov_size2
        T22(i)=(K_test_n(i,:)*evecs(:,1:a)*inv(diag(evals(1:index(1)))/train_num)*evecs(:,1:a)'*K_test_n(i,:)');%故障样本检测
        Q2=(sum(scoresp2.^2, 2)-sum(test_kpca.^2, 2))';

绘图

figure;
subplot(2,1,1);
plot(1:cov_size,T12,'blue');
xlabel('建模采样数(时间)');
ylabel('T2');
hold on;
line([0,cov_size],[T2cfdLimit,T2cfdLimit],'LineStyle','- -','color','red');
legend('统计量','阀值');

subplot(2,1,2);
plot(1:cov_size,Q1,'blue');
xlabel('建模采样数(时间)');
ylabel('Q');
hold on;
line([0,cov_size],[SPEcfdLimit,SPEcfdLimit],'lineStyle','- -','Color','red');
legend('统计量','阀值');

figure;
subplot(2,1,1);
plot(1:cov_size2,T22,'blue');
xlabel('采样数(时间)');
ylabel('T2');
hold on;
line([0,cov_size2],[T2cfdLimit,T2cfdLimit],'LineStyle','- -','color','red');
legend('统计量','阀值');

求检测率

cout_T=0;
cout_SPE=0;
cout_T1=0;
cout_SPE1=0;

for i=1:cov_size2
  if i<=160 && T22(i)>T2cfdLimit
     cout_T1=cout_T1+1;
  end 
  if i<=160 && Q2(i)>SPEcfdLimit
     cout_SPE1=cout_SPE1+1;
  end
  if i>160 && T22(i)>T2cfdLimit
     cout_T=cout_T+1;
  end
  if i>160 && Q2(i)>SPEcfdLimit
     cout_SPE=cout_SPE+1;
  end
end
cout_T_F=cout_T1/160*100
cout_T=cout_T/(cov_size2-160)*100
cout_SPE_F=cout_SPE1/160*100
cout_SPE=cout_SPE/(cov_size2-160)*100
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KPCA代码 的相关文章

  • js 导出excel详解

    一 需要安装 npm install xlsx style Blob js 和Export2Excel js 在网上搜都可以找到的 而Export2Excel我做了修改 代码如下 带 的都是我改动的地方 Export2Excel js es
  • SQL中CASE的用法

    在SQL中 CASE语句是一种条件表达式 用于根据条件执行不同的操作 它有两种形式 简单CASE表达式和搜索CASE表达式 简单CASE表达式的语法如下 CASE expression WHEN value1 THEN result1 WH
  • GEO数据下载及处理详细过程

    GEO2R 如果出现提示 请指定GEO系列加入和平台 单击 定义组 并输入您计划比较的样品组的名称 例如测试和控制 将样本分配给每个组 突出显示Sample行 然后单击组名称以将这些Samples分配给该组 使用样本元数据 标题 源和特征
  • C++ 强制类型转换(const_cast/reinterpret_cast)使用详解

    一 const cast用法 const cast lt new type gt expression 用于转换指针或引用 可以去掉类型的const属性 在c 参考文档网站上 const cast conversion cppreferen
  • 用力抱一下APP国际化

    APP国际化 说的直白应该也叫本土化或者本地化 如果你的应用上线到谷歌应用市场 那么应该做好本地化的支持 用来支持不同语言及地区的风俗习惯 当然也要结合公司拓展的海外市场需要 那么对于一款应用 至少应该做到多语言和多布局的支持 最近忙于阿拉
  • rocketmq顺序发送消息

    1 概念 严格顺序消息模式下 消费者收到的所有消息均是有顺序的 消息有序指的是可以按照消息的发送顺序来消费 FIFO RocketMQ可以严格的保证消息有序 可以分为分区有序或者全局有序 顺序消费的原理解析 在默认的情况下消息发送会采取Ro
  • (二)MySQL的安装、启动/停止/连接、卸载

    本篇魔镜为大家介绍MySQL的安装 启动 停止 客户端连接 卸载 安 装 在学习SQL语言时 我们总是避免不了使用关系型数据库管理系统 RDBMS 云端的RDBMS使用时比单机的RDBMS更麻烦 而在常用DBMS的安装等问题上 总是有小伙伴
  • h5 原生 ajax,原生ajax和axios取消请求实现

    原生ajax中取消请求的方法 const xhr new XMLHttpReques xhr open GET api xhr onreadstatechange gt if xhr readState 4 2 d 2 test xhr s
  • 怎么使用 js 动态生成海报?

    方案一 DOM gt canvas gt image 将目标 DOM 节点绘制到 canvas 画布 然后利用 canvas 相关的 API 以图片形式导出 可简单标记为绘制阶段和导出阶段两个步骤 绘制阶段 选择希望绘制的 DOM 节点 根
  • svn 恢复删除的文件

    本文转载至 http stackoverflow com questions 497670 whats a simple way to undelete a file in subversion If you just did svn rm
  • Retrofit 2.5框架使用与源码分析

    Retrofit 框架使用 请求内容与返回值 使用PostMan进行请求测试 请求 https api github com search repositories q android 返回值 Header 外链图片转存失败 源站可能有防盗
  • C语言中协程(coroutine)实现

    C语言协程库实现说明 代码实现 1 当前支持的功能概览 1 1 创建任意数量协程并在协程中yield include
  • 更新一个表的字段值等于另一个表的字段值

    在进行数据库操作时 有时我们需要把两个关联表中的某个字段同步 即把表1中字段A的值赋值到表2的字段B中 表1和表2通过字段C关联 SQL语句如下所示 Sql sever 和MySql的写法稍有不同 SQL Sever 写法1 update
  • 文件或目录损坏且无法读取怎么删除文件或目录

    解决方法有几种 1 尝试为文件重命名 如果可以重命名的话 运行cmd 打开任务管理器 结束explorer进程 切换到cmd命令提示符状态下输入 Del 文件名 后就可以删除文件了 这种方法只适用于可以重命名的文件 在进行操作时先关闭其他一
  • SpringMvc进阶

    SpringMvc进阶 SpringMVC引言 一 常用注解 二 参数传递 三 返回值 SpringMVC引言 在Web应用程序开发中 Spring MVC是一种常用的框架 它基于MVC Model View Controller 模式 提
  • Java中的抽象类和接口

    目录 一 什么是抽象类 抽象类在实现多态中的意义 二 接口是什么 通过接口实现多态 三 抽象类和接口的区别 各位铁汁们大家好呀 今天让我们继续学习java 看看java中的抽象类和接口到底是什么 一 什么是抽象类 我们之前学过什么是类 那么
  • Jackson常用方法以及jacksonUtil工具类

    前言 项目中我们通常使用ajax返回json数据格式的形式进行前后端数据交互 所以会用到java数据json数据互相转化 通常我们的做法是在项目中创建一个工具类进行转化处理 如下 我的demo包含了项目中常用的jacksonUtil类 以及
  • JDBC连接MySQL出现误com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database

    JDBC连接MySQL出现误com mysql jdbc exceptions jdbc4 MySQLSyntaxErrorException Unknown database test 问题原因 在用连接池进行MySQL连接时出错找不到改
  • UE_sqlite使用

    UE sqlite使用 PS 参考文档 https blog csdn net object article details 102785739 sqlite官方 https www sqlite org download html

随机推荐

  • 结构体中成员的引用

    结构体如下 struct student int num char name 20 char sex float score 1 结构体的初始化 struct student aa 1001 zhang M 80 5 2 引用整个结构体 s
  • Qt中的Q_D宏和d指针

    1 ZTS7QObject 一 Q D的在文件中的提法 Q D的设置意在方便地获取私有类指针 文件为qglobal h 下面的 是宏定义的连字符 假设类名是A 那么A Private翻译过来就是APrivate 1 define Q D C
  • MySQL服务无法启动。服务没有报告任何错误。问题解决!

    项目场景 提示 MySQL服务无法启动 服务没有报告任何错误 问题解决 问题描述 在启动MySQL是遇到问题 提示mysql服务无法启动 服务没有报告任何错误 原因分析 我这里的问题主要是因为你的data文件夹中有影响启动的文件 注意 清空
  • MyBatis-Plus&Druid

    MyBatis Plus Druid MyBatis Plus 核心功能 Spring Boot 集成 Druid 数据源 MyBatis Plus MyBatis Plus 简称 MP 是一个MyBatis 的增强工具 在MyBatis
  • 中兴e8820刷openwrt_中兴E8820V2(电信天翼宽带类似新路由3歌华链)-拆机及OpenWrt固件...

    本帖最后由 yumeimm 于 2020 12 20 10 53 编辑 2020 12更新 增加Openwrt v19 07 5固件 2020 10更新 添加openwrt v19 07 4固件 2020 05更新 添加openwrt v1
  • 什么是NAT?

    NAT是一种地址转换技术 它可以将IP数据报文头中的IP地址转换为另一个IP地址 并通过转换端口号达到地址重用的目的 NAT作为一种缓解IPv4公网地址枯竭的过渡技术 由于实现简单 得到了广泛应用 NAT解决了什么问题 随着网络应用的增多
  • 设计模式--装饰器模式

    装饰器模式 属于结构型模式基本原理 创建一个装饰器用来对一个现有对象添加新功能 不改变对象结构主要流程 1 根据对象创建一个修饰类 该修饰类要保持方法签名完整 2 在修饰类中根据需求添加新的功能 3 使用时将对象或对象的引用传入修饰类中 注
  • rabbitmq简介

    开发十年 就只剩下这套Java开发体系了 gt gt gt 1 AMQP AMQP协议是一个高级抽象层消息通信协议 RabbitMQ是AMQP协议的实现 它主要包括以下组件 1 1 Server broker 接受客户端连接 实现AMQP消
  • DELETE与DROP 在数据库中的使用方法和区别

    DML data manipulation language 数据操纵语言 就是我们最经常用到的 SELECT UPDATE INSERT DELETE 主要用来对数据库的数据进行一些操作 DML 语句都是显式提交 执行完之后 处理的数据
  • tsconfig之moduleResolution详解

    作用 moduleResolution 模块解析策略 是指编译器在查找导入模块内容时所遵循的流程 模块解析分析 如下代码 编辑器会采用模块解析策略 Node 和 Classic 去查找 moduleB 在哪里 如果最后找不到 编译器不能解析
  • RESTful API接口

    RESTful规范 Restful API是目前比较成熟的一套互联网应用程序的API设计理念 Rest是一组架构约束条件和原则 如何Rest约束条件和原则的架构 我们就称为Restful架构 Restful架构具有结构清晰 符合标准 易于理
  • JAVA报错:Variable 'vv' is accessed from within inner class, needs to be declared final

    内部类中使用但未声明的任何局部变量必须在内部类的正文之前明确分配
  • struts2中validator配置文件验证不起作用的问题解决办法、根源

    在采用struts的xml配置方式校验数据时 发现怎么也不起作用 无法按照正常流程 走到input指向的页面 一 问题的解决 很多博客说明了自己查找的方式 最后都指明了是因为配置文件格式不正确的原因 出现这种问题的时候 应该从下面4个部分考
  • SpringCloud Alibaba 教程

    SpringCloud Alibaba GitHub官方地址 https github com alibaba spring cloud alibaba blob master README zh md SpringCloud Alibab
  • 大学生团体天梯赛(第九届)

    题目地址 天梯赛 include
  • 憨批的语义分割重制版4——TF2 搭建自己的PSPNet语义分割平台

    憨批的语义分割重制版4 TF2 搭建自己的PSPNet语义分割平台 学习前言 什么是PSPNet模型 代码下载 PSPNet实现思路 一 预测部分 1 主干网络介绍 2 加强特征提取结构 3 利用特征获得预测结果 二 训练部分 1 训练文件
  • Vue3 之 readonly

    Vue3 之 readonly readonly 取得一个对象 反应性或普通 或ref并返回一个只读代理 访问的任何嵌套属性也将是只读的 传入普通对象等返回只读代理 传入普通数值或字符串不能变成只读 例如 readonly abc cons
  • 约束下的最优求解:拉格朗日乘数法和KKT条件

    机器学习面对各种各样的求解极值或者最值问题 现在对常见的求解极值或者最值问题思路做一下理论上的梳理 最值问题 简单了解最值问题 求最值是非常常见的问题 比如如何选择交通路线 最快地到达某地 如何用手头的钱买到分量最重的水果等等 我们可以把需
  • 解决An attempt was made to call a method that does not exit问题

    解决An attempt was made to call a method that does not exist The attempt was made from the following location 最近在学习springc
  • KPCA代码

    KPCA算法在TE过程故障诊断的应用 KPCA算法介绍 KPCA代码 数据预处理 计算核矩阵 中心化核矩阵 协方差矩阵的特征值分解 确定主元个数 将特征向量按特征值的大小顺序排序 单位化特征向量 重建测试数据 控制限的设定 故障数据的检测