独立成分分析(Independent Component Analysis,ICA)原理及代码实现

简介: 独立成分分析(Independent Component Analysis,ICA)原理及代码实现

过程监控中会用到很多中方法,如主成分分析(PCA)、慢特征分析(SFA)、概率MVA方法或独立成分分析(ICA)等为主流算法。


其中PCA主要多用于降维及特征提取,且只对正太分布(高斯分布)数据样本有效;SFA被用来学习过程监控的时间相关表示,SFA不仅可以通过监测稳态分布来检测与运行条件的偏差,还可以根据时间分布来识别过程的动态异常,多用于分类分析;概率MVA方法,多以解决动力学、时变、非线性等问题。


今天要介绍的是独立成分分析(ICA),由浅入深,细细道来。


此外文末还附有ICA可实现的代码哟~不要错过


独立成分分析(Independent Component Analysis,ICA)

基本原理

在信号处理中,独立成分分析(ICA)是一种用于将多元信号分离为加性子分量的计算方法。这是通过假设子分量是非高斯信号,并且在统计上彼此独立来完成的。ICA是盲源分离的特例。一个常见的示例应用程序是在嘈杂的房间中聆听一个人的语音的“ 鸡尾酒会问题 ”。


首先,引入一下经典的鸡尾酒宴会问题(Cocktail Party Problem)。


image.png

image.png

image.png

image.png

假设我们令一个未知的混合系数矩阵(mixing coefficient matrix)为A ,用来组合叠加信号S ,

image.png

image.png

image.png

image.png

image.png

ICA的不确定性(ICA ambiguities)

由于h 和s 都不确定,那么在没有先验知识的情况下,无法同时确定这两个相关参数。

image.png

ICA 算法

下面直接上ICA算法。


独立成分分析 ICA(Independent Component Correlation Algorithm)是一种函数,X为n维观测信号矢量,S为独立的m(m<=n)维未知源信号矢量,矩阵A被称为混合矩阵。ICA的目的就是寻找解混矩阵W(A的逆矩阵),然后对X进行线性变换,得到输出向量U。

image.png

image.png

此公式代表一个假设前提:每个人发出的声音信号各自独立。

image.png

image.png

image.png

image.png

求导可得,

image.png

image.png

image.png

image.png

image.png

image.png

举个Paper的栗子

image.png

image.png

下面为我们观测到的信号:

image.png

然后,再通过ICA还原后的信号为:

image.png

MATLAB代码实现

MATLAB代码:

Fast ICA

% Input:X 行变量维数,列采样个数;需要对原始矩阵转置
% Output:Sources重构的原信号, Q白化矩阵, P白化信号解混矩阵
function [Sources, Q, P] = FastICA(X, P)
% 白化处理
[dim, numSample] = size(X);
Xcov = cov(X');
[U, lambda] = eig(Xcov);
Q = lambda^(-1/2)*U';
Z = Q*X;
% FastICA
maxiteration = 10000; %最大迭代次数
error = 1e-5; % 收敛误差
% P = randn(dim,dim); % 随机初始化P,并按照列更新
for k = 1:dim
    Pk = P(:,k);
    Pk = Pk./norm(Pk); % 向量归一化
    lastPk = zeros(dim,1); % 0不需要再归一化
    count = 0;
    while abs(Pk - lastPk)&abs(Pk + lastPk) > error
        count = count + 1;
        lastPk = Pk;
        g = tanh(lastPk'*Z); % g(y)函数
        dg = 1 - g.^2; % g(y)的一阶导函数
%-------------------------------核心公式------------------------------------        
        Pk = mean(Z.*repmat(g,dim,1), 2) - repmat(mean(dg),dim,1).*lastPk;
        Pk = Pk - sum(repmat(Pk'*P(:,1:k-1),dim,1).*P(:,1:k-1),2);
        Pk = Pk./norm(Pk);
%--------------------------------------------------------------------------       
        if count == maxiteration
            fprintf('第%d个分量在%d次迭代内不收敛!\n',k,maxiteration);
            break;
        end
    end
    P(:,k) = Pk;
end
    Sources = P'*Z;
% end

此外还有基于故障诊断的ICA算法代码实现->在这里

下面给出部分代码:

% 基于ICA的故障诊断
clear;clc;close all;
load('MPD2000.mat');
Xnormal = MPD0';
% 数据归一化
[dim, numSample] = size(Xnormal);
XnormalMean = mean(Xnormal, 2);
XnormalStd = std(Xnormal, 0, 2);
XnormalNorm = normalization(Xnormal, XnormalMean, XnormalStd);
% 正常数据计算 解混矩阵W
% P = rand(dim,dim)*100;
load('P.mat');
[S, Q, P] = FastICA(XnormalNorm, P);
W = P'*Q;
% ------------------------利用2范数大小对W的行重新排列---------------------
Wnorm = zeros(dim,1);
for k = 1:dim
    Wnorm(k) = norm(W(k,:));
end
[Wnorm, indices] = sort(Wnorm, 'descend');
% -------------------------确定主导成分Sd与参与成分Se----------------------
threshold = 0.80;
percentage = cumsum(Wnorm)./sum(Wnorm);
for k = 1:dim
    if percentage(k) > threshold
        break;
    end
end

效果如下:

image.png


相关文章
|
2月前
|
机器学习/深度学习 数据采集 算法
基于Liquid State Machine的时间序列预测:利用储备池计算实现高效建模
**Liquid State Machine (LSM)** 是一种 **脉冲神经网络 (Spiking Neural Network, SNN)** ,在计算神经科学和机器学习领域中得到广泛应用,特别适用于处理 **时变或动态数据**。它是受大脑自然信息处理过程启发而提出的一种 **脉冲神经网络** 。
88 4
基于Liquid State Machine的时间序列预测:利用储备池计算实现高效建模
|
2月前
|
JSON 算法 数据挖掘
基于图论算法有向图PageRank与无向图Louvain算法构建指令的方式方法 用于支撑qwen agent中的统计相关组件
利用图序列进行数据解读,主要包括节点序列分析、边序列分析以及结合节点和边序列的综合分析。节点序列分析涉及节点度分析(如入度、出度、度中心性)、节点属性分析(如品牌、价格等属性的分布与聚类)、节点标签分析(如不同标签的分布及标签间的关联)。边序列分析则关注边的权重分析(如关联强度)、边的类型分析(如管理、协作等关系)及路径分析(如最短路径计算)。结合节点和边序列的分析,如子图挖掘和图的动态分析,可以帮助深入理解图的结构和功能。例如,通过子图挖掘可以发现具有特定结构的子图,而图的动态分析则能揭示图随时间的变化趋势。这些分析方法结合使用,能够从多个角度全面解读图谱数据,为决策提供有力支持。
110 0
|
7月前
|
机器学习/深度学习 前端开发 计算机视觉
【YOLOv8改进】Explicit Visual Center: 中心化特征金字塔模块(论文笔记+引入代码)
YOLO目标检测专栏介绍了YOLO的有效改进和实战案例,包括卷积、主干网络、注意力机制和检测头的创新。提出中心化特征金字塔(CFP)解决特征交互和局部区域忽视问题。CFP通过空间显式视觉中心方案和全局集中特征规范增强模型表现,尤其在YOLOv5和YOLOX上表现提升。创新点包括轻量级MLP和并行视觉中心机制,以捕获全局和局部信息。YOLOv8引入EVCBlock整合这些改进。详细代码和配置见链接。
|
8月前
GE Fanuc IC200MDD849模块 离散混合I/O模块
GE Fanuc IC200MDD849模块 离散混合I/O模块
RxSwift特征序列Single、Maybe、Completable的使用
RxSwift特征序列Single、Maybe、Completable的使用
251 1
|
机器学习/深度学习 资源调度 算法
ICA简介:独立成分分析
您是否曾经遇到过这样一种情况:您试图分析一个复杂且高度相关的数据集,却对信息量感到不知所措?这就是独立成分分析 (ICA) 的用武之地。ICA 是数据分析领域的一项强大技术,可让您分离和识别多元数据集中的底层独立来源。
432 0
|
机器学习/深度学习 编解码 算法
异构图 Link 预测 理论与DGL 源码实战
异构图 Link 预测 理论与DGL 源码实战
异构图 Link 预测 理论与DGL 源码实战
|
机器学习/深度学习 算法 算法框架/工具
传输丰富的特征层次结构以实现稳健的视觉跟踪 Transferring Rich Feature Hierarchies for Robust Visual Tracking
传输丰富的特征层次结构以实现稳健的视觉跟踪 Transferring Rich Feature Hierarchies for Robust Visual Tracking
178 2
传输丰富的特征层次结构以实现稳健的视觉跟踪 Transferring Rich Feature Hierarchies for Robust Visual Tracking
|
存储 NoSQL 调度
Ray 源码解析(一):任务的状态转移和组织形式
Ray 源码解析(一):任务的状态转移和组织形式
414 0
Ray 源码解析(一):任务的状态转移和组织形式
|
机器学习/深度学习 存储 人工智能
特征平台(Feature Store):您需要知道的关于特征平台的一切信息(Continuous)
特征平台已于 2021 年问世,成为实现 AI 的一项重要技术。 尽管高科技公司对特征平台充满热情,但大多数传统 ML 平台仍然缺少它们,并且在许多企业公司中相对不为人知。在这里,我们将介绍特征平台的常见功能,以及在你自己的工作中采用这种方法的利弊。

热门文章

最新文章