问题描述
我试图在 svm 模型中调整我的超参数伽玛,但没有成功。我尝试了类似帖子提出的一些解决方案,但没有运气,因为我不熟悉这个错误来源。
这是设置
#define and split data
d <- diamonds[sample(nrow(diamonds),"4000"),]
#price_cat new explained variable
d$price_cat <- cut(d$price,10,labels = LETTERS[1:10])
spec = c(train = .5,test = .3,validate = .2)
g = sample(cut(
seq(nrow(d)),nrow(d)*cumsum(c(0,spec)),labels = names(spec)
))
res = split(d,g)
#clean the data
df2<-res$train[complete.cases(res$train),]
df3<-res$test[complete.cases(res$test),]
df4<-res$validate[complete.cases(res$validate),]
X_trn <- model.matrix(price_cat~.-1-price,data=df2)
X_val <- model.matrix(price_cat~.-1-price,data=df3)
X_tst <- model.matrix(price_cat~.-1-price,data=df4)
#Scale the data with train
means <- apply(X_trn,2,mean)
sds <- apply(X_trn,sd)
X_trn.s <- X_trn %>% sweep(MARGIN = 2,STATS = means,FUN = `-`) %>%
sweep(MARGIN = 2,STATS = sds,FUN = `/`)
X_val.s <- X_val %>% sweep(MARGIN = 2,FUN = `/`)
X_tst.s <- X_tst %>% sweep(MARGIN = 2,FUN = `/`)
现在当我运行 SVM 时,它就像这样运行得很好
svm.1 <- svm(price_cat~.-1-price,data = df2,kernel="radial",type="C-classification")
但是当我尝试调整伽玛时,it yields error.
gamma <- seq(0.001,0.1,length= 20)
train_e <- numeric(20)
valid_e <- numeric(20)
for(i in 1:20){
m <- svm(price_cat~.,data = X_trn.s,type="C-classification",gamma = gamma[i])
p_tr <- predict(m,X_trn.s)
p_va <- predict(m,X_val.s)
train_e[i] <- 1-mean(p_tr==X_trn.s$price_cat)
valid_e[i] <- 1-mean(p_va==X_val.s$price_cat)
}
当我使用函数 tune()
时,它也能正常工作,
tune(svm,price_cat~.,ranges = list(gamma = seq(0.001,length= 20),cost = 2^(2:4)))
但我的工作不是让它与这个循环一起工作。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)