基于典型相关分析的故障检测和过程监控算法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

文献来源:

 本文首先研究了一种基于广义典型相关分析(CCA)的故障检测(FD)方法,旨在在可接受的误报率下最大限度地提高故障检测能力。更具体地说,生成两个残差信号,分别用于检测输入和输出子空间中的故障。两个残差信号的最小协方差是通过考虑输入和输出之间的相关性来实现的。考虑到广义CCA由于过程噪声的高斯假设而应用范围有限,提出了一种广义CCA与基于随机算法的阈值设置相结合的FD技术,并将其应用于高速列车的模拟牵引驱动控制系统。结果表明,与标准的广义CCAFD方法相比,所提方法能够显著提高检测性能。

📚2 运行结果

部分代码:

%% ----------------------- CCA algorithm ----------------------------------
[U, S, V, P,P_res, L,L_res] = cca_fun_static(In_trc,Out_trc);
%% *********************** building statistics for CCA-based FD ***********
%% ----------------------- statistic of CCA residual form 1----------------
% ~~~~~~~~~ for Q statistic
rs=[];                                                 % residual signal
Omega = S(1:rank(S),1:rank(S));
for j = 1:N_free
    te1 = P'*In_trc(:,j)-Omega*L'*Out_trc(:,j);           % Q statistic
    rs=[rs te1];
end
cov_rs = (N_free-1)^-1*rs*rs';                  % covariance of Q


%% ----------------------- statistic of CCA residual form 1 from PPT -----
T2_rdin = [];
tempinv = (eye(size(Omega,1))-Omega^2); tempinv = diag(tempinv);
if ~isempty(P_res) % determine the P_res matrix is empty or not
    tempeye = diag(eye(size(P_res,2)));
    tempi = [tempinv; tempeye];
else
    tempi = tempinv;
end
Inv_s = inv(diag(tempi)/(n_s-1));
for j = 1:N_fault
    te1 = [P P_res]'*In_trfc(:,j)-S*[L L_res]'*Out_trfc(:,j); % residual L'y-\SigmaJ'u
    te2 = te1'*Inv_s*te1; % for T2
    T2_rdin=[T2_rdin te2];
end
alpha = 0.05; % significance level
Th_T2_cca_rd = chi2inv(1-alpha,size(Inv_s,1));
%% ----------------------- statistic of CCA residual form 2 from PPT -----
T2_rdin2 = [];
tempinv = (eye(size(Omega,1))-Omega^2); tempinv = diag(tempinv);
if ~isempty(L_res) % determine the L_res matrix is empty or not
    tempeye = diag(eye(size(L_res,2)));
    tempi = [tempinv; tempeye];
else
    tempi = tempinv;
end
Inv_s2 = inv(diag(tempi)/(n_s-1));
for j = 1:N_fault
    te1 = [L L_res]'*Out_trfc(:,j)-S'*[P P_res]'*In_trfc(:,j); % residual J'u-\Sigma'L'y
    te2 = te1'*Inv_s2*te1; % for T2
    T2_rdin2=[T2_rdin2 te2];
end
Th_T2_cca_rd2 = chi2inv(1-alpha,size(Inv_s2,1));
%% ========== detection results of CCA-based FD ===========================
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
figure
subplot(2,1,1)
plot_FD_result(T2_rdin,Th_T2_cca_rd,2,12,1);
ylabel('T2_{ccadin}');
title('Detection result of CCA','FontSize',12);
subplot(2,1,2)
plot_FD_result(T2_rdin2,Th_T2_cca_rd2,2,12,1);
ylabel('T2_{ccadin2}');
% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Zhiwen Chen, Steven X. Ding, Tao Peng, Chunhua Yang and Weihua Gui. Fault detection for non-Gaussian process using generalized canonical correlation analysis and randomized algorithms. IEEE Transactions on Industrial Electronics, 65(2): 1559-1567, 2018.

🌈4 Matlab代码实现

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: BoW(Bag of Words)模型是一种文本特征表示方法,可以通过将文本转换为词袋来描述文本的特征。对于基于BoW模型的异常检测算法,通常的思路是将异常数据与正常数据的词袋进行比较,从而判断数据是否异常。以下是一个简单的基于BoW模型的异常检测算法Matlab代码实现: 1. 数据准备 首先,需要准备用于训练和测试的数据。可以使用一个包含多个文本文件的文件夹作为数据集。 2. 特征提取 使用Matlab自带的文本分析工具箱(Text Analytics Toolbox)提取每个文本文件的特征向量。可以使用函数bagOfWords创建每个文本文件的词袋,并使用函数tfidf计算TF-IDF权重,生成特征向量。 3. 模型训练 使用生成的特征向量训练一个分类器,比如支持向量机(SVM)分类器。可以使用函数fitcecoc训练一个多分类SVM分类器。 4. 异常检测 使用训练好的分类器对新的数据进行异常检测。对于每个新的文本文件,提取其特征向量并使用训练好的分类器进行预测。如果预测结果为异常,则将该文本文件标记为异常数据。 下面是一个示例代码: ```matlab % 1. 数据准备 data_folder = 'path/to/data/folder'; % 2. 特征提取 bag = bagOfWords('folder', data_folder); tfidf_bag = tfidf(bag); features = full(tfidf_bag.Counts); % 3. 模型训练 labels = repmat({'normal'}, size(features, 1), 1); % 正常数据标签 labels(1:10) = {'anomaly'}; % 前10个数据标记为异常 svm = fitcecoc(features, labels); % 训练一个多分类SVM分类器 % 4. 异常检测 new_data_folder = 'path/to/new/data/folder'; new_bag = bagOfWords('folder', new_data_folder); new_tfidf_bag = tfidf(new_bag); new_features = full(new_tfidf_bag.Counts); predictions = predict(svm, new_features); % 使用训练好的分类器进行预测 anomaly_indices = find(strcmp(predictions, 'anomaly')); % 找到异常数据的索引 ``` 在上述代码中,我们首先从一个文件夹中提取特征并使用前10个数据标记为异常数据,然后训练一个多分类SVM分类器。接着,我们使用另一个文件夹的数据进行异常检测,并找到标记为异常的数据索引。 ### 回答2: 基于BoW(Bag-of-Words)模型的异常检测算法是一种常用的无监督学习方法,通过计算文本中词的频率分布来表示文本,进而检测异常。下面是用MATLAB实现基于BoW模型的异常检测算法的简要步骤。 1. 数据预处理:将原始文本数据进行清洗和分词处理,去除停用词(如“的、是、在”等常见词),保留有意义的词汇。 2. 特征提取:根据数据预处理后的文本,构建词汇表,统计每个词汇在文本中的出现次数。可以使用MATLAB的文本处理工具箱来完成这一步骤。 3. 构建向量表示:将每个文本转换为一个特征向量,向量的每个维度表示对应词汇在文本中的出现次数。这可以通过MATLAB的编程来实现,可以使用稀疏矩阵来表示向量。 4. 计算类似度:将异常样本与正常样本进行比较,计算它们之间的相似度。常用的相似度度量方法有余弦相似度和欧氏距离。可以使用MATLAB中的相似度计算函数来完成。 5. 设置阈值:根据异常样本与正常样本之间的相似度分布,设定一个阈值来判断样本是否属于异常。该阈值可以根据训练集的正常样本计算得出,也可以根据先验知识来设定。 6. 异常检测:对于新的样本,将其转换为特征向量后,与阈值进行比较,若小于阈值则认为是异常样本,否则是正常样本。 以上就是用MATLAB代码实现基于BoW模型的异常检测算法的步骤。实际实现时,还需根据具体问题进行调优和改进。 ### 回答3: 基于BoW模型的异常检测算法可以通过以下步骤在MATLAB实现: 1. 数据预处理:将输入的数据集进行预处理,包括数据清洗、归一化等操作,以便后续的特征提取和建模。 2. 特征提取:使用Bag of Words(BoW)方法从数据集中提取特征。将数据集中的文本进行分词,去除停用词,并计算每个词的词频(TF-IDF)等特征。 3. 使用聚类算法:将提取的特征进行聚类,常用的聚类算法包括K-means、DBSCAN等。聚类的目的是将数据划分为若干个簇,以便更好地检测异常点。 4. 设置异常阈值:根据聚类的结果,将每个簇中样本的异常程度进行评估。可以通过计算样本到其所属簇中心的距离、密度等指标来评估异常程度,并设置异常阈值。 5. 异常检测:对于新来的数据点,计算其与已有簇中心的距离,如果距离超过设定的异常阈值,则将该点视为异常点。 6. 结果评估:根据实际数据集的标签,判断异常检测的结果是否准确,并计算准确率、召回率等指标来评估算法的性能。 以上步骤可以通过使用MATLAB中的文本处理工具、聚类算法函数和性能评估函数等来实现。需要注意的是,具体实施过程中可能需要根据具体场景进行一些算法参数的调整和优化,以获得更好的异常检测效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值