Hi,
i am tryng to run Bagging SVM but I have a problem. I do Bagging SVM based
on algoritm bagging Trees by Breiman. I get the following error and I think
I am wrong in calculating err.mean and err.vote. I also have difficulty in
making the plot.> library(e1071)
> gendata <- function(N=30,p=5,r=.95,cut=0.5,lop=0.2,hip=0.8) {
+ mat <- chol(diag(p) + r - r*diag(p))
+ X <- matrix(rnorm(N*p),ncol=p)%*%mat
+ X <- sweep(X,2,apply(X,2,mean))
+ X <- sweep(X,2,apply(X,2,sd),"/")
+ u <- runif(N)
+ y <- ifelse(X[,1]<cut,ifelse(u<lop,1,0),ifelse(u<hip,1,0))
+ return(list(X=X,y=y))
+ }> N <- 100
> tmp <- gendata(N)
> data <- data.frame(x=tmp$X,y=tmp$y)
> index <- 1:nrow(data)
> testindex <- sample(index, trunc(length(index)*30/100))
> test.data <- data[testindex,]
> trainindex <- sample(index, trunc(length(index)*70/100))
> train.data <- data[-testindex,]
> for (b in 1:3) {
+ samp <- sample(1:N,N,replace=T)
+ modelrad <- svm(y ~ ., train.data[samp,], type =
"C-classification",
cost = cc,gamma = gg, kernel = "radial")
+ }> modelrad <- svm(y ~ ., train.data, type = "C-classification",
cost cc,gamma = gg, kernel = "radial")
> err.base <- mean(abs(test.data$y - round(predict(base.tree,test.data))))
> boots <- c(2:9,seq(10,100,by=5),seq(200,500,by=50))
> Blen <- length(boots)
> err.mean <- rep(NA,Blen)
> err.vote <- rep(NA,Blen)
> for (i in 1:Blen) {
+ B <- boots[i]
+ pred <- matrix(NA,nrow=B,ncol=N)
+ for (b in 1:B) {
+ samp <- sample(1:N,N,replace=T)
+ modelrad <- svm(y ~ ., train.data[samp,], type =
"C-classification",
cost = cc,gamma = gg, kernel = "radial")
+ pred <- predict(modelrad,test.data)
+ }
+ err.mean[i] <- mean(abs(test.data$y - round(apply(pred,2,mean))))
+ err.vote[i] <- mean(abs(test.data$y -
round(apply(ifelse(pred>.5,1,0),2,mean))))
+ }
Error in apply(pred, 2, mean) : dim(X) must have a positive length
I'd appreciate any advice about the algorithm. Thanks for any help.
best Regards,
Iut
On Sat, May 11, 2013 at 2:04 AM, Iut Tri Utami
<triutami.iut@gmail.com>wrote:
> Hi,
>
> i am tryng to run Bagging SVM but I have a problem. I do Bagging SVM based
> on algoritm bagging Trees by Breiman. I get the following error and I think
> I am wrong in calculating err.mean and err.vote. I also have difficulty in
> making the plot.
> > library(e1071)
> > gendata <- function(N=30,p=5,r=.95,cut=0.5,lop=0.2,hip=0.8) {
> + mat <- chol(diag(p) + r - r*diag(p))
> + X <- matrix(rnorm(N*p),ncol=p)%*%mat
> + X <- sweep(X,2,apply(X,2,mean))
> + X <- sweep(X,2,apply(X,2,sd),"/")
> + u <- runif(N)
> + y <- ifelse(X[,1]<cut,ifelse(u<lop,1,0),ifelse(u<hip,1,0))
> + return(list(X=X,y=y))
> + }
> > N <- 100
> > tmp <- gendata(N)
> > data <- data.frame(x=tmp$X,y=tmp$y)
> > index <- 1:nrow(data)
> > testindex <- sample(index, trunc(length(index)*30/100))
> > test.data <- data[testindex,]
> > trainindex <- sample(index, trunc(length(index)*70/100))
> > train.data <- data[-testindex,]
> > for (b in 1:3) {
> + samp <- sample(1:N,N,replace=T)
> + modelrad <- svm(y ~ ., train.data[samp,], type =
"C-classification",
> cost = cc,gamma = gg, kernel = "radial")
> + }
> > modelrad <- svm(y ~ ., train.data, type =
"C-classification", cost > cc,gamma = gg, kernel =
"radial")
> > err.base <- mean(abs(test.data$y -
round(predict(base.tree,test.data))))
> > boots <- c(2:9,seq(10,100,by=5),seq(200,500,by=50))
> > Blen <- length(boots)
> > err.mean <- rep(NA,Blen)
> > err.vote <- rep(NA,Blen)
> > for (i in 1:Blen) {
> + B <- boots[i]
> + pred <- matrix(NA,nrow=B,ncol=N)
> + for (b in 1:B) {
> + samp <- sample(1:N,N,replace=T)
> + modelrad <- svm(y ~ ., train.data[samp,], type =
"C-classification",
> cost = cc,gamma = gg, kernel = "radial")
> + pred <- predict(modelrad,test.data)
> + }
> + err.mean[i] <- mean(abs(test.data$y - round(apply(pred,2,mean))))
> + err.vote[i] <- mean(abs(test.data$y -
> round(apply(ifelse(pred>.5,1,0),2,mean))))
> + }
> Error in apply(pred, 2, mean) : dim(X) must have a positive length
>
> I'd appreciate any advice about the algorithm. Thanks for any help.
>
> best Regards,
>
>
> Iut
>
>
[[alternative HTML version deleted]]