using Gadfly using DataFrames using Isotonic set_default_plot_size(21cm, 13cm); function logistic_data(n::Int64) X = sort(randn(n)) return X, float64(1.0 / (1.0 + exp(X)) .< rand(n)) end; X, Y = logistic_data(200) plot(x=X, y=Y, Geom.point) function timing(n::Int64, iters::Int64, regression::Function) gc() _, Y = logistic_data(n) weights = ones(n) times = zeros(iters) for i in 1 : iters t_start = time() scratch = copy(Y) regression(scratch, weights) t_end = time() times[i] = t_end - t_start end return mean(times) end; xs = logspace(2, 7, 10) run(algorithm, fn) = DataFrame(X=xs, Y=map(x -> timing(int64(x), 1, fn), xs), algorithm=algorithm) df = [ run("Active Set", active_set_isotonic_regression), run("Linear PAVA", isotonic_regression), run("Pooled PAVA", pooled_pava_isotonic_regression)]; plot(df, x="X", y="Y", color="algorithm", Geom.line, Geom.point, Scale.x_log10, Scale.y_log10)