daten <- data.frame(x=c(runif(100,-4,0),runif(100,0.5,2.5)),y=c(runif(100,-3,1),runif(100,0,3)),b=c(rep(-1,100),rep(1,100))) plot(daten$x,daten$y,pch=20+daten$b,xlim=c(-5,5),ylim=c(-5,5)) w <- c(0,0) t <- 0 eta <- 1 R <- max(sqrt(daten$x^2+daten$y^2)) R s <- split(1:200,(w[1]*daten$x+w[2]*daten$y+t)*daten$b>0)$"FALSE" i<-0 while(length(s)>0) { if(length(s)>1) nr <- sample(s,1) else nr <- s plot(daten$x,daten$y,pch=20+daten$b,xlim=c(-5,5),ylim=c(-5,5)) points(daten$x[s],daten$y[s],pch=20+daten$b,col="red") lines(c(-(-5*w[2]+t)/w[1],-(5*w[2]+t)/w[1]),c(-5,5)) arrows(0,0,w[1],w[2]) readline() points(daten$x[nr],daten$y[nr],col="blue",pch=20+daten$b[nr]) arrows(0,0,daten$x[nr],daten$y[nr],col="blue") readline() w <- w + eta * daten$b[nr] * c(daten$x[nr],daten$y[nr]) t <- t + eta * daten$b[nr] * R^2 lines(c(-(-5*w[2]+t)/w[1],-(5*w[2]+t)/w[1]),c(-5,5),col="green") arrows(0,0,w[1],w[2],col="green") readline() s <- split(1:200,(w[1]*daten$x+w[2]*daten$y+t)*daten$b>0)$"FALSE" i<-i+1 print(c("i=",i)) } plot(daten$x,daten$y,pch=20+daten$b,xlim=c(-5,5),ylim=c(-5,5)) lines(c(-(-5*w[2]+t)/w[1],-(5*w[2]+t)/w[1]),c(-5,5))