Algorithm 核典型相关分析的KMBOX

Algorithm 核典型相关分析的KMBOX,algorithm,matlab,math,machine-learning,correlation,Algorithm,Matlab,Math,Machine Learning,Correlation,我目前在MATLAB中使用for内核 这里的代码是 显然,要生成核矩阵。但是N0的含义是什么呢。为什么时间N0?我看了一下实现,我认为乘以矩阵N0的目的是从内核矩阵中删除平均向量,这样它就以零为中心(这可能有助于简化以后的计算) 一旦我们有了它,我们将Rv=λDv解为[a,b]=eig(R,D),其中: R是块对角矩阵,右上角为K1*K2,左下角为K2*K1,对角块为零矩阵 D是块对角矩阵,其中(K1^2+reg*I)和(K2^2+reg*I)作为对角线上的块,而非对角线上的零块(reg是一个

我目前在MATLAB中使用for内核

这里的代码是


显然,要生成核矩阵。但是
N0
的含义是什么呢。为什么时间
N0

我看了一下实现,我认为乘以矩阵
N0
的目的是从内核矩阵中删除平均向量,这样它就以零为中心(这可能有助于简化以后的计算)

一旦我们有了它,我们将
Rv=λDv
解为
[a,b]=eig(R,D)
,其中:

  • R
    是块对角矩阵,右上角为
    K1*K2
    ,左下角为
    K2*K1
    ,对角块为零矩阵

  • D
    是块对角矩阵,其中
    (K1^2+reg*I)
    (K2^2+reg*I)
    作为对角线上的块,而非对角线上的零块(
    reg
    是一个正则化项,使其在数值上更稳定)

(实际上是以一种稍微不同的方式来避免数值问题,并列出了三种解决方法(注释)

附言:我发现这很有帮助


例子: 我将使用来帮助我以象征性的方式说明计算:

%% say we built the kernel matrix from data, this is a n-by-n symmetric matrix
n = 3;
K = sym('K',[n n]);
K =  triu(K) + triu(K,1).';
这是一个对称矩阵:

>> K
K =
[ K1_1, K1_2, K1_3]
[ K1_2, K2_2, K2_3]
[ K1_3, K2_3, K3_3]
现在让我们从矩阵中删除平均向量(只需计算平均值并减去它)。正如预期的那样,新矩阵的行/列平均值应为零:

% remove mean-row from the kernel, so that mean(KK,1) == zeros(1,n)
>> KK = K - repmat(mean(K,1),n,1);
>> mean(KK,1)
ans =
[ 0, 0, 0]

% or remove mean-column from the kernel, so that mean(KK,2) == zeros(n,2)
>> KK = K - repmat(mean(K,2),1,n);
>> mean(KK,2)
ans =
 0
 0
 0
有趣的是,这也可以通过矩阵乘法(在该代码中使用)实现:

现在,
km_kcca.m
中的代码在两侧进行乘法运算,这样可以去除行和列的平均值,矩阵在两个方向上的平均值都为零:

>> KK = N0*K*N0;

>> mean(KK,1)
ans =
[ 0, 0, 0]

>> mean(KK,2)
ans =
 0
 0
 0
这与执行以下操作相同:

>> KK = K - repmat(mean(K,1),n,1);
>> KK = KK - repmat(mean(KK,2),1,n);

>> mean(KK,1)
ans =
[ 0, 0, 0]

>> mean(KK,2)
ans =
 0
 0
 0
值得注意的是,以零为中心的矩阵如下所示(对于
n=3
case):


我看了一下实现,我认为乘以矩阵
N0
的目的是从内核矩阵中删除平均向量,这样它就以零为中心(这可能有助于简化以后的计算)

一旦我们有了它,我们将
Rv=λDv
解为
[a,b]=eig(R,D)
,其中:

  • R
    是块对角矩阵,右上角为
    K1*K2
    ,左下角为
    K2*K1
    ,对角块为零矩阵

  • D
    是块对角矩阵,其中
    (K1^2+reg*I)
    (K2^2+reg*I)
    作为对角线上的块,而非对角线上的零块(
    reg
    是一个正则化项,使其在数值上更稳定)

(实际上是以一种稍微不同的方式来避免数值问题,并列出了三种解决方法(注释)

附言:我发现这很有帮助


例子: 我将使用来帮助我以象征性的方式说明计算:

%% say we built the kernel matrix from data, this is a n-by-n symmetric matrix
n = 3;
K = sym('K',[n n]);
K =  triu(K) + triu(K,1).';
这是一个对称矩阵:

>> K
K =
[ K1_1, K1_2, K1_3]
[ K1_2, K2_2, K2_3]
[ K1_3, K2_3, K3_3]
现在让我们从矩阵中删除平均向量(只需计算平均值并减去它)。正如预期的那样,新矩阵的行/列平均值应为零:

% remove mean-row from the kernel, so that mean(KK,1) == zeros(1,n)
>> KK = K - repmat(mean(K,1),n,1);
>> mean(KK,1)
ans =
[ 0, 0, 0]

% or remove mean-column from the kernel, so that mean(KK,2) == zeros(n,2)
>> KK = K - repmat(mean(K,2),1,n);
>> mean(KK,2)
ans =
 0
 0
 0
有趣的是,这也可以通过矩阵乘法(在该代码中使用)实现:

现在,
km_kcca.m
中的代码在两侧进行乘法运算,这样可以去除行和列的平均值,矩阵在两个方向上的平均值都为零:

>> KK = N0*K*N0;

>> mean(KK,1)
ans =
[ 0, 0, 0]

>> mean(KK,2)
ans =
 0
 0
 0
这与执行以下操作相同:

>> KK = K - repmat(mean(K,1),n,1);
>> KK = KK - repmat(mean(KK,2),1,n);

>> mean(KK,1)
ans =
[ 0, 0, 0]

>> mean(KK,2)
ans =
 0
 0
 0
值得注意的是,以零为中心的矩阵如下所示(对于
n=3
case):


Amro的答案是正确的:乘以
N0
的目的是从核矩阵中删除数据平均值。您可以在第二篇参考文献第3.2.1节的最后一段中找到这一点:F.R.Bach和M.I.Jordan,“内核独立成分分析”,JMLR,2002年


原因不是为了避免数值问题,而是因为。

Amro的答案是正确的:乘以
N0
的目的是从核矩阵中删除数据平均值。您可以在第二篇参考文献第3.2.1节的最后一段中找到这一点:F.R.Bach和M.I.Jordan,“内核独立成分分析”,JMLR,2002年


原因不是为了避免数值问题,而是因为。

我没有为您提供解释,但是您是否查阅了KCCA算法的参考文献:
核典型相关分析(KCCA),如D.R.Hardoon、S.Szedmak和J.Shawe Taylor提出的,“典型相关分析:学习方法应用概述”,《神经计算》,第16卷(12),第2639-26642004页。
?是的,我已经读过那篇论文,但这里的代码与论文描述的不相似。(即上面的代码,“times N0”)我没有任何解释,但您是否查阅了KCCA算法的参考文献:
内核典型相关分析(KCCA),如D.R.Hardoon、S.Szedmak和J.Shawe Taylor所述,“典型相关分析:学习方法应用概述”,神经计算,第16卷(12),第2639-26642004页
?是的,我已经读过那篇文章,但这里的代码与论文描述的代码不同。(即上面的代码“times N0”)另外一个问题,使一个矩阵成为所谓的零中心矩阵的原因是什么?我认为它改进了内核矩阵的数值性质,从而避免了
K
。这里有一篇文章讨论了这个主题:@user1522378:见Steven的答案(工具箱的作者)另外一个问题,使一个矩阵成为所谓的零中心的原因是什么?我认为它改进了核矩阵的数值性质,从而避免了
K