All Projects → dynamicslab → pysensors

dynamicslab / pysensors

Licence: MIT license
PySensors is a Python package for sparse sensor placement

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to pysensors

ha-gismeteo
Gismeteo Weather Provider for Home Assistant
Stars: ✭ 84 (+78.72%)
Mutual labels:  sensor, sensors
Sensors
A macOS application displaying the thermal, voltage and current sensor values.
Stars: ✭ 70 (+48.94%)
Mutual labels:  sensor, sensors
mlx90632-library
MLX90632 library for the Melexis 90632 Infra Red temperature sensor.
Stars: ✭ 34 (-27.66%)
Mutual labels:  sensor, sensors
BioBalanceDetector
Bio Balance Detector's products aim to show the weak electromagnetic fields around every living being (including plants, animals and humans) and display it in a heat-map like hyper-spectral image.
Stars: ✭ 18 (-61.7%)
Mutual labels:  sensor, sensors
pymetawear
Community developed SDK around the Python bindings for the C++ SDK
Stars: ✭ 42 (-10.64%)
Mutual labels:  sensor, sensors
ublox
Arduino and CMake library for communicating with uBlox GPS receivers.
Stars: ✭ 89 (+89.36%)
Mutual labels:  sensor, sensors
SparkFun CCS811 Arduino Library
A library to drive the AMS CCS811 air quality sensor
Stars: ✭ 38 (-19.15%)
Mutual labels:  sensor
ha-iaquk
Indoor Air Quality Sensor Component for Home Assistant
Stars: ✭ 57 (+21.28%)
Mutual labels:  sensor
Indego
Home Assistant Custom Component for Bosch Indego Lawn Mower
Stars: ✭ 42 (-10.64%)
Mutual labels:  sensor
biteopt
Derivative-Free Optimization Method for Global Optimization (C++)
Stars: ✭ 91 (+93.62%)
Mutual labels:  optimization-tools
Devices
All the Candle Arduino code
Stars: ✭ 18 (-61.7%)
Mutual labels:  sensors
Compass
Compass on Android
Stars: ✭ 47 (+0%)
Mutual labels:  sensor
ha-multiscrape
Home Assistant custom component for scraping (html, xml or json) multiple values (from a single HTTP request) with a separate sensor/attribute for each value. Support for (login) form-submit functionality.
Stars: ✭ 103 (+119.15%)
Mutual labels:  sensor
redcanary-ebpf-sensor
Red Canary's eBPF Sensor
Stars: ✭ 52 (+10.64%)
Mutual labels:  sensor
accelerometer
Accelerometer
Stars: ✭ 18 (-61.7%)
Mutual labels:  sensors
TLE5012-Magnetic-Angle-Sensor
This repository includes an library for Arduino for the TLE5012 Magnetic Angle Sensor with SSC interface.
Stars: ✭ 37 (-21.28%)
Mutual labels:  sensor
homebridge-airrohr
HomeBridge module for the DIY luftdaten.info particulates sensor. See http://luftdaten.info how to build your own
Stars: ✭ 48 (+2.13%)
Mutual labels:  sensor
IoTHAT
Turta IoT HAT Source, Reference and Manual.
Stars: ✭ 23 (-51.06%)
Mutual labels:  sensor
soar-php
SQL optimizer and rewriter. - SQL 优化、重写器(辅助 SQL 调优)。
Stars: ✭ 140 (+197.87%)
Mutual labels:  optimization-tools
canairio sensorlib
Particle sensor manager for multiple sensors: Honeywell, Plantower, Panasonic, Sensirion, etc. This is sensors layer of CanAirIO project too.
Stars: ✭ 24 (-48.94%)
Mutual labels:  sensor

PySensors

Build Documentation Status PyPI Codecov Binder JOSS Zenodo

PySensors is a Scikit-learn style Python package for the sparse placement of sensors, either for reconstruction or classification tasks.

Sparse sensor placement

Sparse sensor placement concerns the problem of selecting a small subset of sensor or measurement locations in a way that allows one to perform some task nearly as well as if one had access to measurements at every location.

PySensors provides objects designed for the tasks of reconstruction and classification. See Manohar et al. (2018) for more information about the PySensors approach to reconstruction problems and Brunton et al. (2016) for classification. de Silva et al. (2021) contains a full literature review along with examples and additional tips for using PySensors effectively.

Reconstruction

Reconstruction deals with predicting the values of a quantity of interest at different locations other than those where sensors are located. For example, one might predict the temperature at a point in the middle of a lake based on temperature readings taken at various other positions in the lake.

PySensors provides the SSPOR (Sparse Sensor Placement Optimization for Reconstruction) class to aid in the solution of reconstruction problems.

Take representative examples of the types of data to be reconstructed (in this case polynomials)

x = numpy.linspace(0, 1, 1001)
data = numpy.vander(x, 11).T  # Create an array whose rows are powers of x

feed them to a SSPOR instance with 10 sensors, and

model = pysensors.reconstruction.SSPOR(n_sensors=10)
model.fit(data)

Use the predict method to reconstruct a new function sampled at the chosen sensor locations:

f = numpy.abs(x[model.selected_sensors]**2 - 0.5)
f_pred = model.predict(f)
A plot showing the function to be reconstructed, the learned sensor locations, and the reconstruction.

Classification

Classification is the problem of predicting which category an example belongs to, given a set of training data (e.g. determining whether digital photos are of dogs or cats). The SSPOC (Sparse Sensor Placement Optimization for Classification) class is used to solve classification problems. Users familiar with Scikit-learn will find it intuitive:

model = pysensors.classification.SSPOC()
model.fit(x, y)  # Learn sensor locations and fit a linear classifier
y_pred = model.predict(x_test[:, model.selected_sensors])  #  Get predictions

See our set of classification examples for more information.

Bases

The basis in which measurement data are represented can have a dramatic effect on performance. PySensors implements the three bases most commonly used for sparse sensor placement: raw measurements, SVD/POD/PCA modes, and random projections. Bases can be easily incorporated into SSPOR and SSPOC classes:

basis = pysensors.basis.SVD(n_basis_modes=20)
recon_model = pysensors.reconstruction.SSPOR(basis=basis)
class_model = pysensors.classification.SSPOC(basis=basis)

See this example for further discussion of these options.

Installation

Dependencies

The high-level dependencies for PySensors are Linux or macOS and Python 3.6-3.8. pip is also recommended as is makes managing PySensors' other dependencies much easier. You can install it by following the instructions here.

PySensors has not been tested on Windows.

Installing with pip

If you are using Linux or macOS you can install PySensors with pip from the command line/terminal:

pip install python-sensors

Note: the name you type in here is python-sensors and is not pysensors.

Once you have run the line above, you are ready to get started with PySensors. Have a look at the examples in our documentation to see what PySensors can do.

Installing from source

First clone this repository:

git clone https://github.com/dynamicslab/pysensors.git

Then, to install the package, run

cd pysensors
pip install .

If you do not have pip you can instead use

python setup.py install

If you do not have root access, you should add the --user option to the install commands above.

Features

The primary PySensors objects are the SSPOR and SSPOC classes, which are used to choose sensor locations optimized for reconstruction and classification tasks, respectively. Other implemented objects include

  • basis - submodule implementing different bases in which to represent data
    • Identity - use raw measurement data
    • SVD - efficiently compute first k left singular vectors
    • RandomProjection - Gaussian random projections of measurements
  • Convenience functions to aid in the analysis of error as number of sensors or basis modes are varied

Documentation

PySensors has a documentation site hosted by readthedocs. Examples are available online, as static Jupyter notebooks and as interactive notebooks. To run the example notebooks locally you should install the dependencies in requirements-examples.txt:

pip install -r requirements-examples.txt

Community guidelines

Getting support

You may create an issue for any questions that aren't answered by the documentation or examples.

Contributing examples

If you have used PySensors to solve an interesting problem, please consider submitting an example Jupyter notebook showcasing your work!

Contributing code

We welcome contributions to PySensors. To contribute a new feature please submit a pull request. To get started we recommend installing the packages in requirements-dev.txt via

pip install -r requirements-dev.txt

This will allow you to run unit tests and automatically format your code. To be accepted your code should conform to PEP8 and pass all unit tests. Code can be tested by invoking

pytest

We recommend using pre-commit to format your code. Once you have staged changes to commit

git add path/to/changed/file.py

you can run the following to automatically reformat your staged code

pre-commit

Note that you will then need to re-stage any changes pre-commit made to your code.

Reporting issues or bugs

If you find a bug in the code or want to request a new feature, please open an issue.

Citing PySensors

We have published a short paper in the Journal of Open Source Software (JOSS). You can find the paper here.

If you use PySensors in your work, please consider citing it using:

de Silva et al., (2021). PySensors: A Python package for sparse sensor placement. Journal of Open Source Software, 6(58), 2828, https://doi.org/10.21105/joss.02828``

Bibtex:

@article{de Silva2021,
  doi = {10.21105/joss.02828},
  url = {https://doi.org/10.21105/joss.02828},
  year = {2021},
  publisher = {The Open Journal},
  volume = {6},
  number = {58},
  pages = {2828},
  author = {Brian M. de Silva and Krithika Manohar and Emily Clark and Bingni W. Brunton and J. Nathan Kutz and Steven L. Brunton},
  title = {PySensors: A Python package for sparse sensor placement},
  journal = {Journal of Open Source Software}
}

References

  • de Silva, Brian M., Krithika Manohar, Emily Clark, Bingni W. Brunton, Steven L. Brunton, J. Nathan Kutz. "PySensors: A Python package for sparse sensor placement." arXiv preprint arXiv:2102.13476 (2021). [arXiv]
  • Manohar, Krithika, Bingni W. Brunton, J. Nathan Kutz, and Steven L. Brunton. "Data-driven sparse sensor placement for reconstruction: Demonstrating the benefits of exploiting known patterns." IEEE Control Systems Magazine 38, no. 3 (2018): 63-86. [DOI]
  • Brunton, Bingni W., Steven L. Brunton, Joshua L. Proctor, and J Nathan Kutz. "Sparse sensor placement optimization for classification." SIAM Journal on Applied Mathematics 76.5 (2016): 2099-2122. [DOI]
  • Clark, Emily, Travis Askham, Steven L. Brunton, and J. Nathan Kutz. "Greedy sensor placement with cost constraints." IEEE Sensors Journal 19, no. 7 (2018): 2642-2656. [DOI]
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].