library(animation) library(lattice) data(iris) set.seed(4) iris.data <- iris[1:100, c(1, 2, 5)] sample.iS <- c(sample(1:50, 25)) sample.iV <- c(sample(51:100, 25)) iris.data$id <- c(rep(-1, 50), rep(1, 50)) iris.data$intercept <- 1 iS <- iris$Species == "setosa" iV <- iris$Species == "versicolor" data <- iris.data iris.data <- iris.data[sample(c(sample.iS, sample.iV)), ] w.0 <- as.matrix(runif(3, min = -1, max = 1)) w.t <- w.0 i = 1 while (i <= ani.options("nmax")) { matplot(c(3.5, 8), c(1, 4.5), type = "n", xlab = "Length", ylab = "Width", main = "Petal Dimensions in Iris Blossoms") matpoints(data[sample.iS, 1], data[sample.iS, 2], pch = "S", col = c(2)) matpoints(data[sample.iV, 1], data[sample.iV, 2], pch = "V", col = c(4)) matlines(x <- seq(3.5, 8, 0.1), (-w.t[1] * x - w.t[3])/w.t[2], col = "grey", lwd = 1) legend(6.5, 1.5, c(" Setosa Petals", "Versicolor Petals"), pch = "SV", col = c(2, 4)) j <- (i - 1)%%50 + 1 matpoints(iris.data[j, 1], iris.data[j, 2], pch = 1, cex = 2) matlines(c(0, iris.data[j, 1]), c(0, iris.data[j, 2]), lty = 2, pch = 1, cex = 2, col = "grey") abline(b = w.t[2]/w.t[1], a = iris.data[j, 2] - w.t[2]/w.t[1] * iris.data[j, 1], lty = 2, col = "grey") xv <- t(as.matrix(iris.data[j, c(1, 2, 5)])) yv <- sign(t(w.t) %*% xv) if (yv * iris.data[j, c(4)] < 0) w.t <- w.t + xv %*% iris.data[j, c(4)] matlines(x <- seq(3.5, 8, 0.1), (-w.t[1] * x - w.t[3])/w.t[2], col = 2, lwd = 1) ani.pause() i = i + 1 } ## R version 2.12.0 (2010-10-15) ## Platform: i686-pc-linux-gnu (32-bit) ## Other packages: animation 2.0-3, lattice 0.19-13