From cf2b17018264f54ff66792c7fb189692e65d72e9 Mon Sep 17 00:00:00 2001 From: lhenry15 Date: Tue, 15 Sep 2020 01:48:38 -0500 Subject: [PATCH] add run_pipeline example Former-commit-id: fca1940bc01a73ecf9413d0eba41baf6263c829e [formerly 358cacbca0738aef391a5f26737cf40458070051] [formerly 6ec74d30308ca701d4e6f6ace8cbfe1a368f9238 [formerly bca1f9eff4f60d74848a2f7ed6bf08d584de77f2]] [formerly 40a471ebbc49f94a417b739194aab17af7edb389 [formerly 5ff1322a4f354e39aad11a5b746d92eabda3efd0] [formerly 01067f35f6c57cc5c5d8b78fb0a6277f69e58c4a [formerly d589fd6fa3452016cafeefbef8b489f668b3473c]]] [formerly 28c75141e72300274c1a013ce1b004f63e1a6cf8 [formerly 6504576ef9f0e0bec756e4e8fad02f654af745db] [formerly 479ecfa70c9e7d4dde80e9e98562498222077f40 [formerly 67352181a3cb46934c8ad941f8dbf6b3cd75a5e0]] [formerly 24fc56bc64172bc5571249e0c068a0eec046d610 [formerly d2e1003c89e280cbd72b2bcd419ee802d027cd2c] [formerly 2c820b46dbd384210a212bdfbc5d8692b09544bc [formerly 2f998f6974443b292926b6fb263f4e506d213cab]]]] [formerly 2468061ced237b6446ec399fd27cf48e8d6dec0f [formerly ee14c316a3307c0dae567bc8edb59db6c4be838f] [formerly 8965b7e537b64d81b918ef249bcd921a1fd94705 [formerly 8616cc1f24257dbdcb7f23b2bbe91fa0c1acf9d2]] [formerly 7dc2aa07c7f329be6fe9049107e215e8f62747ec [formerly b01f950dce65382d35e40f63497d2ca9fa65f447] [formerly 9eaf47ee443beaf9cdcaa093446f6c2f49e9e070 [formerly 733d64d92dd450030a32511fecb35e91287f4fa2]]] [formerly d22278c8d7fe41c4046e090ba28df1f2113bcaba [formerly 36f84cc80a3729c8c4c359c8797abd716844d4ce] [formerly e253cd18001f774eacfd44f71f7e4057f5993453 [formerly a4efdcb4908a1063985992e6d3a80af1753f4878]] [formerly 59f8404f2906a4c239fc973f8c3d5e972d868b40 [formerly c16238aeac376994c4a5140eeff37422c2aa23ed] [formerly 44bc1fed727c0e4179188da86453aff9fd20b1b8 [formerly befce4e2adfba17bb3b4aea6b31a92864fddbc30]]]]] [formerly 9dc9a2c1c0a911d002b6aa76b11990fc807d505a [formerly c3229cdf9ed082ebbfa7abecc938e3c1df67bbe8] [formerly 8de292e3ffe2687c35b961648b2895b9f1de9aec [formerly bfc083a3b684a67fe4a943bce91eed11ce10310f]] [formerly ab9519d4f7223a55a9d80f0218cd86552b55b3ea [formerly 1051e5930ac2571ec3e2af4d9344f29834fa3a97] [formerly 6994480a6c29a12d68418672ab605e00e1343cc6 [formerly 9efb04dedf1d85e938dc252fd7485392a8c594d3]]] [formerly 004687993bfff7f0137ca1272d254ba42ce71e37 [formerly 9a3ba544cbe5ea4819ab510d1a39814074098cd9] [formerly 7edab429ae94a0ac67f0f5d313634b39518a6cd5 [formerly c8b0fe59e216f7b7f09b4fcb39219fe888bbfc1f]] [formerly 1156340669052a9af0735312db25a28d71bbddb9 [formerly 195d7167e1e6736f2cfdb5c89bad82c8be0fc685] [formerly d05a060123a85aed5ed7cc30ffc8ee120e480be7 [formerly fea8332703ee9d091c8d70558eff358b9c9a3753]]]] [formerly b7c7af47accc23133f6c0bbb8be4baa59928bb24 [formerly 6cc66907a86d465bdbd02b42fe04be6a2dffa347] [formerly a9562377f6a869bb0188d58e1b718ff942418e5e [formerly f17f25a823502b73eb90f3dd5a011b29c6368548]] [formerly c7bcf7f4999d250874c38aa4cc00e51bb7c7cbb0 [formerly 7e5270c8b180a196f96c2aa1fd0d7432e96783a8] [formerly d8a1e00c0e559339b2b99f72bef85327bc053416 [formerly 8a3ddff8964bf71dfc91d850775256dae785099b]]] [formerly 0dce0b991e41969affbe5d99d73e3bf3c45a7253 [formerly 55d997b2a38d13a8f842a824c43076dcbd1a0409] [formerly d50a27d23acbd11981cac0c25819e1224dafc443 [formerly 71a554278c7e4a4be32976bbf3edbea64173bfef]] [formerly 838444a6cbb1296707958c10b4812cf72168fb65 [formerly a6147af1df6665c88fce674e88d644e5cff88365] [formerly 97b80b640074f978892fccf02f3c888dae391502 [formerly 6bb1e359c4ac430770981e41c4b149552ac0685f]]]]]] Former-commit-id: 24bbedc26a24d9a4c1731cd1aa5e74b732f9e9b6 [formerly d30bc965a1665f1bf59eb50c544480f54aa54914] [formerly ce97c9d016e34a30e79b50471f394c65a284370f [formerly b92e7af1607ca8d4b236e97d7d7580d966cc9e8a]] [formerly bc39ea4b86d4239e1f3f6f6e479c79bd9e2364da [formerly de937a558f3e9340f48c0b02e75ca6f2d539f2be] [formerly f028743fbf1db54407e0b25de75eceee1c4d60a5 [formerly 8395df862a6c760c32a7064173e13719341bf3cb]]] [formerly cb7bf8e888e2fbc50d911bb63dfc4d1dec8aa897 [formerly 9076a02479bd09cff997b1934595110dc2b62aaf] [formerly 3bfecdb558319afee2a06b1dabd465df20ee1a0b [formerly c06c4451c75ad069701f94f158768999320cacb8]] [formerly f85a40bf61151f0ac8ebe91077d85d1913fda894 [formerly f6b5fcd73f157de1079815413e5998a83eb5c177] [formerly 1c7c12f8deabc5c489f89561dafd2a69dea075de [formerly f8876d15fd5c73fd62132de30e95ff03be3f46a6]]]] [formerly ebdbbb16d82c53dae0c7e3bc071d22aec64b0511 [formerly 90aea8bb089c83627c092da8fbd3da1d5a424bb5] [formerly 0dadf699f7711afee0866523ad34479658bebc6d [formerly 661ac2ff82d9ea8dd0ecdb0ba49de7eec0c44d70]] [formerly a9ba16524513e9660c07dafcbd2497320575b752 [formerly 45760ac2eb89786bf05f6dd10fa872ea476aab7d] [formerly c047334390289ac9bf8f121be94dd3f62a35c249 [formerly 56b517dc66f0a81c0ca75d01e18c3e26dc4a58bb]]] [formerly 536811c453a4cfb78402dff8680f8dd78eb9911a [formerly 5ec3de637001b7ab1a14c713db19c69760a6959c] [formerly a91e41774e1886840e11198c0e13aac96d77271e [formerly 076c5f4bdd99e6feb6ebcb764b966bbd63862b89]] [formerly 2f526d129cb03cb907b9dbc8bfa43a6255ecde9b [formerly befa3b01216fe7d0816c2834763a282f7b892682] [formerly 97b80b640074f978892fccf02f3c888dae391502]]]] Former-commit-id: 844fcc10535a0cb2b68f8a9fa356580424d6be0d [formerly b9417a7909f0c3f66be8bd5a9f323bc4c007fc65] [formerly 7de8c22b60945b08525f251f80321799802e96ee [formerly 3f99f9cd14efc49d59aaf49afbf8bd150ba68e47]] [formerly ced1db2fe8acf3e79dddc88af09795ae3cfffd9b [formerly 1a1f6085a0f2dde78dff98fff38d5ac0c363b560] [formerly ecded0b584720d3dd01046b343edb7ac23f785b0 [formerly fe14c8dec2a0dd9ecc9fe810965c7917323c3988]]] [formerly c0249580506ee6062e751bead368d63c68fd56ed [formerly 927c066af53099983e4b6dce554e76dc36de0e01] [formerly 22e544266cf9ffbd29fa58cf0e6211769bf87f29 [formerly 1c38f4088ec7981d41e74c9c80696385f6541c4b]] [formerly d9369fb4b667cde0c0d3748cd398f2ba9d836c69 [formerly 6e5bda10632b577f58b58d80dcc7d6e275fc0a38] [formerly fdbe618e2a7cadec29cad59209864cd00d678d74 [formerly 5b20e98644622153333d6b5cc6b1f5ec1c29f759]]]] Former-commit-id: 557791dbf48dcfe72f9c77ab4dae990682d0ccd1 [formerly 344e05a0088f253f8e52e84cfe1c1593cfbe2625] [formerly 1a52c34b359d7ad4de84dab50d5d08199f1b64d7 [formerly ed1287afd1db3dcd2a964365355e45cca944e1d4]] [formerly c0fc7d644f1a5b005e6050ba3e98d960ccf8650e [formerly 46468fa4ff61ec11af3c7a1090b777ec2beffebc] [formerly 04e4ccc0f421cbd7f77438398374889b5d7907de [formerly d8f4305146d18d27aba906d7b588911ead4033b7]]] Former-commit-id: a5e5a2c8dabbfec0d099c95aa49d893014df726f [formerly 851a5acd34dce32344ba9a9ffc1e6137a8db4b76] [formerly d3d6bc516150bdbcee33f11dc382ceee37f53e32 [formerly d5e29f7c9bf84b87162ba3bbeb026e7b7493ca1c]] Former-commit-id: 855d9fd52887e42e8bc2ecd45e5ac6b95527e389 [formerly a69cbe46e78e5acda6ada2fbb5aad9ab6234dd71] Former-commit-id: 9a6a89962ccfc220e8c4d1b81c796a156598954e --- d3m/d3m/index.py | 4 +- "docs/\\" | 39 +++++++ docs/source/getting_started.rst | 4 +- .../img/{framework.pdf => tods_framework.pdf} | Bin 53363 -> 51551 bytes docs/source/overview.rst | 109 ++++-------------- examples/build_IsolationForest_pipline.py | 10 +- examples/build_LODA_pipline.py | 6 - examples/evaluate_default_pipeline.py | 1 + 8 files changed, 74 insertions(+), 99 deletions(-) create mode 100644 "docs/\\" rename docs/source/img/{framework.pdf => tods_framework.pdf} (67%) diff --git a/d3m/d3m/index.py b/d3m/d3m/index.py index 8f948fa..4b9dd88 100644 --- a/d3m/d3m/index.py +++ b/d3m/d3m/index.py @@ -107,8 +107,8 @@ def get_primitive(primitive_path: str) -> typing.Type[base.PrimitiveBase]: if not primitive_path: raise exceptions.InvalidArgumentValueError("Primitive path is required.") - if not primitive_path.startswith('d3m.primitives.'): - raise exceptions.InvalidArgumentValueError("Primitive path does not start with \"d3m.primitives\".") + #if not primitive_path.startswith('d3m.primitives.'): + # raise exceptions.InvalidArgumentValueError("Primitive path does not start with \"d3m.primitives\".") path, name = primitive_path.rsplit('.', 1) diff --git "a/docs/\\" "b/docs/\\" new file mode 100644 index 0000000..dbf51cb --- /dev/null +++ "b/docs/\\" @@ -0,0 +1,39 @@ +Overview +======== + +Design Principles +~~~~~~~~~~~~~~~~~ + +TODS follows the design principal of `D3M `_. +The toolkit wraps each function into ``Primitive`` class with unified +interfaces. The goal of this toolkit is to enable the users to easily develop +outlier detection system for time series data. The following design principles +are applied when developing the toolkit: + * **.** Results on the environments can be reproduced. The same result should be obtained with the same random seed in different runs. + * **Accessible.** The experiences are collected and well organized after each game with easy-to-use interfaces. Uses can conveniently configure state representation, action encoding, reward design, or even the game rules. + * **Scalable.** New card environments can be added conveniently into the toolkit with the above design principles. We also try to minimize the dependencies in the toolkit so that the codes can be easily maintained. + +TODS High-level Design +~~~~~~~~~~~~~~~~~~~~~~~~ + + +.. image:: img/framework.pdf + :width: 800 + + + +Data Processing +--------------- + + +Timeseries Processing +--------------------- + +Feature Analysis +---------------- + +Detection Algorithms +--------------------- + +Reincforcement +-------------- diff --git a/docs/source/getting_started.rst b/docs/source/getting_started.rst index c1f96ba..4c46f7d 100644 --- a/docs/source/getting_started.rst +++ b/docs/source/getting_started.rst @@ -5,8 +5,8 @@ In this document, we provide some toy examples for getting started. All the examples in this document and even more examples are available in `examples/ `__. -Playing with Random Agents --------------------------- +Constructing Point-wise Detection on NAB Dataset +------------------------------------------------ We have set up a random agent that can play randomly on each environment. An example of applying a random agent on Blackjack is as diff --git a/docs/source/img/framework.pdf b/docs/source/img/tods_framework.pdf similarity index 67% rename from docs/source/img/framework.pdf rename to docs/source/img/tods_framework.pdf index 692da33497122eeaa558a7eb8fd968c5b78272fa..dbd270864a4a61d29f8d468a3fe69b3dbd853dc9 100644 GIT binary patch delta 14956 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 X@8Du@Yy!sy;smq6QBsP?iNgIKOSXo& delta 16749 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 Z`@Z;h4S+WkG5-rjRuC)uf53?Ne*lZ)Kp_AC diff --git a/docs/source/overview.rst b/docs/source/overview.rst index 9f402c7..1012330 100644 --- a/docs/source/overview.rst +++ b/docs/source/overview.rst @@ -1,101 +1,42 @@ Overview ======== -Design Principles -~~~~~~~~~~~~~~~~~ - -The toolkit wraps each game by ``Env`` class with easy-to-use -interfaces. The goal of this toolkit is to enable the users to focus on -algorithm development without caring about the environment. The -following design principles are applied when developing the toolkit: - * **Reproducible.** Results on the environments can be reproduced. The same result should be obtained with the same random seed in different runs. - * **Accessible.** The experiences are collected and well organized after each game with easy-to-use interfaces. Uses can conveniently configure state representation, action encoding, reward design, or even the game rules. - * **Scalable.** New card environments can be added conveniently into the toolkit with the above design principles. We also try to minimize the dependencies in the toolkit so that the codes can be easily maintained. +TODS follows the design principal of `D3M `_. +The toolkit wraps each function into ``Primitive`` class with an unified +interface for various functionalities. The goal of this toolkit is to enable +the users to easily develop outlier detection system for multivariate time series data. +TODS provides three pervasive outlier scenarios for the given time series data. + * **Point-wise Outliers** are the outliers that occur on time points. In other words, each time point in the time series data could be an outlier. + * **Pattern-wise Outliers** refer to the scenario that each outlier is define as a subsequence. It is also known as collective outlier detection. + * **System-wise Outliers** are defined as a set of time series. For example, each set of time series represents a device (system) that equipped with multiple sensors, where each sensor is represented as an univariate time series. The goal is to detect the anomalous devices from the normal ones. TODS High-level Design ~~~~~~~~~~~~~~~~~~~~~~~~ +Following the typical machine learning pipeline, there are 6 modules lie in TODS: Data prociessing, time series processing, feature analysis, detection algorithms and reinforcement module. -This document introduces the high-level design for the environments, the -games, and the agents (algorithms). - -.. image:: img/framework.pdf +.. image:: img/tods_framework.pdf :width: 800 -Data-Processing +Data Processing --------------- +Data processing aims on processing data following the tabular fashion. The functionalities including: dataset loading, data filtering, data validation, data binarization, and timestamp transformation. -We wrap each game with an ``Env`` class. The responsibility of ``Env`` -is to help you generate trajectories of the games. For developing -Reinforcement Learning (RL) algorithms, we recommend to use the -following interfaces: - -- ``set_agents``: This function tells the ``Env`` what agents will be - used to perform actions in the game. Different games may have a - different number of agents. The input of the function is a list of - ``Agent`` class. For example, - ``env.set_agent([RandomAgent(), RandomAgent()])`` indicates that two - random agents will be used to generate the trajectories. -- ``run``: After setting the agents, this interface will run a complete - trajectory of the game, calculate the reward for each transition, and - reorganize the data so that it can be directly fed into a RL - algorithm. - -For advanced access to the environment, such as traversal of the game -tree, we provide the following interfaces: - -- ``step``: Given the current state, the environment takes one step - forward, and returns the next state and the next player. -- ``step_back``: Takes one step backward. The environment will restore - to the last state. The ``step_back`` is defaultly turned off since it - requires expensively recoeding previous states. To turn it on, set - ``allow_step_back = True`` when ``make`` environments. -- ``get_payoffs``: At the end of the game, this function can be called - to obtain the payoffs for each player. - -We also support single-agent mode and human mode. Examples can be found -in ``examples/``. - -- Single agent mode: single-agent environments are developped by - simulating other players with pre-trained models or rule-based - models. You can enable single-agent mode by - ``rlcard.make(ENV_ID, config={'single_agent_mode':True})``. Then the - ``step`` function will return ``(next_state, reward, done)`` just as - common single-agent environments. ``env.reset()`` will reset the game - and return the first state. - -Games ------ - -Card games usually have similar structures. We abstract some concepts in -card games and follow the same design pattern. In this way, -users/developers can easily dig into the code and change the rules for -research purpose. Specifically, the following classes are used in all -the games: +Timeseries Processing +--------------------- +Time series processing provides multiple time series-specific preprocessing techniques including: seasonality/trend decomposition, time series transformation/scaling/smoothing. -- ``Game``: A game is defined as a complete sequence starting from one - of the non-terminal states to a terminal state. -- ``Round``: A round is a part of the sequence of a game. Most card - games can be naturally divided into multiple rounds. -- ``Dealer``: A dealer is responsible for shuffling and allocating a - deck of cards. -- ``Judger``: A judger is responsible for making major decisions at the - end of a round or a game. -- ``Player``: A player is a role who plays cards following a strategy. +Feature Analysis +---------------- +Feature analysis module provides exhaustive feature extraction techniques from three aspects: Time domain, frequency domain and latent factor models. +There are 30 feature extraction methods including statistical methods, time series filters, spectral transformations, and matrix factorization models. -To summarize, in one ``Game``, a ``Dealer`` deals the cards for each -``Player``. In each ``Round`` of the game, a ``Judger`` will make major -decisions about the next round and the payoffs in the end of the game. +Detection Algorithms +--------------------- +Based on the three scenarios above, we provide multiple algorithms including traditional approaches (e.g. IForest, Autoregression), heuristic methods (e.g. HotSax algorithm, Matrix Profile), deep learning methods (e.g. RNN-LSTM, GAN, VAE), and ensemble methods to address each kind of outlier. -Agents ------- +Reincforcement Module +---------------------- +Reinforcement module is designed for improve the existed model with human expertise. Specifically, rule-based filtering has been developed to allow users to transform the domain knowledge into rule filters, active learning based methods will be involved in the near future as well. -We provide examples of several representative algorithms and wrap them -as ``Agent`` to show how a learning algorithm can be connected to the -toolkit. The first example is DQN which is a representative of the -Reinforcement Learning (RL) algorithms category. The second example is -NFSP which is a representative of the Reinforcement Learning (RL) with -self-play. We also provide CFR and DeepCFR which belong to Conterfactual -Regret Minimization (CFR) category. Other algorithms from these three -categories can be connected in similar ways. diff --git a/examples/build_IsolationForest_pipline.py b/examples/build_IsolationForest_pipline.py index e993d78..febd5b7 100644 --- a/examples/build_IsolationForest_pipline.py +++ b/examples/build_IsolationForest_pipline.py @@ -100,8 +100,8 @@ with open('example_pipeline.json', 'w') as f: f.write(data) print(data) -# Output to YAML -yaml = pipeline_description.to_yaml() -with open('pipeline.yml', 'w') as f: - f.write(yaml) -print(yaml) +## Output to YAML +#yaml = pipeline_description.to_yaml() +#with open('pipeline.yml', 'w') as f: +# f.write(yaml) +#print(yaml) diff --git a/examples/build_LODA_pipline.py b/examples/build_LODA_pipline.py index bf67f33..039298f 100644 --- a/examples/build_LODA_pipline.py +++ b/examples/build_LODA_pipline.py @@ -70,9 +70,3 @@ with open('example_pipeline.json', 'w') as f: f.write(data) print(data) -# Output to YAML -yaml = pipeline_description.to_yaml() -with open('pipeline.yml', 'w') as f: - f.write(yaml) -print(yaml) - diff --git a/examples/evaluate_default_pipeline.py b/examples/evaluate_default_pipeline.py index cac0155..1c6b7b5 100644 --- a/examples/evaluate_default_pipeline.py +++ b/examples/evaluate_default_pipeline.py @@ -5,6 +5,7 @@ from searcher.utils import generate_dataset_problem, evaluate_pipeline table_path = 'datasets/yahoo_sub_5.csv' target_index = 6 # what column is the target + #table_path = 'datasets/NAB/realTweets/labeled_Twitter_volume_IBM.csv' # The path of the dataset time_limit = 30 # How many seconds you wanna search #metric = 'F1' # F1 on label 1