Home > Net >  Computation with different combinations of parameters using for loop
Computation with different combinations of parameters using for loop

Time:09-03

I am trying to implement a for loop in R to fill a df with some combinations of learning rates and decays used in machine learning. The ideia is to try several learning rates and decays, calculate error metrics of these combinations and save in a dataset. So I could point out which combination is better.

Below is the code and my result. I don't understand why I get this result.

learning_rate = c(0.01, 0.02) 
decay = c(0, 1e-1) 

combinations = length(learning_rate) * length(decay)

df <- data.frame(Combination=character(combinations),
                 lr=double(combinations), 
                 decay=double(combinations), 
                 result=character(combinations),
                 stringsAsFactors=FALSE) 

for (i in 1:combinations) {
  for (lr in learning_rate) {
    for (dc in decay) {
       df[i, 1] = i
       df[i, 2] = lr
       df[i, 3] = dc 
       df[i, 4] = 10*lr   dc*4 # Here I'd do some machine learning. Just put this is easy equation as example
    }
  }
}

The result I get. It seems that only the combination loop worked well. What I did wrong?

 Combination   lr decay  result
           1 0.02   0.1   0.6
           2 0.02   0.1   0.6
           3 0.02   0.1   0.6
           4 0.02   0.1   0.6

I expected this result

 Combination   lr decay   result
           1 0.01   0       0.1
           2 0.01   1e-1    0.5
           3 0.02   0       0.2
           4 0.02   1e-1    0.6

CodePudding user response:

With expand.grid you can do:

cbind(comb = seq(combinations),
      expand.grid(learning_rate = learning_rate, 
                  decay = decay))
  comb learning_rate decay
1    1          0.01   0.0
2    2          0.02   0.0
3    3          0.01   0.1
4    4          0.02   0.1

CodePudding user response:

Tuning with for-loop:

df <- data.frame() 

for (lr in learning_rate) {
  for (dc in decay) {
    df <- rbind(df, data.frame(
      lr = lr,
      decay = dc,
      result = 10*lr   dc*4
    ))
  }
}

df

#     lr decay result
# 1 0.01   0.0    0.1
# 2 0.01   0.1    0.5
# 3 0.02   0.0    0.2
# 4 0.02   0.1    0.6

Tuning with mapply():

df <- expand.grid(lr = learning_rate, decay = decay)
ML.fun <- function(lr, dc) 10*lr   dc*4
df$result <- mapply(ML.fun, lr = df$lr, dc = df$decay)
df

#     lr decay result
# 1 0.01   0.0    0.1
# 2 0.02   0.0    0.2
# 3 0.01   0.1    0.5
# 4 0.02   0.1    0.6
  • Related