pygam


Namepygam JSON
Version 0.9.1 PyPI version JSON
download
home_page
Summary
upload_time2024-02-13 11:26:09
maintainer
docs_urlNone
authorDaniel Servén Marín
requires_python>=3.8.1,<3.13
licenseApache-2.0
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ![build](https://github.com/dswah/pyGAM/actions/workflows/ci.yml/badge.svg)
[![Documentation Status](https://readthedocs.org/projects/pygam/badge/?version=latest)](https://pygam.readthedocs.io/en/latest/?badge=latest)
[![PyPI version](https://badge.fury.io/py/pygam.svg)](https://badge.fury.io/py/pygam)
[![codecov](https://codecov.io/gh/dswah/pygam/branch/master/graph/badge.svg)](https://codecov.io/gh/dswah/pygam)
[![python38](https://img.shields.io/badge/python-3.8-blue.svg)](https://badge.fury.io/py/pygam)
[![python39](https://img.shields.io/badge/python-3.9-blue.svg)](https://badge.fury.io/py/pygam)
[![python310](https://img.shields.io/badge/python-3.10-blue.svg)](https://badge.fury.io/py/pygam)
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.1208723.svg)](https://doi.org/10.5281/zenodo.1208723)


# pyGAM
Generalized Additive Models in Python.

<img src=imgs/pygam_tensor.png>

## Documentation
- [Official pyGAM Documentation: Read the Docs](https://pygam.readthedocs.io/en/latest/?badge=latest)  
- [Building interpretable models with Generalized additive models in Python](https://medium.com/just-another-data-scientist/building-interpretable-models-with-generalized-additive-models-in-python-c4404eaf5515)  
<!-----
[pyGAM: Getting started with Generalized Additive Models in Python](https://medium.com/@jpoberhauser/pygam-getting-started-with-generalized-additive-models-in-python-457df5b4705f)
----->

## Installation
```pip install pygam```

### scikit-sparse
To speed up optimization on large models with constraints, it helps to have `scikit-sparse` installed because it contains a slightly faster, sparse version of Cholesky factorization. The import from `scikit-sparse` references `nose`, so you'll need that too.

The easiest way is to use Conda:  
```conda install -c conda-forge scikit-sparse nose```

[scikit-sparse docs](http://pythonhosted.org/scikit-sparse/overview.html#download)

## Contributing - HELP REQUESTED
Contributions are most welcome!

You can help pyGAM in many ways including:

- Working on a [known bug](https://github.com/dswah/pyGAM/labels/bug).
- Trying it out and reporting bugs or what was difficult.
- Helping improve the documentation.
- Writing new [distributions](https://github.com/dswah/pyGAM/blob/master/pygam/distributions.py), and [link functions](https://github.com/dswah/pyGAM/blob/master/pygam/links.py).
- If you need some ideas, please take a look at the [issues](https://github.com/dswah/pyGAM/issues).


To start:
- **fork the project** and cut a new branch
- Now **install** the testing **dependencies**

```
conda install cython
pip install --upgrade pip
pip install poetry
poetry install --with dev
```

Make some changes and write a test...
- **Test** your contribution (eg from the `.../pyGAM`):
```py.test -s```
- When you are happy with your changes, make a **pull request** into the `master` branch of the main project.


## About
Generalized Additive Models (GAMs) are smooth semi-parametric models of the form:

![alt tag](http://latex.codecogs.com/svg.latex?g\(\mathbb{E}\[y|X\]\)=\beta_0+f_1(X_1)+f_2(X_2)+\dots+f_p(X_p))

where `X.T = [X_1, X_2, ..., X_p]` are independent variables, `y` is the dependent variable, and `g()` is the link function that relates our predictor variables to the expected value of the dependent variable.

The feature functions `f_i()` are built using **penalized B splines**, which allow us to **automatically model non-linear relationships** without having to manually try out many different transformations on each variable.

<img src=imgs/pygam_basis.png>

GAMs extend generalized linear models by allowing non-linear functions of features while maintaining additivity. Since the model is additive, it is easy to examine the effect of each `X_i` on `Y` individually while holding all other predictors constant.

The result is a very flexible model, where it is easy to incorporate prior knowledge and control overfitting.

## Citing pyGAM
Please consider citing pyGAM if it has helped you in your research or work:

Daniel Servén, & Charlie Brummitt. (2018, March 27). pyGAM: Generalized Additive Models in Python. Zenodo. [DOI: 10.5281/zenodo.1208723](http://doi.org/10.5281/zenodo.1208723)

BibTex:
```
@misc{daniel\_serven\_2018_1208723,
  author       = {Daniel Servén and
                  Charlie Brummitt},
  title        = {pyGAM: Generalized Additive Models in Python},
  month        = mar,
  year         = 2018,
  doi          = {10.5281/zenodo.1208723},
  url          = {https://doi.org/10.5281/zenodo.1208723}
}
```

## References
1. Simon N. Wood, 2006  
Generalized Additive Models: an introduction with R

0. Hastie, Tibshirani, Friedman  
The Elements of Statistical Learning  
http://statweb.stanford.edu/~tibs/ElemStatLearn/printings/ESLII_print10.pdf  

0. James, Witten, Hastie and Tibshirani  
An Introduction to Statistical Learning  
http://www-bcf.usc.edu/~gareth/ISL/ISLR%20Sixth%20Printing.pdf  

0. Paul Eilers & Brian Marx, 1996
Flexible Smoothing with B-splines and Penalties
http://www.stat.washington.edu/courses/stat527/s13/readings/EilersMarx_StatSci_1996.pdf

0. Kim Larsen, 2015  
GAM: The Predictive Modeling Silver Bullet  
http://multithreaded.stitchfix.com/assets/files/gam.pdf  

0. Deva Ramanan, 2008  
UCI Machine Learning: Notes on IRLS  
http://www.ics.uci.edu/~dramanan/teaching/ics273a_winter08/homework/irls_notes.pdf  

0. Paul Eilers & Brian Marx, 2015  
International Biometric Society: A Crash Course on P-splines  
http://www.ibschannel2015.nl/project/userfiles/Crash_course_handout.pdf

0. Keiding, Niels, 1991  
Age-specific incidence and prevalence: a statistical perspective


<!---http://www.cs.princeton.edu/courses/archive/fall11/cos323/notes/cos323_f11_lecture09_svd.pdf--->

<!---http://www.stats.uwo.ca/faculty/braun/ss3859/notes/Chapter4/ch4.pdf--->

<!---http://www.stat.berkeley.edu/~census/mlesan.pdf--->

<!---http://web.mit.edu/hyperbook/Patrikalakis-Maekawa-Cho/node17.html---> <!--- this helped me get spline gradients--->

<!---https://scikit-sparse.readthedocs.io/en/latest/overview.html#developers--->

<!---https://vincentarelbundock.github.io/Rdatasets/datasets.html---> <!--- R Datasets!--->


            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "pygam",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8.1,<3.13",
    "maintainer_email": "",
    "keywords": "",
    "author": "Daniel Serv\u00e9n Mar\u00edn",
    "author_email": "",
    "download_url": "https://files.pythonhosted.org/packages/e3/6f/19690723b3c68b81ddbe8badc2c68743c2827a019e87118d576e9b149635/pygam-0.9.1.tar.gz",
    "platform": null,
    "description": "![build](https://github.com/dswah/pyGAM/actions/workflows/ci.yml/badge.svg)\n[![Documentation Status](https://readthedocs.org/projects/pygam/badge/?version=latest)](https://pygam.readthedocs.io/en/latest/?badge=latest)\n[![PyPI version](https://badge.fury.io/py/pygam.svg)](https://badge.fury.io/py/pygam)\n[![codecov](https://codecov.io/gh/dswah/pygam/branch/master/graph/badge.svg)](https://codecov.io/gh/dswah/pygam)\n[![python38](https://img.shields.io/badge/python-3.8-blue.svg)](https://badge.fury.io/py/pygam)\n[![python39](https://img.shields.io/badge/python-3.9-blue.svg)](https://badge.fury.io/py/pygam)\n[![python310](https://img.shields.io/badge/python-3.10-blue.svg)](https://badge.fury.io/py/pygam)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.1208723.svg)](https://doi.org/10.5281/zenodo.1208723)\n\n\n# pyGAM\nGeneralized Additive Models in Python.\n\n<img src=imgs/pygam_tensor.png>\n\n## Documentation\n- [Official pyGAM Documentation: Read the Docs](https://pygam.readthedocs.io/en/latest/?badge=latest)  \n- [Building interpretable models with Generalized additive models in Python](https://medium.com/just-another-data-scientist/building-interpretable-models-with-generalized-additive-models-in-python-c4404eaf5515)  \n<!-----\n[pyGAM: Getting started with Generalized Additive Models in Python](https://medium.com/@jpoberhauser/pygam-getting-started-with-generalized-additive-models-in-python-457df5b4705f)\n----->\n\n## Installation\n```pip install pygam```\n\n### scikit-sparse\nTo speed up optimization on large models with constraints, it helps to have `scikit-sparse` installed because it contains a slightly faster, sparse version of Cholesky factorization. The import from `scikit-sparse` references `nose`, so you'll need that too.\n\nThe easiest way is to use Conda:  \n```conda install -c conda-forge scikit-sparse nose```\n\n[scikit-sparse docs](http://pythonhosted.org/scikit-sparse/overview.html#download)\n\n## Contributing - HELP REQUESTED\nContributions are most welcome!\n\nYou can help pyGAM in many ways including:\n\n- Working on a [known bug](https://github.com/dswah/pyGAM/labels/bug).\n- Trying it out and reporting bugs or what was difficult.\n- Helping improve the documentation.\n- Writing new [distributions](https://github.com/dswah/pyGAM/blob/master/pygam/distributions.py), and [link functions](https://github.com/dswah/pyGAM/blob/master/pygam/links.py).\n- If you need some ideas, please take a look at the [issues](https://github.com/dswah/pyGAM/issues).\n\n\nTo start:\n- **fork the project** and cut a new branch\n- Now **install** the testing **dependencies**\n\n```\nconda install cython\npip install --upgrade pip\npip install poetry\npoetry install --with dev\n```\n\nMake some changes and write a test...\n- **Test** your contribution (eg from the `.../pyGAM`):\n```py.test -s```\n- When you are happy with your changes, make a **pull request** into the `master` branch of the main project.\n\n\n## About\nGeneralized Additive Models (GAMs) are smooth semi-parametric models of the form:\n\n![alt tag](http://latex.codecogs.com/svg.latex?g\\(\\mathbb{E}\\[y|X\\]\\)=\\beta_0+f_1(X_1)+f_2(X_2)+\\dots+f_p(X_p))\n\nwhere `X.T = [X_1, X_2, ..., X_p]` are independent variables, `y` is the dependent variable, and `g()` is the link function that relates our predictor variables to the expected value of the dependent variable.\n\nThe feature functions `f_i()` are built using **penalized B splines**, which allow us to **automatically model non-linear relationships** without having to manually try out many different transformations on each variable.\n\n<img src=imgs/pygam_basis.png>\n\nGAMs extend generalized linear models by allowing non-linear functions of features while maintaining additivity. Since the model is additive, it is easy to examine the effect of each `X_i` on `Y` individually while holding all other predictors constant.\n\nThe result is a very flexible model, where it is easy to incorporate prior knowledge and control overfitting.\n\n## Citing pyGAM\nPlease consider citing pyGAM if it has helped you in your research or work:\n\nDaniel Serv\u00e9n, & Charlie Brummitt. (2018, March 27). pyGAM: Generalized Additive Models in Python. Zenodo. [DOI: 10.5281/zenodo.1208723](http://doi.org/10.5281/zenodo.1208723)\n\nBibTex:\n```\n@misc{daniel\\_serven\\_2018_1208723,\n  author       = {Daniel Serv\u00e9n and\n                  Charlie Brummitt},\n  title        = {pyGAM: Generalized Additive Models in Python},\n  month        = mar,\n  year         = 2018,\n  doi          = {10.5281/zenodo.1208723},\n  url          = {https://doi.org/10.5281/zenodo.1208723}\n}\n```\n\n## References\n1. Simon N. Wood, 2006  \nGeneralized Additive Models: an introduction with R\n\n0. Hastie, Tibshirani, Friedman  \nThe Elements of Statistical Learning  \nhttp://statweb.stanford.edu/~tibs/ElemStatLearn/printings/ESLII_print10.pdf  \n\n0. James, Witten, Hastie and Tibshirani  \nAn Introduction to Statistical Learning  \nhttp://www-bcf.usc.edu/~gareth/ISL/ISLR%20Sixth%20Printing.pdf  \n\n0. Paul Eilers & Brian Marx, 1996\nFlexible Smoothing with B-splines and Penalties\nhttp://www.stat.washington.edu/courses/stat527/s13/readings/EilersMarx_StatSci_1996.pdf\n\n0. Kim Larsen, 2015  \nGAM: The Predictive Modeling Silver Bullet  \nhttp://multithreaded.stitchfix.com/assets/files/gam.pdf  \n\n0. Deva Ramanan, 2008  \nUCI Machine Learning: Notes on IRLS  \nhttp://www.ics.uci.edu/~dramanan/teaching/ics273a_winter08/homework/irls_notes.pdf  \n\n0. Paul Eilers & Brian Marx, 2015  \nInternational Biometric Society: A Crash Course on P-splines  \nhttp://www.ibschannel2015.nl/project/userfiles/Crash_course_handout.pdf\n\n0. Keiding, Niels, 1991  \nAge-specific incidence and prevalence: a statistical perspective\n\n\n<!---http://www.cs.princeton.edu/courses/archive/fall11/cos323/notes/cos323_f11_lecture09_svd.pdf--->\n\n<!---http://www.stats.uwo.ca/faculty/braun/ss3859/notes/Chapter4/ch4.pdf--->\n\n<!---http://www.stat.berkeley.edu/~census/mlesan.pdf--->\n\n<!---http://web.mit.edu/hyperbook/Patrikalakis-Maekawa-Cho/node17.html---> <!--- this helped me get spline gradients--->\n\n<!---https://scikit-sparse.readthedocs.io/en/latest/overview.html#developers--->\n\n<!---https://vincentarelbundock.github.io/Rdatasets/datasets.html---> <!--- R Datasets!--->\n\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "",
    "version": "0.9.1",
    "project_urls": null,
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eaa7d7037173f7c39fd114ca7bc9757149bdfbe2951b5c2cba08038c24e55e10",
                "md5": "6a10e774345139dce0f351dfdc89372a",
                "sha256": "1a3c6e5afa25a981cc4087f6ccceb1167e889d53ea89b4b1e29b3a7643bb8894"
            },
            "downloads": -1,
            "filename": "pygam-0.9.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6a10e774345139dce0f351dfdc89372a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8.1,<3.13",
            "size": 522033,
            "upload_time": "2024-02-13T11:26:07",
            "upload_time_iso_8601": "2024-02-13T11:26:07.021921Z",
            "url": "https://files.pythonhosted.org/packages/ea/a7/d7037173f7c39fd114ca7bc9757149bdfbe2951b5c2cba08038c24e55e10/pygam-0.9.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e36f19690723b3c68b81ddbe8badc2c68743c2827a019e87118d576e9b149635",
                "md5": "3cb92601a208646f2a0a63bf013146b6",
                "sha256": "a321a017bf485ed93fc6233e02621f8e7eab3d4f8971371c9ae9e079c55be01d"
            },
            "downloads": -1,
            "filename": "pygam-0.9.1.tar.gz",
            "has_sig": false,
            "md5_digest": "3cb92601a208646f2a0a63bf013146b6",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8.1,<3.13",
            "size": 513848,
            "upload_time": "2024-02-13T11:26:09",
            "upload_time_iso_8601": "2024-02-13T11:26:09.451862Z",
            "url": "https://files.pythonhosted.org/packages/e3/6f/19690723b3c68b81ddbe8badc2c68743c2827a019e87118d576e9b149635/pygam-0.9.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-13 11:26:09",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "pygam"
}
        
Elapsed time: 0.18552s