
library(kernlab)

data(spam)
str(spam)

dim(spam)
train <- sample(1:4601, 3000)
spam.train <- spam[train, ]
spam.test <- spam[-train, ]

library(nnet)

fm1 <- nnet(type ~ ., data = spam.train,
            size = 10,
            MaxNWts = 5000, decay = 5e-04,
            maxit = 200)

fm1

pfm1 <- predict(fm1)

library(lattice)
stripplot(spam.train$type ~ pfm1, jitter = TRUE)

(class.tab <- table(spam.train$type, pfm1 > 0.5))
(sum(class.tab) - sum(diag(class.tab))) / sum(class.tab)


pfm1.test <- predict(fm1, newdata = spam.test)
stripplot(spam.test$type ~ pfm1.test, jitter = TRUE)

(class.tab <- table(spam.test$type, pfm1.test > 0.5))
(sum(class.tab) - sum(diag(class.tab))) / sum(class.tab)

## SVM


library(e1071)

## from e1071 package
fm2 <- svm(type ~ ., data = spam.train,
           kernel = "radial")

fm2

## from kernlab package
fm3 <- ksvm(type ~ ., data = spam.train,
            kernel = "rbfdot")

(class.tab <- table(spam.train$type, predict(fm2)))
(sum(class.tab) - sum(diag(class.tab))) / sum(class.tab)

(class.tab <- table(spam.test$type, predict(fm2, newdata = spam.test)))
(sum(class.tab) - sum(diag(class.tab))) / sum(class.tab)



(class.tab <- table(spam.train$type, predict(fm3)))
(sum(class.tab) - sum(diag(class.tab))) / sum(class.tab)

(class.tab <- table(spam.test$type, predict(fm3, newdata = spam.test)))
(sum(class.tab) - sum(diag(class.tab))) / sum(class.tab)

fm4 <- ksvm(type ~ ., data = spam.train,
            kernel = "polydot",
            kpar = list(degree = 2, offset = 1))


(class.tab <- table(spam.train$type, predict(fm4)))
(sum(class.tab) - sum(diag(class.tab))) / sum(class.tab)

(class.tab <- table(spam.test$type, predict(fm4, newdata = spam.test)))
(sum(class.tab) - sum(diag(class.tab))) / sum(class.tab)

## KPCA

kpc <- kpca(~ . , data = spam.train[-58],
            kernel = "rbfdot",
            kpar = list(sigma = 0.001),
            features = 2)

plot(rotated(kpc), col = spam.train$type)
