调整超参数 model.frame.default 变量长度中的错误不同

问题描述

我试图在 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...