# ------------------------------- # 9.7 from ISL # ------------------------------- # a) library(ISLR) gas.med = median(Auto$mpg) new.var = ifelse(Auto$mpg > gas.med, 1, 0) Auto$mpglevel = as.factor(new.var) # b) install.packages('e1071') library(e1071) set.seed(3255) tune.out = tune(svm, mpglevel ~ ., data = Auto, kernel = "linear", ranges = list(cost = c(0.01, 0.1, 1, 5, 10, 100))) summary(tune.out) # We see that cross-validation error is minimized for cost=1. # c) set.seed(21) tune.out = tune(svm, mpglevel ~ ., data = Auto, kernel = "polynomial", ranges = list(cost = c(0.1, 1, 5, 10), degree = c(2, 3, 4))) summary(tune.out) # The lowest cross-validation error is obtained for cost=10 and degree=2. set.seed(463) tune.out = tune(svm, mpglevel ~ ., data = Auto, kernel = "radial", ranges = list(cost = c(0.1, 1, 5, 10), gamma = c(0.01, 0.1, 1, 5, 10, 100))) summary(tune.out) # Finally, for radial basis kernel, cost=10 and gamma=0.01. # d) svm.linear = svm(mpglevel ~ ., data = Auto, kernel = "linear", cost = 1) svm.poly = svm(mpglevel ~ ., data = Auto, kernel = "polynomial", cost = 10, degree = 2) svm.radial = svm(mpglevel ~ ., data = Auto, kernel = "radial", cost = 10, gamma = 0.01) plotpairs = function(fit) { for (name in names(Auto)[!(names(Auto) %in% c("mpg", "mpglevel", "name"))]) { nms <- names(Auto)[!(names(Auto) %in% c("mpg", "mpglevel", "name", name))] slice <- lapply(Auto[nms], mean) plot(fit, Auto, as.formula(paste("mpg~", name, sep = "")), slice = slice) } } plotpairs(svm.linear) plotpairs(svm.poly) plotpairs(svm.radial)