
# -------------------------------
# 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)

