本文介绍了CCA解决的问题,CCA原理的推导过程,以及对计算结果物理意义的解释。并且通过SPSS和R操作演示了一个关于CCA的例子。数据文件下载参考[8],SPSS输出结果文件下载参考[9],R代码文件下载参考[10]。

一.CCA工作原理

1.CCA定义

  首先需要搞清楚典型相关分析(Canonical Correlation Analysis)解决了什么问题,它解决的是一组变量与另外一组变量的相关问题。举个例子,比如想要量化家庭特征与家庭消费之间的关系,其中,家庭特征包括户主的年龄、家庭的年收入和户主受教育程序,而家庭消费包括每年去餐厅就餐的频率、每年外出看电影频率

  其实,这个是泛化后的问题,先来看一个更加具体的问题,不是一组变量与另外一组变量的相关问题,而是一个变量与另外一个变量的相关问题,比如计算两个变量\({X}\)和\({Y}\)的相关问题,是如何计算的呢,下面的方程是不是很眼熟:

\[{\rho _{XY}} = \frac{{{\mathop{\rm cov}} \left( {X,Y} \right)}}{{\sqrt {{\mathop{\rm var}} \left( X \right){\mathop{\rm var}} \left( Y \right)} }}
\]

  再进一步的想一下,如果是计算一个变量和一组变量的相关问题呢。当然更深一步的想象就是这篇文章要讲的一组变量与另外一组变量的相关问题。先来形式化的定义CCA:假设有一组变量\({X_1}, \cdots ,{X_p}\)与另一组变量\({Y_1}, \cdots ,{Y_q}\),要研究这两组变量的相关关系,如何给两组变量之间的相关性以数量的描述,就是CCA。

二.CCA方程推导过程

1.CCA的数学描述

  假设\({x_1}\)表示每年去餐馆就餐的频率,\({x_2}\)表示每年外出看电影频率,\({y_1}\)表示户主的年龄,\({y_2}\)表示家庭的年收入,\({y_3}\)表示户主受教育程度。典型相关分析的思想是找出第一对线性组合,使其具有最大相关性:

\[\begin{array}{l}
{u_1} = {a_{11}}{x_1} + {a_{21}}{x_2}+...+ {a_{p1}}{x_p}\\
{v_1} = {b_{11}}{y_1} + {b_{21}}{y_2} + {b_{31}}{y_3} +...+{b_{q1}}{y_q}\\
\rho \left( {{u_1},{v_1}} \right) = ? \\
\end{array}
\]

然后再找第二对线性组合,使其具有次大相关性:

\[\begin{array}{l}
{u_2} = {a_{12}}{x_1} + {a_{22}}{x_2}+...+ {a_{p2}}{x_p} \\
{v_2} = {b_{12}}{y_1} + {b_{22}}{y_2} + {b_{32}}{y_3} +...+{b_{q2}}{y_q} \\
\rho \left( {{u_2},{v_2}} \right) = ? \\
\end{array}
\]

就这样一直进行计算下去,直到第\(r\)步,这两组变量的相关性被提取完毕为止,其中\(r \le \min \left( {{\rm{p}},{\rm{q}}} \right)\),即可以得到\(r\)组变量。

2.CCA的推导过程

假设两组变量的向量\({\bf{Z}} = \left( {{x_1},{x_2},...,{x_p},{y_1},{y_2},...,{y_q}} \right)\),其协方差矩阵如下:

\[\sum = \left[ \begin{array}{l}
\sum\nolimits_{11} \sum\nolimits_{12} \\
\sum\nolimits_{21} \sum\nolimits_{12} \\
\end{array} \right]
\]

其中,\(\sum\nolimits_{11}\)是第一组变量的协方差矩阵,\(\sum\nolimits_{22}\)是第二组变量的协方差矩阵,\(\sum\nolimits_{12}\)和\(\sum\nolimits_{21}\)是\(X\)和\(Y\)的协方差矩阵,它们之间的关系是转置相等,即\(\sum\nolimits_{12} = {\sum\nolimits_{21} ^{\rm{T}}}\)。这样两组变量的第一对线性组合记为:

\[\begin{array}{l}
{{\bf{u}}_1} = {\bf{a}}_1^{\rm{T}}{\bf{X}} \\
{{\bf{v}}_1} = {\bf{b}}_1^{\rm{T}}{\bf{Y}} \\
\end{array}
\]

其中\({\bf{a}}_1\)和\({\bf{b}}_1\)表示:

\[\begin{array}{l}
{{\bf{a}}_1} = {\left( {{a_{11}},{a_{21}},...,{a_{p1}}} \right)^{\rm{T}}} \\
{{\bf{b}}_1} = {\left( {{b_{11}},{b_{21}},...,{b_{q1}}} \right)^{\rm{T}}} \\
\end{array}
\]

接下来推导\({\rho _{{{\bf{u}}_1},{{\bf{v}}_1}}}\)的计算,通过求\({\bf{a}}_1\)和\({\bf{b}}_1\),使\({\rho _{{{\bf{u}}_1},{{\bf{v}}_1}}}\)最大,这个是CCA最核心的思想:

\[\begin{array}{l}
{\mathop{\rm var}} \left( {{{\bf{u}}_1}} \right) = {\bf{a}}_1^{\rm{T}}{\mathop{\rm var}} \left( {\bf{X}} \right){{\bf{a}}_1} = {\bf{a}}_1^{\rm{T}}\sum\nolimits_{11} {} {{\bf{a}}_1} = 1 \\
{\mathop{\rm var}} \left( {{{\bf{v}}_1}} \right) = {\bf{b}}_1^T{\mathop{\rm var}} \left( {\bf{Y}} \right){{\bf{b}}_1} = {\bf{b}}_1^T\sum\nolimits_{22} {} {{\bf{b}}_1} = 1 \\
{\rho _{{{\bf{u}}_1},{{\bf{v}}_1}}} = {\rm{cov}}\left( {{{\bf{u}}_1},{{\bf{v}}_1}} \right) = {\bf{a}}_1^{\rm{T}}{\rm{cov}}\left( {{\bf{X}},{\bf{Y}}} \right){{\bf{b}}_1} = {\bf{a}}_1^{\rm{T}}\sum\nolimits_{12} {} {{\bf{b}}_1} \\
\end{array}
\]

接下来就是典型相关系数的过程。根据高等数学中条件极致的求法,即拉格朗日乘数法,通过引入拉格朗日乘数\(\lambda\)和\(\nu\)来求极值的问题,转换为求方程1的极大值:

\[\phi \left( {{{\bf{a}}_1},{{\bf{b}}_1}} \right) = {\bf{a}}_1^{\rm{T}}\sum\nolimits_{12} {} {{\bf{b}}_1} - \frac{\lambda }{2}\left( {{\bf{a}}_1^{\rm{T}}\sum\nolimits_{11} {{{\bf{a}}_1}} - 1} \right) - \frac{\nu }{2}\left( {{\bf{b}}_1^{\rm{T}}\sum\nolimits_{22} {{{\bf{b}}_1}} - 1} \right)
\]

接下来就是求极大值的思路了,各种求偏导,方程2如下所示:

\[\begin{array}{l}
\frac{{\partial \phi }}{{\partial {{\bf{a}}_1}}} = \sum\nolimits_{12} {{{\bf{b}}_1}} - \lambda \sum\nolimits_{11} {{{\bf{a}}_1}} = 0 \\
\frac{{\partial \phi }}{{\partial {{\bf{b}}_1}}} = \sum\nolimits_{21} {{{\bf{a}}_1}} - v\sum\nolimits_{22} {{{\bf{b}}_1}} = 0 \\
\end{array}
\]

方程3如下所示:

\[\begin{array}{l}
\sum\nolimits_{12} {{{\bf{b}}_1}} - \lambda \sum\nolimits_{11} {{{\bf{a}}_1}} = 0 \\
\sum\nolimits_{21} {{{\bf{a}}_1}} - v\sum\nolimits_{22} {{{\bf{b}}_1}} = 0 \\
\end{array}
\]

将方程3分别左乘\({\bf{a}}_1^{\rm{T}}\)和\({\bf{b}}_1^{\rm{T}}\),得到方程4:

\[\begin{array}{l}
{\bf{a}}_1^{\rm{T}}\sum\nolimits_{12} {{{\bf{b}}_1}} - \lambda {\bf{a}}_1^{\rm{T}}\sum\nolimits_{11} {{{\bf{a}}_1}} = 0 \\
{\bf{b}}_1^{\rm{T}}\sum\nolimits_{21} {{{\bf{a}}_1}} - v{\bf{b}}_1^{\rm{T}}\sum\nolimits_{22} {{{\bf{b}}_1}} = 0 \\
\end{array}
\]

进一步推导得出方程5:

\[\begin{array}{l}
{\bf{a}}_1^{\rm{T}}\sum\nolimits_{12} {{{\bf{b}}_1}} = \lambda \\
{\bf{b}}_1^{\rm{T}}\sum\nolimits_{21} {{{\bf{a}}_1}} = v \\
\end{array}
\]

因此得到方程6:

\[\lambda = v = {\bf{a}}_1^{\rm{T}}\sum\nolimits_{12} {{{\bf{b}}_1}} = {\rho _{\left( {{{\bf{u}}_1},{\bf{v}}1} \right)}}
\]

可见\(\lambda\)和\(v\)是相等的,并且就是要求的\({\rho _{{{\bf{u}}_1},{{\bf{v}}_1}}}\)。

将\(\sum\nolimits_{12} \sum\nolimits_{22}^{ - 1}\)左乘方程3的第二式,得到方程7:

\[\sum\nolimits_{12} \sum\nolimits_{22}^{ - 1} \sum\nolimits_{21} {{\bf{a}}_1} - v\sum\nolimits_{12} \sum\nolimits_{22}^{ - 1} \sum\nolimits_{22} {} {{\bf{b}}_1} = 0
\]

进一步简化得到方程8:

\[\sum\nolimits_{12} \sum\nolimits_{22}^{ - 1} \sum\nolimits_{21} {} {{\bf{a}}_1} - v\sum\nolimits_{12} {{\bf{b}}_1} = 0
\]

将方程3的第一式代入方程8,得到方程9:

\[\sum\nolimits_{12} \sum\nolimits_{22}^{ - 1} \sum\nolimits_{21} {{\bf{a}}_1} - {\lambda ^2}\sum\nolimits_{11} {{\bf{a}}_1} = 0
\]

将方程9左乘\(\sum\nolimits_{11}^{ - 1}\)得到方程10:

\[\sum\nolimits_{11}^{ - 1} {} \sum\nolimits_{12} {} \sum\nolimits_{22}^{ - 1} {} \sum\nolimits_{21} {} {{\bf{a}}_1} - {\lambda ^2}{{\bf{a}}_1} = 0
\]

在方程10中,\(\sum\nolimits_{11}^{ - 1} \sum\nolimits_{12} \sum\nolimits_{22}^{ - 1} \sum\nolimits_{21}\)的特征根是\({\lambda ^2}\),相应的特征向量为\({{\bf{a}}_1}\)。

将\(\sum\nolimits_{12} \sum\nolimits_{11}^{ - 1}\)左乘方程3的第一式,并且将第二式代入得到方程11:

\[\begin{array}{l}
\sum\nolimits_{21} {} \sum\nolimits_{11}^{ - 1} {} \sum\nolimits_{21} {{{\bf{b}}_1}} - \lambda \sum\nolimits_{12} {{{\bf{a}}_1}} = 0 \\
\sum\nolimits_{21} {} \sum\nolimits_{11}^{ - 1} {} \sum\nolimits_{12} {{{\bf{b}}_1}} - {\lambda ^2}\sum\nolimits_{22} {{{\bf{b}}_1}} = 0 \\
\sum\nolimits_{22}^{ - 1} {} \sum\nolimits_{21} {} \sum\nolimits_{11}^{ - 1} {} \sum\nolimits_{12} {{{\bf{b}}_1}} - {\lambda ^2}{{\bf{b}}_1} = 0 \\
\end{array}
\]

在方程11中,\(\sum\nolimits_{22}^{ - 1} \sum\nolimits_{21} \sum\nolimits_{11}^{ - 1} \sum\nolimits_{12}\)的特征根是\({\lambda ^2}\),相应的特征向量为\({{\bf{b}}_1}\)。

令\({{\bf{M}}_{\rm{1}}} = \sum\nolimits_{11}^{ - 1} {} \sum\nolimits_{12} {} \sum\nolimits_{22}^{ - 1} {} \sum\nolimits_{21} {}\)和\({{\bf{M}}_2}{\rm{ = }}\sum\nolimits_{22}^{ - 1} {} \sum\nolimits_{21} {} \sum\nolimits_{11}^{ - 1} {} \sum\nolimits_{12} {}\),得到方程12:

\[\begin{array}{l}
{{\bf{M}}_{\rm{1}}}{{\bf{a}}}{\rm{ = }}{\lambda ^2}{{\bf{a}}} \\
{{\bf{M}}_2}{{\bf{b}}}{\rm{ = }}{\lambda ^2}{{\bf{b}}} \\
\end{array}
\]

至此可以得出结论:第一个典型相关系数为\(\lambda_1\)(最大特征值),其中\(\lambda _1^2\)既是\({\bf{M}}_{\rm{1}}\)又是\({\bf{M}}_{\rm{2}}\)的特征根,第一对典型变量的系数\({{\bf{a}}_1}\)和\({{\bf{b}}_1}\)是相应于\({\bf{M}}_{\rm{1}}\)和\({\bf{M}}_{\rm{2}}\)的特征向量。这样就把典型相关分析的求解转换成了求\({\bf{M}}_{\rm{1}}\)和\({\bf{M}}_{\rm{2}}\)的特征根和特征向量的问题。

说明:第一对典型变量提取了原始变量\(X\)和\(Y\)之间相关的主要部分,如果这部分不能足以解释原始变量,可以在剩余的相关中再求出第二对典型变量和它们的典型相关系数。如此反复,直到这两组变量的相关性被提取完毕为止。

3.CCA的物理意义

  还是以量化家庭特征与家庭消费之间的关系为例子,假设\({x_1}\)表示每年去餐馆就餐的频率,\({x_2}\)表示每年外出看电影频率,\({y_1}\)表示户主的年龄,\({y_2}\)表示家庭的年收入,\({y_3}\)表示户主受教育程度。如果计算出第一典型相关系数为0.687948,第二典型相关系数为0.186865。第一典型变量和第二典型变量代入方程如下所示:

(1)第一对典型变量

\[\begin{array}{l}
{u_1} = {0.9866}{x_1} + {0.8872}{x_2} \\
{v_1} = {0.4211}{y_1} + {0.9822}{y_2} + {0.5145}{y_3} \\
\end{array}
\]
  • \({u_1}\)量化的是家庭消费特征,它与\({x_1}\)和\({x_2}\)的相关系数分别为0.9866和0.8872,这2个值都是比较高的。
  • \({v_1}\)量化的是家庭特征,它与\({y_2}\)的相关系数为0.9822,其它的相关系数较小,因此\({v_1}\)主要代表的就是家庭收入。
  • \({u_1}\)和\({v_1}\)的相关系数为0.687948,说明一个家庭的消费和家庭的收入关系密切。

(2)第二对典型变量

\[\begin{array}{l}
{u_2} = {-0.1632}{x_1} + {0.4614}{x_2} \\
{v_2} = {0.8464}{y_1} + {-0.1101}{y_2} + {0.3013}{y_3} \\
\end{array}
\]
  • \({u_2}\)和\({x_2}\)的相关系数为0.4614,可见\({u_2}\)主要代表的是每年外出看电影频率。
  • \({v_2}\)和\({y_1}\)的相关系数为0.8464,可见\({v_2}\)主要代表的是家庭成员的年龄特征。
  • \({u_2}\)和\({v_2}\)的相关系数为0.186865,说明一个家庭每年外出看电影频率和家庭成员的年龄特征关系密切。

三.CCA代码例子

1.SPSS28实现

(1)变量视图和数据视图





(2)分析->相关->典型相关分析



将控制情绪、自我调节、自我激励作为集合1,将语文、数学、英语和才艺作为集合2:



(3)生成结果

2.R编程实现

(1)安装R包

操作系统使用的Windows10,版本号为20H2,R语言版本使用64位的R-3.6.3。期初在安装R包的时候总是报错,经过查找资料,需要将Packages页面中的第2和3个复选框去掉,重启RStudio即可:



依次安装openxlsx、CCA和CCP包:

install.packages("openxlsx", dependencies=TRUE)
install.packages("CCA", dependencies=TRUE)
install.packages("CCP", dependencies=TRUE)

(2)R代码实现

# 1.加载数据
library(openxlsx)
rawdata <- read.xlsx("F:/cca_data.xlsx", sheet = "典型相关分析")
names(rawdata) # 2.对两组变量的数据做标准化处理
xdata = scale(rawdata[, 1:3])
ydata = scale(rawdata[, 4:7]) # 3.执行典型相关分析
library(CCA)
mycca = cc(xdata, ydata)
mycca # 4.检验典型相关系数在统计上是否显著
library(CCP)
rho = mycca$cor
n = dim(rawdata)[1]
p = dim(xdata)[2]
q = dim(ydata)[2]
p.asym(rho, n, p, q, tstat = 'Wilks')

(3)输出结果

> # 1.加载数据
> library(openxlsx)
> rawdata <- read.xlsx("F:/cca_data.xlsx", sheet = "典型相关分析")
> names(rawdata)
[1] "控制情绪" "自我调节" "自我激励" "语文" "数学" "英语" "才艺"
>
> # 2.对两组变量的数据做标准化处理
> xdata = scale(rawdata[, 1:3])
> ydata = scale(rawdata[, 4:7])
>
> # 3.执行典型相关分析
> library(CCA)
> mycca = cc(xdata, ydata)
> mycca
$cor
[1] 0.9944827 0.8781065 0.3836057 $names
$names$Xnames
[1] "控制情绪" "自我调节" "自我激励" $names$Ynames
[1] "语文" "数学" "英语" "才艺" $names$ind.names
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26"
[27] "27" "28" "29" "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45" "46" "47" "48" "49" "50" $xcoef
[,1] [,2] [,3]
控制情绪 -0.4576880 -1.277214 2.767301
自我调节 -0.2118578 2.451745 -1.048019
自我激励 -0.3687696 -1.122893 -1.806735 $ycoef
[,1] [,2] [,3]
语文 -0.2755155 -0.7599743 -0.9739351
数学 -0.1040424 0.6822849 0.4802843
英语 -0.1916330 -1.0607433 0.5995720
才艺 -0.6620838 0.7198947 -0.1194195 $scores
$scores$xscores
[,1] [,2] [,3]
1 0.97838292 -0.362539552 0.81938141
2 1.40651588 -0.410239408 0.05351720
......
49 -0.68982939 -1.133476875 0.34804581
50 -0.86681530 1.107521445 0.63269334 $scores$yscores
[,1] [,2] [,3]
1 0.97479103 0.09430244 -0.08851950
2 1.40034960 -0.76140727 0.45769014
......
49 -0.64792179 -1.26188686 -0.66195176
50 -0.73030445 0.62990478 0.08452069 $scores$corr.X.xscores
[,1] [,2] [,3]
控制情绪 -0.9798776 0.0006477883 0.199598477
自我调节 -0.9464085 0.3228847489 -0.007504408
自我激励 -0.9518620 -0.1863009724 -0.243414776 $scores$corr.Y.xscores
[,1] [,2] [,3]
语文 -0.6348095 -0.1894059 -0.24988439
数学 -0.7171837 0.2086069 0.02598458
英语 -0.6436782 -0.4402237 0.22027544
才艺 -0.9388771 0.1734549 0.03614570 $scores$corr.X.yscores
[,1] [,2] [,3]
控制情绪 -0.9744713 0.0005688272 0.076567107
自我调节 -0.9411869 0.2835272081 -0.002878734
自我激励 -0.9466102 -0.1635921013 -0.093375287 $scores$corr.Y.yscores
[,1] [,2] [,3]
语文 -0.6383313 -0.2156981 -0.65140953
数学 -0.7211626 0.2375644 0.06773775
英语 -0.6472493 -0.5013329 0.57422365
才艺 -0.9440859 0.1975329 0.09422619 > # 4.检验典型相关系数在统计上是否显著
> library(CCP)
> rho = mycca$cor
> n = dim(rawdata)[1]
> p = dim(xdata)[2]
> q = dim(ydata)[2]
> p.asym(rho, n, p, q, tstat = 'Wilks')
Wilks' Lambda, using F-approximation (Rao's F):
stat approx df1 df2 p.value
1 to 3: 0.002148472 87.391525 12 114.0588 0.000000e+00
2 to 3: 0.195241267 18.526265 6 88.0000 8.248957e-14
3 to 3: 0.852846693 3.882233 2 45.0000 2.783536e-02

从结果上来看,无论是SPSS还是R,计算的结果都是完全相同的。

参考文献:

[1]典型相关分析:https://www.bilibili.com/video/BV1LZ4y1S7Vd

[2]sklearn.cross_decomposition.CCA:https://scikit-learn.org/stable/modules/generated/sklearn.cross_decomposition.CCA.html

[3]协方差矩阵:https://baike.baidu.com/item/协方差矩阵/9822183

[4]典型相关分析(CCA)原理及Python实现:https://developer.aliyun.com/article/839949

[5]CCA典型关联分析原理与Python案例:https://cloud.tencent.com/developer/article/1652998

[6]典型关联分析(CCA)原理总结:https://www.cnblogs.com/pinard/p/6288716.html

[7]典型相关分析:https://www.docin.com/p-212673286.html

[8]数据文件cca_data.xlsx:https://url39.ctfile.com/f/2501739-631515818-1a4a0d?p=2096 (访问密码: 2096)

[9]SPSS输出结果文件:https://url39.ctfile.com/f/2501739-631515819-214c93?p=2096 (访问密码: 2096)

[10]R代码文件:https://url39.ctfile.com/f/2501739-631515820-50502e?p=2096 (访问密码: 2096)

典型相关分析CCA计算过程的更多相关文章

  1. 多视图学习利器----CCA(典型相关分析)及MATLAB实现

    Hello,我是你们人见人爱花见花开的小花.又和大家见面了,今天我们来聊一聊多视图学习利器------CCA. 一 典型相关分析的基本思想 当我们研究两个变量x和y之间的相关关系的时候,相关系数(相关 ...

  2. Jordan Lecture Note-11: 典型相关分析(Canonical Correlation Analysis, CCA).

    典型相关分析 (一)引入 典型相关分析(Canonical Correlation Analysis)是研究两组变量之间相关关系的一种多元统计方法.他能够揭示出两组变量之间的内在联系. 我们知道,在一 ...

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

    Kernel典型相关分析 (一)KCCA 同样,我们可以引入Kernel函数,通过非线性的坐标变换达到之前CCA所寻求的目标.首先,假设映射$\Phi_X: x\rightarrow \Phi_X(x ...

  4. 机器学习: Canonical Correlation Analysis 典型相关分析

    Canonical Correlation Analysis(CCA)典型相关分析也是一种常用的降维算法.我们知道,PCA(Principal Component Analysis) 主分量分析将数据 ...

  5. SPSS数据分析—基于最优尺度变换的典型相关分析

    传统的典型相关分析只能考虑变量之间的线性相关情况,且必须为连续变量,而我们依然可以使用最优尺度变换来拓展其应用范围,使其可以分析非线性相关.数据为分类数据等情况,并且不再仅限于两个变量间的分析, 虽然 ...

  6. SPSS数据分析—典型相关分析

    我们已经知道,两个随机变量间的相关关系可以用简单相关系数表示,一个随机变量和多个随机变量的相关关系可以用复相关系数表示,而如果需要研究多个随机变量和多个随机变量间的相关关系,则需要使用典型相关分析. ...

  7. R语言 典型相关分析

    1.关键点 #典型相关分析##典型相关分析是用于分析两组随机变量之间的相关程度的一种统计方法,它能够有效地揭示两组随机变量之间的相互(线性依赖)关系#例如 研究生入学考试成绩与本科阶段一些主要课程成绩 ...

  8. linux主机load average的概念&&计算过程&&注意事项

    最近开发的一个模块需要根据机房各节点的负载情况(如网卡IO.load average等指标)做任务调度,刚开始对Linux机器load average这项指标不是很清楚,经过调研,终于搞清楚了其计算方 ...

  9. 机器翻译评价指标之BLEU详细计算过程

    原文连接 https://blog.csdn.net/guolindonggld/article/details/56966200 1. 简介 BLEU(Bilingual Evaluation Un ...

随机推荐

  1. zabbix 线路质量监控自定义python模块(Mysql版),多线程(后来发现使用协程更好)降低系统消耗

    之前零零碎碎写了一些zabbix 线路监控的脚本,工作中agnet较多,每条线路监控需求不一致,比较杂乱,现在整理成一个py模块,集合之前的所有功能 环境 python3.6以上版本,pip3(pip ...

  2. RabitMQ 简介

    每日一句 The secret of being miserable is to have leisure to bother about whether you are happy or not. ...

  3. 什么是HBase?终于有人讲明白了

    一.初识HBase HBase 是一个面向列式存储的分布式数据库,其设计思想来源于 Google 的 BigTable 论文.HBase 底层存储基于 HDFS 实现,集群的管理基于 ZooKeepe ...

  4. Mysql 存储引擎以及 SQL语句

    存储引擎 文件格式有很多种,针对不同的文件格式会有对应的不同存储方式和处理机制. 针对不同的数据应该有对应的不同处理机制来存储. 存储引擎就是不同的处理机制 MySQL主要的存储引擎 Innodb 是 ...

  5. MTK 虚拟 sensor bring up (pick up) sensor2.0

    pick up bring up sensor2.0 1.SCP侧的配置 (1) 放置驱动pickup.c (2) 添加底层驱动文件编译开关 (3) 加入编译文件 (4) 增加数据上报方式 (5)修改 ...

  6. VUE3 之 render 函数的使用 - 这个系列的教程通俗易懂,适合新手

    1. 概述 老话说的好:不用想的太多.太远,做好当天的事,知道明天要做什么就可以了. 言归正传,今天我们来聊聊 VUE 中 render 函数的使用. 2. render 函数 2.1 一个简单的例子 ...

  7. 面试官:Dubbo怎么实现服务降级,他有什么好处?

    哈喽!大家好,我是小奇,一位热爱分享的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 书接上回,今天周一了,招聘软件 ...

  8. cuda在ubuntu的安装使用分享

    前言 之前给大家分享过opencv在jetson nano 2gb和ubuntu设备中使用并且展示了一些人脸识别等的小demo.但是对于图像处理,使用gpu加速是很常见 .(以下概念介绍内容来自百科和 ...

  9. 我是一个Dubbo数据包...

    hello,大家好呀,我是小楼! 今天给大家带来一篇关于Dubbo IO交互的文章,本文是一位同事写的文章,用有趣的文字把枯燥的知识点写出来,通俗易懂,非常有意思,所以迫不及待找作者授权然后分享给大家 ...

  10. camunda流程引擎概念术语

    前言 本文重点介绍开源流程引擎camunda的核心概念,这些概念同样适用于JBMP.Activiti.Flowable流程引擎,了解这些基本概念和原理,使用流程引擎API将更得心应手. 一.Proce ...