Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Matlab formula optimization: Radial Basis Function

  • z - matrix of doubles, size Nx2;
  • x - matrix of doubles, size Nx2;

sup = x(i, :);

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

this is a Radial Basis Function (RBF) for logistic regression. Here is the formula:

enter image description here

I need your advice, can i optimize this formula? coz it calls millions times, and it takes a lot of time...

like image 313
Yekver Avatar asked Aug 08 '11 22:08

Yekver


People also ask

What is RBF in MATLAB?

Radial basis functions are use for function approximation and interpolation. This package supports two popular classes of rbf: Gaussian and Polyharmonic Splines (of which the Thin Plate Spline is a subclass). The package also calculates line integrals between two points as well as the surface's gradients.

What is radial basis function method?

Radial basis function (RBF) interpolation is an advanced method in approximation theory for constructing high-order accurate interpolants of unstructured data, possibly in high-dimensional spaces. The interpolant takes the form of a weighted sum of radial basis functions, like for example Gaussian distributions.

What is Gaussian radial basis function?

Radial basis function (RBF) is a function whose value depends on the distance (usually Euclidean distance) to a center (xc) in the input space. The most commonly used RBF is Gaussian RBF. It has the same form as the kernel of the Gaussian probability density function and it is defined as. (12)

Is radial basis function linear?

Radial Basis Functions (RBF) are real-valued functions that use supervised machine learning (ML) to perform as a non-linear classifier. Its value depends on the distance between the input and a certain fixed point.


2 Answers

It seems in your recent edits, you introduced some syntax errors, but I think I understood what you were trying to do (from the first version).

Instead of using REPMAT or indexing to repeat the vector x(i,:) to match the rows of z, consider using the efficient BSXFUN function:

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

The above obviously loops over every row of x


You can go one step further, and use the PDIST2 to compute the euclidean distance between every pair of rows in z and x:

%# 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);

Now every value in the matrix: rbf(i,j) corresponds to the function value between z(i,:) and x(j,:)


EDIT:

I timed the different methods, here is the code I used:

%# 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 )

The results:

Elapsed time is 2.108313 seconds.     # PDIST2
Elapsed time is 1.975865 seconds.     # BSXFUN
Elapsed time is 2.706201 seconds.     # REPMAT
like image 133
Amro Avatar answered Sep 21 '22 22:09

Amro


Amro has mentioned some really good methods. But the bsxfun can be further exploited by reshaping one of the matrices.

>> type r.m

N = 5000;
X = rand(N,2);
Z = rand(N,2);
g = 0.5;

%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

tic
diffs = bsxfun(@minus, reshape(X', [1, 2, N]), Z);
dist = reshape(sum(diffs.^2, 2), [N, N]);
rbf3 = exp(-g .* dist);
toc

>> r
Elapsed time is 2.235527 seconds.
Elapsed time is 0.877833 seconds.
>> r
Elapsed time is 2.253943 seconds.
Elapsed time is 1.047295 seconds.
>> r
Elapsed time is 2.234132 seconds.
Elapsed time is 0.856302 seconds.
>> max(abs(rbf2(:) - rbf3(:)))

ans =

     0

You want to subtract every row of X from every row of Z. This usually is straight forward when one of them is a vector and the other is a matrix. But if both of them are matrices, we can do this by making sure that each matrix in the volume contains just one vector. Here I chose X, but Z can be used interchangeably with X.

like image 22
Pavan Yalamanchili Avatar answered Sep 20 '22 22:09

Pavan Yalamanchili