Skip to content

Commit daf97d9

Browse files
committed
almost done with the pipeline
1 parent 89c0830 commit daf97d9

File tree

1 file changed

+95
-39
lines changed

1 file changed

+95
-39
lines changed

R/utils.R

Lines changed: 95 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -138,96 +138,152 @@ cross_sets <- function(n, k){
138138

139139
# Create the results file by sinking an initial line and the values of the parameters in the elipsis argument
140140
initialize_results_file <- function(res_file, ...){
141-
params <- as.list(substitute(list(...)))
141+
params <- list(...)
142+
param_names <- as.list(substitute(list(...)))[-1L]
142143
sep <- "\n---------------------------------------\n\n"
143144
sink(res_file)
144145
cat("Beginning the experiment. The parameters are: \n")
145146
for(i in 2:length(params)){
146-
cat(paste0(names(params)[i], ": ", params[i], "\n"))
147+
cat(paste0(param_names[i], ": ", params[[i]], "\n"))
147148
}
148149
cat(sep)
149-
sink(NULL)
150+
sink()
151+
}
152+
153+
print_current_results <- function(res_file, res_matrix, it){
154+
sep <- "\n---------------------------------------\n\n"
155+
sink(res_file, append = T)
156+
if(it == -1){ # Final results
157+
cat("The final results of the experiment are: \n")
158+
print(res_matrix)
159+
}
160+
else{
161+
cat(paste0("The results of fold number ", it, " are: \n"))
162+
print(res_matrix)
163+
cat(sep)
164+
}
165+
166+
sink()
150167
}
151168

152169
mae <- function(orig, pred){
153170
return(sum(abs(orig-pred)/length(orig)))
154171
}
155172

156-
forecast_cycle_intervals <- function(f_dt_test, model, id_var, ...){
173+
forecast_cycle_intervals_single <- function(f_dt_test, model, id_var, obj_vars, pred_len){
157174
cycles <- f_dt_test[, unique(get(id_var))]
158175
reps <- f_dt_test[, ceiling(dim(.SD)[1] / pred_len), by=id_var]$V1
159-
res_mae <- vector(mode = "numeric", length=sum(reps))
160-
for(i in cycles){
176+
res_matrix <- matrix(nrow = sum(reps), ncol = 2)
177+
global_rep <- 1
178+
179+
for(i in 1:length(cycles)){
161180
ini <- 1
162-
# TODO
181+
din_pred_len <- pred_len
182+
for(j in 1:reps[i]){
183+
if(ini + din_pred_len > dim(f_dt_test[get(id_var) == cycles[i], !eval(id_var), with=F])[1]) # Last iteration of each cycle is probably smaller
184+
din_pred_len <- dim(f_dt_test[get(id_var) == cycles[i], !eval(id_var), with=F])[1] - ini + 1
185+
span <- Sys.time()
186+
res_cycle <- suppressWarnings(dbnR::forecast_ts(f_dt_test[get(id_var) == cycles[i], !eval(id_var), with=F],
187+
model_fit, size = size, obj_vars = obj_vars,
188+
ini = ini, len = din_pred_len, prov_ev = ev_vars,
189+
print_res = F, plot_res = F))
190+
res_matrix[global_rep, 2] <- span - Sys.time()
191+
res_matrix[global_rep, 1] <- mae(res_cycle$orig[,get(obj_vars)], res_cycle$pred[,get(obj_vars)])
192+
global_rep <- global_rep + 1
193+
ini <- ini + din_pred_len
194+
}
163195
}
196+
197+
return(apply(res_matrix, 2, mean))
164198
}
165199

166-
launch_single_model <- function(f_dt_train, f_dt_test, obj_vars, method, min_ind, max_depth,
200+
launch_single_model <- function(f_dt_train, f_dt_test, id_var, obj_vars, pred_len, method, min_ind, max_depth,
167201
n_it, n_ind, gb_cte, lb_cte, cte, r_probs, v_probs){
168-
cat("Single model training:\n")
169-
tmp <- Sys.time()
202+
res_matrix <- matrix(nrow = 1, ncol = 3)
203+
span <- Sys.time() # Size were? TODO
170204
model_net <- dbnR::learn_dbn_struc(dt_train, size, method = method, f_dt = f_dt_train, n_it = n_it,
171205
n_ind = n_ind, gb_cte = gb_cte, lb_cte = lb_cte, r_probs = r_probs,
172206
v_probs = v_probs, cte = cte)
173207
model_fit <- dbnR::fit_dbn_params(model_net, f_dt_train)
208+
res_matrix[1,3] <- span - Sys.time()
209+
res_matrix[1,1:2] <- forecast_cycle_intervals_single(f_dt_test, model_fit, id_var, obj_vars, pred_len)
174210

175-
cat(paste0("Elapsed time: ", tmp - Sys.time()))
176-
177-
print("Forecasting time for single net: ")
178-
res_net <- suppressWarnings(dbnR::forecast_ts(f_dt_test, model_fit, size = size,
179-
obj_vars = obj_vars, ini = ini, len = len, prov_ev = ev_vars))
180-
181-
cat("\n---------------------------------------\n\n")
211+
return(res_matrix)
182212
}
183213

184-
launch_hybrid_model <- function(){
214+
launch_hybrid_model <- function(f_dt_train, f_dt_test, id_var, obj_vars, mv, homogen, pred_len, method, min_ind, max_depth,
215+
n_it, n_ind, gb_cte, lb_cte, r_probs, v_probs, prune_val){
216+
res_matrix <- matrix(nrow = 1, ncol = 3)
217+
span <- Sys.time()
218+
model <- mtDBN::mtDBN$new()
219+
model$fit_model(dt_train, size, method = method, obj_var = obj_vars, mv = mv, homogen = homogen,
220+
min_ind = min_ind, max_depth = max_depth, f_dt = f_dt_train, n_it = n_it, n_ind = n_ind, gb_cte = gb_cte,
221+
lb_cte = lb_cte, cte = cte, r_probs = r_probs, v_probs = v_probs, prune_val = prune_val)
222+
res_matrix[1,3] <- span - Sys.time()
223+
res_matrix[1,1:2] <- forecast_cycle_intervals_single(f_dt_test, model, id_var, obj_vars, pred_len)
185224

225+
return(res_matrix)
186226
}
187227

188228
train_test_iteration <- function(dt, id_var, test_id, obj_vars,
189229
method = "psoho", min_ind = 300, max_depth = 8, n_it = 100,
190230
n_ind = 100, gb_cte = 0.3, lb_cte = 0.7, cte = F,
191-
r_probs = c(-0.5, 1.5), v_probs = c(10,65,25), prune_val = 0.015){
231+
r_probs = c(-0.5, 1.5), v_probs = c(10,65,25), prune_val = 0.015, pred_len = 20){
192232

193-
res_mae <- vector(mode = "numeric", length = 5)
233+
res_matrix <- matrix(nrow = 5, ncol = 3)
234+
colnames(res_matrix) <- c("MAE", "exec_time", "train_time")
194235
pred_vars <- names(dt_train)[!(names(dt_train) %in% obj_vars)]
195236
dt_train <- dt[!(profile_id %in% test_id)]
196237
dt_test <- dt[profile_id %in% test_id]
197238

198239
f_dt_train <- dbnR::filtered_fold_dt(dt_train, size, id_var)
199240
f_dt_test <- dbnR::filtered_fold_dt(dt_test, size, id_var, clear_id_var = F)
200-
dt_train[, (id_var) := NULL]
201-
#dt_test[, (id_var) := NULL]
202241

203-
res_mae[1] <- launch_single_model()
204-
res_mae[2] <- launch_hybrid_model()
205-
res_mae[3] <- launch_hybrid_model()
206-
res_mae[4] <- launch_hybrid_model()
207-
res_mae[5] <- launch_hybrid_model()
242+
res_matrix[1,] <- launch_single_model(f_dt_train, f_dt_test, id_var, obj_vars, pred_len, method, min_ind, max_depth,
243+
n_it, n_ind, gb_cte, lb_cte, cte, r_probs, v_probs)
244+
# res_matrix[2,] <- launch_hybrid_model()
245+
# res_matrix[3,] <- launch_hybrid_model()
246+
# res_matrix[4,] <- launch_hybrid_model()
247+
# res_matrix[5,] <- launch_hybrid_model()
208248

209-
return(res_mae)
249+
return(res_matrix)
210250
}
211251

212-
full_exp_motor_run <- function(dt, id_var, cross_sets, obj_vars, seed = NULL,
252+
253+
254+
full_exp_motor_run <- function(dt, id_var, obj_vars, seed = NULL,
213255
method = "psoho", min_ind = 300, max_depth = 8, n_it = 100,
214256
n_ind = 100, gb_cte = 0.3, lb_cte = 0.7, cte = F,
215-
r_probs = c(-0.5, 1.5), v_probs = c(10,65,25), prune_val = 0.015,
216-
res_file = "full_run_results.txt"){
257+
r_probs = c(-0.5, 1.5), v_probs = c(10,65,25), prune_val = 0.015, pred_len = 20,
258+
fold_len = 3, res_file = "full_run_results.txt"){
217259

218-
219-
res_mae <- matrix(nrow = length(cross_sets), ncol = 5)
260+
res_matrix <- matrix(nrow = 5, ncol = 3, 0) # 5 different models, 3 columns: MAE, exec_time and train_time
220261
set.seed(seed)
262+
cv_sets <- cross_sets(dt[, unique(get(id_var))], fold_len)
221263

222-
initialize_results_file(res_file = "full_run_results.txt", cross_sets, obj_vars, seed,
223-
method, min_ind, max_depth, n_it, n_ind, gb_cte, lb_ct, cte,
264+
initialize_results_file(res_file, cv_sets, obj_vars, seed,
265+
method, min_ind, max_depth, n_it, n_ind, gb_cte, lb_cte, cte,
224266
r_probs, v_probs, prune_val)
225267

226-
for(i in 1:length(cross_sets)){
227-
res_mae[i,] <- train_test_iteration(dt, id_var, cross_sets[[i]], obj_vars, seed, method, min_ind, max_depth,
228-
n_it, n_ind, gb_cte, lb_cte, cte, r_probs, v_probs, prune_val)
229-
268+
for(i in 1:length(cv_sets)){
269+
message(paste0("Currently on the fold number ", i, " out of ", length(cv_sets)))
270+
res_tmp <- train_test_iteration(dt, id_var, cv_sets[[i]], obj_vars, method, min_ind, max_depth,
271+
n_it, n_ind, gb_cte, lb_cte, cte, r_probs, v_probs, prune_val, pred_len)
272+
print_current_results(res_file, res_tmp, i)
273+
res_matrix <- res_matrix + res_tmp
230274
}
231275

276+
res_matrix <- res_matrix / length(cv_sets)
277+
print_current_results(res_matrix, -1)
232278
}
233279

280+
main_prep_and_run <- function(){
281+
dt <- data.table::fread("./dataset/motor_measures_v2.csv") # 0.5 secs between rows
282+
size <- 3
283+
id_var <- "profile_id"
284+
285+
dt[, torque := NULL]
286+
dt <- dbnR::reduce_freq(dt, 30, 0.5, id_var) # 30 secs between rows
287+
obj_vars <- "pm_t_0"
288+
full_exp_motor_run(dt, id_var, obj_vars, seed = 42, n_it = 2)
289+
}

0 commit comments

Comments
 (0)