Metadata-Version: 2.1
Name: pwlreg
Version: 0.2.0
Summary: A scikit-learn-compatible implementation of Piecewise Linear Regression
Home-page: https://github.com/ensley-nexant/pwlreg
License: Apache-2.0
Keywords: piecewise regression,scikit-learn,sklearn,change point
Author: John Ensley
Author-email: jensley@resource-innovations.com
Requires-Python: >=3.10,<4.0
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Requires-Dist: numpy (>=1.24.1,<2.0.0)
Requires-Dist: scikit-learn (>=1.2.0,<2.0.0)
Requires-Dist: scipy (>=1.9.3,<2.0.0)
Project-URL: Documentation, https://ensley-nexant.github.io/pwlreg
Project-URL: Repository, https://github.com/ensley-nexant/pwlreg
Description-Content-Type: text/markdown

# pwlreg

A scikit-learn-compatible implementation of Piecewise Linear Regression

## Installation

```
pip install git+https://github.com/ensley-nexant/pwlreg.git@main#egg=pwlreg
```

## Usage Guide

[See the how-to guide here](https://github.com/ensley-nexant/pwlreg/blob/main/notebooks/howto.ipynb).


```python
import numpy as np
import matplotlib.pyplot as plt

import pwlreg as pw


x = np.array([1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])
y = np.array([1., 1.5, 0.5, 1., 1.25, 2.75, 4, 5.25, 6., 8.5])

m = pw.AutoPiecewiseRegression(n_segments=2, degree=[0, 1])
m.fit(x, y)

xx = np.linspace(1, 10, 100)
plt.plot(x, y, "o")
plt.plot(xx, m.predict(xx), "-")
plt.show()
```

![pwlreg toy example](img/img.png)

```python
m.coef_         # [ 1.00  -5.50  1.35 ]
m.breakpoints_  # [ 1.000000  4.814815  10.000000 ]
```

$$
x =
\begin{cases}
1,            & 1 \leq x < 4.815 \\
-5.5 + 1.35x, & 4.815 \leq x < 10
\end{cases}
$$

