-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
102 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
Warm-Starting with ReHLine | ||
========================== | ||
|
||
This tutorial explains how to use warm-starting with ReHLine, a Python library for regression with hinge loss, to enhance the efficiency of solving similar optimization problems. | ||
|
||
Introduction | ||
------------ | ||
|
||
Warm-starting is a technique used to accelerate the convergence of optimization algorithms by initializing them with a solution from a previous run. This is particularly beneficial when you have a sequence of related problems to solve. | ||
|
||
Setup | ||
----- | ||
|
||
Before you begin, ensure you have the necessary packages installed. You need the `rehline` library, which is used for regression with hinge loss, and `numpy` for numerical operations. Install these packages using pip if you haven't already: | ||
|
||
.. code-block:: bash | ||
pip install rehline numpy | ||
Simulating the Dataset | ||
---------------------- | ||
|
||
We first create a random dataset for classification: | ||
|
||
.. code-block:: python | ||
import numpy as np | ||
n, d, C = 1000, 3, 0.5 | ||
X = np.random.randn(n, d) | ||
beta0 = np.random.randn(d) | ||
y = np.sign(X.dot(beta0) + np.random.randn(n)) | ||
- **n** is the number of samples. | ||
- **d** is the number of features. | ||
- **C** is a regularization parameter. | ||
- **X** is the feature matrix. | ||
- **y** is the target vector, generated as a sign function of a linear combination of features plus some noise. | ||
|
||
Using ReHLine Solver | ||
-------------------- | ||
|
||
The `ReHLine_solver` is tested first with a cold start and then with a warm start: | ||
|
||
.. code-block:: python | ||
from rehline._base import ReHLine_solver | ||
U = -(C*y).reshape(1,-1) | ||
V = (C*np.array(np.ones(n))).reshape(1,-1) | ||
res = ReHLine_solver(X, U, V) # Cold start | ||
res_ws = ReHLine_solver(X, U, V, Lambda=res.Lambda) # Warm start | ||
- **Cold Start**: The solver starts from scratch without any prior information. | ||
- **Warm Start**: The solver uses the solution from the cold start (`res.Lambda`) as the initial point for the next run. | ||
|
||
Using ReHLine Class | ||
------------------- | ||
|
||
The `ReHLine` class is used to fit a model: | ||
|
||
.. code-block:: python | ||
from rehline import ReHLine | ||
clf = ReHLine(verbose=1) | ||
clf.C = C | ||
clf.U = -y.reshape(1,-1) | ||
clf.V = np.array(np.ones(n)).reshape(1,-1) | ||
clf.fit(X) # Cold start | ||
clf.C = 2*C | ||
clf.warm_start = 1 | ||
clf.fit(X) # Warm start | ||
- **Cold Start**: The class is fitted with the initial data. | ||
- **Warm Start**: The class is fitted again with a different regularization parameter (`2*C`), using the previous solution as a starting point. | ||
|
||
Using plqERM_Ridge | ||
------------------ | ||
|
||
Finally, the `plqERM_Ridge` class is tested similarly: | ||
|
||
.. code-block:: python | ||
from rehline import plqERM_Ridge | ||
clf = plqERM_Ridge(loss={'name': 'svm'}, C=C, verbose=1) | ||
clf.fit(X=X, y=y) # Cold start | ||
clf.C = 2*C | ||
clf.warm_start = 1 | ||
clf.fit(X=X, y=y) # Warm start | ||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters