matlab公式优化: Radial Basis Function

标签 matlab math optimization euclidean-distance

  • z - double 矩阵,大小为 Nx2;
  • x - double 矩阵,大小为 Nx2;

sup = x(i, :);

phi(1, i) = {@(z) exp(-g * sum((z - sup(ones([size(z, 1) 1]),:)) .^ 2, 2))};

这是用于逻辑回归的径向基函数 (RBF)。这是公式:

enter image description here

我需要你的建议,我可以优化这个公式吗?因为它调用了数百万次,而且需要很多时间......

最佳答案

在您最近的编辑中,您似乎引入了一些语法错误,但我想我理解您想要做什么(从第一个版本开始)。

而不是使用 REPMAT或索引以重复向量 x(i,:) 以匹配 z 的行,考虑使用高效的 BSXFUN功能:

rbf(:,i) = exp( -g .* sum(bsxfun(@minus,z,x(i,:)).^2,2) );

上面显然遍历了 x 的每一行


您可以更进一步,使用 PDIST2计算 zx 中每对行之间的欧氏距离:

%# some random data
X = rand(10,2);
Z = rand(10,2);
g = 0.5;

%# one-line solution
rbf = exp(-g .* pdist2(Z,X,'euclidean').^2);

现在矩阵中的每个值:rbf(i,j) 对应于 z(i,:)x(j, :)


编辑:

我对不同的方法进行了计时,这是我使用的代码:

%# some random data
N = 5000;
X = rand(N,2);
Z = rand(N,2);
g = 0.5;

%# PDIST2
tic
rbf1 = exp(-g .* pdist2(Z,X,'euclidean').^2);
toc

%# BSXFUN+loop
tic
rbf2 = zeros(N,N);
for j=1:N
    rbf2(:,j) = exp( -g .* sum(bsxfun(@minus,Z,X(j,:)).^2,2) );
end
toc

%# REPMAT+loop
tic
rbf3 = zeros(N,N);
for j=1:N
    rbf3(:,j) = exp( -g .* sum((Z-repmat(X(j,:),[N 1])).^2,2) );
end
toc

%# check if results are equal
all( abs(rbf1(:)-rbf2(:)) < 1e-15 )
all( abs(rbf2(:)-rbf3(:)) < 1e-15 )

结果:

Elapsed time is 2.108313 seconds.     # PDIST2
Elapsed time is 1.975865 seconds.     # BSXFUN
Elapsed time is 2.706201 seconds.     # REPMAT

关于matlab公式优化: Radial Basis Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6989442/

相关文章:

c++ - VS2015 与 VS2013 中的不同优化导致浮点异常

mysql - 如何使我的选择查询在 mysql 中更快?

string - matlab向数字向量的每个元素添加一个字符串

c# - 在大数据集中寻找重复

matlab - 生成具有特定秩和基数的随机矩阵

python - 如何在 PyGame 中找到圆上点的坐标?

php - 公式/查询返回 "wrong"结果

regex - 如何优化 grep 正则表达式以匹配 URL

image - 归一化一系列图像的强度以获得恒定强度 - Matlab

c++ - 如何索引二十面体的面?