f <- function(x,y,m1,m2){ exp(-0.5*c(x-m1,y-m2)%*%matrix(c(1,-0.5,-0.5,0.5),2)%*%c(x-m1,y-m2))/ sqrt((2*pi)^2*det(matrix(c(2,2,2,4),2))) } a <- rep(-15:40/5,56) b <- rep(-15:40/5,rep(56,56)) fe<-c() for(i in 1:(56*56)){ fe[i]<-f(a[i],b[i],1,2) } contour(-15:40/5,-15:40/5,matrix(fe,56),labex=c(),col='red') for(i in 1:(56*56)){ fe[i]<-f(a[i],b[i],5,4) } contour(-15:40/5,-15:40/5,matrix(fe,56),add=T,labex=c(),col='blue') abline(h=0,lty='dashed') abline(v=0,lty='dashed') for(i in 1:100) points(rnorm(2)%*%matrix(c(1,0,1,2),2)+c(1,2),col="red") for(i in 1:100) points(rnorm(2)%*%matrix(c(1,0,1,2),2)+c(5,4),col="blue") simuldata4 <- function(m){ x <- c(rnorm(m)/2, rnorm(m)) y <- c(rnorm(m)/2+1, rnorm(m)-0.5) typ <- c(rep("blue",m),rep("red",m)) return(data.frame(x,y,typ)) } lerndaten <- simuldata4(500) plot(lerndaten$x,lerndaten$y,col=as.vector(lerndaten$typ),xlab="",ylab="") 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]) 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") 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") 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)) library(MASS) L <- lda(b~x+y,daten) a <- rep(-40:40/10,81) b <- rep(-40:40/10,rep(81,81)) P <- predict(L,data.frame("x"=a,"y"=b),type="probs") contour(-40:40/10,-40:40/10,matrix(P[[2]][,1]-P[[2]][,2],81), add=T,levels=0,labex=c(),col='red') LM <- lm(b~x+y,daten) lines(c(-4,+4),c((LM$coefficients[["(Intercept)"]]+4*LM$coefficients[["x"]])/LM$coefficients[["y"]],(LM$coefficients[["(Intercept)"]]-4*LM$coefficients[["x"]])/LM$coefficients[["y"]]),col="blue") daten <- data.frame(x=c(runif(150,-4,0),runif(50,0.5,2.5)),y=c(runif(150,-3,1),runif(50,0,3)),b=c(rep(-1,150),rep(1,50))) 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]) 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") 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") 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)) library(MASS) L <- lda(b~x+y,daten) a <- rep(-40:40/10,81) b <- rep(-40:40/10,rep(81,81)) P <- predict(L,data.frame("x"=a,"y"=b),type="probs") contour(-40:40/10,-40:40/10,matrix(P[[2]][,1]-P[[2]][,2],81), add=T,levels=0,labex=c(),col='red') LM <- lm(b~x+y,daten) lines(c(-4,+4),c((LM$coefficients[["(Intercept)"]]+4*LM$coefficients[["x"]])/LM$coefficients[["y"]],(LM$coefficients[["(Intercept)"]]-4*LM$coefficients[["x"]])/LM$coefficients[["y"]]),col="blue") library(e1071) L <- svm(as.factor(b)~x+y,daten,kernel="linear",cost=100) a <- rep(-80:80/20,161) b <- rep(-80:80/20,rep(161,161)) P <- predict(L,data.frame("x"=a,"y"=b),type="probs") contour(-80:80/20,-80:80/20,matrix(P,161), add=T,levels=0,labex=c(),col='green')