I am trying to understand what is the difference between linear and
polynomial kernel:
linear: u'*v
polynomial: (gamma*u'*v + coef0)^degree
It would seem that polynomial kernel with gamma = 1; coef0 = 0 and degree
= 1
should be identical to linear kernel, however it gives me significantly
different results for very simple
data set, with linear kernel significantly outperforming polynomial
kernel.
*** mse, r2 = 0.5, 0.9 for linear
*** mse, r2 = 1.8, 0.1 for polynomial
What am I missing ?
Ryszard
P.S.
Here are my results:
# simple cross validation function
cv.svm <- function(formula, data, ntry = 3, kernel = "linear", scale =
FALSE, cross = 3,
gamma = 1/(dim(data)-1), degree = 3) {
mse <- 0; r2 <- 0
for (n in 1:ntry) {
svm.model <- svm(formula , data = data, scale = scale, kernel =
kernel,
cross = cross)
mse <- mse + svm.model$tot.MSE
r2 <- r2 + svm.model$scorrcoeff
}
mse <- mse/ntry; r2 <- r2/ntry; result <- c(mse, r2)
cat(sprintf("cv.svm> mse, r2 = %5.3f %5.3f\n", mse, r2))
return (result)
}
# define data set
x1 <- rnorm(9); x2 <- rnorm(9)
df <- data.frame(y = 2*x1 + x2, x1, x2)
# invoke cv.svm() for linear and polynomial kernels few times
> r <- cv.svm( y ~ ., df, kernel = "polynomial", gamma = 1, degree = 1,
ntry = 32)
cv.svm> mse, r2 = 1.888 0.162
> r <- cv.svm( y ~ ., df, kernel = "polynomial", gamma = 1, degree = 1,
ntry = 32)
cv.svm> mse, r2 = 1.867 0.146
> r <- cv.svm( y ~ ., df, kernel = "polynomial", gamma = 1, degree = 1,
ntry = 32)
cv.svm> mse, r2 = 1.818 0.105
> r <- cv.svm( y ~ ., df, kernel = "linear", gamma = 1, degree = 1, ntry =
32)
cv.svm> mse, r2 = 0.525 0.912
> r <- cv.svm( y ~ ., df, kernel = "linear", gamma = 1, degree = 1, ntry =
32)
cv.svm> mse, r2 = 0.537 0.878
> r <- cv.svm( y ~ ., df, kernel = "linear", gamma = 1, degree = 1, ntry =
32)
cv.svm> mse, r2 = 0.528 0.913
[[alternative HTML version deleted]]
______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help