典型相关分析python实现_多视图学习利器----CCA(典型相关分析)及MATLAB实现
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实现相关推荐
- 女生适合学python吗_女生适合学习Python吗?
原标题:女生适合学习Python吗? 随着人工智能的快速发展,Python语言越来越被大众所熟知.从招聘网站上可以看到,Python开发专业人才呈现严重的供不应求趋势,这也吸引了很多人想要进入Pyth ...
- 01_01 python机器学习_第一章学习内容整理_加载样本数据绘制散点图
第一章学习内容整理_加载样本数据&绘制散点图 01 常用包说明 python可以解决很多问题,相应解决方案使用的包也很多,不太好记忆. 为了便于记忆,用大白话简单描述一下各个包的功能. # 科 ...
- 好想学python机器人_拥有自动学习的Python机器人-ChatterBot
「聊天机器人」一直是许多企业.学界在专研的东西,它可以用于许多用途上,例如淘宝会有机器人客服人员,会透过机器人来帮助你解决问题,又或者是很多聊天室都会有聊天机器人这种东西,例如Line 当中有人制作出 ...
- python 编程_类的学习笔记(from刘金玉b站教程)
一.类的定义 在面向对象里面,对象和类是不同的,对象是特定类的一个实例,比如如果车是一个类的话,某个人的一辆奔驰车就是一个对象,它是车这个类的实例. 类是抽象的,而对象是具体的.方法是定义在对象上的操 ...
- python 主语_前深度学习时代--FFM模型的原理与Python实现
基于上一篇分析中协同过滤.逻辑回归及FM的比较,可以得出这样一个结论: 主流模型迭代的关键在于增强模型表达能力,而增强方式的主要脉络为: 引入其它可用特征信息(CF->LR). 将现有特征进行组 ...
- 数字图像处理与python实现_数字图像处理学习(2)—— 图像直方图均衡与图像匹配(python实现)...
数字图像处理学习(2)-- 直方图均衡与图像匹配 1. 直方图均衡(Histogram Equalization) 1.1 直方图均衡化概念 1.2 直方图均衡实现简单思路 1.3 直方图均衡实现代码 ...
- excel和python建模_利用Excel学习Python:准备篇
写在前面 这个系列我们要利用Excel的知识,学会用python进行数据分析,如果你精通Excel想要用python提高数据分析效率,那么这个系列你来对了,如果你已经是python大神,想要建模/算法 ...
- python 云计算_云计算开发学习笔记:Python的环境搭建
大家都知道学好Python是进入云计算领域的基础,那么在学习之前我们先来了解下Python环境是如何搭建的.Python可应用于多种平台,包括大家熟悉的Window,Linux 和 Mac OS X. ...
- 前端开发需要学python吗_在选择学习Python开发还是前端开发时需要考虑哪些因素...
首先,从技术体系结构来看,Python开发与前端开发是两个不同的学习方向,未来所从事的岗位和面对的任务场景也有较为明显的不同,但是Python开发与前端开发本身的发展前景都是比较不错的,未来的就业空间 ...
- 适合零基础学python吗_零基础学习python难度高吗?
Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的JavaScript语言等,Pyth ...
最新文章
- mysql主从同步linux,linux中部署mysql主从同步示例详解(绝对经典,看了必会)
- 十二年来最强购房潮:报价 6 次,疯狂加价,华人程序员在硅谷买房太难了!...
- mysql数据压缩加密_MySQL 加密/压缩函数
- 代码质量管理工具】——sonar
- 程序开发入门工具之CodeBlocks
- POJ1579 HDU1331 HDU1579 ZOJ1168 Function Run Fun【记忆化递归】
- 苏宁:我们开发百度小程序遇到的那些“坑”
- 程序员必备的七个快捷键【一分钟掌握】
- 深度剖析“GCC编译器编译过程”
- CSDN资源分享分红2元,哈哈
- CMake的安装(超级详细)
- 华硕电脑(博主电脑型号为天选FA506IH)Fn组合键屏幕不显示对应操作的解决办法!!
- [02-27][08奥斯卡四项大奖][老无所依][DVD中英双字][已测][17:21]
- 未来职业世界的三种人
- mysql python电影院购票系统毕业设计源码221133
- Unity 3D项目 - 01 - 开始游戏主界面
- 利用Python爬取朋友圈数据,爬到你开始怀疑人生
- 在 React JS 中使用 JSON 占位符的Web 简易应用程序
- 计算机二级Java备考需要多久_计算机二级要准备多久 一个月来得及吗
- css filter改变图片的颜色,神奇的操作~
热门文章
- 计算机硬盘有磁性材料吗,电脑硬盘里有磁铁吗
- 进了小公司的应届程序员如何翻身进入大公司?
- 数据仓库技术(Data Warehouse Technologien) 第三章节 多维数据模型(3)
- Fedora系统之打开终端快捷键设置
- 1-20的两个数把和告诉A,积告诉B,A说不知道是多少,B也说不知道,这时A说我知道了,B说我也知道了,请你猜猜这两个数的和是多少
- C/C++存储区域划分(栈区,堆区,全局区,代码区)
- python从入门到实践 练习题雨滴下落--我的下落时全都连在一起了---已解决
- etc fstab 详解linux,/etc/fstab功能详解
- Python自然语言处理——nltk库入门之文本分词(英文)
- 网络编辑如何经营网络社区?