|
|
@@ -12,6 +12,10 @@ args <- parse.args(defaults = list( |
|
|
|
# Simulation configuration |
|
|
|
reps = 10L, # Number of replications |
|
|
|
dataset = '6', # Name (number) of the data set |
|
|
|
# Sets if reference methods shall be evaluated |
|
|
|
run_mave = TRUE, |
|
|
|
run_cve = TRUE, |
|
|
|
run_nn = TRUE, |
|
|
|
# Neuronal Net. structure/definitions |
|
|
|
hidden_units = 512L, |
|
|
|
activation = 'relu', |
|
|
@@ -34,7 +38,7 @@ ds <- dataset(args$dataset, n = 100L, p = args$p) # Generates a list with `X`, ` |
|
|
|
## Build Dimension Reduction Neuronal Network model (matching the data) |
|
|
|
nn <- nnsdr$new( |
|
|
|
input_shapes = list(x = ncol(ds$X)), |
|
|
|
d = ncol(ds$B), |
|
|
|
d = ncol(ds$B), # depends on the dataset type |
|
|
|
hidden_units = args$hidden_units, |
|
|
|
activation = args$activation, |
|
|
|
trainable_reduction = args$trainable_reduction |
|
|
@@ -53,51 +57,57 @@ for (rep in seq_len(args$reps)) { |
|
|
|
## Sample test dataset |
|
|
|
ds.test <- dataset(ds$name, n = 1000L, p = args$p) |
|
|
|
|
|
|
|
## First the reference method `MAVE` |
|
|
|
# To be fair for measuring the time, set `max.dim` to true reduction dimension |
|
|
|
# and with `screen = ncol(X)` screening is turned "off". |
|
|
|
time <- system.time(dr <- mave.compute(X, Y, max.dim = ncol(B), |
|
|
|
method = "meanMAVE", screen = ncol(X))) |
|
|
|
d.sub <- dist.subspace(B, coef(dr, ncol(B)), normalize = TRUE) |
|
|
|
d.gra <- dist.grassmann(B, coef(dr, ncol(B))) |
|
|
|
mse <- mean((predict(dr, ds.test$X, dim = ncol(B)) - ds.test$Y)^2) |
|
|
|
cat('"mave",', rep, ',', d.sub, ',', d.gra, ',', mse, ',', |
|
|
|
time['user.self'], ',', time['sys.self'], ',', time['elapsed'], '\n', |
|
|
|
sep = '', file = log, append = TRUE) |
|
|
|
## and the `OPG` method |
|
|
|
time <- system.time(dr <- mave.compute(X, Y, max.dim = ncol(B), |
|
|
|
method = "meanOPG", screen = ncol(X))) |
|
|
|
d.sub <- dist.subspace(B, coef(dr, ncol(B)), normalize = TRUE) |
|
|
|
d.gra <- dist.grassmann(B, coef(dr, ncol(B))) |
|
|
|
mse <- mean((predict(dr, ds.test$X, dim = ncol(B)) - ds.test$Y)^2) |
|
|
|
cat('"opg",', rep, ',', d.sub, ',', d.gra, ',', mse, ',', |
|
|
|
time['user.self'], ',', time['sys.self'], ',', time['elapsed'], '\n', |
|
|
|
sep = '', file = log, append = TRUE) |
|
|
|
if (args$run_mave) { |
|
|
|
## First the reference method `MAVE` |
|
|
|
# To be fair for measuring the time, set `max.dim` to true reduction |
|
|
|
# dimension and with `screen = ncol(X)` screening is turned "off". |
|
|
|
time <- system.time(dr <- mave.compute(X, Y, max.dim = ncol(B), |
|
|
|
method = "meanMAVE", screen = ncol(X))) |
|
|
|
d.sub <- dist.subspace(B, coef(dr, ncol(B)), normalize = TRUE) |
|
|
|
d.gra <- dist.grassmann(B, coef(dr, ncol(B))) |
|
|
|
mse <- mean((predict(dr, ds.test$X, dim = ncol(B)) - ds.test$Y)^2) |
|
|
|
cat('"mave",', rep, ',', d.sub, ',', d.gra, ',', mse, ',', |
|
|
|
time['user.self'], ',', time['sys.self'], ',', time['elapsed'], |
|
|
|
'\n', sep = '', file = log, append = TRUE) |
|
|
|
## and the `OPG` method |
|
|
|
time <- system.time(dr <- mave.compute(X, Y, max.dim = ncol(B), |
|
|
|
method = "meanOPG", screen = ncol(X))) |
|
|
|
d.sub <- dist.subspace(B, coef(dr, ncol(B)), normalize = TRUE) |
|
|
|
d.gra <- dist.grassmann(B, coef(dr, ncol(B))) |
|
|
|
mse <- mean((predict(dr, ds.test$X, dim = ncol(B)) - ds.test$Y)^2) |
|
|
|
cat('"opg",', rep, ',', d.sub, ',', d.gra, ',', mse, ',', |
|
|
|
time['user.self'], ',', time['sys.self'], ',', time['elapsed'], |
|
|
|
'\n', sep = '', file = log, append = TRUE) |
|
|
|
} |
|
|
|
|
|
|
|
## Next the CVE method |
|
|
|
time <- system.time(dr <- cve.call(X, Y, k = ncol(B))) |
|
|
|
d.sub <- dist.subspace(B, coef(dr, ncol(B)), normalize = TRUE) |
|
|
|
d.gra <- dist.grassmann(B, coef(dr, ncol(B))) |
|
|
|
mse <- mean((predict(dr, ds.test$X, k = ncol(B)) - ds.test$Y)^2) |
|
|
|
cat('"cve",', rep, ',', d.sub, ',', d.gra, ',', mse, ',', |
|
|
|
time['user.self'], ',', time['sys.self'], ',', time['elapsed'], '\n', |
|
|
|
sep = '', file = log, append = TRUE) |
|
|
|
if (args$run_cve) { |
|
|
|
## Next the CVE method |
|
|
|
time <- system.time(dr <- cve.call(X, Y, k = ncol(B))) |
|
|
|
d.sub <- dist.subspace(B, coef(dr, ncol(B)), normalize = TRUE) |
|
|
|
d.gra <- dist.grassmann(B, coef(dr, ncol(B))) |
|
|
|
mse <- mean((predict(dr, ds.test$X, k = ncol(B)) - ds.test$Y)^2) |
|
|
|
cat('"cve",', rep, ',', d.sub, ',', d.gra, ',', mse, ',', |
|
|
|
time['user.self'], ',', time['sys.self'], ',', time['elapsed'], |
|
|
|
'\n', sep = '', file = log, append = TRUE) |
|
|
|
} |
|
|
|
|
|
|
|
## Fit `DR` Neuronal Network model |
|
|
|
time <- system.time(nn$fit(X, Y, epochs = args$epochs, |
|
|
|
batch_size = args$batch_size, initializer = args$initializer)) |
|
|
|
# OPG estimate |
|
|
|
d.sub <- dist.subspace(B, coef(nn, 'OPG'), normalize = TRUE) |
|
|
|
d.gra <- dist.grassmann(B, coef(nn, 'OPG')) |
|
|
|
cat('"nn.opg",', rep, ',', d.sub, ',', d.gra, ',NA,NA,NA,NA\n', |
|
|
|
sep = '', file = log, append = TRUE) |
|
|
|
# Refinement estimate |
|
|
|
d.sub <- dist.subspace(B, coef(nn), normalize = TRUE) |
|
|
|
d.gra <- dist.grassmann(B, coef(nn)) |
|
|
|
mse <- mean((nn$predict(ds.test$X) - ds.test$Y)^2) |
|
|
|
cat('"nn.ref",', rep, ',', d.sub, ',', d.gra, ',', mse, ',', |
|
|
|
time['user.self'], ',', time['sys.self'], ',', time['elapsed'], '\n', |
|
|
|
sep = '', file = log, append = TRUE) |
|
|
|
if (args$run_nn) { |
|
|
|
## Fit `DR` Neuronal Network model |
|
|
|
time <- system.time(nn$fit(X, Y, epochs = args$epochs, |
|
|
|
batch_size = args$batch_size, initializer = args$initializer)) |
|
|
|
# OPG estimate |
|
|
|
d.sub <- dist.subspace(B, coef(nn, 'OPG'), normalize = TRUE) |
|
|
|
d.gra <- dist.grassmann(B, coef(nn, 'OPG')) |
|
|
|
cat('"nn.opg",', rep, ',', d.sub, ',', d.gra, ',NA,NA,NA,NA\n', |
|
|
|
sep = '', file = log, append = TRUE) |
|
|
|
# Refinement estimate |
|
|
|
d.sub <- dist.subspace(B, coef(nn), normalize = TRUE) |
|
|
|
d.gra <- dist.grassmann(B, coef(nn)) |
|
|
|
mse <- mean((nn$predict(ds.test$X) - ds.test$Y)^2) |
|
|
|
cat('"nn.ref",', rep, ',', d.sub, ',', d.gra, ',', mse, ',', |
|
|
|
time['user.self'], ',', time['sys.self'], ',', time['elapsed'], |
|
|
|
'\n', sep = '', file = log, append = TRUE) |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
## Invoke the garbage collector |