PyTorch implementation of group elastic net

## Project description

# torch-gel

This package provides PyTorch implementations to solve the group elastic net
problem. Let *A _{j}* (

*j = 1 … p*) be feature matrices of sizes

*m × n*(

_{j}*m*is the number of samples, and

*n*is the number of features in the

_{j}*j*

^{th}group), and let

*y*be an

*m × 1*vector of the responses. Group elastic net finds coefficients

*β*, and a bias

_{j}*β*that solve the optimization problem

_{0}min

_{β0, …, βp}½ ║y - β+_{0}- ∑ A_{j}β_{j}║^{2}m ∑ √n_{j}(λ_{1}║β_{j}║+ λ_{2}║β_{j}║^{2}).

Here *λ _{1}* and

*λ*are scalar coefficients that control the amount of 2-norm and squared 2-norm regularization. This 2-norm regularization encourages sparsity at the group level; entire

_{2}*β*might become 0. The squared 2-norm regularization is in similar spirit to elastic net, and addresses some of the issues of lasso. Note that group elastic net includes as special cases group lasso (

_{j}*λ*), ridge regression (

_{2}= 0*λ*), elastic net (each

_{1}= 0*n*), and lasso (each

_{j}= 1*n*and

_{j}= 1*λ*). The optimization problem is convex, and can be solved efficiently. This package provides two implementations; one based on proximal gradient descent, and one based on coordinate descent.

_{2}= 0## Installation

Install with `pip`

pip install torchgel

`tqdm`

(for progress bars) is pulled in as a dependency. PyTorch (`v1.0+`

) is
also needed, and needs to be installed manually. Refer to the PyTorch
website for instructions.

## Solving Single Instances

The modules `gel.gelfista`

and `gel.gelcd`

provide implementations based on
proximal gradient descent and coordinate descent respectively. Both have similar
interfaces, and expose two main public functions: `make_A`

and `gel_solve`

. The
feature matrices should be stored in a list (say `As`

) as PyTorch tensor
matrices, and the responses should be stored in a PyTorch vector (say `y`

).
Additionally, the sizes of the groups (*n _{j}*) should be stored in a
vector (say

`ns`

). First use the `make_A`

function to convert the feature
matrices into a suitable format:A = make_A(As, ns)

Then pass `A`

, `y`

and other required arguments to `gel_solve`

. The general
interface is::

b_0, B = gel_solve(A, y, l_1, l_2, ns, **kwargs)

`l_1`

and `l_2`

are floats representing *λ _{1}* and

*λ*respectively. The method returns a float

_{2}`b_0`

representing the bias and a
PyTorch matrix `B`

holding the other coefficients. `B`

has size *p ×*max

_{j}

*n*with suitable zero padding. The following sections cover additional details for the specific implementations.

_{j}### Proximal Gradient Descent (FISTA)

The `gel.gelfista`

module contains a proximal gradient descent implementation.
It's usage is just as described in the template above. Refer to the docstring
for `gel.gelfista.gel_solve`

for details about the other arguments.

### Coordinate Descent

The `gel.gelcd`

module contains a coordinate descent implementation. Its usage
is a bit more involved than the FISTA implementation. Coordinate descent
iteratively solves single blocks (each corresponding to a single
*β _{j}*). There are multiple solvers provided to solve the individual
blocks. These are the

`gel.gelcd.block_solve_*`

functions. Refer to their
docstrings for details about their arguments. `gel.gelcd.gel_solve`

requires
passing a block solve function and its arguments (as a dictionary). Refer to
its docstring for further details.## Solution Paths

`gel.gelpaths`

provides a wrapper function `gel_paths`

to solve the group
elastic net problem for multiple values of the regularization coefficients. It
implements a two-stage process. For a given *λ _{1}* and

*λ*, first the group elastic net problem is solved and the feature blocks with non-zero coefficients is extracted (the support). Then ridge regression models are learned for each of several provided regularization values. The final model is summarized using an arbitrary provided summary function, and the summary for each combination of the regularization values is returned as a dictionary. The docstring contains more details.

_{2}`gel.ridgepaths`

contains another useful function,
`ridge_paths`

which can efficiently solve ridge regression for multiple
regularization values.## Citation

If you find this code useful in your research, please cite

```
@misc{koushik2017torchgel,
author = {Koushik, Jayanth},
title = {torch-gel},
year = {2017},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/jayanthkoushik/torch-gel}},
}
```

## Project details

## Release history Release notifications

## Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help | File type | Python version | Upload date |
---|---|---|---|

torchgel-0.22.0-py3-none-any.whl (39.0 kB) Copy SHA256 hash SHA256 | Wheel | py3 | |

torchgel-0.22.0.tar.gz (15.0 kB) Copy SHA256 hash SHA256 | Source | None |