Jordan Lecture Note-12: Kernel典型相关分析(Kernel Canonical Correlation Analysis, KCCA).

2023-11-12

Kernel典型相关分析

(一)KCCA

    同样,我们可以引入Kernel函数,通过非线性的坐标变换达到之前CCA所寻求的目标。首先,假设映射$\Phi_X: x\rightarrow \Phi_X(x), \Phi_Y: y\rightarrow \Phi_Y(y)$,记$\mathbf{\Phi_X}=(\Phi_X(x_1),\Phi_X(x_2),\cdots,\Phi_X(x_p))^\prime, \mathbf{\Phi_Y}=(\Phi_Y(y_1),\Phi_Y(y_2),\cdots,\Phi_Y(y_q))^\prime$。我们要寻找典型变量$u,v$使相关系数最大,其中$u=\langle a,\Phi_X(x)\rangle=\Phi_X^\prime a, v=\langle b,\Phi_Y(y)\rangle=\Phi_Y^\prime b$,$a,b$的维度为映射后的空间。根据上一个笔记的分析,我们应该优化如下模型:

\begin{align}\mathop{\max}&\quad a^\prime\mathbf{\Phi_X}^\prime\mathbf{\Phi_Y}b \nonumber\\\mathop{s.t.}&\quad a^\prime\mathbf{\Phi_X}^\prime\mathbf{\Phi_X}a=1\nonumber\\&\quad b^\prime\mathbf{\Phi_Y}^\prime\mathbf{\Phi_Y}b=1\label{model:koriginal}\end{align}

此时,如果我们直接优化上面的模型的话,就无法引进Kernel函数,因为我们凑不出$\Phi_X(x)^\prime\Phi_X(y)$这种形式。这样的话,我们就得知道映射$\Phi$的具体形式。但实际上,这里的$a,b$其实是可以表示成数据$\Phi_X(x_1),\cdots,\Phi_X(x_n)$以及数据$\Phi_Y(y_1),\cdots,\Phi_Y(y_n)$的线性组合。原因蛮复杂的,大概是当映射后的Hilbert空间的维度很大,那么这里的$a,b$就一定在数据张成的空间里。具体可以参见一下两篇论文(Nonlinear component analysis as a kernel eigenvalue problem以及Kernel independent component analysis)。另外在KCCA刚提出的那篇论文里(A kernel method for canonical correlation analysis),没有从那么深奥的理论去解释,但他是直接从正则化的KCCA那边出发去解释的,这里也稍微说明一下。正则化的Lagrange函数为:

\begin{equation}L(a,b,\lambda_1,\lambda_2)=a^\prime\mathbf{\Phi_X}^\prime\mathbf{\Phi_Y} b-\frac{\lambda_1}{2}(a^\prime\mathbf{\Phi_X}^\prime\mathbf{\Phi_X}a-1)-\frac{\lambda_2}{2}(b^\prime\mathbf{\Phi_Y}^\prime\mathbf{\Phi_Y}b-1)+\frac{\eta}{2}(\|a\|^2+\|b\|^2)\end{equation}

将Lagrange函数对$a$求导并令导数为零得:

\begin{equation}\frac{\partial L}{\partial a}=\mathbf{\Phi_X}^\prime\mathbf{\Phi_Y}b-\lambda_1\mathbf{\Phi_X}^\prime\mathbf{\Phi_X}a+\eta a=0\end{equation}

故$a=\frac{\mathbf{\Phi_X}^\prime(\lambda_1\mathbf{\Phi_X}a-\mathbf{\Phi_Y}b)}{\eta}$,其中我们可以把$\frac{\lambda_1\mathbf{\Phi_X}a-\mathbf{\Phi_Y}b}{\eta}$记作向量$c$,也就是说$a$可以表示成$a=\mathbf{\Phi_X}^\prime c$。同理,$b$也可表示成$b=\mathbf{\Phi_Y}^\prime d$。接下去我们就用$\mathbf{\Phi_X}^\prime c, \mathbf{\Phi_Y}d$来替换$a,b$,先从KCCA开始,然后在引入正则化的KCCA。

    利用以上结果模型\ref{model:koriginal}可转化为:

\begin{align}\mathop{\max}&\quad c\mathbf{\Phi_X}^\prime\mathbf{\Phi_X}\mathbf{\Phi_Y}^\prime\mathbf{\Phi_Y}d\nonumber\\\mathop{s.t.}&\quad c\mathbf{\Phi_X}^\prime\mathbf{\Phi_X}\mathbf{\Phi_X}^\prime\mathbf{\Phi_X}c=1\nonumber\\&\quad d\mathbf{\Phi_Y}^\prime\mathbf{\Phi_Y}\mathbf{\Phi_Y}^\prime\mathbf{\Phi_Y}d=1\label{model:k}\end{align}

我们用核函数$\mathbf{K_X}=\mathbf{\Phi_X}^\prime\mathbf{\Phi_X}$和$\mathbf{K_Y}=\mathbf{\Phi_Y}^\prime\mathbf{\Phi_Y}$代替上述模型得:

\begin{align}\mathop{\max}&\quad c\mathbf{K_X}\mathbf{K_Y}d\nonumber\\\mathop{s.t.}&\quad c\mathbf{K_X}\mathbf{K_X}d=1\nonumber\\&\quad d\mathbf{K_Y}\mathbf{K_Y}d=1\label{model:kernel}\end{align}

 对应的Lagrange函数为:

\begin{equation}L(c,d,\lambda_1,\lambda_2)=c^\prime\mathbf{K_X}\mathbf{K_Y}d-\frac{\lambda_1}{2}(c^\prime\mathbf{K_X}^2c-1)-\frac{\lambda_2}{2}(d\mathbf{K_Y}^2d-1)\end{equation}

 对Lagrange函数求导得:

\begin{align}&\frac{\partial L}{\partial c}=\mathbf{K_X}\mathbf{K_Y}d-\lambda_1\mathbf{K_X}^2d=0\label{equ:partialc}\\&\frac{\partial L}{\partial d}=\mathbf{K_Y}\mathbf{K_X}c-\lambda_2\mathbf{K_Y}^2d=0\label{equ:partiald}\end{align}

由$c^\prime$左乘式子\ref{equ:partialc},$d^\prime$左乘式子\ref{equ:partiald},相减得:

\begin{equation}\lambda_2d^\prime\mathbf{K_Y}^2d-\lambda_1c^\prime\mathbf{K_X}^2c=0\Longrightarrow \lambda_1=\lambda_2\triangleq \lambda\end{equation}

再结合$c^\prime \mathbf{K_X}\mathbf{K_Y}d-\lambda_1c\mathbf{K_X}^2c=c^\prime\mathbf{K_X}\mathbf{K_Y}d-\lambda_1=0$可得:

\begin{equation}\lambda=c\mathbf{K_X}\mathbf{K_Y}d\end{equation}

即$\lambda$就是典型变量$u,v$的相关系数。接下去同样采用Note-11中的推导方法,也能得到一个求矩阵特征值的方程。这里就不再赘述了。

    现在我们来看一个问题,当$\mathbf{K_X},\mathbf{K_Y}$可逆的情况下,由式子\ref{equ:partiald}可得:$d=\frac{\mathbf{K_Y}^{-2}\mathbf{K_Y}\mathbf{K_X}d}{\lambda}=\frac{\mathbf{K_Y}^{-1}\mathbf{K_X}c}{\lambda}$,将其代入\ref{equ:partialc}得:

\begin{equation}\mathbf{K_XK_YK_Y}^{-1}\mathbf{K_X}c-\lambda^2\mathbf{K_X}^2c=0\Longrightarrow \lambda=1\end{equation}

也就是说,对于任何一个$d$总存在$c$使$u,v$的相关系数为1,显然这样的结果表明了模型出现了过拟合现象。事实上在有些论文中也提到了,当映射后的Hilbert空间的维数很大时,Lagrange函数会产生ill-posed,此时我们引入二次正则项得到一个well-posed Lagrange。也就是正则化的KCCA。  

(二)正则化的KCCA

这里介绍两种正则化的KCCA,一种是对Lagrange加入正则项,一种是对限制条件做一下修改。

1) 引入正则项的Lagrange函数为:

\begin{equation}L=c^\prime\mathbf{K_XK_Y}d-\frac{\lambda_1}{2}(c^\prime\mathbf{K_X}^2c-1)-\frac{\lambda_2}{2}(d^\prime\mathbf{K_Y}^2d-1)+\frac{\eta}{2}(\|c\|^2+\|d\|^2)\end{equation}

同样令Lagrange函数的导数为0,得:

\begin{align}&\mathbf{K_XK_Y}d=\lambda(\frac{\lambda_1}{\lambda}\mathbf{K_X}^2-\frac{\eta}{\lambda}\mathbf{I})c\\&\mathbf{K_YK_X}c=\lambda(\frac{\lambda_2}{\lambda}\mathbf{K_Y}^2-\frac{\eta}{\lambda}\mathbf{I})d\end{align}

记$\mathbf{K_O}=\left[\begin{array}&0&\mathbf{K_XK_Y}\\\mathbf{K_Yk_X}&0\end{array}\right]$,$\mathbf{K_D}=\left[\begin{array}&\frac{\lambda_1}{\lambda}\mathbf{K_X}^2+\frac{\eta}{\lambda}\mathbf{I}&0\\0&\frac{\lambda_2}{\lambda}\mathbf{K_Y}^2+\frac{\eta}{\lambda}\mathbf{I}\end{array}\right]$,$\gamma=\left[\begin{array}&c\\d\end{array}\right]$,则:

\begin{equation}\mathbf{K_O}\gamma=\lambda\mathbf{K_D}\gamma\Longrightarrow\mathbf{K_D}^{-1}\mathbf{K_O}\gamma=\lambda\gamma\end{equation}

得到一个求特征值的问题。

2)对限制条件作修改后的模型为:

\begin{align}\mathop{\max}&\quad c^\prime\mathbf{K_X}\mathbf{K_Y}d\nonumber\\\mathop{s.t.}&\quad(1-\tau)c^\prime\mathbf{K_X}^2c+\tau c^\prime\mathbf{K_X}c=1\nonumber\\&\quad(1-\tau)d^\prime\mathbf{K_Y}^2d+\tau d\mathbf{K_Y}d=1\end{align}

其Lagrange函数为:

\begin{equation}L=c^\prime\mathbf{K_XK_Y}d-\frac{\lambda_1}{2}[(1-\tau)c^\prime\mathbf{K_X}^2c+\tau c^\prime\mathbf{K_X}c-1]-\frac{\lambda_2}{2}[(1-\tau)d^\prime\mathbf{K_Y}^2d+\tau d^\prime\mathbf{K_Y}d-1]\end{equation}

求导:

\begin{align}&\frac{\partial L}{\partial c}=\mathbf{K_XK_Y}d-\lambda_1[(1-\tau)\mathbf{K_X}^2c+\tau\mathbf{K_X}c]\label{equ:partialconc}\\&\frac{\partial L}{\partial d}=\mathbf{K_YK_X}c-\lambda_2[(1-\tau)\mathbf{K_Y}^2d+\tau\mathbf{K_Y}d]\label{equ:partialcond}\end{align}

$c^\prime\times$\ref{equ:partialconc},$d^\prime\times$\ref{equ:partialcond},相减得到:

\begin{align*}&\lambda_1c^\prime[(1-\tau)\mathbf{K_X}^2c+\tau\mathbf{K_X}c]=\lambda_2d^\prime[(1-\tau)\mathbf{K_Y}^2d+\tau\mathbf{K_Y}d]\\\Longrightarrow&\lambda_1=\lambda_2=\lambda=c^\prime\mathbf{K_XK_Y}d\end{align*}

同样记$\mathbf{K_O}=\left[\begin{array}&0&\mathbf{K_XK_Y}\\\mathbf{K_YK_X}&0\end{array}\right]$,$\mathbf{K_D}=\left[\begin{array}&(1-\tau)\mathbf{K_X}^2+\tau\mathbf{K_X}&0\\0&(1-\tau)\mathbf{K_Y}^2+\tau\mathbf{K_Y}\end{array}\right]$,$\gamma=\left[\begin{array}&c\\d\end{array}\right]$,则$\mathbf{K_O}\gamma=\lambda\mathbf{K_D}\gamma$,得到一个求特征值的问题。

(三)Cholesky Decomposition

    由于解上述特征值问题时会遇到效率与精度问题,故可对上述的矩阵进行SVD分解,或对上述正定矩阵进行完全Cholesky分解,或者不完全Cholesky分解。

1)完全Cholesky分解

   a) 对于一个正定矩阵$\mathbf{A}$,我们总可以将$\mathbf{A}$分解成三角矩阵相乘的形式,即$\mathbf{A}=\mathbf{LL}^\prime$,其中$\mathbf{L}$为下三角矩阵。由$\mathbf{A}=\mathbf{LL}^\prime$可知:

\begin{equation*}a_{ij}=\sum_{k=1}^{j}l_{ik}l_{jk}=\sum_{k=1}^{j-1}l_{ik}l_{jk}+l_{ij}l_{jj},\quad j<i\end{equation*}

所以,由$a_{jj}=\sum_{k=1}^{j-1}l_{jk}^2+l_{jj}^2\Longrightarrow l_{jj}^2=a_{jj}-\sum_{k=1}^{j-1}l_{jk}^2$,继而$l_{ij}=\frac{1}{l_{jj}}(a_{ij}-\sum_{k=1}^{j-1}l_{ik}l_{jk})$。从上述方程可以看出$\mathbf{L}$的计算过程从左到右,逐列计算,称为left-looking cholesky。

   b) 由$\mathbf{A}=\mathbf{LL}^\prime=\left[\begin{array}&\lambda_{11}&0\\l_1&\tilde{\mathbf{L}}\end{array}\right]\left[\begin{array}&\lambda_{11}&0\\l_1&\tilde{\mathbf{L}}\end{array}\right]^\prime=\left[\begin{array}&a_{11}&a_1^\prime\\a_1&\tilde{\mathbf{A}}\end{array}\right]$。所以:

$$a_{11}=\lambda_{11}^2\Longrightarrow \lambda_{11}=\sqrt{a_{11}}$$

$$a_1=\lambda_{11}l_1\Longrightarrow l_1=\frac{a_1}{\sqrt{a_{11}}}$$

$$\tilde{\mathbf{A}}=l_1l_1^\prime+\tilde{\mathbf{L}}\tilde{\mathbf{L}}^\prime\Longrightarrow\tilde{\mathbf{L}}\tilde{\mathbf{L}}^\prime=\tilde{\mathbf{A}}-\frac{a_1a_1^\prime}{a_{11}}$$

可以用递归的方式不断的计算出$\tilde{\mathbf{L}}$,称为right-looking cholesky。

2)不完全cholesky分解

    与完全cholesky分解不同,不完全cholesky分解的目标是寻找一个矩阵$\tilde{\mathbf{G}}_{N\times M}$(其中$M<<N$),使$\mathbf{A}\approx\tilde{\mathbf{G}}\tilde{\mathbf{G}}^\prime$,即$\|\mathbf{A}-\tilde{\mathbf{G}}\tilde{\mathbf{G}}^\prime\|_F<\eta$,这里的$\tilde{\mathbf{G}}$也是下三角矩阵。其中算法的主要原理是:如果对角元素$l_{ii}$很小的话,那么我们可以把该列去掉,去掉该列之后,在其后的列都必须进行更新。算法从最大的对角元素开始,然后把该列交换到最前面,然后进行更新。算法流程:

Input: $N\times N$正定矩阵$\mathbf{K}$,和$\eta$.

  1. 初始化:$i=1,\mathbf{\bar{K}}=\mathbf{K},\mathbf{P}=\mathbf{I},\mathbf{G}=0$,$G_{jj}=K_{jj}, j=1,\cdots,N$.
  2. while $\sum_{j=i}^NG_{jj}>\eta$
    1. 找出最大的$G_{jj}$: $j^*=\mathop{argmax}_{j\in[i,N]} G_{jj}$.
    2. 更新交换矩阵$\mathbf{P}$:

      $Pnext = \mathbf{I}$, $Pnext_{ii}=0$, $Pnext_{j^*j^*}=0$, $Pnext_{ij^*}=1$, $Pnext_{j^*i}=1$(Pnext为交换$i,j^*$行或列的交换矩阵),$\mathbf{P}=\mathbf{P}Pnext$

    3. 对$\mathbf{\bar{K}}$进行行列交换:$\mathbf{\bar{K}}=Pnext\mathbf{\bar{K}}Pnext$.
    4. 交换矩阵$\mathbf{G}$中第$i$行和第$j^*$行,注意只交换前$i$个元素,$j^*\geq i$: $\mathbf{G}_{i,1:i}\longleftrightarrow\mathbf{G}_{j^*,1:i}$.
    5. $\mathbf{G}_{ii}=\sqrt{\mathbf{\bar{K}}_{ii}}$.
    6. 更新第$i$列$\mathbf{G}$: $\mathbf{G}_{i+1:n,i}=\frac{1}{\mathbf{G}_{ii}}(\mathbf{\bar{K}}_{i+1:N,i}-\sum_{i=1}^{i-1}\mathbf{G}_{i+1:N,j}\mathbf{G}_{ij})$.
    7. 更新$i$后面的对角元素:for $j\in[i+1,N], \mathbf{G}_{jj}=\mathbf{K}_{jj}-\sum_{k=1}^i\mathbf{G}_{jk}^2$.
    8. $i=i+1$.
  3. 得到$\mathbf{P},\mathbf{G}$,$M=i-1$.

Output: 一个$N\times M$的矩阵$\mathbf{G}$,和交换矩阵$\mathbf{P}$,使$\|\mathbf{PKP}^\prime-\mathbf{GG}^\prime\|\leq\eta$.

 

posted on 2014-03-09 21:49 Boostable 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/boostable/p/lec_kernel_canonical_correlation_analysis.html

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

Jordan Lecture Note-12: Kernel典型相关分析(Kernel Canonical Correlation Analysis, KCCA). 的相关文章

  • 搭建karma+mocha+chai+webpack的支持es6的单元测试

    问题背景 首先 在搭建之前要知道在什么情况下需要karma mocha chai webpack的单元测试呢 首先你写的项目是一个前端项目 是运行在浏览器中的 写好的代码包含了es6的语法 则需要搭建这样一个单元测试环境 mocha是真正的
  • 将一句汉字文本转化为对应的拼音

    语音合成时 数据预处理 需要将一句汉字文本转化为对应的拼音 其中 汉字文本包含标点符号 而拼音含有声调不含标点符号 具体格式举例如下 输入 设置文件名 怎么样 输出 she4 zhi4 wen2 jian4 ming2 zen3 me5 y
  • JAVA单元测试框架-7-invocationCount和invocationTimeOut

    1 invocationCount 字面意思就是调用的次数统计 就是这个测试用例被调用执行的次数 2 invocationTimeOut 字面意思是调用的超时 设置一个最大的毫秒数来计算执行多次后总共耗时多少 耗时值不能超过设置的最大毫秒数
  • PL0语言出错编号表

    Notes 编译原理第 3 版的书貌似没有这个表 做实验和写课设的时候很不方便 把别人拍的第 2 版书上的这个表在这备份一份 Error Code Table 出错编号 出错原因 1 常数说明中的 写成 2 常数说明中的 后应是数字 3 常
  • 为什么JAVA文件中只能含有一个Public类

    1 一个 java 源文件中是否可以包括多个类 不是内部类 有什么限制 答 可以有多个类 但只能有一个public的类 并且public的类名必须与文件名相一致 2 为什么一个文件中只能有一个public的类 答 编译器在编译时 针对一个j
  • 编程中常用设计模式

    单例模式 单例模式的优点 1 在单例模式中 活动的单例只有一个实例 对单例类的所有实例化得到的都是相同的一个实例 这样就防止了其他对象对自己的实例化 确保所有的对象都访问同一个实例 2 单例模式具有一定的伸缩性 类自己来控制实例化进程 类就
  • 【云风skynet】详解skynet的多核高并发编程丨actor模型丨游戏开发丨游戏服务端开发丨多线程丨Linux服务器开发丨后端开发

    skynet中多核高并发编程给我们的启发 1 多核并发编程 2 actor模型详解 3 手撕一个万人同时在线游戏 视频讲解如下 点击观看 云风skynet 详解skynet的多核高并发编程丨actor模型丨游戏开发丨游戏服务端开发丨多线程丨
  • C++设计日志:读写定界符文件

    C 设计日志 读写定界符文件 荣耀 2003 我将撰写的 C 设计实践 系列文章 会讲到一些数据处理系统设计方法 我并不希望文章局限于特定数据库产品 我也不喜欢空对空地讲述太多抽象道理 我必须编写一些模拟数据库操作的代码 用于读写定界符文件
  • notepad linux,适用于Linux的11种最佳Notepad ++替代品

    Notepadd 是一个完全免费的源代码编辑器 作为Windows上的 Notepad的替代品而创建 基于Scintilla在C 中编写 并实现了Win32 API和STL 以确保程序大小小 执行速度快 这些功能使其成为一个家族开发者名字
  • 有哪些值得推荐的LoRa模块?

    随着物联网技术的发展 LoRa模块已经被应用到各行各业 其在市场上受欢迎程度非比一般 业内对于LoRa技术的发展前景有着非常乐观的看法 目前国内生产LoRa相关产业的企业数量已超过数千家 创新微MinewSemi在LoRa模块方面也积累了一
  • inux启动输入密码出现module is unknown

    当启动输入密码无法登录时 重启按下e键 在linux16这一行中找到ro 将ro改变为rw 并在结尾添加init bin sh 查看 var log secure日志文件中排查错误 最终发现是 lib security pam limits
  • 2021年全国职业院校技能大赛(中职组)网络安全竞赛试题(1)详细解析教程

    2021年全国职业院校技能大赛 中职组 比赛环境可以私信博主获得 网络安全竞赛讨论可以加扣群421865857 网络安全竞赛试题 1 总分100分 赛题说明 一 竞赛项目简介 网络安全 竞赛共分A 基础设施设置与安全加固 B 网络安全事件响
  • cpp: Abstract Factory Pattern

    Gold h 此文件包含 Gold 类 Abstract Factory Pattern C 14 2023年4月30日 涂聚文 Geovin Du Visual Studio 2022 edit pragma once ifndef GO
  • C++中vector使用方法

    目录 1 基本操作 2 算法 3 输出vector的中的元素 三种方法 在C 中 vector是一个十分有用的容器 是一个能够存放任意类型的动态数组 能够增加和压缩数据 vector的优点 1 可将容器中元素翻转 复制元素 找到元素值对应的
  • 信号与系统学习总结 第三章 傅里叶变换

    信号与系统学习总结 第三章 傅里叶变换 章节思路 傅里叶级数 傅里叶变换 周期信号傅里叶变换 抽样定理 傅里叶级数 满足狄利赫里条件的周期函数f t 可以分解为a0 直流分量 cos n 1t 和sin n 1t 的和 根据欧拉公式 还可以
  • C语言实现银行家算法

    问题描述 银行家算法描述 假设系统中有n个进程 m种资源 对于该道题目而言 n为5 m为4 定义一个5 4的allocation分配矩阵 用来表示对所有进程的资源分配情况 Allocation i j k 表示进程Pi已经获得j资源k个 同
  • 区块链节点和区块区别_区块链中主链和侧链的区别

    区块链尤其是公有链都有主网和测试网 主网是区块链社区公认的可信区块链网络 其交易信息被全体成员所认可 有效的区块在经过区块链网络的共识后会被追加到主网的区块账本中 按区块链网络的独立程度 分为两种 主链 侧链 两者的区别如下 1 主链指正式
  • Windows Terminal + wsl 之调整ls命令颜色、底色方法

    1 显示预设置 执行 cd dircolors p gt dircolors 2 接着修改 用vi 可预览效果 vi dircolors 找到如下条目 修改字体颜色和背景色如下 STICKY OTHER WRITABLE 30 46 dir
  • Matplotlib

    文章目录 1 什么是matplotlib 2 实现一个简单的matplotlib绘图 3 matplotlib图像结构 4 matplotlib基础绘图 多个坐标系显示 plt subplots 面向对象的画图方法 5 常见图形种类 1 什
  • 浏览器控制台反调试

    反反调试 常规方法 前文所提到的几个反调试方法 除debugger方式外 均判断是否打开开发者工具 破解的方式也很简单 基本只需两步就可以搞定 将开发者工具以独立窗口形式打开 打开开发者工具后再打开网址 反反调试 debugger方法 若使

随机推荐

  • Django框架的源码解析

    简述 从django admin startproject name 开始 小结 django core management init py 1 5个方法 2 ManagementUtility 类 小结 base py 1 2个方法 2
  • super.onCreate(savedInstanceState);

    super onCreate savedInstanceState 是调用父类的onCreate构造函数 savedInstanceState是保存当前Activity的状态信息 onCreate方法的参数是一个Bundle类型的参数 Bu
  • Facebook存储65亿张照片的存储框架

    Facebook存储65亿张照片的存储框架 从未用过Facebook 但是还是对Facebook应对大容量的非结构化数据存储方案感兴趣 本文是通过在线网络广播 webcast 经本人翻译得来的 因此 本人并不能确保本文中叙述的内容与原文we
  • C++中结构体、公用体在内存单元占用字节数计算

    一 数据类型所占存储空间对比 数据类型 64位机 32位机 char 1个字节 1个字节 short 2个字节 2个字节 int 4个字节 4个字节 long 8个字节 4个字节 float 4个字节 4字节 double 8个字节 8个字
  • 软件外包开发代码管理工具

    软件代码规范是为了提高代码质量 可读性和可维护性而制定的一系列编程规则和约定 代码管理工具则是用于协助团队成员共享 跟踪和合并代码的工具 今天和大家分享这方面的知识 希望对大家有所帮助 北京木奇移动技术有限公司 专业的软件外包开发公司 欢迎
  • 魅族大数据可视化平台建设之路

    本文是根据魅族科技大数据平台架构师赵天烁3月31日在msup携手魅族主办的第十二期魅族技术开放日 魅族大数据可视化平台建设之路 演讲中的分享内容整理而成 内容简介 本文主要从现状 问题 当前目标 实现方案三个方面介绍了可视化平台的建设之路
  • Python点云处理(二)点云数据可视化

    目录 0 简述 1 matplotlib 1 1 安装 1 2 点云可视化 2 Mayavi 3 Open3D 4 Vispy 5 VTK 6 结语 0 简述 点云可视化是数据分析 数据展示及程序集成的基础性功能 Python提供了许多强大
  • Error:Abnormal build process termination:

    Error Abnormal build process termination C Program Files Java jdk1 8 0 121 bin java Xmx700m Djava awt headless true Djav
  • 分布式计算框架Spark集群实战

    一 Spark整体架构 1 Spark集群架构 从集群部署的角度看 Spark集群由集群管理器 Cluster Manager 工作节点 Worker 执行器 Executor 驱动器 Driver 应用程序 Application 等部分
  • 1.8,strerror和perror

    这个例子主要是报错 其实 我不大注重报错的差异 只要知道大概在哪里出错就行了 先抄代码 运行 ok
  • clone()

    深复制 浅复制
  • css选择器

    css选择器 1 选择器的作用 找到特定的HTML标签元素 选择所需要的标签 2 基础选择器 2 1标签选择器 作用 可以把一类标签全部选择出来 比如div span标签 快速的为页面中同类型的标签统一化 但是不能设计差异化的样式 div
  • WIN10应用程序无法正常启动(0xc0000142)。请单击‘确认’关闭应用程序

    在网上找了好久解决方法 有说用命令行for 1 in windir system32 dll do regsvr32 exe s 1 来重新注册系统组件 有说删除 appdata microsoft templates 这个目录下的文件 还
  • 软件产品license的简单实现java

    目录 软件License简介 License控制内容 实现方案 代码示例讲解 注意事项 源码 软件License简介 我们在使用一些需要购买版权的软件产品时 或者我们做的商业软件需要进行售卖 为了收取费用 一般需要一个软件使用许可证 然后输
  • 基于Arduino开发板和20×4 I2C LCD显示屏制作一款实时时钟

    当我们在制作一个有趣的硬件项目时 可能会需要使用到一款显示屏 但选择显示屏的尺寸和控制它所需的引脚都令人困惑 在上一篇文章中 我们介绍了0 96寸I2C OLED显示屏 在本篇文章中 我们将介绍使用I2C 20 4字符显示屏 所需的零件 本
  • You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler to ex

    vue3项目启动之后 会提示如下警告 You are running the esm bundler build of vue i18n It is recommended to configure your bundler to expl
  • 网络编程之channel

    介绍 Channel 是一个对象 可以通过它读取和写入数据 拿 NIO 与原来的 I O 做个比较 通道就像是流 所有数据都通过 Buffer 对象来处理 您永远不会将字节直接写入通道中 相反 您是将数据写入包含一个或者多个字节的缓冲区 同
  • 官网下载Eclipse历史版本

    官网下载Eclipse历史版本 Eclipse官网 downloads路径 https www eclipse org downloads 点击 Download Packages 点击 Download Packages 选择你想要的版本
  • Idea 断点调试PHP

    老实说 我尝试过xdebug 但是说实话 没一次成功过 看来我还是 经验不足 简单的方法 前期工作需要装上xdebug 在php ini 末尾加上 XDebug 这是xdebug的dll 需要到官网上下载 需要注意区分自己的PHP是线程安全
  • Jordan Lecture Note-12: Kernel典型相关分析(Kernel Canonical Correlation Analysis, KCCA).

    Jordan Lecture Note 12 Kernel典型相关分析 Kernel Canonical Correlation Analysis KCCA Kernel典型相关分析 一 KCCA 同样 我们可以引入Kernel函数 通过非