A Python toolkit for rule-based/unsupervised anomaly detection in time series

Overview

Anomaly Detection Toolkit (ADTK)

Build Status Documentation Status Coverage Status PyPI Downloads Code style: black Binder

Anomaly Detection Toolkit (ADTK) is a Python package for unsupervised / rule-based time series anomaly detection.

As the nature of anomaly varies over different cases, a model may not work universally for all anomaly detection problems. Choosing and combining detection algorithms (detectors), feature engineering methods (transformers), and ensemble methods (aggregators) properly is the key to build an effective anomaly detection model.

This package offers a set of common detectors, transformers and aggregators with unified APIs, as well as pipe classes that connect them together into models. It also provides some functions to process and visualize time series and anomaly events.

See https://adtk.readthedocs.io for complete documentation.

Installation

Prerequisites: Python 3.5 or later.

It is recommended to install the most recent stable release of ADTK from PyPI.

pip install adtk

Alternatively, you could install from source code. This will give you the latest, but unstable, version of ADTK.

git clone https://github.com/arundo/adtk.git
cd adtk/
git checkout develop
pip install ./

Examples

Please see Quick Start for a simple example.

For more detailed examples of each module of ADTK, please refer to Examples section in the documentation or an interactive demo notebook.

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update unit tests as appropriate.

Please see Contributing for more details.

License

ADTK is licensed under the Mozilla Public License 2.0 (MPL 2.0). See the LICENSE file for details.

Comments
  • Correct seasonal decomposition

    Correct seasonal decomposition

    As @yy910616 pointed out in #13, our implementation of STL decomposition was wrong and it was basically classic seasonal decomposition (trend as moving average, seasonal as average across periods, plus residual). In this PR, we want to correct it.

    • [x] Merge the original NaiveSeasonalAD (a special version of classic decomposition where the trend is preassumed constant 0) with original STLDecomposition (which is in fact classic seasonal decomposition as @yy910616 pointed out), and make it ClassicSeasonalDecomposition
    • [ ] ~Implement the real STLDecomposition~
    • [x] Updated docs

    Updated: for item 2, we decided to hold on for statsmodels new release (details in the thread).

    WIP 
    opened by tailaiw 9
  • Let's use type hints!

    Let's use type hints!

    We like to start using type hints for better practice of python programming. For a first-time contributor, this is probably a nice starting point, as you will go through every part of the code base and familiarize yourself with the code structure.

    To-do's:

    • [ ] Add type hints to all functions.
    • [ ] Modify docstrings accordingly, so sphinx-autodoc will automatically grab type info from type hints.
    • [ ] Add unit tests (with mypy?) for type checking.

    Have fun!

    help wanted 
    opened by tailaiw 7
  • RuntimeError: the model must be trained first

    RuntimeError: the model must be trained first

    First of all, thx for the great tool ^^

    here's the code that produce this RuntimeError:

    tmdl.py

    from adtk.detector import ThresholdAD
    from adtk.detector import QuantileAD
    from adtk.detector import InterQuartileRangeAD
    from adtk.detector import PersistAD
    from adtk.detector import LevelShiftAD
    from adtk.detector import VolatilityShiftAD
    from adtk.detector import SeasonalAD
    from adtk.detector import AutoregressionAD
    
    def get_detector(adname="ThresholdAD"):
        detectors = {"ThresholdAD": ThresholdAD,
                     "QuantileAD": QuantileAD,
                     "InterQuartileRangeAD": InterQuartileRangeAD,
                     "PersistAD": PersistAD,
                     "LevelShiftAD": LevelShiftAD,
                     "VolatilityShiftAD": VolatilityShiftAD,
                     "SeasonalAD": SeasonalAD,
                     "AutoregressionAD": AutoregressionAD,
                     }
       return detectors.get(adname)
    
    \# using adtk anomoly detectors
    def ad_detector(dname, train_data=None, test_data=None, **kwargs):
        Ad = get_detector(dname)
        ad = Ad(**kwargs)
        train_anoms = ad.fit_detect(train_data)
        test_anoms = ad.detect(test_data)
        return train_anoms, test_anoms
    

    I wrote these functions to help me quickly doing some experiment with different detectors by changing the detector's name in the main() function. That's what I thought. --!

    main.py

    ...(functons read the data)

    s_train, s_test = split_train_test(data, mode=split_mode, n_splits=n_splits)
    train_anoms, test_anoms = [], []
    for train, test in zip(s_train, s_test):  # the Error show up in this for loop
            train_anom, test_anom = tmdl.ad_detector(dname='SeasonalAD',
                                                     train_data=train,
                                                     test_data=test.squeeze(),
                                                     c=1, side='both')
            # collect the results
            train_anoms.append(train_anom)
            test_anoms.append(test_anom)
    

    When ran this piece of code, it reported RuntimeError: the model must be trained first.

    Last but not least, when I followed the Quick Start, the machine did not complain anything.

    Any help would be appreciated.

    bug 
    opened by FGG100y 6
  • ValueError: Time series must have a monotonic time index.

    ValueError: Time series must have a monotonic time index.

    Code is as follows:

    from adtk.transformer import ClassicSeasonalDecomposition
    s_transformed = ClassicSeasonalDecomposition().fit_transform(s).rename("Seasonal decomposition residual")
    plot(pd.concat([s, s_transformed], axis=1), ts_markersize=1);
    

    my data frame has multiple numeric ( float & int columns with date as index ).

    and I am getting following error:

    ValueError Traceback (most recent call last) in 1 from adtk.transformer import ClassicSeasonalDecomposition ----> 2 s_transformed = ClassicSeasonalDecomposition().fit_transform(s).rename("Seasonal decomposition residual") 3 plot(pd.concat([s, s_transformed], axis=1), ts_markersize=1);

    ~/jbooks/notebooks/lib/python3.6/site-packages/adtk/_transformer_base.py in fit_predict(self, ts) 94 95 """ ---> 96 self.fit(ts) 97 return self.predict(ts) 98

    ~/jbooks/notebooks/lib/python3.6/site-packages/adtk/_transformer_base.py in fit(self, ts) 47 48 """ ---> 49 self._fit(ts) 50 51 def predict(

    ~/jbooks/notebooks/lib/python3.6/site-packages/adtk/_base.py in _fit(self, ts) 172 # fit model for each column 173 for col in df.columns: --> 174 self._models[col].fit(df[col]) 175 self._fitted = 2 176 else:

    ~/jbooks/notebooks/lib/python3.6/site-packages/adtk/_transformer_base.py in fit(self, ts) 47 48 """ ---> 49 self._fit(ts) 50 51 def predict(

    ~/jbooks/notebooks/lib/python3.6/site-packages/adtk/_base.py in _fit(self, ts) 152 if isinstance(ts, pd.Series): 153 s = ts.copy() # type: pd.Series --> 154 self._fit_core(s) 155 self._fitted = 1 156 elif isinstance(ts, pd.DataFrame):

    ~/jbooks/notebooks/lib/python3.6/site-packages/adtk/transformer/_transformer_1d.py in _fit_core(self, s) 684 s.index.is_monotonic_increasing or s.index.is_monotonic_decreasing 685 ): --> 686 raise ValueError("Time series must have a monotonic time index. ") 687 # remove starting and ending nans 688 s = s.loc[s.first_valid_index() : s[::-1].first_valid_index()].copy()

    ValueError: Time series must have a monotonic time index.

    Any help is highly appreciated...

    opened by bigbprp 5
  • Question: unequally spaced timeseries

    Question: unequally spaced timeseries

    First, big thanks for a nice library! Very useful!

    I am trying to follow your Quick Start for SeasonalAD, but I am encountering a problem. My timeseries seem be to unequally spaced (e.g. 09:05, 09:15, 9:30, 9:55). Hence the SeasonalAD complains: RuntimeError: Series does not follow any known frequency (e.g. second, minute, hour, day, week, month, year, etc. How to overcome this? I have tried rounding my series to 15min, removing duplicates and resampling.

    s_train.index = s_train.index.round('15min')
    s_train = s_train[~s_train.index.duplicated()]
    s_train = s_train.asfreq('15min')
    

    Obviously nothing worked. Any ideas how to solve this? I wish to retain as much granularity as possible.

    question 
    opened by ajdapretnar 5
  • VolatilityShiftAD can not detect negative anomaly.

    VolatilityShiftAD can not detect negative anomaly.

    I use VolatilityShiftAD and set 'side=both/positive/negative' to see how different about them, but the results of them are exactly same. VolatilityShiftAD can not detect the negative anomaly.

    ('seismic-new.csv': copy the nomaly data which from 'seismic.csv' to the end of file)

    pipnet = VolatilityShiftAD(window=20)
    s = pd.read_csv('~/data/seismic-new.csv', index_col="Time", parse_dates=True, squeeze=True)
    s = validate_series(s)
    
    anomalies = pipnet.pipe_.fit_detect(s,return_intermediate=True)
    
    plot(anomalies["diff_abs"])
    #plot(s, anomaly=anomalies, anomaly_color='red')
    plt.savefig("VSAD-std.png")
    
    

    anomalies: VolatilityShiftAD-3

    diff_abs(std): VSAD-std

    I use Excel to calculate std at two time '08-05 15:05:00'(left window < 15:05:00, right window > 15:05:00) and '08-05 16:56:00', the result is different from the VolatilityShiftAD.

    截屏2021-08-05 下午5 59 50 截屏2021-08-05 下午6 00 29
    opened by arthemis911222 4
  • Quickstart lacks info on required data files

    Quickstart lacks info on required data files

    Hi in the quickstart guide you point ot the nyc taxi dataset on the Numenta Anomaly Benchmark but do not provide the links to the files required (or transformations to generat them). I have located training.csv as NAB/data/realKnownCause/nyc_taxi.csv but have not located known_anomalies.csv Thanks

    opened by robmarkcole 3
  • [Question]:What is the output type of `anomalies` when I use Outlierdetector?

    [Question]:What is the output type of `anomalies` when I use Outlierdetector?

    Hello,

    I am trying to using adtk to find outliers in my data. I used the below code. outlier_detector = OutlierDetector(LocalOutlierFactor(contamination=0.05)) anomalies = outlier_detector.fit_detect(df_anomaly) print(anomalies) My output is type bool where I see something like this log_time 2022-02-04 09:48:07 False 2022-02-06 16:16:19 False 2022-02-06 16:21:20 True 2022-02-06 16:26:20 False 2022-02-06 16:31:20 True ...
    2022-02-07 05:56:23 False 2022-02-07 06:01:23 False 2022-02-07 06:06:23 False 2022-02-07 06:11:23 False 2022-02-07 06:16:23 False

    Is this a dataframe? How can I get list of values which have True (which I believe are outliers)? I need to plot those outliers on my plot.

    Any help will be really appreciated.

    opened by hmulagad 2
  • Question on LevelShiftAD

    Question on LevelShiftAD

    I have created a simple example. ​

    from adtk.detector import LevelShiftAD
    from adtk.visualization import plot
    import pandas
    
    d1 = [1, 10000, 1,     10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 1]
    d2 = [1, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 1]
    s = pandas.Series(d1, index=pandas.date_range("2021-01-01", periods=len(d)))
    
    level_shift_ad = LevelShiftAD(c=6.0, side='both', window=2)
    anomalies = level_shift_ad.fit_detect(s)
    
    plot(s, anomaly=anomalies, anomaly_color='red');
    

    With d2 two anomalies are detected. With d1 no anomalies are detected.

    Why? Or maybe the question must be: What should I look at to understand? :)

    Thanks

    opened by phaabe 2
  • LevelShiftAD

    LevelShiftAD

    Hey folks,

    I am trying to import LevelShiftAD but it seems there are some import problems within this module. This is what I get when I try to import it

         10 from scipy import linalg, fft as sp_fft
         11 from scipy.fft._helper import _init_nd_shape_and_axes
    ---> 12 from scipy._lib._util import prod as _prod
         13 import numpy as np
         14 from scipy.special import lambertw
    
    ImportError: cannot import name 'prod'
    

    I am running Python 3.6.9 on a virtual environment. Any clue of how I could fix it? I've already tried it by downgrading scipy to 1.2 and 1.3.

    Thanks!

    opened by estcarisimo 2
  • Seasonal Decomposition for Multivariate time series

    Seasonal Decomposition for Multivariate time series

    I fit seasonal detector and transformer to a multivariate time series following the documentation.

    https://adtk.readthedocs.io/en/stable/api/transformers.html#adtk.transformer.ClassicSeasonalDecomposition

    https://adtk.readthedocs.io/en/stable/notebooks/demo.html#SeasonalAD

    When I fit a pandas Dataframe with several columns (multivariate time series) to these detector/transformer, the seasonal_ component does not exist anymore.

    Would it be possible to get a seasonal_ dataframe in that case ?

    question 
    opened by nbrosse 2
  • Quantile AD and Threshold based AD criteria

    Quantile AD and Threshold based AD criteria

    First of all, thanks a lot for providing such an wonderful package.

    I was using Quantile AD, and I thought it was marking all values above high quantile and lower quantile as outlier (like the one threshold criteria would do, when appropriate quantile bounds are provided).

    However it seems like the method is not working in such a way, as there are several outlier-regarded middle values between very high unmarked values.

    I was trying to read the source code, but I could not really get the logic (I think I got the wrong idea, as from my understanding, the above phenomena should not happen).

    Can you please provide me some explanation about this? I really would appreciate.

    I really would like to attach the plot I have, but due to several security issues of the company, I cannot do so.

    opened by Geese-axb 0
  • Identify no change in time series

    Identify no change in time series

    Sometimes an anomaly could lie in the fact that the timeseries value is not changing at all, that is the previous value is exactly the same as the next one.

    Is it possible to adapt the PersistAD detector to identify these points as anomalies?

    I was looking into the underlying Pipenet implementation but unfortunately it seems that the only way to identify the anomaly is to find something exceeding a certain threshold and not just staying the same.

    opened by guidocioni 1
  • flowchart has problem

    flowchart has problem

    import numpy as np import pandas as pd from adtk.data import validate_series import matplotlib.pyplot as plt from adtk.visualization import plot from adtk.transformer import DoubleRollingAggregate from adtk.detector import ThresholdAD, QuantileAD from adtk.aggregator import AndAggregator

    故障检测

    from adtk.pipe import Pipenet

    steps = { # 长窗口历史数据扫描,规避持续异常跳变 "more_step_roll_aggr": { "model": DoubleRollingAggregate( agg="max", window=(20, 1), diff="diff" ), "input": "original", }, # 确保递增是一直持续存在 "abs_more_step_roll_aggr": { "model": ThresholdAD( high=0 ), "input": "more_step_roll_aggr" },

    # 短窗口数据扫描,相对变化率(斜率)判断
    "one_step_change": {
        "model": DoubleRollingAggregate(
            agg="mean",
            window=(3, 1),
            diff="rel_diff"
        ),
        "input": "original",
    },
    "abs_one_step_change": {
        "model": ThresholdAD(high=0.2),
        "input": "one_step_change"
    },
    
    "base_level_detect1": {
        "model": ThresholdAD(high=100),
        "input": "original"
    },
    
    "positive_level_shift": {
        "model": AndAggregator(),
        "input": ["abs_more_step_roll_aggr", "abs_one_step_change", "base_level_detect"]
    }
    

    }

    pipenet = Pipenet(steps) pipenet.plot_flowchart()

    plt.show()

    plt.savefig('net1.png') image

    opened by taroyutao 0
  • Retrieve informations Pipeline [QUESTION]

    Retrieve informations Pipeline [QUESTION]

    Hello, I'd like to know if it was possible to retrieve the different parameters calculated by a pipeline? For example my pipeline is composed by a ClassicSeasonalDecomposition transformer and an InterQuartileAD detector. After fitting the model, I'd like to retrieve the pattern calculated and the value of abs_low_ and abs_high. It seems that we can do it using the two models separately but not when we use them through a pipeline.

    Thank you in advance!

    opened by julienjta 0
  • return anomaly scores

    return anomaly scores

    Hi the team, thanks for your great work, is it possible to return a list of anomaly scores instead of binary labels in the future version? As a researcher in anomaly detection, I'd like to say anomaly scores are much useful than the binary labels.

    opened by ZhongLIFR 0
  • Where can I find information on how the detector algorithms are developed?

    Where can I find information on how the detector algorithms are developed?

    label: question

    Hello,

    I am a data science student using the PCA and LOF detectors for a project and I want to gain a deep understanding of how the algorithms decide whether an anomaly exists or not. Is there information somewhere that describes what is really going on underneath the hood? Thank you very much for any help!

    opened by matthewjfinn 0
Releases(v0.6.2)
  • v0.6.2(Apr 17, 2020)

  • v0.6.1(Apr 17, 2020)

  • v0.6(Mar 10, 2020)

    • Re-designed the API of adtk.visualization.plot

    • Removed adtk.data.resample because its functionality is highly overlapped with pandas resampler module

    • Made adtk.data.expand_event accept events in the form of pandas Series/DataFrame

    • Made adtk.data.expand_event accept time delta in the form of str or int

    • Changed the output type of adtk.data.split_train_test from a 2-tuple of lists to a list of 2-tuples

    • Turned the following model parameters required from optional

      • window in adtk.detector.LevelShiftAD
      • window in adtk.detector.VolatilityShiftAD
      • window in adtk.transformer.RollingAggregate
      • window in adtk.transformer.DoubleRollingAggregate
      • model in adtk.detector.MinClusterDetector
      • model in adtk.detector.OutlierDetector
      • target and regressor in adtk.detector.RegressionAD
      • target and regressor in adtk.transformer.RegressionResidual
      • aggregate_func in adtk.aggregator.CustomizedAggregator
      • detect_func in adtk.detector.CustomizedDetector1D
      • detect_func in adtk.detector.CustomizedDetectorHD
      • transform_func in adtk.transformer.CustomizedTransformer1D
      • transform_func in adtk.detector.CustomizedTransformer1D
      • steps in adtk.pipe.Pipeline
    • Added consistency check between training and testing inputs in multivariate models

    • Improved time index check in time-dependent models

    • Turned all second-order sub-modules private, and a user now can only import from the following first-order modules

      • adtk.detector
      • adtk.transformer
      • adtk.aggregator
      • adtk.pipe
      • adtk.data
      • adtk.metrics
      • adtk.visualization
    • Refactored the inheritance structure of model components (see https://arundo-adtk.readthedocs-hosted.com/en/latest/inheritance.html#inheritance)

    • Added Python 3.8 support

    • Fixed compatibility issues with statsmodels v0.11

    • Fixed compatibility issues with pandas v1.0

    • Created an interactive demo notebook in Binder

    • Added type hints, and added type checking in CI/CD test

    • Added Black and isort to developer requirement and CI/CD check

    • Optimized release process by publishing package to PyPI through GitHub Actions

    • Improved docstrings and API documentation

    • Fixed many minor bugs and typos

    Source code(tar.gz)
    Source code(zip)
  • v0.5.5(Feb 24, 2020)

  • v0.5.4(Feb 18, 2020)

    • Optimized the workflow of how a univariate model is applied to pandas DataFrame
      • Added more informative error messages
      • Fixed some bugs resulting in model-column matching error due to inconsistency between output Series names and DataFrame columns
      • Clarified the workflow in the documentation
    Source code(tar.gz)
    Source code(zip)
  • v0.5.3(Feb 12, 2020)

  • v0.5.2(Jan 14, 2020)

    • Formalized the management of releases and pre-releases, including rules of branches and versioning
    • Added more rules for developers to the documentation
    Source code(tar.gz)
    Source code(zip)
  • v0.5.1(Jan 2, 2020)

    • Added many new unit tests, and modified some old unit test
    • Removed seaborn from dependencies (use matplotlib built-in style now)
    • Fixed a bug in the metric module of dict objects as input
    • Fixed a bug in the detector OutlierDetector that output series has dtype object if NaN is present
    • Fixed a bug in transformer pipeline that detect and transform methods are confused
    • Fixed a bug in pipenet that an aggregator node may crash if its input is from a node where subset contains a single item
    • Fixed a bug in pipenet summary that subset column are always "all" even if not
    • Some minor optimization of code
    Source code(tar.gz)
    Source code(zip)
  • v0.5(Dec 18, 2019)

    • Changed the parameter steps of pipenet from list to dict

    • Added method summary to pipenet

    • Corrected some major algorithmic issues on seasonal decomposition

      • Removed STL decomposition transformer, and hence the corresponding option in SeasonalAD detector
      • Recreated classic seasonal decomposition transformer
    • Updated the demo notebook in the documentation

    • Added an option to hide legend in the plotting function

    • Added some package setup options for developers

    • Fixed an issue of tracking Travis and Coveralls status

    • Some minor internal optimization in the code

    • Fixed some format issues and typos in the documentation

    Source code(tar.gz)
    Source code(zip)
  • v0.4.1(Nov 21, 2019)

  • v0.4(Nov 18, 2019)

    • Added support to Python 3.5
    • Better unit tests on dependencies
    • Minor typo fix in documentation
    • Minor code optimization
    • Added download statistics to README
    • Added coverage test
    Source code(tar.gz)
    Source code(zip)
  • v0.3(Sep 27, 2019)

LinearRegression2 Tvads and CarSales

LinearRegression2_Tvads_and_CarSales This project infers the insight that how the TV ads for cars and car Sales are being linked with each other. It i

Ashish Kumar Yadav 1 Dec 29, 2021
Python factor analysis library (PCA, CA, MCA, MFA, FAMD)

Prince is a library for doing factor analysis. This includes a variety of methods including principal component analysis (PCA) and correspondence anal

Max Halford 915 Dec 31, 2022
GroundSeg Clustering Optimized Kdtree

ground seg and clustering based on kitti velodyne data, and a additional optimized kdtree for knn and radius nn search

2 Dec 02, 2021
Markov bot - A Writing bot based on Markov Chain for Data Structure Lab

基于马尔可夫链的写作机器人 前端 用html/css完成 Demo展示(已给出文本的相应展示) 用户提供相关的语料库后训练的成果 后端 要完成的几个接口 解析文

DysprosiumDy 9 May 05, 2022
Automated Machine Learning Pipeline for tabular data. Designed for predictive maintenance applications, failure identification, failure prediction, condition monitoring, etc.

Automated Machine Learning Pipeline for tabular data. Designed for predictive maintenance applications, failure identification, failure prediction, condition monitoring, etc.

Amplo 10 May 15, 2022
This repository contains the code to predict house price using Linear Regression Method

House-Price-Prediction-Using-Linear-Regression The dataset I used for this personal project is from Kaggle uploaded by aariyan panchal. Link of Datase

0 Jan 28, 2022
Metric learning algorithms in Python

metric-learn: Metric Learning in Python metric-learn contains efficient Python implementations of several popular supervised and weakly-supervised met

1.3k Dec 28, 2022
Tools for diffing and merging of Jupyter notebooks.

nbdime provides tools for diffing and merging of Jupyter Notebooks.

Project Jupyter 2.3k Jan 03, 2023
Predict profitability of trades based on indicator buy / sell signals

Predict profitability of trades based on indicator buy / sell signals Trade profitability analysis for trades based on various indicators signals: MAC

Tomasz Porzycki 1 Dec 15, 2021
Implemented four supervised learning Machine Learning algorithms

Implemented four supervised learning Machine Learning algorithms from an algorithmic family called Classification and Regression Trees (CARTs), details see README_Report.

Teng (Elijah) Xue 0 Jan 31, 2022
A logistic regression model for health insurance purchasing prediction

Logistic_Regression_Model A logistic regression model for health insurance purchasing prediction This code is using these packages, so please make sur

ShawnWang 1 Nov 29, 2021
Simple and flexible ML workflow engine.

This is a simple and flexible ML workflow engine. It helps to orchestrate events across a set of microservices and create executable flow to handle requests. Engine is designed to be configurable wit

Katana ML 295 Jan 06, 2023
Intel(R) Extension for Scikit-learn is a seamless way to speed up your Scikit-learn application

Intel(R) Extension for Scikit-learn* Installation | Documentation | Examples | Support | FAQ With Intel(R) Extension for Scikit-learn you can accelera

Intel Corporation 858 Dec 25, 2022
Automated machine learning: Review of the state-of-the-art and opportunities for healthcare

Automated machine learning: Review of the state-of-the-art and opportunities for healthcare

42 Dec 23, 2022
ThunderSVM: A Fast SVM Library on GPUs and CPUs

What's new We have recently released ThunderGBM, a fast GBDT and Random Forest library on GPUs. add scikit-learn interface, see here Overview The miss

Xtra Computing Group 1.4k Dec 22, 2022
Compare MLOps Platforms. Breakdowns of SageMaker, VertexAI, AzureML, Dataiku, Databricks, h2o, kubeflow, mlflow...

Compare MLOps Platforms. Breakdowns of SageMaker, VertexAI, AzureML, Dataiku, Databricks, h2o, kubeflow, mlflow...

Thoughtworks 318 Jan 02, 2023
BudouX is the successor to Budou, the machine learning powered line break organizer tool.

BudouX Standalone. Small. Language-neutral. BudouX is the successor to Budou, the machine learning powered line break organizer tool. It is standalone

Google 868 Jan 05, 2023
Pragmatic AI Labs 421 Dec 31, 2022
MICOM is a Python package for metabolic modeling of microbial communities

Welcome MICOM is a Python package for metabolic modeling of microbial communities currently developed in the Gibbons Lab at the Institute for Systems

57 Dec 21, 2022
Decentralized deep learning in PyTorch. Built to train models on thousands of volunteers across the world.

Hivemind: decentralized deep learning in PyTorch Hivemind is a PyTorch library to train large neural networks across the Internet. Its intended usage

1.3k Jan 08, 2023