Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mlysy/projplot
https://github.com/mlysy/projplot
Last synced: 10 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/mlysy/projplot
- Owner: mlysy
- License: mit
- Created: 2022-01-26T02:51:57.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-11-15T04:18:10.000Z (about 2 years ago)
- Last Synced: 2024-04-24T09:19:21.530Z (9 months ago)
- Language: Python
- Size: 646 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# **projplot**: Utilities for Creating Projection Plots
**projplot** provides a set of tools to assess whether or not an optimization algorithm has converged to a local optimum. Its main function does this by visualizing the "projection plots" of the objective function `f(x)` -- that is, by plotting `f` against each coordinate of `x` with the other coordinates fixed at the corresponding elements of the candidate optimal solution `x_opt`.
This package has a similar goal to the R package [**optimCheck**](https://github.com/mlysy/optimCheck).
## Installation
This package is available on [PyPi](https://pypi.org/project/projplot/) and can be installed as follows:
```bash
pip install projplot
```## Documentation
Available on [Read the Docs](http://projplot.readthedocs.io/).
## Example
An overview of the package functionality is illustrated with the following example. Let `f(x) = x^TAx - 2b^Tx` denote a quadratic objective function in `x`, which is in the d-dimensional real space. If `A` is a positive-definite `d x d` matrix, then the unique minimum of `f(x)` is `x_opt =A^{-1}b`.
For example, suppose we have
```python
import numpy as npA = np.array([[3., 2.],
[2., 7.]])
b = np.array([1., 10.])
```Then we have that the optimal solution is `x_opt = (-0.765, 1.647)`. Now, **projplot** allows us to complete a visual check. The following information will need to be provided:
* The objective function (`obj_fun`): This can be either a vectorized or non-vectorized function.
* Optimal values (`x_opt`): This will be the optimal solution for your function.
* Upper and lower bounds for each parameter (`x_lims`): This will provide an initial range of values to observe.
* Parameter names (`x_names`): These are the names of your parameters, i.e. theta, mu, sigma
* The number of points to plot for each parameter (`n_pts`): This is the number of points that each parameter will be evaluated at for their respective plot.```python
# Optimal values
x_opt = np.array([-0.765, 1.647])# Upper and lower bounds for each component of x
x_lims = np.array([[-3., 1], [0, 4]])# Parameter names
x_names = ["x1", "x2"]# Number of evaluation points per coordinate
n_pts = 10import projplot as pjp
def obj_fun(x):
'''Compute x'Ax - 2b'x.'''
y = np.dot(np.dot(x.T, A), x) - 2 * np.dot(b, x)
return y# Obtain plots with vertical x lines
pjp.proj_plot(obj_fun, x_opt=x_opt, x_lims=x_lims,
x_names=x_names, n_pts=n_pts,
opt_vlines=True)
```![alt](docs/images/plot_vlines.png)
### Further Reading
See documentation for [advanced use cases](https://projplot.readthedocs.io/en/latest/example.html#advanced-use-cases) and an [FAQ](https://projplot.readthedocs.io/en/latest/faq.html).