100% found this document useful (2 votes)
13K views13 pages

Matlab Code For Radial Basis Functions

The document contains Matlab code for implementing radial basis function networks using different methods for determining the centers, including even spacing and random selection of centers. It trains the networks on sample data to model a sine wave and tests the performance using different regularization factors. Plots are generated to visualize the performance of the trained networks on test data. The code also implements a self-organizing map to cluster and classify scene images using color histogram features extracted from sample images. It trains the network, determines the winning nodes for each sample, and plots the results on the output map to visualize how the samples are clustered. Additional code trains the same self-organizing map network but
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
Download as doc, pdf, or txt
100% found this document useful (2 votes)
13K views13 pages

Matlab Code For Radial Basis Functions

The document contains Matlab code for implementing radial basis function networks using different methods for determining the centers, including even spacing and random selection of centers. It trains the networks on sample data to model a sine wave and tests the performance using different regularization factors. Plots are generated to visualize the performance of the trained networks on test data. The code also implements a self-organizing map to cluster and classify scene images using color histogram features extracted from sample images. It trains the network, determines the winning nodes for each sample, and plots the results on the output map to visualize how the samples are clustered. Additional code trains the same self-organizing map network but
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1/ 13

%Matlab code for Radial Basis Functions

clc;
x=-1:0.05:1;
%generating training data with Random Noise
for i=1:length(x)
y(i)=1.2*sin(pi*x(i))-cos(2.4*pi*x(i))+0.3*randn;
end
% Framing the interpolation matrix for training data
t=length(x);
for i=1:1:t
for j=1:1:t
h=x(i)-x(j);
k=h^2/.02;
train(i,j)=exp(-k);
end
end
W=inv(train)*y';
% Testing the trained RBF
xtest=-1:0.01:1;
%ytest is the desired output
ytest=1.2*sin(pi*xtest)-cos(2.4*pi*xtest);
% Framing the interpolation matrix for test data
t1=length(xtest);
t=length(x);
for i=1:1:t1
for j=1:1:t
h=xtest(i)-x(j);
k=h^2/.02;
test(i,j)=exp(-k);
end
end
actual_test=test*W;
% Plotting the Performance of the network
figure;
plot(xtest,ytest,'b-',xtest,actual_test,'r+');
xlabel('Xtest value');
ylabel('Ytest value');
h = legend('Desired output','Approximated curve',2);
set(h);
%Matlab code for Fixed Centres Selected at Random
clc;
% Training sampling 41 points in the range of [-1,1]
x=-1:0.05:1;
%generating training data
for i=1:length(x)
y(i)=1.2*sin(pi*x(i))-cos(2.4*pi*x(i))+0.3*randn;
end
% Generating 20 Fixed Random Centres from the samples
idx=randperm(numel(x));
l=x(idx(1:20));
t=sort(l);
centre=t';
% Framing the interpolation matrix for training data
t=length(x);
t1=length(centre);
for i=1:1:t
for j=1:1:t1
h=x(i)-centre(j);
k=h^2/0.02;
gtrain(i,j)=exp(-k);
end
end
I=eye(20);
lamda=0; % Regularization factor
W=inv((gtrain'*gtrain)+ lamda * I)*gtrain'*y';
% Testing the trained RBF
xtest=-1:0.01:1
%ytest is the desired output
for i=1:length(xtest)
ytest(i)=1.2*sin(pi*xtest(i))-cos(2.4*pi*xtest(i));
end
% Framing the interpolation matrix for test data
t2=length(xtest);
for i=1:1:t2
for j=1:1:t1
h=xtest(i)-centre(j);
k=h^2/.02;
gtest(i,j)=exp(-k);
end
end
dtest=gtest*W;
% Plotting the performance of the network
figure;
plot(xtest,ytest,'b-',xtest,dtest,'r+');
xlabel('Xtest value');
ylabel('Ytest value');
h = legend('Desired output','Approximated curve',2);
set(h);
%Matlab code for Radial Basis Functions
clc;
x=-1:0.05:1;
%generating training data with Random Noise
for i=1:length(x)
y(i)=1.2*sin(pi*x(i))-cos(2.4*pi*x(i))+0.3*randn;
end
% Framing the interpolation matrix for training data
t=length(x);
for i=1:1:t
for j=1:1:t
h=x(i)-x(j);
k=h^2/.02;
train(i,j)=exp(-k);
end
end
% Determining the weight matrix
I= eye(41);
q=0;
for h=1:10
lamda=h; % Regularization factor
W(:,h)=inv((train'*train)+ lamda * I)*train'*y';
end
% Testing the trained RBF
xtest=-1:0.01:1;
%ytest is the desired output
ytest=1.2*sin(pi*xtest)-cos(2.4*pi*xtest);
% Framing the interpolation matrix for test data
t1=length(xtest);
t=length(x);
for i=1:1:t1
for j=1:1:t
h=xtest(i)-x(j);
k=h^2/.02;
test(i,j)=exp(-k);
end
end
for h=1:10
actual_test(:,h)=test*W(:,h);
end
% Plotting the Performance of the network
figure;
for h=1:5
subplot(3,2,h);
plot(xtest,ytest,'b-',xtest,actual_test(:,h),'r+');
xlabel('Xtest value');
ylabel('Ytest value');
text(-0.9,1.5,['Regularization factor = ',num2str(h)]);
g = legend('Desired Output','Approximated curve',2);
set(g,'box','off');
end
figure;
m=0;
for h=1:5
m=5+h;
subplot(3,2,h);
plot(xtest,ytest,'b-',xtest,actual_test(:,m),'r+');
xlabel('Xtest value');
ylabel('Ytest value');
text(-0.9,1.5,['Regularization factor =',num2str(m)]);
g = legend('Desired Output','Approximated curve',2);
set(g,'box','off');
end
%Matlab code for Fixed Centres Selected at Random
clc;
% Training sampling 41 points in the range of [-1,1]
x=-1:0.05:1;
%generating training data
for i=1:length(x)
y(i)=1.2*sin(pi*x(i))-cos(2.4*pi*x(i))+0.3*randn;
end
% Generating 20 Fixed Random Centres from the samples
idx=randperm(numel(x));
l=x(idx(1:20));
t=sort(l);
centre=t';
% Framing the interpolation matrix for training data
t=length(x);
t1=length(centre);
for i=1:1:t
for j=1:1:t1
h=x(i)-centre(j);
k=h^2/0.02;
gtrain(i,j)=exp(-k);
end
end
I=eye(20);
for h=1:10
lamda=h; % Regularization factor
W(:,h)=inv((gtrain'*gtrain)+ lamda * I)*gtrain'*y';
end
% Testing the trained RBF
xtest=-1:0.01:1
%ytest is the desired output
for i=1:length(xtest)
ytest(i)=1.2*sin(pi*xtest(i))-cos(2.4*pi*xtest(i));
end
% Framing the interpolation matrix for test data
t2=length(xtest);
for i=1:1:t2
for j=1:1:t1
h=xtest(i)-centre(j);
k=h^2/.02;
gtest(i,j)=exp(-k);
end
end
for h=1:10
dtest(:,h)=gtest*W(:,h);
end
figure;
for h=1:5
subplot(3,2,h);
plot(xtest,ytest,'b-',xtest,dtest(:,h),'r+');
xlabel('Xtest value');
ylabel('Ytest value');
text(-0.9,1.5,['Regularization factor = ',num2str(h)]);
g = legend('Desired Output','Approximated curve',2);
set(g,'box','off');
end
figure;
m=0;
for h=1:5
m=5+h;
subplot(3,2,h);
plot(xtest,ytest,'b-',xtest,dtest(:,m),'r+');
xlabel('Xtest value');
ylabel('Ytest value');
text(-0.9,1.5,['Regularization factor =',num2str(m)]);
g = legend('Desired Output','Approximated curve',2);
set(g,'box','off');
end
% Self Organizing Map cluster and classify scene images
clc;
load Features_color_histogram;
% image_features_train
% scene_labels_train
% image_features_test
% scene_labels_test

% Framing the input matrix


x=zeros(60,5);
for i=1:length(x)
for j=1:4
x(i,j)=image_features_train(i,j);
end
j=j+1;
x(i,j)=scene_labels_train(:,i);
end
x=x';
% Assigning the input values of the network variables
InputSize=5;
NoofSamples=60;
OutputSizeX=10;
OutputSizeY=10;
N=1000;
% Initializing the parameters of the Kohonen Network
InitialLearningRate=0.1;
T2=N;
InitialEffectiveWidth=5;
T1=N/(log(InitialEffectiveWidth));

EffectiveWidth=InitialEffectiveWidth;
LearningRate=InitialLearningRate;
j=1;
% Getting the Coodinates for the output map
for row=1:OutputSizeX
for column=1:OutputSizeY
MapX(j)=row;
MapY(j)=column;
j=j+1;
end
end
% Assigning initial weights for synapses
NumberOfNodes=OutputSizeX*OutputSizeY;
w=rand(InputSize,NumberOfNodes);
% Iterating through 1000 iterations
for epoch=1:N
% Drawing a sample vector
r=randint(1,1,[1 60]);
x(:,r); %Randomly drawn vector
%competition phase
%Determining the winner neuron
for j=1:NumberOfNodes
Eucld(j)=norm(x(:,r)-w(:,j));
end
[y,v]=min(Eucld);
winner=v;%Winning Neuron
% Co-operation and adaptaion phase
for j=1:NumberOfNodes
d=sqrt((MapX(j)-MapX(winner))^2+(MapY(j)-MapY(winner))^2);
h=exp(-(d^2)/(2*(EffectiveWidth^2)));
w(:,j)=w(:,j)+LearningRate*h*(x(:,r)-w(:,j));
end
%Varying the learning Rate and Effective width for every epoch
LearningRate=InitialLearningRate*exp(-epoch/T2);
EffectiveWidth=InitialEffectiveWidth*exp(-epoch/T1);
end
% Framing the SOM Output Map
for i=1:NoofSamples
% Determining the winner neuron
for j=1:NumberOfNodes
Eucld(j)=norm(x(:,i)-w(:,j));
scene(j)=w(5,j);
end
[y1,v1]=min(Eucld);
label1(i)=round(scene(v1));
winner1(i)=v1;
end
% Plotting the performance of the network
figure;
for i=1:NoofSamples
plot(i,winner1(i),'*')
text(i+0.5,winner1(i),num2str(label1(i)));
xlabel('No of samples')
ylabel('Output neurons')
h = legend('Winner neuron',2);
set(h,'box','off');
grid on;
hold on;
end
% Self Organizing Map cluster and classify scene images
clc;
load Features_color_histogram;
% image_features_train
% scene_labels_train
% image_features_test
% scene_labels_test

% Framing the input matrix


k=1;
x=zeros(60,5);
for i=1:length(x)
for j=1:4
x(i,j)=image_features_train(i,j);
end
j=j+1;
x(i,j)=k;
k=k+1;
end
x=x';
% Assigning the input values of the network variables
InputSize=5;
NoofSamples=60;
OutputSizeX=10;
OutputSizeY=10;
N=1000;
% Initializing the parameters of the Kohonen Network
InitialLearningRate=0.1;
T2=N;
InitialEffectiveWidth=5;
T1=N/(log(InitialEffectiveWidth));

EffectiveWidth=InitialEffectiveWidth;
LearningRate=InitialLearningRate;
j=1;
% Getting the Coodinates for the output map
for row=1:OutputSizeX
for column=1:OutputSizeY
MapX(j)=row;
MapY(j)=column;
j=j+1;
end
end
% Assigning initial weights for synapses
NumberOfNodes=OutputSizeX*OutputSizeY;
w=rand(InputSize,NumberOfNodes);
% Iterating through 1000 iterations
for epoch=1:N
% Drawing a sample vector
r=randint(1,1,[1 60]);
x(:,r); %Randomly drawn vector
%competition phase
%Determining the winner neuron
for j=1:NumberOfNodes
Eucld(j)=norm(x(:,r)-w(:,j));
end
[y,v]=min(Eucld);
winner=v;%Winning Neuron
% Co-operation and adaptaion phase
for j=1:NumberOfNodes
d=sqrt((MapX(j)-MapX(winner))^2+(MapY(j)-MapY(winner))^2);
h=exp(-(d^2)/(2*(EffectiveWidth^2)));
w(:,j)=w(:,j)+LearningRate*h*(x(:,r)-w(:,j));
end
%Varying the learning Rate and Effective width for every epoch
LearningRate=InitialLearningRate*exp(-epoch/T2);
EffectiveWidth=InitialEffectiveWidth*exp(-epoch/T1);
end
% Framing the SOM Output Map
for i=1:NoofSamples
% Determining the winner neuron
for j=1:NumberOfNodes
Eucld(j)=norm(x(:,i)-w(:,j));
scene(j)=w(5,j);
end
[y1,v1]=min(Eucld);
label1(i)=round(scene(v1));
winner1(i)=v1;
winner2(i)=w(5,v1);
% Framing the SOM Output Map
for i=1:NumberOfNodes
for j=1:NoofSamples
Eucld(j)=norm(x(:,j)-w(:,i));
scene(j)=x(5,j);
end
[y1,v1]=min(Eucld);
label1(i)=round(scene(v1));
winner1(i)=v1;
end
end
%mapping 60 sample to output layer of SOM (10X10)
j=1;
for row=1:OutputSizeX
for column=1:OutputSizeY
indices_display(row,column)=winner1(j);
j=j+1;
end
end
% Plotting semantic map for the texture images
DisplayImageMatrix(indices_display);
% Self Organizing Map cluster and classify scene images
clc;

load Features_color_histogram;
% image_features_train
% scene_labels_train
% image_features_test
% scene_labels_test

% Framing the input matrix


x=zeros(60,5);
for i=1:length(x)
for j=1:4
x(i,j)=image_features_train(i,j);
end
j=j+1;
x(i,j)=scene_labels_train(:,i);
end
x=x';
% Assigning the input values of the network variables
InputSize=5;
NoofSamples=60;
OutputSizeX=10;
OutputSizeY=10;
N=1000;

% Initializing the parameters of the Kohonen Network


InitialLearningRate=0.1;
T2=N;
InitialEffectiveWidth=5;
T1=N/(log(InitialEffectiveWidth));

EffectiveWidth=InitialEffectiveWidth;
LearningRate=InitialLearningRate;
j=1;

% Getting the Coodinates for the output map


for row=1:OutputSizeX
for column=1:OutputSizeY
MapX(j)=row;
MapY(j)=column;
j=j+1;
end
end

% Assigning initial weights for synapses


NumberOfNodes=OutputSizeX*OutputSizeY;
w=rand(InputSize,NumberOfNodes);

% Iterating through 1000 iterations


for epoch=1:N
% Drawing a sample vector
r=randint(1,1,[1 60]);
x(:,r); %Randomly drawn vector

%competition phase
%Determining the winner neuron
for j=1:NumberOfNodes
Eucld(j)=norm(x(:,r)-w(:,j));
end
[y,v]=min(Eucld);
winner=v;%Winning Neuron

% Co-operation and adaptaion phase


for j=1:NumberOfNodes
d=sqrt((MapX(j)-MapX(winner))^2+(MapY(j)-MapY(winner))^2);
h=exp(-(d^2)/(2*(EffectiveWidth^2)));
w(:,j)=w(:,j)+LearningRate*h*(x(:,r)-w(:,j));
end

%Varying the learning Rate and Effective width for every epoch
LearningRate=InitialLearningRate*exp(-epoch/T2);
EffectiveWidth=InitialEffectiveWidth*exp(-epoch/T1);
end

y=zeros(30,5);
for i=1:length(y)
for j=1:4
y(i,j)=image_features_test(i,j);
end
j=j+1;
y(i,j)=scene_labels_test(:,i);
end
y=y';
NoofSamples=30;
% Framing the SOM Output Map
for i=1:NoofSamples

% Determining the winner neuron


for j=1:NumberOfNodes
Eucld(j)=norm(y(:,i)-w(:,j));
scene(j)=w(5,j);
end
[y2,v2]=min(Eucld);
label2(i)=round(scene(v2));
winner2(i)=v2;
recognition_rate(i)= label2(i)-scene_labels_test(i);
end

% Plotting the performance of the network


figure;
subplot(2,1,1)
for i=1:NoofSamples
plot(i,winner2(i),'*')
text(i+0.5,winner2(i),num2str(label2(i)));
xlabel('No of samples')
ylabel('Output neurons')
h = legend('Winner neuron',2);
set(h,'box','on');
grid on;
hold on;
end
subplot(2,1,2)
for i=1:NoofSamples
plot(i,recognition_rate(i),'*')
xlabel('No of samples')
ylabel('Recognition error')
h = legend('Recognition error',2);
set(h,'box','on');
hold on;
end

You might also like