Giter Club home page Giter Club logo

roerich's Introduction

Welcome to Roerich

PyPI version Documentation Downloads License

Roerich is a python library for online and offline change point detection for time series analysis, signal processing, and segmentation. It was named after the painter Nicholas Roerich, known as the Master of the Mountains. Read more at: https://www.roerich.org.

Fragment of "Himalayas", 1933

Currently, the library contains official implementations of change point detection algorithms based on direct density ratio estimation from the following articles:

  • Mikhail Hushchyn and Andrey Ustyuzhanin. “Generalization of Change-Point Detection in Time Series Data Based on Direct Density Ratio Estimation.” J. Comput. Sci. 53 (2021): 101385. [journal] [arxiv]
  • Mikhail Hushchyn, Kenenbek Arzymatov and Denis Derkach. “Online Neural Networks for Change-Point Detection.” ArXiv abs/2010.01388 (2020). [arxiv]

Dependencies and install

pip install roerich

or

git clone https://github.com/HSE-LAMBDA/roerich.git
cd roerich
pip install -e .

Basic usage

(See more examples in the documentation.)

The following code snippet generates a noisy synthetic data, performs change point detection, and displays the results. If you use own dataset, make sure that it has a shape (seq_len, n_dims).

import roerich
from roerich.change_point import ChangePointDetectionClassifier

# generate time series
X, cps_true = roerich.generate_dataset(period=200, N_tot=2000)

# detection
# base_classifier = 'logreg', 'qda', 'dt', 'rf', 'mlp', 'knn', 'nb'
# metric = 'klsym', 'pesym', 'jsd', 'mmd', 'fd'
cpd = ChangePointDetectionClassifier(base_classifier='mlp', metric='klsym', window_size=100)
score, cps_pred = cpd.predict(X)

# visualization
roerich.display(X, cps_true, score, cps_pred)

Support

Related libraries

Generic badge Generic badge Generic badge Generic badge

Thanks to all our contributors

roerich's People

Contributors

a007mg avatar avnikitin avatar hushchyn-mikhail avatar kenenbek avatar maxslamdunk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

roerich's Issues

How to tune the parameters of detection algorithms?

I use roerich on my own dataset, but the result is not so good.

figure

There are comments in the class ChangePointDetection:

    Parameters
    ----------
    scaler: A scaler object is used to scale an input data. The default one is `SmaScalerCache`
    metric: A loss function during optimize step of NN. Can be one of the following KL_sym, KL, JSD, PE, PE_sym, Wasserstein
    window_size: A size of a window when splitting input data into train and test arrays
    periods: A number of previous data-points used when constructing autoregressive matrix
    lag_size: A distance between train- and test- windows
    step: Each `step`-th data-point is used when creating the input dataset
    n_epochs: A number of epochs during training NN
    lr: A learning rate at each step of optimizer
    lam: A regularization rate
    optimizer: One of Adam, SGD, RMSprop or ASGD optimizers
    debug: default zero

How to tune the parameters of the change point algorithms, like periods, window_size , lag_size or step?

ChangePointDetectionRuLSIF does not work on GPU

The following code

from roerich.change_point import ChangePointDetectionRuLSIF

alg = ChangePointDetectionRuLSIF()
alg.predict(np.zeros((500, 3))) # just for example

throws an error:
RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0! (when checking argument for argument mat1 in method wrapper_CUDA_addmm)

It works well on CPU, but when CUDA is available, the error appears.

Error in example OnlineNNClassifier in docs/examples/demo.ipynb using net='default'

In the doc example demo.ipynb, the parameter net is initizlized with the string 'default':

cpd = OnlineNNClassifier(net='default', scaler="default", metric="KL_sym",
                         periods=1, window_size=1, lag_size=100, step=1, 
                         n_epochs=10, lr=0.1, lam=0.0001, optimizer="Adam")

which causes the folloing error when executing:

File ~\miniconda3\envs\cpt\Lib\site-packages\roerich\change_point\onnc.py:315 in predict
self._init_network(X_auto.shape[1])

File ~\miniconda3\envs\cpt\Lib\site-packages\roerich\change_point\onnc.py:176 in _init_network
self.net = self.base_net(n_inputs)

TypeError: 'str' object is not callable.

Using net='auto', it works.

File "2.py", line 33, in <module> score, peaks = cpd.predict(xx) File "/home/bcc1/anaconda3/lib/python3.8/site-packages/roerich/algorithms.py", line 101, in predict score = self.reference_test_predict(X_, y_) File "/home/bcc1/anaconda3/lib/python3.8/site-packages/roerich/algorithms.py", line 231, in reference_test_predict loss = self.criterion(outputs.squeeze(), y) File "/home/bcc1/anaconda3/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl return forward_call(*input, **kwargs) File "/home/bcc1/anaconda3/lib/python3.8/site-packages/torch/nn/modules/loss.py", line 603, in forward return F.binary_cross_entropy(input, target, weight=self.weight, reduction=self.reduction) File "/home/bcc1/anaconda3/lib/python3.8/site-packages/torch/nn/functional.py", line 2916, in binary_cross_entropy return torch._C._nn.binary_cross_entropy(input, target, weight, reduction_enum) RuntimeError: all elements of input should be between 0 and 1

File "2.py", line 33, in
score, peaks = cpd.predict(xx)
File "/home/bcc1/anaconda3/lib/python3.8/site-packages/roerich/algorithms.py", line 101, in predict
score = self.reference_test_predict(X_, y_)
File "/home/bcc1/anaconda3/lib/python3.8/site-packages/roerich/algorithms.py", line 231, in reference_test_predict
loss = self.criterion(outputs.squeeze(), y)
File "/home/bcc1/anaconda3/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1102, in _call_impl
return forward_call(*input, **kwargs)
File "/home/bcc1/anaconda3/lib/python3.8/site-packages/torch/nn/modules/loss.py", line 603, in forward
return F.binary_cross_entropy(input, target, weight=self.weight, reduction=self.reduction)
File "/home/bcc1/anaconda3/lib/python3.8/site-packages/torch/nn/functional.py", line 2916, in binary_cross_entropy
return torch._C._nn.binary_cross_entropy(input, target, weight, reduction_enum)
RuntimeError: all elements of input should be between 0 and 1

Multi parameters in Roerich

Hello!
Can I use not one, but several search parameters in the model Roerich for finding change point detections?

Unable to import roerich due to potential version mismatch

Hi,

Thanks for sharing the code. I was trying to follow the instructions for basic usage but got following error:

import roerich
Traceback (most recent call last):
  File "C:\Users\arago\.p2\pool\plugins\org.python.pydev.core_8.1.0.202012051215\pysrc\_pydevd_bundle\pydevd_exec2.py", line 3, in Exec
    exec(exp, global_vars, local_vars)
  File "<console>", line 1, in <module>
  File "C:\Users\arago\AppData\Local\Programs\Python\Python39\lib\site-packages\roerich\__init__.py", line 1, in <module>
    from .algorithms import OnlineNNClassifier, OnlineNNRuLSIF
  File "C:\Users\arago\AppData\Local\Programs\Python\Python39\lib\site-packages\roerich\algorithms.py", line 7, in <module>
    import torch
  File "C:\Users\arago\AppData\Local\Programs\Python\Python39\lib\site-packages\torch\__init__.py", line 196, in <module>
    from torch._C import *
RuntimeError: module compiled against API version 0xe but this version of numpy is 0xd

Thanks,
Rahul

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.