3

为了学习支持向量机,我们必须确定各种参数。

例如,有成本和伽玛等参数。

我正在尝试使用 R 的“GA”包和“kernlab”包来确定 SVM 的 sigma 和 gamma 参数。

我使用准确性作为遗传算法的评估函数。

我创建了以下代码,并运行了它。

library(GA) 
library(kernlab) 
data(spam) 
index <- sample(1:dim(spam)[1]) 
spamtrain <- spam[index[1:floor(dim(spam)[1]/2)], ] 
spamtest <- spam[index[((ceiling(dim(spam)[1]/2)) + 1):dim(spam)[1]], ] 

f <- function(x) 
{ 
x1 <- x[1] 
x2 <- x[2] 
filter <- ksvm(type~.,data=spamtrain,kernel="rbfdot",kpar=list(sigma=x1),C=x2,cross=3) 
mailtype <- predict(filter,spamtest[,-58]) 
t <- table(mailtype,spamtest[,58]) 
return(t[1,1]+t[2,2])/(t[1,1]+t[1,2]+t[2,1]+t[2,2]) 
} 

GA <- ga(type = "real-valued", fitness = f, min = c(-5.12, -5.12), max = c(5.12, 5.12), popSize = 50, maxiter = 2) 
summary(GA) 
plot(GA) 

但是,当我调用 GA 函数时,返回以下错误。

“未找到支持向量。您可能需要更改参数”

我不明白为什么代码不好。

4

1 回答 1

5

C将 GA 用于 SVM 参数并不是一个好主意 - 只需进行常规网格搜索(两个 for 循环,一个 for和一个 forgamma值)就足够了。

在 Rs 库e1071 (which also provides SVMs) there is a method中 tune.svm` 使用网格搜索查找最佳参数。

例子

data(iris)
obj <- tune.svm(Species~., data = iris, sampling = "fix", 
gamma = 2^c(-8,-4,0,4), cost = 2^c(-8,-4,-2,0))
plot(obj, transform.x = log2, transform.y = log2)
plot(obj, type = "perspective", theta = 120, phi = 45)

这也表明了一件重要的事情-您应该以几何方式寻找良好的 C 和 gamma 值,例如。2^x对于x{-10,-8,-6,-6,-4,-2,0,2,4}.

GA是一种元优化算法,参数空间巨大,参数与优化函数之间没有简单的相关性。它需要调整比 SVM 更多的参数(代数、种群规模、变异概率、交叉概率、变异算子、交叉算子......),所以它在这里完全没用。

当然——正如之前在评论中所说——C 和 Gamma必须是严格的正数。

有关使用e1071的更多详细信息,请查看 CRAN 文档:http ://cran.r-project.org/web/packages/e1071/e1071.pdf

于 2013-08-06T19:28:23.620 回答