# Synthetic generator of linearly separable data. Data are two-dimensional # n: number of data # b: "bias" term of w*x + b # w: bidimensional weigth vector # range: data are between -range and range in both dimensions # seed: seed of the random generator. If 0 (def.) no initialization # Output: # a list with 2 components: # m: a matrix of randomly generated data # y : vector of the labels: 1 stands for positive, -1 for negative elements do.linear.sep.data <- function(n=100, b=0, w=c(1,1), range=1, seed=0) { if (seed!=0) set.seed(seed); m <- matrix(- range + (2*range) * runif(n*2), ncol=2); y <- integer(n); for (i in 1:n) if ((sum(w * m[i,]) + b) > 0) y[i] <- 1 else y[i] <- -1; return(list(m=m, y=y)); } # Function to plot the synthetic data # m : matrix of data # labels : vector of positive and negative labels plot.data <- function(m,labels) { plot(m, type="n"); m.pos <- m[labels==1,]; m.neg <- m[labels==-1,]; points(m.pos, pch=0, col="red"); points(m.neg, pch=1, col="blue"); }