kjsandbrink / pyglmnet

Python implementation of elastic-net regularized generalized linear models

Home Page:http://glm-tools.github.io/pyglmnet/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

pyglmnet

A python implementation of elastic-net regularized generalized linear models

License Travis Codecov Circle Gitter DOI

[Documentation (stable version)] [Documentation (development version)]

https://user-images.githubusercontent.com/15852194/67919367-70482600-fb76-11e9-9b86-891969bd2bee.jpg

  • Pyglmnet provides a wide range of noise models (and paired canonical link functions): 'gaussian', 'binomial', 'probit', 'gamma', 'poisson', and 'softplus'.
  • It supports a wide range of regularizers: ridge, lasso, elastic net, group lasso, and Tikhonov regularization.
  • We have implemented a cyclical coordinate descent optimizer with Newton update, active sets, update caching, and warm restarts. This optimization approach is identical to the one used in R package.
  • A number of Python wrappers exist for the R glmnet package (e.g. here and here) but in contrast to these, Pyglmnet is a pure python implementation. Therefore, it is easy to modify and introduce additional noise models and regularizers in the future.

Installation

Install the stable PyPI version with pip

$ pip install pyglmnet

For the bleeding edge development version:

Clone the repository.

$ pip install https://api.github.com/repos/glm-tools/pyglmnet/zipball/master

Getting Started

Here is an example on how to use the GLM estimator.

import numpy as np
import scipy.sparse as sps
from pyglmnet import GLM, simulate_glm

n_samples, n_features = 1000, 100
distr = 'poisson'

# sample a sparse model
beta0 = np.random.rand()
beta = np.random.random(n_features)
beta[beta < 0.9] = 0

# simulate data
Xtrain = np.random.normal(0.0, 1.0, [n_samples, n_features])
ytrain = simulate_glm('poisson', beta0, beta, Xtrain)
Xtest = np.random.normal(0.0, 1.0, [n_samples, n_features])
ytest = simulate_glm('poisson', beta0, beta, Xtest)

# create an instance of the GLM class
glm = GLM(distr='poisson', score_metric='deviance')

# fit the model on the training data
glm.fit(Xtrain, ytrain)

# predict using fitted model on the test data
yhat = glm.predict(Xtest)

# score the model on test data
deviance = glm.score(Xtest, ytest)

More pyglmnet examples and use cases.

Tutorial

Here is an extensive tutorial on GLMs, optimization and pseudo-code.

Here are slides from a talk at PyData Chicago 2016, corresponding tutorial notebooks and a video.

How to contribute?

We welcome pull requests. Please see our developer documentation page for more details.

Acknowledgments

License

MIT License Copyright (c) 2016-2019 Pavan Ramkumar

About

Python implementation of elastic-net regularized generalized linear models

http://glm-tools.github.io/pyglmnet/

License:MIT License


Languages

Language:Python 96.5%Language:TeX 2.2%Language:Makefile 1.3%