Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merging some old code before switching from master to main #132

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
4 changes: 2 additions & 2 deletions examples/plot_compare_optimizers.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from celer import LogisticRegression
from libsvmdata.datasets import fetch_libsvm

from sparse_ho import ImplicitForward
from sparse_ho import Implicit
from sparse_ho.ho import grad_search
from sparse_ho.utils import Monitor
from sparse_ho.models import SparseLogreg
Expand Down Expand Up @@ -97,7 +97,7 @@
criterion = HeldOutLogistic(idx_train, idx_val)

monitor_grad = Monitor()
algo = ImplicitForward(tol_jac=tol, n_iter_jac=1000)
algo = Implicit()

optimizer = optimizers[optimizer_name]
grad_search(
Expand Down
4 changes: 2 additions & 2 deletions examples/plot_held_out_enet.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from celer.datasets import make_correlated_data
from sklearn.metrics import mean_squared_error

from sparse_ho import ImplicitForward
from sparse_ho import Implicit
from sparse_ho.criterion import HeldOutMSE
from sparse_ho.models import ElasticNet
from sparse_ho.ho import grad_search
Expand Down Expand Up @@ -98,7 +98,7 @@
alpha0 = np.array([alpha_max * 0.9, alpha_max * 0.9])
model = ElasticNet(estimator=estimator)
criterion = HeldOutMSE(idx_train, idx_val)
algo = ImplicitForward(tol_jac=1e-3, n_iter_jac=100, max_iter=max_iter)
algo = Implicit(max_iter=max_iter)
optimizer = GradientDescent(
n_outer=n_outer, tol=tol, p_grad_norm=1.5, verbose=True)
grad_search(
Expand Down
4 changes: 2 additions & 2 deletions examples/plot_held_out_lasso.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

from sparse_ho.models import Lasso
from sparse_ho.criterion import HeldOutMSE
from sparse_ho import ImplicitForward
from sparse_ho import Implicit
from sparse_ho.utils import Monitor
from sparse_ho.utils_plot import discrete_cmap
from sparse_ho.ho import grad_search
Expand Down Expand Up @@ -87,7 +87,7 @@
t0 = time.time()
model = Lasso(estimator=estimator)
criterion = HeldOutMSE(idx_train, idx_val)
algo = ImplicitForward()
algo = Implicit()
monitor_grad = Monitor()
optimizer = LineSearch(n_outer=10, tol=tol)
grad_search(
Expand Down
4 changes: 2 additions & 2 deletions examples/plot_lassoCV.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
from sklearn.linear_model import LassoCV
from sklearn.model_selection import KFold

from sparse_ho import ImplicitForward, grad_search
from sparse_ho import Implicit, grad_search
from sparse_ho.models import Lasso
from sparse_ho.criterion import HeldOutMSE, CrossVal
from sparse_ho.optimizers import GradientDescent
Expand Down Expand Up @@ -83,7 +83,7 @@
alpha0 = 0.9 * alpha_max
monitor_grad = Monitor()
cross_val_criterion = CrossVal(criterion, cv=kf)
algo = ImplicitForward()
algo = Implicit()
optimizer = GradientDescent(n_outer=10, tol=tol)
grad_search(
algo, cross_val_criterion, model, optimizer, X, y, alpha0,
Expand Down
4 changes: 2 additions & 2 deletions examples/plot_sparse_log_reg.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
from sparse_ho.utils import Monitor
from sparse_ho.models import SparseLogreg
from sparse_ho.criterion import HeldOutLogistic
from sparse_ho import ImplicitForward
from sparse_ho import Implicit
from sparse_ho.grid_search import grid_search
from sparse_ho.optimizers import GradientDescent
from sparse_ho.utils_plot import discrete_cmap
Expand Down Expand Up @@ -101,7 +101,7 @@
criterion = HeldOutLogistic(idx_train, idx_val)

monitor_grad = Monitor()
algo = ImplicitForward(tol_jac=tol, n_iter_jac=1000)
algo = Implicit()

optimizer = GradientDescent(n_outer=10, tol=tol)
grad_search(
Expand Down
4 changes: 2 additions & 2 deletions examples/plot_use_callback.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

from sparse_ho.models import Lasso
from sparse_ho.criterion import HeldOutMSE
from sparse_ho import ImplicitForward
from sparse_ho import Implicit
from sparse_ho.utils import Monitor
from sparse_ho.ho import grad_search
from sparse_ho.optimizers import LineSearch
Expand Down Expand Up @@ -70,7 +70,7 @@ def callback(val, grad, mask, dense, alpha):
# ---------------------------------------
model = Lasso(estimator=estimator)
criterion = HeldOutMSE(idx_train, idx_val)
algo = ImplicitForward()
algo = Implicit()
# use Monitor(callback) with your custom callback
monitor = Monitor(callback=callback)
optimizer = LineSearch(n_outer=30)
Expand Down
4 changes: 2 additions & 2 deletions examples/plot_wlasso.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

from sparse_ho.models import WeightedLasso
from sparse_ho.criterion import HeldOutMSE, CrossVal
from sparse_ho import ImplicitForward
from sparse_ho import Implicit
from sparse_ho.utils import Monitor
from sparse_ho.ho import grad_search
from sparse_ho.optimizers import GradientDescent
Expand Down Expand Up @@ -79,7 +79,7 @@
model = WeightedLasso(estimator=estimator)
sub_criterion = HeldOutMSE(idx_train, idx_val)
criterion = CrossVal(sub_criterion, cv=cv)
algo = ImplicitForward()
algo = Implicit()
monitor = Monitor()
optimizer = GradientDescent(
n_outer=100, tol=1e-7, verbose=True, p_grad_norm=1.9)
Expand Down
4 changes: 2 additions & 2 deletions expes/expe_cvxpy/figure_cvxpy.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@

current_palette = sns.color_palette("colorblind")
dict_method = {}
dict_method["forward"] = 'PCD Forward Iterdiff'
dict_method["backward"] = 'PCD Backward Iterdiff'
dict_method["forward"] = 'Forward-mode PCD'
dict_method["backward"] = 'Reverse-mode PCD'
dict_method['cvxpy'] = 'Cvxpylayers'

dict_div_alphas = {}
Expand Down
92 changes: 40 additions & 52 deletions expes/expe_enet/figure_enet_pred.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
discrete_color, dict_color, dict_color_2Dplot, dict_markers,
dict_method, dict_title, configure_plt)

# save_fig = False
save_fig = True
save_fig = False
# save_fig = True
# fig_dir = "./"
# fig_dir_svg = "./"
fig_dir = "../../../CD_SUGAR/tex/journal/prebuiltimages/"
Expand All @@ -28,14 +28,17 @@
dict_marker_size["forward"] = 4
dict_marker_size["implicit_forward"] = 10
dict_marker_size["implicit_forward_approx"] = 10
dict_marker_size["implicit"] = 10
dict_marker_size["implicit_approx"] = 10
dict_marker_size["fast_iterdiff"] = 4
dict_marker_size['implicit'] = 4
dict_marker_size['grid_search'] = 5
dict_marker_size['bayesian'] = 10
dict_marker_size['random'] = 5
dict_marker_size['lhs'] = 4

dict_s = {}
dict_s["implicit"] = 50
dict_s["implicit_approx"] = 70
dict_s["implicit_forward"] = 50
dict_s["implicit_forward_approx"] = 70
dict_s['grid_search'] = 40
Expand Down Expand Up @@ -69,6 +72,7 @@

markersize = 8

# dataset_names = ["rcv1_train", "real-sim", "real-sim"]
dataset_names = ["rcv1_train", "real-sim", "news20"]


Expand All @@ -83,33 +87,36 @@
3, len(dataset_names), sharex=False, sharey=False, figsize=[11, 10],
)

dict_idx = {}
dict_idx['grid_search'] = 0
dict_idx['bayesian'] = 1
dict_idx['implicit_forward_approx'] = 2
dict_idx['implicit_approx'] = 2

model_name = "enet"
methods = [
# "implicit", "implicit_approx", 'grid_search',
"implicit", 'grid_search',
'random', 'bayesian', "implicit_approx"]

for idx, dataset in enumerate(dataset_names):
df_data = pd.read_pickle("results/%s_%s.pkl" % (model_name, dataset))
df_data = df_data[df_data['tolerance_decrease'] == 'constant']
for method in methods:
df_data = pd.read_pickle(
"results/%s_%s_%s.pkl" % (model_name, dataset, method))

methods = df_data['method']
times = df_data['times']
objs = df_data['objs']
all_alphas = df_data['alphas']
alpha_max = df_data['alpha_max'].to_numpy()[0]
tols = df_data['tolerance_decrease']
time = df_data['times'].to_numpy()[0]
obj = np.array(df_data['objs'].to_numpy()[0])
alphas = np.array(df_data['alphas'].to_numpy()[0])
alpha_max = df_data['alpha_max'].to_numpy()[0]

min_objs = np.infty
for obj in objs:
min_objs = min(min_objs, obj.min())
lines = []

lines = []
axarr_test.flat[idx].set_xlim(0, dict_xmax[model_name, dataset])
axarr_test.flat[idx].set_xlabel("Time (s)", fontsize=fontsize)

axarr_test.flat[idx].set_xlim(0, dict_xmax[model_name, dataset])
axarr_test.flat[idx].set_xlabel("Time (s)", fontsize=fontsize)

E0 = df_data.objs.to_numpy()[2][0]
for _, (time, obj, alphas, method, _) in enumerate(
zip(times, objs, all_alphas, methods, tols)):
E0 = 1
if method == 'grid_search':
min_objs = obj.min()
alpha1D = np.unique(alphas)
alpha1D.sort()
alpha1D = np.log(np.flip(alpha1D) / alpha_max)
Expand All @@ -124,54 +131,35 @@
X, Y, (results.T - min_objs) / min_objs, levels=levels,
cmap=cmap, linewidths=0.5)

for _, (time, obj, alphas, method, _) in enumerate(
zip(times, objs, all_alphas, methods, tols)):
marker = dict_markers[method]
n_outer = len(obj)
s = dict_s[method]
color = discrete_color(n_outer, dict_color_2Dplot[method])
if method == 'grid_search':
i = 0
axarr_grad[i, idx].scatter(
np.log(alphas[:, 0] / alpha_max),
np.log(alphas[:, 1] / alpha_max),
s=s, color=color,
marker=dict_markers[method], label="todo", clip_on=False)
elif method == 'bayesian':
i = 1
axarr_grad[i, idx].scatter(
np.log(alphas[:, 0] / alpha_max),
np.log(alphas[:, 1] / alpha_max),
s=s, color=color,
marker=dict_markers[method], label="todo", clip_on=False)
elif method == 'implicit_forward_approx':
i = 2
axarr_grad[i, idx].scatter(

if method in dict_idx:
axarr_grad[dict_idx[method], idx].scatter(
np.log(alphas[:, 0] / alpha_max),
np.log(alphas[:, 1] / alpha_max),
s=s, color=color,
marker=dict_markers[method], label="todo", clip_on=False)
else:
pass
axarr_grad[i, 0].set_ylabel(
"%s \n" % dict_method[method] + r"$\lambda_2 - \lambda_{\max}$",
fontsize=fontsize)

for i in range(3):
axarr_grad[i, idx].set_xlim((alpha1D.min(), alpha1D.max()))
axarr_grad[i, idx].set_ylim((alpha1D.min(), alpha1D.max()))
axarr_grad[dict_idx[method], 0].set_ylabel(
"%s \n" % dict_method[method] + r"$\lambda_2 - \lambda_{\max}$",
fontsize=fontsize)

for _, (time, obj, method, _) in enumerate(
zip(times, objs, methods, tols)):
marker = dict_markers[method]
markersize = dict_marker_size[method]
obj = [np.min(obj[:k]) for k in np.arange(len(obj)) + 1]
obj = np.array([np.min(obj[:k]) for k in np.arange(len(obj)) + 1])
lines.append(
axarr_val.flat[idx].plot(
time, obj / E0,
color=dict_color[method], label="%s" % (dict_method[method]),
marker=marker, markersize=markersize,
markevery=dict_markevery[dataset]))

for i in range(3):
axarr_grad[i, idx].set_xlim((alpha1D.min(), alpha1D.max()))
axarr_grad[i, idx].set_ylim((alpha1D.min(), alpha1D.max()))

axarr_val.flat[idx].set_xlim(0, dict_xmax[model_name, dataset])
axarr_val.flat[idx].set_xlabel("Time (s)", fontsize=fontsize)

Expand Down
Loading