1.

ICA算法扩展描述

《Independent Component Analysis:Algorithms and Applications》(Aapo

Hyvärinen and Erkki Oja)文章里提到的一些内容(有些我也没看明白)。

首先里面提到了一个与“独立”相似的概念“不相关(uncorrelated)”。Uncorrelated属于部分独立,而不是完全独立,怎么刻画呢?

如果随机变量是独立的,当且仅当

如果随机变量是不相关的,当且仅当

第二个不相关的条件要比第一个独立的条件“松”一些。因为独立能推出不相关,不相关推不出独立。

证明如下:

反过来不能推出。

比如,的联合分布如下(0,1),(0,-1),(1,0),(-1,0)。

因此不相关,但是

因此不满足上面的积分公式,不是独立的。

上面提到过,如果是高斯分布的,A是正交的,那么也是高斯分布的,且之间是独立的。那么无法确定A,因为任何正交变换都可以让达到同分布的效果。但是如果中只有一个分量是高斯分布的,仍然可以使用ICA。

那么ICA要解决的问题变为:如何从x中推出s,使得s最不可能满足高斯分布?

中心极限定理告诉我们:大量独立同分布随机变量之和满足高斯分布。

我们一直假设的是是由独立同分布的主元经过混合矩阵A生成。那么为了求,我们需要计算的每个分量。定义,那么,之所以这么麻烦再定义z是想说明一个关系,我们想通过整出一个来对进行线性组合,得出y。而我们不知道得出的y是否是真正的s的分量,但我们知道y是s的真正分量的线性组合。由于我们不能使s的分量成为高斯分布,因此我们的目标求是让y(也就是)最不可能是高斯分布时的w。

那么问题递归到如何度量y是否是高斯分布的了。

一种度量方法是kurtosis方法,公式如下:

如果y是高斯分布,那么该函数值为0,否则绝大多数情况下值不为0。

但这种度量方法不怎么好,有很多问题。看下一种方法:

负熵(Negentropy)度量方法。

我们在信息论里面知道对于离散的随机变量Y,其熵是

连续值时是

在信息论里有一个强有力的结论是:高斯分布的随机变量是同方差分布中熵最大的。也就是说对于一个随机变量来说,满足高斯分布时,最随机。

定义负熵的计算公式如下:

也就是随机变量y相对于高斯分布时的熵差,这个公式的问题就是直接计算时较为复杂,一般采用逼近策略。

这种逼近策略不够好,作者提出了基于最大熵的更优的公式:

之后的FastICA就基于这个公式。

另外一种度量方法是最小互信息方法:

这个公式可以这样解释,前一个H是的编码长度(以信息编码的方式理解),第二个H是y成为随机变量时的平均编码长度。之后的内容包括FastICA就不再介绍了,我也没看懂。

8.

ICA的投影追踪解释(Projection Pursuit)

投影追踪在统计学中的意思是去寻找多维数据的“interesting”投影。这些投影可用在数据可视化、密度估计和回归中。比如在一维的投影追踪中,我们寻找一条直线,使得所有的数据点投影到直线上后,能够反映出数据的分布。然而我们最不想要的是高斯分布,最不像高斯分布的数据点最interesting。这个与我们的ICA思想是一直的,寻找独立的最不可能是高斯分布的s。

在下图中,主元是纵轴,拥有最大的方差,但最interesting的是横轴,因为它可以将两个类分开(信号分离)。

9.

ICA算法的前处理步骤

1、中心化:也就是求x均值,然后让所有x减去均值,这一步与PCA一致。

2、漂白:目的是将x乘以一个矩阵变成,使得的协方差矩阵是。解释一下吧,原始的向量是x。转换后的是

的协方差矩阵是,即

我们只需用下面的变换,就可以从x得到想要的

其中使用特征值分解来得到E(特征向量矩阵)和D(特征值对角矩阵),计算公式为

下面用个图来直观描述一下:

假设信号源s1和s2是独立的,比如下图横轴是s1,纵轴是s2,根据s1得不到s2。

我们只知道他们合成后的信号x,如下

此时x1和x2不是独立的(比如看最上面的尖角,知道了x1就知道了x2)。那么直接代入我们之前的极大似然概率估计会有问题,因为我们假定x是独立的。

因此,漂白这一步为了让x独立。漂白结果如下:

可以看到数据变成了方阵,在的维度上已经达到了独立。

然而这时x分布很好的情况下能够这样转换,当有噪音时怎么办呢?可以先使用前面提到的PCA方法来对数据进行降维,滤去噪声信号,得到k维的正交向量,然后再使用ICA。

10.

小结

ICA的盲信号分析领域的一个强有力方法,也是求非高斯分布数据隐含因子的方法。从之前我们熟悉的样本-特征角度看,我们使用ICA的前提条件是,认为样本数据由独立非高斯分布的隐含因子产生,隐含因子个数等于特征数,我们要求的是隐含因子。

而PCA认为特征是由k个正交的特征(也可看作是隐含因子)生成的,我们要求的是数据在新特征上的投影。同是因子分析,一个用来更适合用来还原信号(因为信号比较有规律,经常不是高斯分布的),一个更适合用来降维(用那么多特征干嘛,k个正交的即可)。有时候也需要组合两者一起使用。这段是我的个人理解,仅供参考。

% 这是一个ICA人脸识别算法实例,百度文库中的,作为第一次学习ICA算法

%---初始化--------------------------------

clc;

clear all;

close all;

% -----读入原始图像,混合,并输出混合图像---------------------------

% 读入混合前的袁术图像图片并显示

t = 0:1/100:9

T1 = sin(t);

T2 = randn(1,901);

T3 = square(4*t);

subplot(4,3,1),plot(T1);title('输入信号1');

subplot(4,3,2),plot(T2);title('输入信号2');

subplot(4,3,3),plot(T3);title('输入信号3');

%将其组成矩阵

S = [T1;T2;T3];% 图片个数即为变量数,图片的像素数即为采样数

% 因此 S_all 是一个变量个数 * 采样个数的矩阵

a = size(S,1); % 得到S 的行数

Sweight = randn(size(S,1)); % 只有一个数的时候,默认产生 一个方阵

% 上边是 去一个随机矩阵,作为信号混合的权矩阵

MixedS = Sweight * S; % 得到三个混合信号矩阵

% 将 混合矩阵重新排列并输出

subplot(4,3,4),plot(MixedS(1,:)),title('混合信号1');

subplot(4,3,5),plot(MixedS(2,:)),title('混合信号2');

subplot(4,3,6),plot(MixedS(3,:)),title('混合信号3');

MixedS_bak = MixedS; % 将混合后的数据备份,以便在恢复时直接调用

% -------标准化----------------------------------------

MixedS_mean = zeros(3,1);

for i = 1:3

MixedS_mean(i) = mean(MixedS(i,:));

end

% 上边是计算MixedS 的均值

for i = 1:3

for j = 1:

size(MixedS,2)

MixedS(i,j) = MixedS(i,j) - MixedS_mean(i);

end

end

%

---------白化----------------------------------------------

MixedS_cov = cov(MixedS'); % cov为求协方差的函数

[E,D] = eig(MixedS_cov); % 对图片矩阵的协方差函数进行特征值分解

Q = inv(sqrt(D))*(E)'; % Q为白化矩阵

MixedS_white = Q*MixedS; % MixedS_white为白化后的图片矩阵

IsI = cov(MixedS_white'); % IsI 应为单位阵

% ---------FASTICA算法---------------------------------

X = MixedS_white; % 这也是编程的小技巧,下边是对X进行操作, 不会改变MixedS_whiteD的值

[VariableNum,SampleNum] = size(X);

numofIC = VariableNum; %在此 应用中,独立元个数 等于变量的个数

B = zeros(numofIC,VariableNum);

for r = 1:numofIC % 迭代求取每一个独立元

i =

1; maxIterationsNum = 100; % 设置最大迭代次数(即对于每个独立分量而言迭代均不超过此次数)

IterationsNum = 0;

b =

rand(numofIC,1) - 0.5; % 随机设置b 初值

b =

b/norm(b); % 对b标准化

while i

<= maxIterationsNum + 1

if i == maxIterationsNum % 循环结束处理

fprintf('\n第%d分量在%d次迭代内并不收敛。',r,maxIterationsNum);

break;

end

bOld = b;

a2 = 1;

u = 1;

t = X'*b;

g = (exp(2.*t) - 1)./(exp(2.*t) +1);

dg = 4*exp(2.*t)./(exp(2.*t) + 1).^2;

b = ((1 -u)*t'*g*b + u*X*g)/ SampleNum - mean(dg)*b;

b = b - B*B'*b; % 对b进行正交化

b = b/norm(b);

if abs(abs(b'*bOld)-1) < 1e-9 % 如果收敛,则保存b

B(:,r) = b;

break;

end

i = i +1;

end

end

% --------------数据复原并构图---------------------------

ICAedS = B'*Q*MixedS_bak;

% 将混合矩阵重新排列并输出

subplot(437),plot(ICAedS(1,:)),title('ICA输出信号1');

subplot(438),plot(ICAedS(2,:)),title('ICA输出信号2');

subplot(439),plot(ICAedS(3,:)),title('ICA输出信号3');

%

----------------PCA计算并构图----------------------------------------------

[V,D] = eig(MixedS_cov);

Vtmp = zeros(size(V,1),1);

for j = 1:2

for i =

1:2

if D(i,i)

ica人脸识别 matlab,ICA算法和人脸识别程序相关推荐

  1. 《人脸识别原理及算法——动态人脸识别系统研究》—1章1.2节人脸识别相关学科的进展...

    本节书摘来自异步社区<人脸识别原理及算法--动态人脸识别系统研究>一书中的1章1.2节人脸识别相关学科的进展,作者 沈理 , 刘翼光 , 熊志勇,更多章节内容可以访问云栖社区"异 ...

  2. 人脸识别三大经典算法_人脸识别系列四 | DeepID1算法

    前言 这是人脸识别系列的第5篇文章,前4篇文章可以在公众号的人脸识别栏里找到,这篇文章主要是解析CVPR 2014年的经典人脸识别论文DeepID1算法.论文的地址如下:http://mmlab.ie ...

  3. 《人脸识别原理及算法——动态人脸识别系统研究》—第5章5.2节 主成分分析方法在人脸图像识别中的应用...

    本节书摘来自异步社区<人脸识别原理及算法--动态人脸识别系统研究>一书中的第5章5.2节 主成分分析方法在人脸图像识别中的应用,作者 沈理 , 刘翼光 , 熊志勇,更多章节内容可以访问云栖 ...

  4. 《人脸识别原理及算法——动态人脸识别系统研究》—第5章5.5节小结

    本节书摘来自异步社区<人脸识别原理及算法--动态人脸识别系统研究>一书中的第5章5.5节小结,作者 沈理 , 刘翼光 , 熊志勇,更多章节内容可以访问云栖社区"异步社区" ...

  5. 机器学习算法之PCA(主成分分析)人脸识别,最小重构误差和最大化散度证明,PCA主成分分析原理剖析,PCA人脸识别matlab实现,PCA人脸识别python实现

    目录 PCA介绍 PCA大致思路 PCA人脸识别(特征脸法) matlab代码实现 Python代码实现 PCA几何解释 PCA证明最小重构误差和最大散度等价 实验结果 PCA介绍 主成分分析(Pri ...

  6. 计算机识别人脸原理,《人脸识别原理及算法 ——动态人脸识别系统研究》第一章 概论...

    1. 作为人类特征识别的一种,人脸识别和其他人类特征识别相比,具有自然性和不被被测个体察觉的特点,这也是其优点.自然性指该识别方式同人类(甚至其他生物)进行个体识别时所利用的生物特征相同. 2. 人脸 ...

  7. 路标识别 matlab 聚类算法,基于卷积神经网络的交通路标检测v1.doc

    摘 要 交通管理及交通安全问题正受到人们越来越多的关注.在此背景下,智能交通系统的概念应运而生.作为智能交通系统的一部分,交通标志检测系统在驾驶辅助.交通标志维护.自动驾驶等多方面具有重要作用.然而, ...

  8. bp神经网络车牌识别matlab源代码,BP神经网络车牌识别

    [实例简介]利用GUI搭建车牌识别 [实例截图] [核心代码] bp神经网络车牌识别 ├── bp.m ├── bpnet.mat ├── getword.m ├── lpr.m ├── lpr_GU ...

  9. lenet5手写数字识别 matlab,LeNet5实现手写体数字识别(基于PyTorch实现)

    import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from  ...

最新文章

  1. win32的一个售票程序,收获有非常的多
  2. 针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言第二部552-556条
  3. Linux-Raid0、Raid1、Raid5、Raid10初探
  4. java 最大子数组_求一个数组中子数组的最大和算法(Java实现)
  5. c语言注释换颜色,C语言实现注释转换
  6. java structs hibernate php_eclipse+hibernate+structs 环境搭建
  7. Ubuntu 安装 Clang 编译器
  8. 昔日最有前途的 Java 最终还是败给了晚辈 Python
  9. 《软件评测师教程》学习笔记-第一章:软件测试概述
  10. 十步一拆:iPhone4S拆机十步曲
  11. 【华为OD机试真题 JS】叠积木
  12. 服务器2008r2启动修复,Windows Server 2008 R2原生启动试用
  13. 针对VMware安装Win10需要安装.NET Framework 3.5常见的0x800F0906、0x800F081F错误解决办法
  14. Android 面部识别之二(调用开源面部识别算法seetaface检测)
  15. 诸葛亮司马懿大战房市
  16. 「Fail-Fast与Fail-Safe机制」
  17. 免费开题报告|基于SpringBoot+Vue的校内跑腿平台
  18. 10个WordPress电商产品页面扩展功能
  19. python量化实战_Python量化交易实战
  20. HP打印机M1216nfh无法在win10安装驱动的解决方法

热门文章

  1. phpcms v9 邀请用户注册自动获取积分奖励
  2. 每天笑一笑2012年8月28日
  3. Rust 2018 调查报告发布;微软超越苹果成为全球市值最大公司
  4. project子项目之间任务关联_任务关联的类型(Project)
  5. 基于 R 的结构方程模型在生态学中的应用
  6. 英语Kutnahorite金田黄kutnahorite单词
  7. TypeError: can‘t convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to
  8. 三次蝉联!Stratifyd在G2 2021秋季报告中再获“高成长者”荣誉
  9. 常见拉丁文读法,肯定用得着~
  10. 会计 金融管理 计算机网络技术,天津海运职业学院专业排名,招生专业目录(10篇)...