gpt4 book ai didi

matlab - 在 matlab 中创建径向基函数核矩阵

转载 作者:行者123 更新时间:2023-11-30 08:50:55 25 4
gpt4 key购买 nike

我从未使用过matlab,我有关于kernalized locality sensitive functions的代码。

我认为以下代码正在尝试创建 RBF kernel function 的核化矩阵:

%demo script for KLSH
X = load('iris.mtx');
...
[n,d] = size(X);

%form RBF over the data:
nms = sum(X'.^2);
K = exp(-nms'*ones(1,n) -ones(n,1)*nms + 2*X*X');

您可以找到完整代码here特别是 demo.m 中的这段代码.

现在,我找不到K(核矩阵)的计算方式与核函数公式的相关性:

enter image description here

您能帮我弄清楚 K 是如何创建的(并解释一下上面的代码)吗?

最佳答案

整个技巧基于这样一个事实:您希望以有效的方式计算矩阵 K_ij = K(x_i, x_j) = f(||x_i - x_j||^2)。矩阵计算基于点积,即乘法,而不是差的范数。如果您不想使用循环(并且在像 matlab 或 R 这样的语言中您也不想使用循环),您必须弄清楚如何使用矩阵运算来表达 ||x_i - x_j||^2,因此:

||x_i - x_j||^2 = <x_i - x_j, x_i - x_j> 
= <x_i, x_i> - <x_i, x_j> - <x_j, x_i> + <x_j, x_j>
= ||x_i||^2 - 2<x_i, x_j> + ||x_j||^2

这正是实现的

首先,它们取数据的平方,如 ||x_i||^2 = SUM_a x_i_a^2

nms = sum(X'.^2);

接下来,他们使用乘法与向量的乘法来计算求和运算

nms'*ones(1,n)

它是 ||x_i||^2 的向量,类似地 ||x_j||^2 的向量是

ones(n,1)*nms

最后他们使用我之前写的分解进行组合,因此

-nms'*ones(1,n) -ones(n,1)*nms + 2*X*X')

只是一个矩阵 A_ij = - ||x_i - x_j ||^2

在你的例子中,你想除以 2sigma^2,因此只需将它放在 exp 下,在括号中接受先前的参数之后,就像

Ks = exp(-(nms'*ones(1,n) -ones(n,1)*nms + 2*X*X')/(2*sigma^2));

关于matlab - 在 matlab 中创建径向基函数核矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37362258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com