典型相关分析(CCA)

2023-05-16

CCA是数据挖掘中重要的算法,可以挖掘出数据间的关联关系的算法。

基础知识

如何衡量两个变量之间的相关性呢?我们有相关系数,如下所示:

ρ(X,Y)=cov(X,Y)DXDY ρ ( X , Y ) = c o v ( X , Y ) D X D Y

ρ(X,Y) ρ ( X , Y ) 的绝对值越接近1,说明X与Y的线性相关性越高

ρ(X,Y) ρ ( X , Y ) 的绝对值越接近0,说明X与Y的线性相关性越低

算法思想

CCA将多维数据 X,Y X , Y 利用线性变换投影为1维的数据 X,Y X ′ , Y ′ ,然后计算 X,Y X ′ , Y ′ 的相关系数,进而得到二者的相关性。

那么我们的投影标准就是:

投影后,两组数据的相关系数最大。(这样我们就能挖掘出最相关的特征了。)

算法推导

假设投影向量分别为 a,b a , b , 则投影后的数据为:

X=aTX,Y=bTY X ′ = a T X , Y ′ = b T Y

则:

arga,bmaxρ(X,Y)=arga,bmaxcov(x,Y)DXDY a r g a , b m a x ρ ( X ′ , Y ′ ) = a r g a , b m a x c o v ( x ′ , Y ′ ) D X ′ D Y ′

假设我们的原始数据是标准化的,即均值为0,方差为1,则:

cov(X,Y)=cov(aTX,bTY)=aTE(XYT)b c o v ( X ′ , Y ′ ) = c o v ( a T X , b T Y ) = a T E ( X Y T ) b

DX=D(aTX)=aTDXa=aTE(XXT)a D X ′ = D ( a T X ) = a T D X a = a T E ( X X T ) a

DY=D(aTY)=aTDYa=aTE(YYT)a D Y ′ = D ( a T Y ) = a T D Y a = a T E ( Y Y T ) a

因为均值为0,有:

DX=E(XXT),DY=E(YYT) D X = E ( X X T ) , D Y = E ( Y Y T )

cov(X,Y)=E(XYT),cov(Y,X)=E(YXT) c o v ( X , Y ) = E ( X Y T ) , c o v ( Y , X ) = E ( Y X T )

SXY=cov(X,Y) S X Y = c o v ( X , Y )

我们的问题就转化为:

arga,bmaxρ(X,Y)=arga,bmaxaTSXYbaTSXXabTSYYb a r g a , b m a x ρ ( X ′ , Y ′ ) = a r g a , b m a x a T S X Y b a T S X X a b T S Y Y b

问题转化为:

arga,bmaxρ(X,Y)=arga,bmax aTSXYb a r g a , b m a x ρ ( X ′ , Y ′ ) = a r g a , b m a x   a T S X Y b

s.t.aTSXXa=1,bTSYYb=1 s . t . a T S X X a = 1 , b T S Y Y b = 1

则根据拉格朗日乘子法,有:

J(a,b)=aTSXYbλ0(aTSXXa1)λ1(bTSYYb1) J ( a , b ) = a T S X Y b − λ 0 ( a T S X X a − 1 ) − λ 1 ( b T S Y Y b − 1 )

求导有:

SXYb=λ0SXXa S X Y b = λ 0 S X X a

SYXa=λ1SYYb S Y X a = λ 1 S Y Y b

所以有:

aTSXYb=λ0aTSXXa=λ0 a T S X Y b = λ 0 a T S X X a = λ 0

bTSYXa=λ1bTSYYb=λ1 b T S Y X a = λ 1 b T S Y Y b = λ 1

所以有:

λ0=λT1=λ1=aTSXYb=λ λ 0 = λ 1 T = λ 1 = a T S X Y b = λ

可以推出:

S1XXSXYb=λa S X X − 1 S X Y b = λ a

S1YYSYXa=λb S Y Y − 1 S Y X a = λ b

因此有:

S1XXSXYS1YYSYXa=λ2a S X X − 1 S X Y S Y Y − 1 S Y X a = λ 2 a

对上面的式子进行特征值分解,那么特征值的平方根的最大值的特征向量就是我们求得的向量a

同理可以求得向量b

S1YYSYXS1XXSXYb=λ2b S Y Y − 1 S Y X S X X − 1 S X Y b = λ 2 b

基于SVD的推导

其实算法也可以通过svd分解的算法求得,如下所示:

arga,bmaxρ(X,Y)=arga,bmax aTSXYb a r g a , b m a x ρ ( X ′ , Y ′ ) = a r g a , b m a x   a T S X Y b

s.t.aTSXXa=1,bTSYYb=1 s . t . a T S X X a = 1 , b T S Y Y b = 1

令:

a=S12XXμ,b=S12YYv a = S X X − 1 2 μ , b = S Y Y − 1 2 v

则问题转化为:

arga,bmaxρ(X,Y)=arga,bmax μTS12XXSXYTS12YYv a r g a , b m a x ρ ( X ′ , Y ′ ) = a r g a , b m a x   μ T S X X − 1 2 S X Y T S Y Y − 1 2 v

s.t. μTμ=1,vTv=1 s . t .   μ T μ = 1 , v T v = 1

这里 μ,v μ , v 都是单位正交基。

令:

M=S12XXSXYTS12YY M = S X X − 1 2 S X Y T S Y Y − 1 2

对M进行奇异值分解,有:

M=UΣVT M = U Σ V T

因此有:

μTMv=μTUΣVTv=σμv μ T M v = μ T U Σ V T v = σ μ v

因为 U,V U , V 都是单位正交基矩阵, 且 μ,v μ , v 都是单位正交基。

所以有 μTU,VTv μ T U , V T v 是只有一个标量值为1,其他值为0的向量。

所以 σμv σ μ v 只要是最大的奇异值即可。

因此问题转换为对 M=S12XXSXYTS12YY M = S X X − 1 2 S X Y T S Y Y − 1 2 做奇异值分解,得到 U,V U , V ,进而得到 μ,v μ , v

进而得到:

a=S12XXμ a = S X X − 1 2 μ

b=S12YYv b = S Y Y − 1 2 v

后记

我们看到CCA可以用作分析向量的相关性,一定意义上,也可以用作降维。

但是CCA最重要的一个应用还是特征融合,即根据两组特征找到相关性最大的特征,这样可以利用较好的特征来从较差的特征中进行进一步的特征抽取,提高分类效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

典型相关分析(CCA) 的相关文章

  • springsecurity设置用户登录状态过期,让其重新登录

    手动程序让session过期 xff0c 使用户重新登录 判断是否过期 Object expireDate 61 redisTemplate opsForValue get username 43 34 expireDate 34 if e
  • vue如何避免变量赋值后双向绑定

    如 xff1a this list 61 this list2 结果在list改变后 list2也改变 xff0c 这不是我们想要的效果 第一种 xff1a 利用 JSON parse 和 JSON stringify this list
  • 快速部署PaddleHub使用PaddleOCR

    创建虚拟环境 xff1a conda create name hubocr python 61 3 7 安装paddlepaddle pip install paddlepaddle 61 61 2 0 0rc i https mirror
  • 整蛊:聊天中,连续发送消息的vbs脚本

    如何实现连续发送消息呢 xff1f 准备工作 xff1a 只要我们将下面这段代码复制放在记事本里 xff0c 然后保存退出将记事本文件后缀名改为 vbs就可以了 On Error Resume Next Dim wsh s xTimes t
  • 如何处理从application.properties配置文件获取的汉字乱码问题

    平时从配置文件各种读取配置参数都正常 xff0c 但是有时候放了个中文就乱码 xff0c 你肯定试过网上好多方法 xff0c 都没解决 xff0c 那么来看下面 xff0c 恭喜你终于找这里了 这里 xff0c 我们以springboot框
  • mybatis使用相关问题汇总——持续更新中

    1 疑问 xff1a 怎样让表字段和实体类里的驼峰命名字段对应尼 xff1f 解决方案 xff1a 以下配置可让表字段和实体类的字段相对应 1 此方法只针对 39 user name 39 变 userName 这种驼峰有效 xff0c 但
  • 五大常用算法总结

    引言 据说有人归纳了计算机的五大常用算法 xff0c 它们是贪婪算法 xff0c 动态规划算法 xff0c 分治算法 xff0c 回溯算法以及分支限界算法 虽然不知道为何要将这五个算法归为最常用的算法 xff0c 但是毫无疑问 xff0c
  • android 下载应用 通知栏显示进度 下完之后点击安装 (很实用)

    先看效果图 xff1a 这是本人的习惯 xff0c 先上图显示效果 xff0c 看是否是想要的 xff0c 再看代码 有图有真相 代码 xff1a Main package com gem hsx appupdate import andr
  • 轻松解决vscode官网下载慢问题

    下载vscode安装包时 xff0c 都习惯去官网下载 xff0c 但是会如下图第一次下载那样缓慢 xff0c 对着下载处右击 xff0c 复制出下载链接 xff0c 把下载链接中code visualstudio com换成vscode
  • redis获取缓存对象bean时报:SerializationException: Could not read JSON: Could not resolve type

    一 在单个应用内进行 存 取 工作中的问题场景 xff1a 将一个实体类对象set存入 redis中 xff0c 用的时候去get时 xff0c 报错提示 xff1a SerializationException Could not rea
  • window 2012 R2 忘记密码处理方案

    方案一 xff1a 你是否开启了内置管理员 xff0c 或是还建立了其他的管理员账户 如果有的话 xff0c 请先以其他管理员账户登入电脑 xff0c 在本地计算机和组中 xff0c 更改你的账户密码 方案二 xff1a 如果没有的话 xf
  • 达梦数据库不同模式导入时系统提示字符集异常的解决办法

    近期参加了达梦DCA的培训 xff0c 练习的时候遇到一个问题 xff1a 同一模式导出导入正常 xff0c 但是在将DMTEST模式导出的dmp文件导入DMTEST02时 xff0c 遇到了如下报错 xff1a 提示本地编码 PG UTF
  • gradle 插件与gradle版本对应关系

    https developer android google cn studio releases gradle plugin html updating gradle 插件版本所需的Gradle版本1 0 0 1 1 3 2 2 1 2
  • 程序员的硬件设备

    程序员的硬件设备 程序员的工作台 很多人从网上 或者公司里 xff0c 看到程序员开发的工作台是这样的 其实这是个误区 xff0c 不同的人习惯不一样 xff0c 对于程序员来说 xff0c 一台性能好点的电脑就做够了 市场上有很多驻场外包
  • scp 本地复制文件到服务器

    1 本地复制文件到服务器 scp Users guolm Desktop ROOT war root 64 192 168 1 228 opt tomcat webapps 2 服务器到本地文件 scp root 64 192 168 1
  • Wireshark 认识捕获的分析数据包(及各个分层协议的介绍)

    综述 xff1a 认识Wireshark捕获数据包 当我们对Wireshark主窗口各部分作用了解了 xff0c 学会捕获数据了 xff0c 接下来就该去认识这些捕获的数据包了 Wireshark将从网络中捕获到的二进制数据按照不同的协议包
  • 禁用virtualbox自带的dhcp服务

    在你安装虚拟机的系统上面 xff0c 打开cmd xff1a cd D cd D softInstall VMvirtualbox6 D softInstall VMvirtualbox6 gt VBoxManage list dhcpse
  • MATLAB并行计算

    先上图 xff0c 图中求500次随机矩阵的特征值 xff0c 串行14 85s xff0c 并行3 63s 串行计算 tic S1 61 1 for i 61 1 500 S1 61 S1 43 max eig rand i end di
  • libsvm参数说明

    因为要用svm做regression xff0c 所以看了一些关于libsvm xff0c 总结以备用 libsvm在训练model的时候 xff0c 有如下参数要设置 xff0c 当然有默认的参数 xff0c 但是在具体应用方面效果会大大
  • Windows C# RabbitMQ 安装--配置--信息收发

    前言 近期要实现一个图片异步上传的需求 xff0c 需要用到RabbitMQ xff0c 辅助客户端完成对高并发请求的处理 一 安装Erlang 由于RabbitMQ服务器是用Erlang语言编写 xff0c 所以我们需要先安装Erlang

随机推荐

  • .MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1

    MalformedJsonException Use JsonReader setLenient true to accept malformed JSON at line 1 column 1 path 像这种低级错误 xff0c 我今天
  • 离线升级curl采坑

    先在线yum打包 1 安装repo rpm Uvh http www city fan org ftp contrib yum repo rhel6 x86 64 city fan org release 2 1 rhel6 noarch
  • uos桌面系统获取串口日志

    文章目录 一 准备工作1 问题机器2 收集日志机器 二 串口线连接三 收集日志机器上查看串口信息四 问题机器上设置gurb五 cutecom调试串口六 使用minicom工具收集串口信息 一 准备工作 1 问题机器 span class t
  • Ubuntu18.04.3安装GTX1650显卡驱动 安装CUDA 安装CUDNN

    0 前期准备 禁用BIOS的secure boot xff0c 即disable它 xff0c 如果不关闭 xff0c 使用第三方源安装显卡驱动会安装后不能使用 1 禁用nouveau 1 创建文件 xff0c 如果没有下载vim编辑器 x
  • mybatis中resultMap使用之返回分组数据

    1 resultMap 1 1 引言 resultMap是mybatis最重要的强大元素 通过描述数据的关系结构 xff0c 将结果集进行映射到java类或java bean中 xff0c 达到结果集复杂处理的目的 本文解决的主要问题的分组
  • 项目中使用JPush推送,遇到的问题

    JPush初始化错误 Android版本是4 0以上的 xff0c JPush包是1 60的 报错 xff1a 02 24 18 46 54 306 E AndroidRuntime 22522 FATAL EXCEPTION Thread
  • HIDL最全编译流程

    想了解HIDL介绍的可以参考 HIDL概述 xff0c 本篇文章主要介绍HIDL的详细编译流程及简单的客户端应用 xff08 C 43 43 跟Android客户端的应用 xff09 一 准备工作 整一套源码 xff0c Android O
  • 【mysql】如何在MySQL中导入超大的SQL文件?

    mysql 如何在MySQL中导入超大的SQL文件 xff1f 方法 1 在navicat中导入 xff08 速度慢 xff09 2 使用source命令导入 xff08 速度快 xff09 第一种很简单 xff0c 本文只介绍第二种 步骤
  • (转)imageIO异常:Unsupported Image Type, 不支持图像类型

    是不是在使用iamgeio导入图片的时候出现了这个异常呢 xff1a javax imageio IIOException Unsupported Image Type 如果你确定图片格式没有错 xff0c 那我想你可能使用过photosh
  • 遗传算法与进化算法

    引言 1858年7月1日C R 达尔文与A R 华莱士在伦敦林奈学会上宣读了进化论的论文 xff0c 至此进化理论深入人心 xff0c 为广大吃瓜群众开辟了一个思想的新的天地 而我们的机器学习大师们向来喜欢从生物学家那里找灵感 xff0c
  • Git使用手册/Git教程:git pull origin 拉取代码到本地,解决拉取代码时发生的文件冲突

    相关文章 xff1a 关于验证是否存在ssh配置以及生成SSH Key的方法可以参照文章 xff1a Git使用手册 生成SSH Key 关于SSH Key的使用和公钥在gitHub gitLab的配置等 xff0c 请参考文章 xff1a
  • 基于SSM的社区团购小程序的设计与实现

    社区团购的设计与实现 该项目含有源码 论文等资料 配套开发软件 软件安装教程 项目发布教程等 系统功能完整 xff0c 适合作为毕业设计 课程设计 数据库大作业学习使用 项目功能介绍 社区团购系统中的功能模块主要是实现管理员服务端 xff1
  • AFNetWorking(3.0)源码分析(五)——AFHTTPRequestSerializer & AFHTTPResponseSerializer

    在前面的几篇博客中 xff0c 我们分析了AFURLSessionMangerd以及它的子类AFHTTPSessionManager 我们对AF的主要两个类 xff0c 有了一个比较全面的了解 对于AFHTTPSessionManager
  • java String 最长长度和占用内存大小

    一 序 String在内存中的最大长度理论上是int型变量的最大值 xff0c Integer MAX VALUE String的字面常量的最大长度为CONSTANT Utf8 info表决定 xff0c 一般为65535 二 介绍 1 S
  • Android常用检查判断方法

    自己工作中比较常用的一些判断检测 span class hljs keyword import span android app ActivityManager span class hljs keyword import span and
  • 小米、魅族状态栏字体变色整理

    span class hljs javadoc 设置小米手机状态栏字体图标颜色模式 xff0c 需要MIUIV6以上 span class hljs javadoctag 64 param span window 需要设置的窗口 span
  • C语言学习:初接触

    C程序结构 C程序结构主要包括以下部分 xff1a 预处理指令器 函数 变量 语句 amp 函数体 注释 用一个简单的 Hello World 代码说明 xff1a span class hljs preprocessor include
  • C语言学习:基本语法

    分号 如果你有其它编程语言的基础 xff0c 相信你已经明白了分号的意义 分号在C语言中与多数语言相同 xff0c 它代表了语句的结束 也就是说 xff0c 一个完整的语句必须以分号结尾 注释 注释就像是帮助文件一样 xff0c 它可以帮助
  • C语言学习:数据类型

    在C语言中 xff0c 数据类型可以分为以下几种 xff1a 类型描述基本类型C语言中的算术类型 xff0c 包含整数型和浮点型枚举类型C语言中的算术类型 xff0c 用来定义在程序中只能赋予其一定的离散整数值的变量 void类型类型说明符
  • 典型相关分析(CCA)

    CCA是数据挖掘中重要的算法 xff0c 可以挖掘出数据间的关联关系的算法 基础知识 如何衡量两个变量之间的相关性呢 xff1f 我们有相关系数 xff0c 如下所示 xff1a X Y 61 c o v X Y D X D Y X