Creating a simple perception algorithm

1 view (last 30 days)
Andy on 4 Dec 2013
Commented: Andy on 4 Dec 2013
I am trying to do a simple perception model using Rosenblatt’s training algorithm. Z is my data set where column 1 is my x value, 2 is my y value and 3 is my random weight. Each object (x,y) in Z is either assigned 1 or 2 in the vector labels. I have started with a small data set, easily separable to test so it should run quickly, according to the count I have placed in the if-statement though it goes on far longer than expected and does not exit the loop. I think there may be an issue in the updating of the weights, and also the if-statement expression. If anyone could help me with how I should be updating the weights with x,y values as well as what expression I should use for the if-statement that would be a big help.
while errors > 0
errors = 0;
v = sum(Z(:,1).*Z(:,2).*Z(:,3)) %x * y * weight for each object
if v >= 0
v = 1;
v = 0;
for i = 1:sizea % for each object in dataset
if(v == 0 && labels(i) == 2 || v == 1 && labels(i) == 1)
errors = 1;
count = count + 1
Z(i,3) = Z(i,3) - (2*v-1) * eta * Z(i,1);
This is the data I am using. It is split with a backwards facing horizontal line, points above are red, points below are black. The shape is more pronounced when using a few thousand points instead of 10. As you can see the labels 1 or 2 are assigned depending on if the points are above or below the line. I want to adjust the weights so that I get no errors when classifying the points.
d = rand(10,2);
hold on
labels = ones(10,1);
diff = d(:,1) + d(:,2) - 1;
labels( diff + 1 >= 1) = 2;
pathWidth = 0.05;
labels( abs(diff) < pathWidth) = [];
d(abs(diff) < pathWidth,:) = [];
plot(d(labels == 1,1),d(labels == 1,2),'k.','MarkerSize',10)
plot(d(labels == 2,1),d(labels == 2,2),'r.','MarkerSize',10)
axis square
Andy on 4 Dec 2013
I have edited my original post.

Sign in to comment.

Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!