我有这个matlab代码,其中:
K
是方阵矩阵pXp
%center the kernel matrix
K = K - (1/p)*(K*ones(p,1))*ones(1,p) - (1/p)*ones(p,1)*(ones(1,p)*K) + (1/p^2)*sum(sum(K));
从评论(以及对算法的描述)来看,这应该是以K
为中心的过程,但由于我找到的矩阵居中的唯一定义是:
我不理解与上述公式相关的代码。你能帮我吗?
答案 0 :(得分:2)
有关代码段的说明
上面的公式涉及与居中向量相关的居中矩阵(更多信息,请参阅我的答案的第二部分)。
您的代码实现执行矩阵的居中。有几种方法可以做,具体取决于矩阵代表什么。
在您的情况下,代码从每列的平均值和每行的平均值执行矩阵的减法。在最后阶段,添加原始矩阵的平均值以平衡最终结果(由于我们执行了两次减法的事实)。 它可以由以下代码替换:
K = K - repmat(mean(K,1),p,1)-repmat(mean(K,2),1,p) + mean(K(:));
有关详细说明,请参阅以下公式的开发:
关于居中矩阵的说明
居中矩阵应满足以下要求: 当它与向量相乘时,结果将等于向量本身减去其组件的平均值(平均值)。
关于等式: 第一个元素是单位矩阵。对于n = 3:
In =
1 0 0
0 1 0
0 0 1
等式中的第二个元素只是一个矩阵,乘以1 / n。对于n = 3:
(1/n)*(ones(n,1)*ones(n,1)')
0.3333 0.3333 0.3333
0.3333 0.3333 0.3333
0.3333 0.3333 0.3333
设v是向量。在这种情况下:
此等式的第一个元素只是向量v,第二个元素是包含每个坐标处v的平均值的向量。