if(require("data.table"))setDTthreads(1L)#for CRAN check.
## simulated binary classification problem.
N.rows <- 60
N.cols <- 2
set.seed(1)
feature.mat <- matrix(rnorm(N.rows*N.cols), N.rows, N.cols)
unknown.score <- feature.mat[,1]*2.1 + rnorm(N.rows)
label.vec <- ifelse(unknown.score > 0, 1, 0)
diffs.dt <- aum::aum_diffs_binary(label.vec)
## Default line search keeps doing iterations until increase in AUM.
(default.time <- system.time({
default.model <- aum::aum_linear_model_cv(feature.mat, diffs.dt)
}))
plot(default.model)
print(default.valid <- default.model[["set.loss"]][set=="validation"])
print(default.model[["search"]][, .(step.size, aum, iterations=q.size)])
## Can specify max number of iterations of line search.
(small.step.time <- system.time({
small.step.model <- aum::aum_linear_model_cv(feature.mat, diffs.dt, maxIterations = N.rows)
}))
plot(small.step.model)
print(small.step.valid <- small.step.model[["set.loss"]][set=="validation"])
small.step.model[["search"]][, .(step.size, aum, iterations=q.size)]
## Compare number of steps, iterations and time. On my machine small
## step model takes more time/steps, but less iterations in the C++
## line search code.
cbind(
iterations=c(
default=default.model[["search"]][, sum(q.size)],
small.step=small.step.model[["search"]][, sum(q.size)]),
seconds=c(
default.time[["elapsed"]],
small.step.time[["elapsed"]]),
steps=c(
default.model[["min.valid.aum"]][["step.number"]],
small.step.model[["min.valid.aum"]][["step.number"]]),
min.valid.aum=c(
default.model[["min.valid.aum"]][["aum_mean"]],
small.step.model[["min.valid.aum"]][["aum_mean"]]))
Run the code above in your browser using DataLab