Hello,我是你们人见人爱花见花开的小花。又和大家见面了,今天我们来聊一聊多视图学习利器------CCA。

一 典型相关分析的基本思想

当我们研究两个变量x和y之间的相关关系的时候,相关系数(相关系数是用以反映变量之间相关关系密切程度的统计指标。相关系数是按积差方法计算,同样以两变量与各自平均值的离差为基础,通过两个离差相乘来反映两变量之间相关程度;着重研究线性的单相关系数)是最常用的变量:

其中Sxx为标准差。

那我们如何研究两组变量之间的相关关系呢?比如(X1,X2,X3)与(y1,y2)我们是不应该计算如下矩阵:

,这样把每一个变量之间都求出来了。但是我们这样计算的时候是不是有点繁琐,而且总是会忽略问题的本质。现在我们如果能找出两组变量的各自的某个线性组合,讨论线性组合之间的相关关系,那是不是更为简洁?

现在我们利用主成分分析的思想,可以把多个变量与多个变量之间的相关转化成两个变量之间的相关。例如原来(X1,X2,X3)与(y1,y2)可以分别组合成两个变量U,V.我们假设:

另外

。我们找出有最大可能的相关系数(a1,a2,a3)与(b1,b2),这就是典型相关系数。也就是使

典型相关分析最朴素的思想:首先分别在每组变量中找出第一对典型变量,使其具有最大相关性,然后在每组变量中找出第二对典型变量,使其分别与本组内的第一对典型变量不相关,第二对本身具有次大的相关性。如此下去,直到进行到R步,两组变量的相关系被提取完为止,可以得到R组变量。

二 典型相关分析的数学表达

2,1 思考

现在考虑两组变量的向量

,其协方差矩阵为

其中

是第一组变量的协方差矩阵,

是第二组变量的协方差矩阵,

为第一组和第二组共同的协方差矩阵。

2.2 典型相关系数和典型变量的求法

我就偷个懒,从我以前看的资料上截图把计算过程给大家,哈哈。。。当然有不懂的欢迎留言问我。

计算步骤如下:

结论:

既是M1又是M2的特征根,a1和b1是相应于M1和M2的特征向量。

现在我们就把典型相关分析化解成求M1和M2的特征向量和特征值问题了。这里需要说明的是第一对典型变量提取了原始变量x与y之间相关的主要成分,如果这部分还不能解释原始变量,可以在剩余的相关中在求出第二对典型变量和他们的典型相关系数。

三 样本典型相关系数

在实际应用中,总体的协方差矩阵常常是未知的,类似于他的统计分析方法,需要从总体中抽出一根样本,根绝样本对总体的协方差或者相关系数矩阵进行估计,然后利用估计得到的协方差或者相关系数矩阵进行分析。一般在图像的特征提取时候用到,因为图的特征太大了。

四 代码实现

function[ccaEigvector1, ccaEigvector2] = CCA(data1, data2)

% Input:

% data1 ¡ª¡ª view1

% data2 ¡ª¡ª view2

% both row : a sample

% column : a feature

% Output:

% ccaEigvector1 : the projection of view1

% ccaEigvector2 : the projection of view2

% both are not unit(length) one, it makes the conical

% correlation variable has unit variance

% Reference£º

% Appearance models based on kernel canonical correlation analysis

% Pattern Recognition, 2003

% Comments:

% using SVD instead of using the eigen decomposition

dataLen1 = size(data1, 2);

dataLen2 = size(data2, 2);

% Construct the scatter of each view and the scatter between them

data = [data1 data2];

covariance = cov(data);

% Sxx = covariance(1 : dataLen1, 1 : dataLen1) + eye(dataLen1) * 10^(-7);

Sxx = covariance(1 : dataLen1, 1 : dataLen1);

% Syy = covariance(dataLen1 + 1 : size(covariance, 2), dataLen1 + 1 : size(covariance, 2)) ...

% + eye(dataLen2) * 10^(-7);

Syy = covariance(dataLen1 + 1 : size(covariance, 2), dataLen1 + 1 : size(covariance, 2));

Sxy = covariance(1 : dataLen1, dataLen1 + 1 : size(covariance, 2));

% Syx = Sxy';

% using SVD to compute the projection

Hx = (Sxx)^(-1/2);

Hy = (Syy)^(-1/2);

H = Hx * Sxy * Hy;

[U, D, V] = svd(H, 'econ');

ccaEigvector1 = Hx * U;

ccaEigvector2 = Hy * V;

% make the canonical correlation variable has unit variance

ccaEigvector1 = ccaEigvector1 * diag(diag((eye(size(ccaEigvector1, 2)) ./ sqrt(ccaEigvector1' * Sxx * ccaEigvector1))));

ccaEigvector2 = ccaEigvector2 * diag(diag((eye(size(ccaEigvector2, 2)) ./ sqrt(ccaEigvector2' * Syy * ccaEigvector2))));

end

五 总结

CCA主要在多视图学习的特征融合方面有着广泛的应用,比如两张图片,一张正脸,一张侧脸,我们需要做一个人脸识别系统,就需要对其进行双视图学习,我想如果我们把这两张图结合在一起识别率一定会提高的,我们就需要用到CCA。当然用处远不止于此,我们以后会继续和大家交流的。

典型相关分析python实现_多视图学习利器----CCA(典型相关分析)及MATLAB实现相关推荐

  1. 女生适合学python吗_女生适合学习Python吗?

    原标题:女生适合学习Python吗? 随着人工智能的快速发展,Python语言越来越被大众所熟知.从招聘网站上可以看到,Python开发专业人才呈现严重的供不应求趋势,这也吸引了很多人想要进入Pyth ...

  2. 01_01 python机器学习_第一章学习内容整理_加载样本数据绘制散点图

    第一章学习内容整理_加载样本数据&绘制散点图 01 常用包说明 python可以解决很多问题,相应解决方案使用的包也很多,不太好记忆. 为了便于记忆,用大白话简单描述一下各个包的功能. # 科 ...

  3. 好想学python机器人_拥有自动学习的Python机器人-ChatterBot

    「聊天机器人」一直是许多企业.学界在专研的东西,它可以用于许多用途上,例如淘宝会有机器人客服人员,会透过机器人来帮助你解决问题,又或者是很多聊天室都会有聊天机器人这种东西,例如Line 当中有人制作出 ...

  4. python 编程_类的学习笔记(from刘金玉b站教程)

    一.类的定义 在面向对象里面,对象和类是不同的,对象是特定类的一个实例,比如如果车是一个类的话,某个人的一辆奔驰车就是一个对象,它是车这个类的实例. 类是抽象的,而对象是具体的.方法是定义在对象上的操 ...

  5. python 主语_前深度学习时代--FFM模型的原理与Python实现

    基于上一篇分析中协同过滤.逻辑回归及FM的比较,可以得出这样一个结论: 主流模型迭代的关键在于增强模型表达能力,而增强方式的主要脉络为: 引入其它可用特征信息(CF->LR). 将现有特征进行组 ...

  6. 数字图像处理与python实现_数字图像处理学习(2)—— 图像直方图均衡与图像匹配(python实现)...

    数字图像处理学习(2)-- 直方图均衡与图像匹配 1. 直方图均衡(Histogram Equalization) 1.1 直方图均衡化概念 1.2 直方图均衡实现简单思路 1.3 直方图均衡实现代码 ...

  7. excel和python建模_利用Excel学习Python:准备篇

    写在前面 这个系列我们要利用Excel的知识,学会用python进行数据分析,如果你精通Excel想要用python提高数据分析效率,那么这个系列你来对了,如果你已经是python大神,想要建模/算法 ...

  8. python 云计算_云计算开发学习笔记:Python的环境搭建

    大家都知道学好Python是进入云计算领域的基础,那么在学习之前我们先来了解下Python环境是如何搭建的.Python可应用于多种平台,包括大家熟悉的Window,Linux 和 Mac OS X. ...

  9. 前端开发需要学python吗_在选择学习Python开发还是前端开发时需要考虑哪些因素...

    首先,从技术体系结构来看,Python开发与前端开发是两个不同的学习方向,未来所从事的岗位和面对的任务场景也有较为明显的不同,但是Python开发与前端开发本身的发展前景都是比较不错的,未来的就业空间 ...

  10. 适合零基础学python吗_零基础学习python难度高吗?

    Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等,Pyth ...

最新文章

  1. mysql主从同步linux,linux中部署mysql主从同步示例详解(绝对经典,看了必会)
  2. 十二年来最强购房潮:报价 6 次,疯狂加价,华人程序员在硅谷买房太难了!...
  3. mysql数据压缩加密_MySQL 加密/压缩函数
  4. 代码质量管理工具】——sonar
  5. 程序开发入门工具之CodeBlocks
  6. POJ1579 HDU1331 HDU1579 ZOJ1168 Function Run Fun【记忆化递归】
  7. 苏宁:我们开发百度小程序遇到的那些“坑”
  8. 程序员必备的七个快捷键【一分钟掌握】
  9. 深度剖析“GCC编译器编译过程”
  10. CSDN资源分享分红2元,哈哈
  11. CMake的安装(超级详细)
  12. 华硕电脑(博主电脑型号为天选FA506IH)Fn组合键屏幕不显示对应操作的解决办法!!
  13. [02-27][08奥斯卡四项大奖][老无所依][DVD中英双字][已测][17:21]
  14. 未来职业世界的三种人
  15. mysql python电影院购票系统毕业设计源码221133
  16. Unity 3D项目 - 01 - 开始游戏主界面
  17. 利用Python爬取朋友圈数据,爬到你开始怀疑人生
  18. 在 React JS 中使用 JSON 占位符的Web 简易应用程序
  19. 计算机二级Java备考需要多久_计算机二级要准备多久 一个月来得及吗
  20. css filter改变图片的颜色,神奇的操作~

热门文章

  1. 计算机硬盘有磁性材料吗,电脑硬盘里有磁铁吗
  2. 进了小公司的应届程序员如何翻身进入大公司?
  3. 数据仓库技术(Data Warehouse Technologien) 第三章节 多维数据模型(3)
  4. Fedora系统之打开终端快捷键设置
  5. 1-20的两个数把和告诉A,积告诉B,A说不知道是多少,B也说不知道,这时A说我知道了,B说我也知道了,请你猜猜这两个数的和是多少
  6. C/C++存储区域划分(栈区,堆区,全局区,代码区)
  7. python从入门到实践 练习题雨滴下落--我的下落时全都连在一起了---已解决
  8. etc fstab 详解linux,/etc/fstab功能详解
  9. Python自然语言处理——nltk库入门之文本分词(英文)
  10. 网络编辑如何经营网络社区?