diff --git a/CHANGES.txt b/CHANGES.txt index f9427fac6e199981e4a384cea5215dc0a313c423..95fb07de76ba67e50ee4d62f33a096a53e9d4000 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -48,6 +48,13 @@ v<0.6.6>, <12/18/2018> -- Refactor docstring from rst to numpydoc. v<0.6.6b1>, <12/18/2018> -- Pre-release of V0.6.6. v<0.6.6>, <12/21/2018> -- Redesign visualize function for all examples. v<0.6.6>, <12/23/2018> -- Refactor all docstring to numpydoc. +v<0.6.7>, <12/25/2018> -- Documentation clean-up. +v<0.6.7>, <12/25/2018> -- Optimize LOCI with numba. +v<0.6.7>, <12/26/2018> -- Refactor Feature Bagging and GAAL based models. +v<0.6.7>, <12/27/2018> -- Refactor test cases for better coverage. +v<0.6.7>, <12/28/2018> -- Redesign visualize function for all examples. +v<0.6.7>, <12/30/2018> -- Add new models to jupyter notebook and benchmark. + diff --git a/README.rst b/README.rst index ded0fe34d7cb4c87b99d3c62e34952b87ee7fe67..c39d9d42dd190694ef1abf78444b099835b4ba2f 100644 --- a/README.rst +++ b/README.rst @@ -19,12 +19,12 @@ Python Outlier Detection (PyOD) .. image:: https://img.shields.io/github/stars/yzhao062/pyod.svg - :target: https://github.com/yzhao062/Pyod/stargazers + :target: https://github.com/yzhao062/pyod/stargazers :alt: GitHub stars .. image:: https://img.shields.io/github/forks/yzhao062/pyod.svg - :target: https://github.com/yzhao062/Pyod/network + :target: https://github.com/yzhao062/pyod/network :alt: GitHub forks @@ -62,7 +62,7 @@ Python Outlier Detection (PyOD) .. image:: https://api.codeclimate.com/v1/badges/bdc3d8d0454274c753c4/maintainability - :target: https://codeclimate.com/github/yzhao062/Pyod/maintainability + :target: https://codeclimate.com/github/yzhao062/pyod/maintainability :alt: Maintainability ----- @@ -86,8 +86,8 @@ PyOD contains some neural network based models, e.g., AutoEncoders, which are implemented in keras. However, PyOD would **NOT** install **Keras** and/or **TensorFlow** automatically. This reduces the risk of damaging your local installations. So you should install keras and back-end libraries like TensorFlow, if you want -to use neural net based models. An instruction is provided: `neural-net FAQ <https://github.com/yzhao062/pyod/wiki/Setting-up-Keras-and-Tensorflow-for-Neural-net-Based-models>`_ -Similarly, some models depend on **xgboost**, and PyOD would **NOT** install it by default. +to use neural net based models. An instruction is provided: `neural-net FAQ <https://github.com/yzhao062/pyod/wiki/Setting-up-Keras-and-Tensorflow-for-Neural-net-Based-models>`_. +Similarly, some models depend on **xgboost**, which would **NOT** be installed by default. **Key Links and Resources**\ : @@ -137,7 +137,7 @@ Probabilistic SOS Stochastic Outlier Selection Outlier Ensembles IForest Isolation Forest 2008 [#Liu2008Isolation]_ Outlier Ensembles Feature Bagging 2005 [#Lazarevic2005Feature]_ Outlier Ensembles LSCP LSCP: Locally Selective Combination of Parallel Outlier Ensembles 2019 [#Zhao2019LSCP]_ -Outlier Ensembles XGBOD **Supervised** XGBOD: Improving Supervised Outlier Detection with Unsupervised Representation Learning 2018 [#Zhao2018XGBOD]_ +Outlier Ensembles XGBOD Extreme Boosting Based Outlier Detection **(Supervised)** 2018 [#Zhao2018XGBOD]_ Neural Networks AutoEncoder Fully connected AutoEncoder (use reconstruction error as the outlier score) [#Aggarwal2015Outlier]_ [Ch.3] Neural Networks SO_GAAL Single-Objective Generative Adversarial Active Learning 2019 [#Liu2018Generative]_ Neural Networks MO_GAAL Multiple-Objective Generative Adversarial Active Learning 2019 [#Liu2018Generative]_ @@ -209,7 +209,7 @@ Alternatively, install from github directly (\ **NOT Recommended**\ ) * XGBoost (optional, required for XGBOD) **Known Issue 1**\ : Running examples needs Matplotlib, which may throw errors in conda -virtual environment on mac OS. See reasons and solutions `issue6 <https://github.com/yzhao062/Pyod/issues/6>`_. +virtual environment on mac OS. See reasons and solutions `issue6 <https://github.com/yzhao062/pyod/issues/6>`_. **Known Issue 2**\ : Keras and/or TensorFlow are listed as optional. However, they are both required if you want to use neural network based models, such as @@ -263,8 +263,8 @@ Algorithm Benchmark For Jupyter Notebooks, please navigate to **"/notebooks/Compare All Models.ipynb"** -.. image:: https://raw.githubusercontent.com/yzhao062/Pyod/master/examples/ALL.png - :target: https://raw.githubusercontent.com/yzhao062/Pyod/master/examples/ALL.png +.. image:: https://raw.githubusercontent.com/yzhao062/pyod/master/examples/ALL.png + :target: https://raw.githubusercontent.com/yzhao062/pyod/master/examples/ALL.png :alt: Comparision_of_All To provide an overview and quick guidance of the implemented models, a benchmark @@ -283,7 +283,7 @@ are provided: Check the latest result `benchmark <https://pyod.readthedocs.io/en/latest/benchmark.html>`_. You are welcome to replicate this process by running -`benchmark.py <https://github.com/yzhao062/Pyod/blob/master/notebooks/benchmark.py>`_. +`benchmark.py <https://github.com/yzhao062/pyod/blob/master/notebooks/benchmark.py>`_. ---- @@ -347,10 +347,10 @@ More detailed instruction of running examples can be found `examples. <https://g visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, y_test_pred, show_figure=True, save_figure=False) -Visualization (\ `knn_figure <https://raw.githubusercontent.com/yzhao062/Pyod/master/examples/KNN.png>`_\ ): +Visualization (\ `knn_figure <https://raw.githubusercontent.com/yzhao062/pyod/master/examples/KNN.png>`_\ ): -.. image:: https://raw.githubusercontent.com/yzhao062/Pyod/master/examples/KNN.png - :target: https://raw.githubusercontent.com/yzhao062/Pyod/master/examples/KNN.png +.. image:: https://raw.githubusercontent.com/yzhao062/pyod/master/examples/KNN.png + :target: https://raw.githubusercontent.com/yzhao062/pyod/master/examples/KNN.png :alt: kNN example figure @@ -360,8 +360,8 @@ Quick Start for Combining Outlier Scores from Various Base Detectors ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "examples/comb_example.py" illustrates the APIs for combining multiple base detectors -(\ `comb_example.py <https://github.com/yzhao062/Pyod/blob/master/examples/comb_example.py>`_\ , -`Jupyter Notebooks <https://mybinder.org/v2/gh/yzhao062/Pyod/master>`_\ ). +(\ `comb_example.py <https://github.com/yzhao062/pyod/blob/master/examples/comb_example.py>`_\ , +`Jupyter Notebooks <https://mybinder.org/v2/gh/yzhao062/pyod/master>`_\ ). For Jupyter Notebooks, please navigate to **"/notebooks/Model Combination.ipynb"** diff --git a/docs/benchmark.rst b/docs/benchmark.rst index 29a1cde4f083110ea8827686babbe18ff37812b3..945fa6795374a4fb496933ba2ef52974122c8a49 100644 --- a/docs/benchmark.rst +++ b/docs/benchmark.rst @@ -7,11 +7,11 @@ Introduction To provide an overview and guidance of the implemented models, benchmark is supplied below. -In total, 17 benchmark data are used for comparision, all datasets could be +In total, 16 benchmark data are used for comparision, all datasets could be downloaded at `ODDS <http://odds.cs.stonybrook.edu/#table1>`_. For each dataset, it is first split into 60% for training and 40% for testing. -All experiments are repeated 20 times independently with different splits. +All experiments are repeated 10 times independently with different splits. The mean of 20 trials is regarded as the final result. Three evaluation metrics are provided: @@ -19,20 +19,24 @@ are provided: - Precision @ rank n (P@N) - Execution time +**Note**: LSCP is a combination framework. In this benchmark it is based on 5 +LOF detector (n_neighbors=[10,...,50]), so it is only meaningful to compare +LSCP with LOF, instead of other detection algorithms. + You are welcome to replicate this process by running: `benchmark.py <https://github.com/yzhao062/Pyod/blob/master/notebooks/benchmark.py>`_ ROC Performance --------------- -.. csv-table:: ROC Performances (average of 20 independent trials) +.. csv-table:: ROC Performances (average of 10 independent trials) :file: tables/roc.csv :header-rows: 1 P@N Performance --------------- -.. csv-table:: Precision @ N Performances (average of 20 independent trials) +.. csv-table:: Precision @ N Performances (average of 10 independent trials) :file: tables/prc.csv :header-rows: 1 @@ -40,7 +44,7 @@ P@N Performance Execution Time -------------- -.. csv-table:: Time Complexity in Seconds (average of 20 independent trials) +.. csv-table:: Time Complexity in Seconds (average of 10 independent trials) :file: tables/time.csv :header-rows: 1 diff --git a/docs/figs/ALL.png b/docs/figs/ALL.png index d61d834db99721a3edf566c9846433c6a591035a..57b8927754de6008bcbb79d2559dd3a6a62a621f 100644 Binary files a/docs/figs/ALL.png and b/docs/figs/ALL.png differ diff --git a/docs/figs/KNN.png b/docs/figs/KNN.png index ae83f929c4d1d8bd293b7483d67fbd29cc82f740..cfcc0f4ca1a17e2ec12190aba309f685ea037f7d 100644 Binary files a/docs/figs/KNN.png and b/docs/figs/KNN.png differ diff --git a/docs/index.rst b/docs/index.rst index e03cefc93c389ee126308cbea487a46c597336b7..2953d7d92869f5732c44904ff0f9327f37838443 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -91,8 +91,8 @@ implemented in **Keras**. However, by default PyOD would **NOT** install **Keras This reduces the risk of damaging your local installations, because TensorFlow installation can by tricky depending on your OS/Python version. You should install **Keras** and back-end libraries like **TensorFlow** by yourself, if you want to use neural network based models. -An instruction is provided:`neural-net FAQ <https://github.com/yzhao062/pyod/wiki/Setting-up-Keras-and-Tensorflow-for-Neural-net-Based-models>`_. -Similarly, some models depend on **xgboost**, and PyOD would **NOT** install it by default. +An instruction is provided: `neural-net FAQ <https://github.com/yzhao062/pyod/wiki/Setting-up-Keras-and-Tensorflow-for-Neural-net-Based-models>`_. +Similarly, some models depend on **xgboost**, which would **NOT** be installed by default. **Key Links and Resources**\ : @@ -104,64 +104,67 @@ Similarly, some models depend on **xgboost**, and PyOD would **NOT** install it ---- -Important Functionalities -========================= -PyOD toolkit consists of three major groups of functionalities: (i) outlier -detection algorithms; (ii) outlier ensemble frameworks and (iii) outlier -detection utility functions. +Quick Introduction +================== -**Individual Detection Algorithms**: +PyOD toolkit consists of three major groups of functionalities: -1. Linear Models for Outlier Detection: - - i. **PCA: Principal Component Analysis** (use the sum of - weighted projected distances to the eigenvector hyperplane as outlier - scores) :cite:`a-shyu2003novel`: :class:`pyod.models.pca.PCA` - ii. **MCD: Minimum Covariance Determinant** (use the mahalanobis distances - as the outlier scores) :cite:`a-rousseeuw1999fast,a-hardin2004outlier`: :class:`pyod.models.mcd.MCD` - iii. **One-Class Support Vector Machines** :cite:`a-ma2003time`: :class:`pyod.models.ocsvm.OCSVM` - -2. Proximity-Based Outlier Detection Models: - - i. **LOF: Local Outlier Factor** :cite:`a-breunig2000lof`: :class:`pyod.models.lof.LOF` - ii. **CBLOF: Clustering-Based Local Outlier Factor** :cite:`a-he2003discovering`: :class:`pyod.models.cblof.CBLOF` - iii. **LOCI: Local Correlation Integral** :cite:`a-papadimitriou2003loci`: :class:`pyod.models.loci.LOCI` - iv. **kNN: k Nearest Neighbors** (use the distance to the kth nearest neighbor as the outlier score) :cite:`a-ramaswamy2000efficient,a-angiulli2002fast`: :class:`pyod.models.knn.KNN` - v. **Average kNN** (use the average distance to k nearest neighbors as the outlier score): :class:`pyod.models.knn.KNN` - vi. **Median kNN** (use the median distance to k nearest neighbors as the outlier score): :class:`pyod.models.knn.KNN` - vii. **HBOS: Histogram-based Outlier Score** :cite:`a-goldstein2012histogram`: :class:`pyod.models.hbos.HBOS` - - -3. Probabilistic Models for Outlier Detection: - - i. **ABOD: Angle-Based Outlier Detection** :cite:`a-kriegel2008angle`: :class:`pyod.models.abod.ABOD` - ii. **FastABOD: Fast Angle-Based Outlier Detection using approximation** :cite:`a-kriegel2008angle`: :class:`pyod.models.abod.ABOD` - iii. **SOS: Stochastic Outlier Selection** :cite:`a-janssens2012stochastic`: :class:`pyod.models.sos.SOS` +**(i) Individual Detection Algorithms** : -4. Outlier Ensembles: - - i. **Isolation Forest** :cite:`a-liu2008isolation,a-liu2012isolation`: :class:`pyod.models.iforest.IForest` - ii. **Feature Bagging** :cite:`a-lazarevic2005feature`: :class:`pyod.models.feature_bagging.FeatureBagging` - iii. **LSCP**: Locally Selective Combination of Parallel Outlier Ensembles :cite:`a-zhao2019lscp`: :class:`pyod.models.lscp.LSCP` - iv. **XGBOD** :cite:`a-zhao2018xgbod`: :class:`pyod.models.xgbod.XGBOD` - - -5. Neural Networks and Deep Learning Models (implemented in Keras): - - i. **AutoEncoder with Fully Connected NN** :cite:`a-aggarwal2015outlier`: :class:`pyod.models.auto_encoder.AutoEncoder` - ii. **Single-Objective Generative Adversarial Active Learning (SO_GAAL)** :cite:`a-liu2018generative`: :class:`pyod.models.so_gaal.SO_GAAL` - iii. **Multi-Objective Generative Adversarial Active Learning (MO_GAAL)** :cite:`a-liu2018generative`: :class:`pyod.models.mo_gaal.MO_GAAL` - - -**Outlier Detector/Scores Combination Frameworks**: +1. Linear Models for Outlier Detection: -1. **Feature Bagging**: build various detectors on random selected features :cite:`a-lazarevic2005feature`: :class:`pyod.models.feature_bagging.FeatureBagging` -2. **LSCP**: Locally Selective Combination of Parallel Outlier Ensembles :cite:`a-zhao2019lscp`: :class:`pyod.models.lscp.LSCP` -3. **Average** & **Weighted Average**: simply combine scores by averaging :cite:`a-aggarwal2015theoretical`: :func:`pyod.models.combination.average` -4. **Maximization**: simply combine scores by taking the maximum across all base detectors :cite:`a-aggarwal2015theoretical`: :func:`pyod.models.combination.maximization` -5. **Average of Maximum (AOM)** :cite:`a-aggarwal2015theoretical`: :func:`pyod.models.combination.aom` -6. **Maximum of Average (MOA)** :cite:`a-aggarwal2015theoretical`: :func:`pyod.models.combination.moa` -7. **Threshold Sum (Thresh)** :cite:`a-aggarwal2015theoretical` +=================== ================ ====================================================================================================== ===== =================================================== ====================================================== +Type Abbr Algorithm Year Class Ref +=================== ================ ====================================================================================================== ===== =================================================== ====================================================== +Linear Model PCA Principal Component Analysis (the sum of weighted projected distances to the eigenvector hyperplanes) 2003 :class:`pyod.models.pca.PCA` :cite:`a-shyu2003novel` +Linear Model MCD Minimum Covariance Determinant (use the mahalanobis distances as the outlier scores) 1999 :class:`pyod.models.mcd.MCD` :cite:`a-rousseeuw1999fast,a-hardin2004outlier` +Linear Model OCSVM One-Class Support Vector Machines 2003 :class:`pyod.models.ocsvm.OCSVM` :cite:`a-ma2003time` +Proximity-Based LOF Local Outlier Factor 2000 :class:`pyod.models.lof.LOF` :cite:`a-breunig2000lof` +Proximity-Based CBLOF Clustering-Based Local Outlier Factor 2003 :class:`pyod.models.cblof.CBLOF` :cite:`a-he2003discovering`: +Proximity-Based LOCI LOCI: Fast outlier detection using the local correlation integral 2003 :class:`pyod.models.loci.LOCI` :cite:`a-papadimitriou2003loci` +Proximity-Based HBOS Histogram-based Outlier Score 2012 :class:`pyod.models.hbos.HBOS` :cite:`a-goldstein2012histogram` +Proximity-Based kNN k Nearest Neighbors (use the distance to the kth nearest neighbor as the outlier score 2000 :class:`pyod.models.knn.KNN` :cite:`a-ramaswamy2000efficient,a-angiulli2002fast` +Proximity-Based AvgKNN Average kNN (use the average distance to k nearest neighbors as the outlier score) 2002 :class:`pyod.models.knn.KNN` :cite:`a-ramaswamy2000efficient,a-angiulli2002fast` +Proximity-Based MedKNN Median kNN (use the median distance to k nearest neighbors as the outlier score) 2002 :class:`pyod.models.knn.KNN` :cite:`a-ramaswamy2000efficient,a-angiulli2002fast` +Probabilistic ABOD Angle-Based Outlier Detection 2008 :class:`pyod.models.abod.ABOD` :cite:`a-kriegel2008angle` +Probabilistic FastABOD Fast Angle-Based Outlier Detection using approximation 2008 :class:`pyod.models.abod.ABOD` :cite:`a-kriegel2008angle` +Probabilistic SOS Stochastic Outlier Selection 2012 :class:`pyod.models.sos.SOS` :cite:`a-janssens2012stochastic` +Outlier Ensembles IForest Isolation Forest 2008 :class:`pyod.models.iforest.IForest` :cite:`a-liu2008isolation,a-liu2012isolation` +Outlier Ensembles Feature Bagging 2005 :class:`pyod.models.feature_bagging.FeatureBagging` :cite:`a-lazarevic2005feature` +Outlier Ensembles LSCP LSCP: Locally Selective Combination of Parallel Outlier Ensembles 2019 :class:`pyod.models.lscp.LSCP` :cite:`a-zhao2019lscp` +Outlier Ensembles XGBOD Extreme Boosting Based Outlier Detection **(Supervised)** 2018 :class:`pyod.models.xgbod.XGBOD` :cite:`a-zhao2018xgbod` +Neural Networks AutoEncoder Fully connected AutoEncoder (use reconstruction error as the outlier score) 2015 :class:`pyod.models.auto_encoder.AutoEncoder` :cite:`a-aggarwal2015outlier` +Neural Networks SO_GAAL Single-Objective Generative Adversarial Active Learning 2019 :class:`pyod.models.so_gaal.SO_GAAL` :cite:`a-liu2018generative` +Neural Networks MO_GAAL Multiple-Objective Generative Adversarial Active Learning 2019 :class:`pyod.models.mo_gaal.MO_GAAL` :cite:`a-liu2018generative` +=================== ================ ====================================================================================================== ===== =================================================== ====================================================== + + +**(ii) Outlier Ensembles & Outlier Detector Combination Frameworks**: + + +=================== ================ ===================================================================================================== ===== =================================================== ====================================================== +Type Abbr Algorithm Year Ref +=================== ================ ===================================================================================================== ===== =================================================== ====================================================== +Outlier Ensembles Feature Bagging 2005 :class:`pyod.models.feature_bagging.FeatureBagging` :cite:`a-lazarevic2005feature` +Outlier Ensembles LSCP LSCP: Locally Selective Combination of Parallel Outlier Ensembles 2019 :class:`pyod.models.lscp.LSCP` :cite:`a-zhao2019lscp` +Combination Average Simple combination by averaging the scores 2015 :func:`pyod.models.combination.average` :cite:`a-aggarwal2015theoretical` +Combination Weighted Average Simple combination by averaging the scores with detector weights 2015 :func:`pyod.models.combination.average` :cite:`a-aggarwal2015theoretical` +Combination Maximization Simple combination by taking the maximum scores 2015 :func:`pyod.models.combination.maximization` :cite:`a-aggarwal2015theoretical` +Combination AOM Average of Maximum 2015 :func:`pyod.models.combination.aom` :cite:`a-aggarwal2015theoretical` +Combination MOA Maximization of Average 2015 :func:`pyod.models.combination.moa` :cite:`a-aggarwal2015theoretical` +=================== ================ ===================================================================================================== ===== =================================================== ====================================================== + + +**(iii) Utility Functions**: + +=================== ============================================= ===================================================================================================================================================== +Type Name Function +=================== ============================================= ===================================================================================================================================================== +Data :func:`pyod.utils.data.generate_data` Synthesized data generation; normal data is generated by a multivariate Gaussian and outliers are generated by a uniform distribution +Stat :func:`pyod.utils.stat_models.wpearsonr` Calculate the weighted Pearson correlation of two samples +Utility :func:`pyod.utils.utility.get_label_n` Turn raw outlier scores into binary labels by assign 1 to top n outlier scores +Utility :func:`pyod.utils.utility.precision_n_scores` calculate precision @ rank n +=================== ============================================= ===================================================================================================================================================== **Comparison of all implemented models** are made available below (`Code <https://github.com/yzhao062/Pyod/blob/master/examples/compare_all_models.py>`_, `Jupyter Notebooks <https://mybinder.org/v2/gh/yzhao062/Pyod/master>`_): diff --git a/docs/rebuild.bat b/docs/rebuild.bat index 5af83bea5d2bc531acec9d98d67e944a47364f14..446083c283eff3d54788b1c951f9a535a22c15c1 100644 --- a/docs/rebuild.bat +++ b/docs/rebuild.bat @@ -1,6 +1,7 @@ REM rebuild docs shortcut cd.. xcopy examples\*.png docs\figs /Y +xcopy notebooks\*.csv docs\tables\ /Y cd docs call make clean call make html \ No newline at end of file diff --git a/docs/tables/prc.csv b/docs/tables/prc.csv index b88fd9f54b3c3601e09b43eb8e6b5013ace4e577..c9ee4c351ba9e36e7c8d84fdec67d30fe9146e71 100644 --- a/docs/tables/prc.csv +++ b/docs/tables/prc.csv @@ -1,18 +1,17 @@ -Data,#Samples,# Dimensions,Outlier Perc,ABOD,CBLOF,FB,HBOS,IForest,KNN,LOF,MCD,OCSVM,PCA -arrhythmia,452,274,14.6018,0.3701,0.4275,0.4022,0.5065,0.5026,0.4260,0.4153,0.3885,0.4364,0.4400 -cardio,1831,21,9.6122,0.2429,0.5608,0.1754,0.4610,0.5199,0.3495,0.1619,0.4617,0.5267,0.6219 -glass,214,9,4.2056,0.1326,0.0713,0.1005,0.0100,0.0713,0.0838,0.1338,0.0000,0.1338,0.0713 -ionosphere,351,33,35.8974,0.8468,0.6150,0.7330,0.3305,0.6628,0.8675,0.7360,0.8938,0.7344,0.6023 -letter,1600,32,6.2500,0.3861,0.0515,0.3983,0.0799,0.0869,0.3440,0.3814,0.1796,0.1510,0.0827 -lympho,148,18,4.0541,0.4825,0.7300,0.7050,0.8400,0.7883,0.7050,0.7050,0.3967,0.7050,0.7050 -mnist,7603,100,9.2069,0.3575,0.4168,0.3345,0.1176,0.2964,0.4220,0.3363,0.3164,0.3924,0.3851 -musk,3062,166,3.1679,0.0625,0.8507,0.2514,0.9802,0.9608,0.3018,0.2278,0.9769,1.0000,0.9812 -optdigits,5216,64,2.8758,0.0186,0.0000,0.0298,0.2236,0.0199,0.0000,0.0314,0.0000,0.0000,0.0000 -pendigits,6870,16,2.2707,0.0783,0.2784,0.0663,0.3012,0.3309,0.1027,0.0714,0.0756,0.3209,0.3091 -pima,768,8,34.8958,0.5145,0.5490,0.4484,0.5325,0.5017,0.5382,0.4490,0.4937,0.4654,0.4964 -satellite,6435,36,31.6395,0.3899,0.4289,0.3889,0.5668,0.5647,0.4990,0.3872,0.6856,0.5318,0.4761 -satimage-2,5803,36,1.2235,0.2089,0.7461,0.0622,0.6993,0.8598,0.3684,0.0560,0.6204,0.9308,0.8111 -shuttle,49097,9,7.1511,0.1958,0.9505,0.0831,0.9529,0.9520,0.2161,0.1423,0.7458,0.9559,0.9518 -vertebral,240,6,12.5000,0.0638,0.0141,0.0440,0.0184,0.0323,0.0314,0.0498,0.0153,0.0288,0.0166 -vowels,1456,12,3.4341,0.5208,0.0738,0.3243,0.1467,0.1911,0.4788,0.3492,0.1172,0.2737,0.1327 -wbc,378,30,5.5556,0.3357,0.5070,0.5335,0.6115,0.5213,0.5094,0.5363,0.4359,0.5241,0.5062 +Data,#Samples,# Dimensions,Outlier Perc,ABOD,CBLOF,FB,HBOS,IForest,KNN,LOF,MCD,OCSVM,PCA,LSCP +arrhythmia,452,274,14.6018,0.3808,0.4471,0.415,0.5111,0.5125,0.4464,0.4334,0.3995,0.4614,0.4613,0.4234 +cardio,1831,21,9.6122,0.2374,0.5747,0.1673,0.4476,0.509,0.3323,0.1541,0.4479,0.5011,0.609,0.176 +glass,214,9,4.2056,0.1702,0.0726,0.1059,0,0.0726,0.0726,0.1476,0,0.1726,0.0726,0.1226 +ionosphere,351,33,35.8974,0.8442,0.5815,0.696,0.3295,0.6477,0.8602,0.7063,0.881,0.7,0.5729,0.7184 +letter,1600,32,6.25,0.3801,0.0554,0.377,0.0715,0.092,0.3312,0.3641,0.1904,0.151,0.0875,0.3165 +lympho,148,18,4.0541,0.4483,0.7517,0.7517,0.8467,0.7517,0.7517,0.7517,0.435,0.7517,0.7517,0.7517 +mnist,7603,100,9.2069,0.3555,0.4271,0.3317,0.1188,0.2897,0.4204,0.3343,0.2485,0.3962,0.3846,0.3502 +musk,3062,166,3.1679,0.0507,0.8481,0.2,0.9783,0.9667,0.2733,0.1695,0.977,1,0.9799,0.1358 +optdigits,5216,64,2.8758,0.006,0,0.0248,0.2194,0.0217,0,0.0234,0,0,0,0.022 +pendigits,6870,16,2.2707,0.0812,0.2801,0.0615,0.2979,0.3394,0.0984,0.0653,0.0881,0.3287,0.3187,0.0613 +pima,768,8,34.8958,0.5193,0.5558,0.4476,0.5424,0.5031,0.5413,0.4555,0.4953,0.4704,0.4943,0.4754 +satellite,6435,36,31.6395,0.3902,0.3951,0.3917,0.569,0.5694,0.4994,0.3893,0.6848,0.5346,0.4784,0.4071 +satimage-2,5803,36,1.2235,0.213,0.7846,0.0666,0.6939,0.853,0.3809,0.0555,0.6481,0.9356,0.8041,0.0508 +vertebral,240,6,12.5,0.0601,0.0183,0.0496,0.0071,0.031,0.0238,0.0506,0.0071,0.0238,0.0226,0.0506 +vowels,1456,12,3.4341,0.571,0.0731,0.323,0.1297,0.1802,0.5093,0.3551,0.1715,0.2791,0.1364,0.335 +wbc,378,30,5.5556,0.306,0.4985,0.5188,0.5817,0.5132,0.4952,0.5188,0.4568,0.5125,0.4767,0.5188 diff --git a/docs/tables/roc.csv b/docs/tables/roc.csv index a75f6cf6b13335cf62c5de7f22a196a4c860c89f..4a84c2c6f5e44a3e3499d3d0b602478b13fdd958 100644 --- a/docs/tables/roc.csv +++ b/docs/tables/roc.csv @@ -1,18 +1,17 @@ -Data,#Samples,# Dimensions,Outlier Perc,ABOD,CBLOF,FB,HBOS,IForest,KNN,LOF,MCD,OCSVM,PCA -arrhythmia,452,274,14.6018,0.7681,0.7860,0.7763,0.8211,0.8139,0.7854,0.7776,0.7774,0.7796,0.7806 -cardio,1831,21,9.6122,0.5845,0.9203,0.6031,0.8434,0.9243,0.7368,0.5806,0.8383,0.9382,0.9527 -glass,214,9,4.2056,0.7687,0.7668,0.8249,0.7063,0.7016,0.8260,0.8375,0.7697,0.5758,0.6285 -ionosphere,351,33,35.8974,0.9300,0.8239,0.8870,0.5569,0.8529,0.9350,0.8927,0.9592,0.8597,0.8056 -letter,1600,32,6.2500,0.8814,0.5244,0.8747,0.5880,0.6190,0.8748,0.8668,0.8064,0.6061,0.5242 -lympho,148,18,4.0541,0.9165,0.9625,0.9750,0.9964,0.9913,0.9723,0.9762,0.9008,0.9762,0.9838 -mnist,7603,100,9.2069,0.7820,0.8686,0.7188,0.5774,0.8028,0.8500,0.7193,0.8579,0.8521,0.8519 -musk,3062,166,3.1679,0.1915,0.9915,0.5596,1.0000,0.9994,0.8043,0.5641,0.9999,1.0000,1.0000 -optdigits,5216,64,2.8758,0.4737,0.5002,0.4634,0.8648,0.7145,0.3769,0.4642,0.3889,0.4942,0.5044 -pendigits,6870,16,2.2707,0.6853,0.9459,0.4734,0.9247,0.9435,0.7490,0.4750,0.8343,0.9310,0.9356 -pima,768,8,34.8958,0.6728,0.7220,0.6220,0.6983,0.6681,0.7051,0.6224,0.6716,0.6151,0.6413 -satellite,6435,36,31.6395,0.5717,0.6569,0.5567,0.7542,0.7013,0.6852,0.5570,0.8044,0.6603,0.5962 -satimage-2,5803,36,1.2235,0.8207,0.9757,0.4508,0.9771,0.9934,0.9546,0.4490,0.9954,0.9969,0.9784 -shuttle,49097,9,7.1511,0.6216,0.9915,0.4897,0.9859,0.9967,0.6519,0.5311,0.9903,0.9919,0.9899 -vertebral,240,6,12.5000,0.4153,0.3612,0.4076,0.3267,0.3874,0.3779,0.4093,0.3966,0.4459,0.4003 -vowels,1456,12,3.4341,0.9564,0.5946,0.9340,0.6704,0.7407,0.9654,0.9351,0.7452,0.7656,0.5949 -wbc,378,30,5.5556,0.9084,0.9331,0.9375,0.9540,0.9325,0.9398,0.9374,0.9164,0.9376,0.9240 +Data,#Samples,# Dimensions,Outlier Perc,ABOD,CBLOF,FB,HBOS,IForest,KNN,LOF,MCD,OCSVM,PCA,LSCP +arrhythmia,452,274,14.6018,0.7688,0.7854,0.7768,0.8219,0.811,0.7861,0.7787,0.779,0.7812,0.7815,0.7825 +cardio,1831,21,9.6122,0.5692,0.9269,0.6034,0.8351,0.9257,0.7236,0.5736,0.8267,0.9348,0.9504,0.7078 +glass,214,9,4.2056,0.7951,0.7953,0.8379,0.7389,0.7258,0.8508,0.8644,0.7877,0.6324,0.6747,0.8389 +ionosphere,351,33,35.8974,0.9248,0.8122,0.8677,0.5614,0.8487,0.9267,0.8753,0.9553,0.8419,0.7962,0.882 +letter,1600,32,6.25,0.8783,0.5364,0.8654,0.5927,0.6209,0.8766,0.8594,0.8083,0.6118,0.5283,0.8363 +lympho,148,18,4.0541,0.911,0.9712,0.9768,0.9957,0.991,0.9745,0.9771,0.9159,0.9759,0.9847,0.9771 +mnist,7603,100,9.2069,0.7815,0.8757,0.7152,0.5742,0.8003,0.8481,0.7161,0.8461,0.8529,0.8527,0.7652 +musk,3062,166,3.1679,0.1844,0.9911,0.5279,1,0.9995,0.7986,0.5287,0.9999,1,1,0.5029 +optdigits,5216,64,2.8758,0.4667,0.5081,0.4492,0.8732,0.7097,0.3708,0.45,0.3824,0.4997,0.5086,0.419 +pendigits,6870,16,2.2707,0.6878,0.9425,0.4699,0.9238,0.9434,0.7486,0.4698,0.8341,0.9303,0.9352,0.5036 +pima,768,8,34.8958,0.6794,0.7285,0.6271,0.7,0.6731,0.7078,0.6271,0.6753,0.6215,0.6481,0.6501 +satellite,6435,36,31.6395,0.5714,0.619,0.5567,0.7581,0.7075,0.6836,0.5573,0.8031,0.6622,0.5988,0.5722 +satimage-2,5803,36,1.2235,0.819,0.9827,0.4586,0.9804,0.9951,0.9536,0.4577,0.996,0.9978,0.9822,0.6852 +vertebral,240,6,12.5,0.4262,0.3964,0.4101,0.3263,0.3916,0.3817,0.4081,0.3971,0.4431,0.4027,0.3806 +vowels,1456,12,3.4341,0.9606,0.5993,0.9388,0.6727,0.7421,0.968,0.941,0.7912,0.7802,0.6027,0.944 +wbc,378,30,5.5556,0.9047,0.9264,0.9335,0.9516,0.9247,0.9366,0.9349,0.9169,0.9319,0.9159,0.9315 diff --git a/docs/tables/time.csv b/docs/tables/time.csv index 517c4871cf8ec1bdb3bd97294cccb106fa706627..9fe7432483882dc4a82e7737f30882b427f72d51 100644 --- a/docs/tables/time.csv +++ b/docs/tables/time.csv @@ -1,18 +1,17 @@ -Data,#Samples,# Dimensions,Outlier Perc,ABOD,CBLOF,FB,HBOS,IForest,KNN,LOF,MCD,OCSVM,PCA -arrhythmia,452,274,14.6018,0.1897,0.0208,0.4960,0.1764,0.1953,0.0693,0.0622,0.4535,0.0438,0.0500 -cardio,1831,21,9.6122,0.5269,0.0191,0.7138,0.0477,0.2172,0.1274,0.0873,0.4195,0.0749,0.0050 -glass,214,9,4.2056,0.0609,0.0138,0.0270,0.0023,0.1429,0.0035,0.0024,0.0306,0.0009,0.0009 -ionosphere,351,33,35.8974,0.0952,0.0152,0.0604,0.0200,0.1595,0.0131,0.0066,0.0509,0.0061,0.0022 -letter,1600,32,6.25,0.4705,0.0194,0.6510,0.0594,0.2070,0.1093,0.0794,0.8387,0.0757,0.0052 -lympho,148,18,4.0541,0.0458,0.0156,0.0209,0.0055,0.1423,0.0044,0.0016,0.0287,0.0020,0.0013 -mnist,7603,100,9.2069,7.2746,0.0431,43.1523,0.9436,1.5105,6.1927,5.9268,2.1594,4.4487,0.1317 -musk,3062,166,3.1679,2.4826,0.0383,12.4600,0.6279,0.9063,1.7377,1.6664,8.8137,1.2543,0.1417 -optdigits,5216,64,2.8758,2.9118,0.0306,12.7957,0.4684,0.6970,1.7736,1.6245,0.9663,1.4414,0.0435 -pendigits,6870,16,2.2707,2.0273,0.0321,3.8061,0.1324,0.5210,0.5515,0.5600,1.5072,0.8916,0.0057 -pima,768,8,34.8958,0.2145,0.0157,0.0860,0.0094,0.1756,0.0273,0.0098,0.0444,0.0090,0.0012 -satellite,6435,36,31.6395,2.3520,0.0299,7.4740,0.2875,0.6105,1.0051,0.9746,1.7334,1.3175,0.0204 -satimage-2,5803,36,1.2235,2.0371,0.0302,5.4883,0.2501,0.5044,0.7781,0.7186,1.5189,1.0377,0.0139 -shuttle,49097,9,7.1511,18.3305,0.0838,3057.8930,0.5245,3.0254,8.1649,10.7148,10.5531,42.8195,0.0327 -vertebral,240,6,12.5,0.0666,0.0138,0.0258,0.0037,0.1483,0.0077,0.0024,0.0380,0.0018,0.0012 -vowels,1456,12,3.4341,0.4018,0.0172,0.2683,0.0235,0.2117,0.0627,0.0321,0.6207,0.0339,0.0017 -wbc,378,30,5.5556,0.1059,0.0179,0.0662,0.0201,0.1639,0.0160,0.0070,0.0527,0.0049,0.0018 +Data,#Samples,# Dimensions,Outlier Perc,ABOD,CBLOF,FB,HBOS,IForest,KNN,LOF,MCD,OCSVM,PCA,LSCP +arrhythmia,452,274,14.6018,0.374,0.1409,0.5566,0.1469,0.2572,0.0976,0.0723,0.6016,0.0476,0.0596,1.8041 +cardio,1831,21,9.6122,0.3637,0.0217,0.8016,0.0056,0.2867,0.2226,0.105,0.5143,0.0914,0.0038,3.3281 +glass,214,9,4.2056,0.0352,0.0128,0.0278,0.0016,0.1567,0.0127,0.0022,0.0383,0.0015,0.001,0.2012 +ionosphere,351,33,35.8974,0.0587,0.0169,0.066,0.0078,0.1849,0.0228,0.006,0.0578,0.0051,0.0022,0.3703 +letter,1600,32,6.25,0.3319,0.0221,0.7389,0.008,0.2572,0.1637,0.0924,0.9713,0.0873,0.0045,3.1145 +lympho,148,18,4.0541,0.0284,0.0171,0.027,0.0043,0.1667,0.0087,0.0021,0.0338,0.0012,0.001,0.1388 +mnist,7603,100,9.2069,7.0412,0.0475,45.7463,0.0478,1.9339,6.7763,6.4203,2.5654,4.7525,0.1513,146.2224 +musk,3062,166,3.1679,2.0537,0.0455,11.7174,0.0493,0.9907,1.7191,1.5493,9.68,1.212,0.1475,38.6129 +optdigits,5216,64,2.8758,2.1879,0.0318,11.8058,0.0255,0.6474,1.7063,1.4831,0.9539,1.3605,0.0445,38.288 +pendigits,6870,16,2.2707,1.2799,0.0326,3.6209,0.008,0.5069,0.6721,0.536,1.566,0.8901,0.0054,15.3573 +pima,768,8,34.8958,0.1135,0.0153,0.0837,0.0018,0.1811,0.0443,0.0096,0.0502,0.0104,0.001,0.6555 +satellite,6435,36,31.6395,1.6487,0.0333,7.0337,0.0163,0.6374,1.0924,0.9317,1.8058,1.288,0.0247,23.2239 +satimage-2,5803,36,1.2235,1.6925,0.0406,6.12,0.0174,0.6441,1.0753,0.8087,1.9241,1.1575,0.0169,23.5951 +vertebral,240,6,12.5,0.0448,0.0157,0.0324,0.0017,0.1779,0.0167,0.003,0.0496,0.0018,0.0011,0.2316 +vowels,1456,12,3.4341,0.268,0.0191,0.2979,0.0037,0.258,0.1093,0.0364,0.7747,0.0424,0.002,1.8441 +wbc,378,30,5.5556,0.0695,0.0216,0.0806,0.0079,0.2084,0.0275,0.0074,0.0639,0.0059,0.0022,0.4293 diff --git a/examples/ALL.png b/examples/ALL.png index d61d834db99721a3edf566c9846433c6a591035a..57b8927754de6008bcbb79d2559dd3a6a62a621f 100644 Binary files a/examples/ALL.png and b/examples/ALL.png differ diff --git a/examples/KNN.png b/examples/KNN.png index ae83f929c4d1d8bd293b7483d67fbd29cc82f740..cfcc0f4ca1a17e2ec12190aba309f685ea037f7d 100644 Binary files a/examples/KNN.png and b/examples/KNN.png differ diff --git a/examples/abod_example.py b/examples/abod_example.py index 22944007091435b718571e0c89fe7d59f82de2ab..393f269690039cde1c468725f34273da783682d5 100644 --- a/examples/abod_example.py +++ b/examples/abod_example.py @@ -15,96 +15,130 @@ import sys sys.path.append( os.path.abspath(os.path.join(os.path.dirname("__file__"), '..'))) -from sklearn.utils import check_X_y import matplotlib.pyplot as plt -from matplotlib.lines import Line2D from pyod.models.abod import ABOD from pyod.utils.data import generate_data -from pyod.utils.data import get_color_codes +from pyod.utils.data import get_outliers_inliers +from pyod.utils.data import check_consistent_shape from pyod.utils.data import evaluate_print def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, - save_figure=False): # pragma: no cover - """ - Utility function for visualizing the results in examples - Internal use only + y_test_pred, show_figure=True, save_figure=False): + """Utility function for visualizing the results in examples. + Internal use only. + + Parameters + ---------- + clf_name : str + The name of the detector. - :param clf_name: The name of the detector - :type clf_name: str + X_train : numpy array of shape (n_samples, n_features) + The training samples. - :param X_train: The training samples - :param X_train: numpy array of shape (n_samples, n_features) + y_train : list or array of shape (n_samples,) + The ground truth of training samples. - :param y_train: The ground truth of training samples - :type y_train: list or array of shape (n_samples,) + X_test : numpy array of shape (n_samples, n_features) + The test samples. - :param X_test: The test samples - :type X_test: numpy array of shape (n_samples, n_features) + y_test : list or array of shape (n_samples,) + The ground truth of test samples. - :param y_test: The ground truth of test samples - :type y_test: list or array of shape (n_samples,) + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. - :param y_train_pred: The predicted outlier scores on the training samples - :type y_train_pred: numpy array of shape (n_samples, n_features) + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. - :param y_test_pred: The predicted outlier scores on the test samples - :type y_test_pred: numpy array of shape (n_samples, n_features) + show_figure : bool, optional (default=True) + If set to True, show the figure. - :param show_figure: If set to True, show the figure - :type show_figure: bool, optional (default=True) + save_figure : bool, optional (default=False) + If set to True, save the figure to the local. - :param save_figure: If set to True, save the figure to the local - :type save_figure: bool, optional (default=False) """ - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) + + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - c_train = get_color_codes(y_train) - c_test = get_color_codes(y_test) + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( + X_train, y_train_pred) + + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( + X_test, y_test_pred) + # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name)) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - plt.scatter(X_train[:, 0], X_train[:, 1], c=c_train) - plt.title('Train ground truth') - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='b', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='r', markersize=8)] - - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', + inlier_color='blue', outlier_color='orange') fig.add_subplot(222) - plt.scatter(X_test[:, 0], X_test[:, 1], c=c_test) - plt.title('Test ground truth') - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, + 'Train Set Prediction', inlier_color='blue', + outlier_color='orange') fig.add_subplot(223) - plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train_pred) - plt.title('Train prediction by {clf_name}'.format(clf_name=clf_name)) - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='0', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='yellow', markersize=8)] - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', + inlier_color='green', outlier_color='red') fig.add_subplot(224) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test_pred) - plt.title('Test prediction by {clf_name}'.format(clf_name=clf_name)) - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, + 'Test Set Prediction', inlier_color='green', + outlier_color='red') if save_figure: plt.savefig('{clf_name}.png'.format(clf_name=clf_name), dpi=300) + if show_figure: plt.show() + return diff --git a/examples/cblof_example.py b/examples/cblof_example.py index 3f9442f409d441757dc876f0206096b8e69016ec..c1537a69b3fdca2d36180011f8e56b2d196f389c 100644 --- a/examples/cblof_example.py +++ b/examples/cblof_example.py @@ -16,96 +16,130 @@ import sys sys.path.append( os.path.abspath(os.path.join(os.path.dirname("__file__"), '..'))) -from sklearn.utils import check_X_y import matplotlib.pyplot as plt -from matplotlib.lines import Line2D from pyod.models.cblof import CBLOF from pyod.utils.data import generate_data -from pyod.utils.data import get_color_codes +from pyod.utils.data import get_outliers_inliers +from pyod.utils.data import check_consistent_shape from pyod.utils.data import evaluate_print def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, - save_figure=False): # pragma: no cover - """ - Utility function for visualizing the results in examples - Internal use only + y_test_pred, show_figure=True, save_figure=False): + """Utility function for visualizing the results in examples. + Internal use only. + + Parameters + ---------- + clf_name : str + The name of the detector. - :param clf_name: The name of the detector - :type clf_name: str + X_train : numpy array of shape (n_samples, n_features) + The training samples. - :param X_train: The training samples - :param X_train: numpy array of shape (n_samples, n_features) + y_train : list or array of shape (n_samples,) + The ground truth of training samples. - :param y_train: The ground truth of training samples - :type y_train: list or array of shape (n_samples,) + X_test : numpy array of shape (n_samples, n_features) + The test samples. - :param X_test: The test samples - :type X_test: numpy array of shape (n_samples, n_features) + y_test : list or array of shape (n_samples,) + The ground truth of test samples. - :param y_test: The ground truth of test samples - :type y_test: list or array of shape (n_samples,) + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. - :param y_train_pred: The predicted outlier scores on the training samples - :type y_train_pred: numpy array of shape (n_samples, n_features) + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. - :param y_test_pred: The predicted outlier scores on the test samples - :type y_test_pred: numpy array of shape (n_samples, n_features) + show_figure : bool, optional (default=True) + If set to True, show the figure. - :param show_figure: If set to True, show the figure - :type show_figure: bool, optional (default=True) + save_figure : bool, optional (default=False) + If set to True, save the figure to the local. - :param save_figure: If set to True, save the figure to the local - :type save_figure: bool, optional (default=False) """ - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) + + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - c_train = get_color_codes(y_train) - c_test = get_color_codes(y_test) + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( + X_train, y_train_pred) + + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( + X_test, y_test_pred) + # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name)) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - plt.scatter(X_train[:, 0], X_train[:, 1], c=c_train) - plt.title('Train ground truth') - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='b', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='r', markersize=8)] - - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', + inlier_color='blue', outlier_color='orange') fig.add_subplot(222) - plt.scatter(X_test[:, 0], X_test[:, 1], c=c_test) - plt.title('Test ground truth') - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, + 'Train Set Prediction', inlier_color='blue', + outlier_color='orange') fig.add_subplot(223) - plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train_pred) - plt.title('Train prediction by {clf_name}'.format(clf_name=clf_name)) - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='0', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='yellow', markersize=8)] - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', + inlier_color='green', outlier_color='red') fig.add_subplot(224) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test_pred) - plt.title('Test prediction by {clf_name}'.format(clf_name=clf_name)) - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, + 'Test Set Prediction', inlier_color='green', + outlier_color='red') if save_figure: plt.savefig('{clf_name}.png'.format(clf_name=clf_name), dpi=300) + if show_figure: plt.show() + return diff --git a/examples/compare_all_models.py b/examples/compare_all_models.py index 46ac2484534d3bb14cc9b3963a430e0f11fb8977..df48954936c14330a24b4125c044bf815dc2ed9f 100644 --- a/examples/compare_all_models.py +++ b/examples/compare_all_models.py @@ -38,6 +38,7 @@ from pyod.models.mcd import MCD from pyod.models.ocsvm import OCSVM from pyod.models.pca import PCA from pyod.models.sos import SOS +from pyod.models.lscp import LSCP # TODO: add neural networks, LOCI, SOS @@ -54,6 +55,12 @@ n_outliers = int(outliers_fraction * n_samples) ground_truth = np.zeros(n_samples, dtype=int) ground_truth[-n_outliers:] = 1 +# initialize a set of detectors for LSCP +detector_list = [LOF(n_neighbors=5), LOF(n_neighbors=10), LOF(n_neighbors=15), + LOF(n_neighbors=20), LOF(n_neighbors=25), LOF(n_neighbors=30), + LOF(n_neighbors=35), LOF(n_neighbors=40), LOF(n_neighbors=45), + LOF(n_neighbors=50)] + # Show the statics of the data print('Number of inliers: %i' % n_inliers) print('Number of outliers: %i' % n_outliers) @@ -65,41 +72,42 @@ print(ground_truth, '\n') random_state = np.random.RandomState(42) # Define nine outlier detection tools to be compared classifiers = { - # 'Angle-based Outlier Detector (ABOD)': - # ABOD(contamination=outliers_fraction), - 'Fast Angle-based Outlier Detector (FastABOD)': - ABOD(contamination=outliers_fraction), - 'Cluster-based Local Outlier Factor (CBLOF)': - CBLOF(contamination=outliers_fraction, - check_estimator=False, random_state=random_state), - 'Feature Bagging': - FeatureBagging(LOF(n_neighbors=35), - contamination=outliers_fraction, - check_estimator=False, - random_state=random_state), - 'Histogram-base Outlier Detection (HBOS)': HBOS( - contamination=outliers_fraction), - 'Isolation Forest': IForest(contamination=outliers_fraction, - random_state=random_state), - 'K Nearest Neighbors (KNN)': KNN( - contamination=outliers_fraction), - 'Average KNN': KNN(method='mean', - contamination=outliers_fraction), - 'Median KNN': KNN(method='median', - contamination=outliers_fraction), - 'Local Outlier Factor (LOF)': - LOF(n_neighbors=35, contamination=outliers_fraction), - # 'Local Correlation Integral (LOCI)': - # LOCI(contamination=outliers_fraction), - 'Minimum Covariance Determinant (MCD)': MCD( - contamination=outliers_fraction, random_state=random_state), - 'One-class SVM (OCSVM)': OCSVM(contamination=outliers_fraction, - random_state=random_state), - 'Principal Component Analysis (PCA)': PCA( - contamination=outliers_fraction, random_state=random_state), - # 'Stochastic Outlier Selection (SOS)': SOS( - # contamination=outliers_fraction), - } + 'Angle-based Outlier Detector (ABOD)': + ABOD(contamination=outliers_fraction), + 'Cluster-based Local Outlier Factor (CBLOF)': + CBLOF(contamination=outliers_fraction, + check_estimator=False, random_state=random_state), + 'Feature Bagging': + FeatureBagging(LOF(n_neighbors=35), + contamination=outliers_fraction, + check_estimator=False, + random_state=random_state), + 'Histogram-base Outlier Detection (HBOS)': HBOS( + contamination=outliers_fraction), + 'Isolation Forest': IForest(contamination=outliers_fraction, + random_state=random_state), + 'K Nearest Neighbors (KNN)': KNN( + contamination=outliers_fraction), + 'Average KNN': KNN(method='mean', + contamination=outliers_fraction), + # 'Median KNN': KNN(method='median', + # contamination=outliers_fraction), + 'Local Outlier Factor (LOF)': + LOF(n_neighbors=35, contamination=outliers_fraction), + # 'Local Correlation Integral (LOCI)': + # LOCI(contamination=outliers_fraction), + 'Minimum Covariance Determinant (MCD)': MCD( + contamination=outliers_fraction, random_state=random_state), + 'One-class SVM (OCSVM)': OCSVM(contamination=outliers_fraction, + random_state=random_state), + 'Principal Component Analysis (PCA)': PCA( + contamination=outliers_fraction, random_state=random_state), + # 'Stochastic Outlier Selection (SOS)': SOS( + # contamination=outliers_fraction), + 'Locally Selective Combination (LSCP)': LSCP( + detector_list, contamination=outliers_fraction, + random_state=random_state) +} # Show all detectors for i, clf in enumerate(classifiers.keys()): diff --git a/examples/feature_bagging_example.py b/examples/feature_bagging_example.py index 5e22de32cc69a943e06ae5bb6f9bc56f1f4c06c5..123665614dcdaffde6f1a6777b5f4348a6479afc 100644 --- a/examples/feature_bagging_example.py +++ b/examples/feature_bagging_example.py @@ -15,96 +15,130 @@ import sys sys.path.append( os.path.abspath(os.path.join(os.path.dirname("__file__"), '..'))) -from sklearn.utils import check_X_y import matplotlib.pyplot as plt -from matplotlib.lines import Line2D from pyod.models.feature_bagging import FeatureBagging from pyod.utils.data import generate_data -from pyod.utils.data import get_color_codes +from pyod.utils.data import get_outliers_inliers +from pyod.utils.data import check_consistent_shape from pyod.utils.data import evaluate_print def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, - save_figure=False): # pragma: no cover - """ - Utility function for visualizing the results in examples - Internal use only + y_test_pred, show_figure=True, save_figure=False): + """Utility function for visualizing the results in examples. + Internal use only. + + Parameters + ---------- + clf_name : str + The name of the detector. - :param clf_name: The name of the detector - :type clf_name: str + X_train : numpy array of shape (n_samples, n_features) + The training samples. - :param X_train: The training samples - :param X_train: numpy array of shape (n_samples, n_features) + y_train : list or array of shape (n_samples,) + The ground truth of training samples. - :param y_train: The ground truth of training samples - :type y_train: list or array of shape (n_samples,) + X_test : numpy array of shape (n_samples, n_features) + The test samples. - :param X_test: The test samples - :type X_test: numpy array of shape (n_samples, n_features) + y_test : list or array of shape (n_samples,) + The ground truth of test samples. - :param y_test: The ground truth of test samples - :type y_test: list or array of shape (n_samples,) + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. - :param y_train_pred: The predicted outlier scores on the training samples - :type y_train_pred: numpy array of shape (n_samples, n_features) + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. - :param y_test_pred: The predicted outlier scores on the test samples - :type y_test_pred: numpy array of shape (n_samples, n_features) + show_figure : bool, optional (default=True) + If set to True, show the figure. - :param show_figure: If set to True, show the figure - :type show_figure: bool, optional (default=True) + save_figure : bool, optional (default=False) + If set to True, save the figure to the local. - :param save_figure: If set to True, save the figure to the local - :type save_figure: bool, optional (default=False) """ - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) + + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - c_train = get_color_codes(y_train) - c_test = get_color_codes(y_test) + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( + X_train, y_train_pred) + + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( + X_test, y_test_pred) + # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name)) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - plt.scatter(X_train[:, 0], X_train[:, 1], c=c_train) - plt.title('Train ground truth') - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='b', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='r', markersize=8)] - - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', + inlier_color='blue', outlier_color='orange') fig.add_subplot(222) - plt.scatter(X_test[:, 0], X_test[:, 1], c=c_test) - plt.title('Test ground truth') - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, + 'Train Set Prediction', inlier_color='blue', + outlier_color='orange') fig.add_subplot(223) - plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train_pred) - plt.title('Train prediction by {clf_name}'.format(clf_name=clf_name)) - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='0', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='yellow', markersize=8)] - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', + inlier_color='green', outlier_color='red') fig.add_subplot(224) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test_pred) - plt.title('Test prediction by {clf_name}'.format(clf_name=clf_name)) - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, + 'Test Set Prediction', inlier_color='green', + outlier_color='red') if save_figure: plt.savefig('{clf_name}.png'.format(clf_name=clf_name), dpi=300) + if show_figure: plt.show() + return diff --git a/examples/hbos_example.py b/examples/hbos_example.py index b013d1a685d68b0325e466b4ce860217ca883a8b..056d723f2b16173ba293f57d9dc228372052bfe6 100644 --- a/examples/hbos_example.py +++ b/examples/hbos_example.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- -"""Example of using HBOS for outlier detection +"""Example of using Histogram- based outlier detection (HBOS) for +outlier detection """ # Author: Yue Zhao <yuezhao@cs.toronto.edu> # License: BSD 2 clause @@ -15,96 +16,130 @@ import sys sys.path.append( os.path.abspath(os.path.join(os.path.dirname("__file__"), '..'))) -from sklearn.utils import check_X_y import matplotlib.pyplot as plt -from matplotlib.lines import Line2D from pyod.models.hbos import HBOS from pyod.utils.data import generate_data -from pyod.utils.data import get_color_codes +from pyod.utils.data import get_outliers_inliers +from pyod.utils.data import check_consistent_shape from pyod.utils.data import evaluate_print def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, - save_figure=False): # pragma: no cover - """ - Utility function for visualizing the results in examples - Internal use only + y_test_pred, show_figure=True, save_figure=False): + """Utility function for visualizing the results in examples. + Internal use only. + + Parameters + ---------- + clf_name : str + The name of the detector. - :param clf_name: The name of the detector - :type clf_name: str + X_train : numpy array of shape (n_samples, n_features) + The training samples. - :param X_train: The training samples - :param X_train: numpy array of shape (n_samples, n_features) + y_train : list or array of shape (n_samples,) + The ground truth of training samples. - :param y_train: The ground truth of training samples - :type y_train: list or array of shape (n_samples,) + X_test : numpy array of shape (n_samples, n_features) + The test samples. - :param X_test: The test samples - :type X_test: numpy array of shape (n_samples, n_features) + y_test : list or array of shape (n_samples,) + The ground truth of test samples. - :param y_test: The ground truth of test samples - :type y_test: list or array of shape (n_samples,) + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. - :param y_train_pred: The predicted outlier scores on the training samples - :type y_train_pred: numpy array of shape (n_samples, n_features) + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. - :param y_test_pred: The predicted outlier scores on the test samples - :type y_test_pred: numpy array of shape (n_samples, n_features) + show_figure : bool, optional (default=True) + If set to True, show the figure. - :param show_figure: If set to True, show the figure - :type show_figure: bool, optional (default=True) + save_figure : bool, optional (default=False) + If set to True, save the figure to the local. - :param save_figure: If set to True, save the figure to the local - :type save_figure: bool, optional (default=False) """ - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) + + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - c_train = get_color_codes(y_train) - c_test = get_color_codes(y_test) + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( + X_train, y_train_pred) + + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( + X_test, y_test_pred) + # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name)) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - plt.scatter(X_train[:, 0], X_train[:, 1], c=c_train) - plt.title('Train ground truth') - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='b', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='r', markersize=8)] - - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', + inlier_color='blue', outlier_color='orange') fig.add_subplot(222) - plt.scatter(X_test[:, 0], X_test[:, 1], c=c_test) - plt.title('Test ground truth') - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, + 'Train Set Prediction', inlier_color='blue', + outlier_color='orange') fig.add_subplot(223) - plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train_pred) - plt.title('Train prediction by {clf_name}'.format(clf_name=clf_name)) - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='0', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='yellow', markersize=8)] - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', + inlier_color='green', outlier_color='red') fig.add_subplot(224) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test_pred) - plt.title('Test prediction by {clf_name}'.format(clf_name=clf_name)) - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, + 'Test Set Prediction', inlier_color='green', + outlier_color='red') if save_figure: plt.savefig('{clf_name}.png'.format(clf_name=clf_name), dpi=300) + if show_figure: plt.show() + return diff --git a/examples/iforest_example.py b/examples/iforest_example.py index ad9fa5ed4a4f2232f84716109b561e246f3bac33..4666def3fe9938d6e92abe22d41a26fde8263d22 100644 --- a/examples/iforest_example.py +++ b/examples/iforest_example.py @@ -15,96 +15,130 @@ import sys sys.path.append( os.path.abspath(os.path.join(os.path.dirname("__file__"), '..'))) -from sklearn.utils import check_X_y import matplotlib.pyplot as plt -from matplotlib.lines import Line2D from pyod.models.iforest import IForest from pyod.utils.data import generate_data -from pyod.utils.data import get_color_codes +from pyod.utils.data import get_outliers_inliers +from pyod.utils.data import check_consistent_shape from pyod.utils.data import evaluate_print def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, - save_figure=False): # pragma: no cover - """ - Utility function for visualizing the results in examples - Internal use only + y_test_pred, show_figure=True, save_figure=False): + """Utility function for visualizing the results in examples. + Internal use only. + + Parameters + ---------- + clf_name : str + The name of the detector. - :param clf_name: The name of the detector - :type clf_name: str + X_train : numpy array of shape (n_samples, n_features) + The training samples. - :param X_train: The training samples - :param X_train: numpy array of shape (n_samples, n_features) + y_train : list or array of shape (n_samples,) + The ground truth of training samples. - :param y_train: The ground truth of training samples - :type y_train: list or array of shape (n_samples,) + X_test : numpy array of shape (n_samples, n_features) + The test samples. - :param X_test: The test samples - :type X_test: numpy array of shape (n_samples, n_features) + y_test : list or array of shape (n_samples,) + The ground truth of test samples. - :param y_test: The ground truth of test samples - :type y_test: list or array of shape (n_samples,) + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. - :param y_train_pred: The predicted outlier scores on the training samples - :type y_train_pred: numpy array of shape (n_samples, n_features) + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. - :param y_test_pred: The predicted outlier scores on the test samples - :type y_test_pred: numpy array of shape (n_samples, n_features) + show_figure : bool, optional (default=True) + If set to True, show the figure. - :param show_figure: If set to True, show the figure - :type show_figure: bool, optional (default=True) + save_figure : bool, optional (default=False) + If set to True, save the figure to the local. - :param save_figure: If set to True, save the figure to the local - :type save_figure: bool, optional (default=False) """ - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) + + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - c_train = get_color_codes(y_train) - c_test = get_color_codes(y_test) + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( + X_train, y_train_pred) + + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( + X_test, y_test_pred) + # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name)) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - plt.scatter(X_train[:, 0], X_train[:, 1], c=c_train) - plt.title('Train ground truth') - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='b', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='r', markersize=8)] - - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', + inlier_color='blue', outlier_color='orange') fig.add_subplot(222) - plt.scatter(X_test[:, 0], X_test[:, 1], c=c_test) - plt.title('Test ground truth') - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, + 'Train Set Prediction', inlier_color='blue', + outlier_color='orange') fig.add_subplot(223) - plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train_pred) - plt.title('Train prediction by {clf_name}'.format(clf_name=clf_name)) - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='0', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='yellow', markersize=8)] - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', + inlier_color='green', outlier_color='red') fig.add_subplot(224) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test_pred) - plt.title('Test prediction by {clf_name}'.format(clf_name=clf_name)) - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, + 'Test Set Prediction', inlier_color='green', + outlier_color='red') if save_figure: plt.savefig('{clf_name}.png'.format(clf_name=clf_name), dpi=300) + if show_figure: plt.show() + return diff --git a/examples/knn_example.py b/examples/knn_example.py index 704a343ec32d533d93de62055fee30823ea4b08d..c959b0172aafc733fc6832822a0f5c8a0526cc54 100644 --- a/examples/knn_example.py +++ b/examples/knn_example.py @@ -15,96 +15,130 @@ import sys sys.path.append( os.path.abspath(os.path.join(os.path.dirname("__file__"), '..'))) -from sklearn.utils import check_X_y import matplotlib.pyplot as plt -from matplotlib.lines import Line2D from pyod.models.knn import KNN from pyod.utils.data import generate_data -from pyod.utils.data import get_color_codes +from pyod.utils.data import get_outliers_inliers +from pyod.utils.data import check_consistent_shape from pyod.utils.data import evaluate_print def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, - save_figure=False): # pragma: no cover - """ - Utility function for visualizing the results in examples - Internal use only + y_test_pred, show_figure=True, save_figure=False): + """Utility function for visualizing the results in examples. + Internal use only. + + Parameters + ---------- + clf_name : str + The name of the detector. - :param clf_name: The name of the detector - :type clf_name: str + X_train : numpy array of shape (n_samples, n_features) + The training samples. - :param X_train: The training samples - :param X_train: numpy array of shape (n_samples, n_features) + y_train : list or array of shape (n_samples,) + The ground truth of training samples. - :param y_train: The ground truth of training samples - :type y_train: list or array of shape (n_samples,) + X_test : numpy array of shape (n_samples, n_features) + The test samples. - :param X_test: The test samples - :type X_test: numpy array of shape (n_samples, n_features) + y_test : list or array of shape (n_samples,) + The ground truth of test samples. - :param y_test: The ground truth of test samples - :type y_test: list or array of shape (n_samples,) + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. - :param y_train_pred: The predicted outlier scores on the training samples - :type y_train_pred: numpy array of shape (n_samples, n_features) + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. - :param y_test_pred: The predicted outlier scores on the test samples - :type y_test_pred: numpy array of shape (n_samples, n_features) + show_figure : bool, optional (default=True) + If set to True, show the figure. - :param show_figure: If set to True, show the figure - :type show_figure: bool, optional (default=True) + save_figure : bool, optional (default=False) + If set to True, save the figure to the local. - :param save_figure: If set to True, save the figure to the local - :type save_figure: bool, optional (default=False) """ - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) + + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - c_train = get_color_codes(y_train) - c_test = get_color_codes(y_test) + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( + X_train, y_train_pred) + + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( + X_test, y_test_pred) + # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name)) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - plt.scatter(X_train[:, 0], X_train[:, 1], c=c_train) - plt.title('Train ground truth') - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='b', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='r', markersize=8)] - - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', + inlier_color='blue', outlier_color='orange') fig.add_subplot(222) - plt.scatter(X_test[:, 0], X_test[:, 1], c=c_test) - plt.title('Test ground truth') - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, + 'Train Set Prediction', inlier_color='blue', + outlier_color='orange') fig.add_subplot(223) - plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train_pred) - plt.title('Train prediction by {clf_name}'.format(clf_name=clf_name)) - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='0', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='yellow', markersize=8)] - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', + inlier_color='green', outlier_color='red') fig.add_subplot(224) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test_pred) - plt.title('Test prediction by {clf_name}'.format(clf_name=clf_name)) - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, + 'Test Set Prediction', inlier_color='green', + outlier_color='red') if save_figure: plt.savefig('{clf_name}.png'.format(clf_name=clf_name), dpi=300) + if show_figure: plt.show() + return diff --git a/examples/loci_example.py b/examples/loci_example.py index 4df19bbc4edcaa6cde1d7d7156b107d6b42b7a30..891e1991a73ddd986da7929de42fe953815629c0 100644 --- a/examples/loci_example.py +++ b/examples/loci_example.py @@ -1,3 +1,9 @@ +# -*- coding: utf-8 -*- +"""Example of using Local Correlation Integral (LOCI) for outlier detection +""" +# Author: Winston Li <jk_zhengli@hotmail.com> +# License: BSD 2 clause + from __future__ import division from __future__ import print_function @@ -9,96 +15,130 @@ import sys sys.path.append( os.path.abspath(os.path.join(os.path.dirname("__file__"), '..'))) -from sklearn.utils import check_X_y import matplotlib.pyplot as plt -from matplotlib.lines import Line2D from pyod.models.loci import LOCI from pyod.utils.data import generate_data -from pyod.utils.data import get_color_codes +from pyod.utils.data import get_outliers_inliers +from pyod.utils.data import check_consistent_shape from pyod.utils.data import evaluate_print def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, - save_figure=False): # pragma: no cover - """ - Utility function for visualizing the results in examples - Internal use only + y_test_pred, show_figure=True, save_figure=False): + """Utility function for visualizing the results in examples. + Internal use only. - :param clf_name: The name of the detector - :type clf_name: str + Parameters + ---------- + clf_name : str + The name of the detector. - :param X_train: The training samples - :param X_train: numpy array of shape (n_samples, n_features) + X_train : numpy array of shape (n_samples, n_features) + The training samples. - :param y_train: The ground truth of training samples - :type y_train: list or array of shape (n_samples,) + y_train : list or array of shape (n_samples,) + The ground truth of training samples. - :param X_test: The test samples - :type X_test: numpy array of shape (n_samples, n_features) + X_test : numpy array of shape (n_samples, n_features) + The test samples. - :param y_test: The ground truth of test samples - :type y_test: list or array of shape (n_samples,) + y_test : list or array of shape (n_samples,) + The ground truth of test samples. - :param y_train_pred: The predicted outlier scores on the training samples - :type y_train_pred: numpy array of shape (n_samples, n_features) + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. - :param y_test_pred: The predicted outlier scores on the test samples - :type y_test_pred: numpy array of shape (n_samples, n_features) + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. - :param show_figure: If set to True, show the figure - :type show_figure: bool, optional (default=True) + show_figure : bool, optional (default=True) + If set to True, show the figure. + + save_figure : bool, optional (default=False) + If set to True, save the figure to the local. - :param save_figure: If set to True, save the figure to the local - :type save_figure: bool, optional (default=False) """ - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) + + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - c_train = get_color_codes(y_train) - c_test = get_color_codes(y_test) + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( + X_train, y_train_pred) + + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( + X_test, y_test_pred) + # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name)) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - plt.scatter(X_train[:, 0], X_train[:, 1], c=c_train) - plt.title('Train ground truth') - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='b', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='r', markersize=8)] - - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', + inlier_color='blue', outlier_color='orange') fig.add_subplot(222) - plt.scatter(X_test[:, 0], X_test[:, 1], c=c_test) - plt.title('Test ground truth') - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, + 'Train Set Prediction', inlier_color='blue', + outlier_color='orange') fig.add_subplot(223) - plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train_pred) - plt.title('Train prediction by {clf_name}'.format(clf_name=clf_name)) - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='0', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='yellow', markersize=8)] - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', + inlier_color='green', outlier_color='red') fig.add_subplot(224) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test_pred) - plt.title('Test prediction by {clf_name}'.format(clf_name=clf_name)) - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, + 'Test Set Prediction', inlier_color='green', + outlier_color='red') if save_figure: plt.savefig('{clf_name}.png'.format(clf_name=clf_name), dpi=300) + if show_figure: plt.show() + return @@ -136,4 +176,4 @@ if __name__ == "__main__": # visualize the results visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, save_figure=False) \ No newline at end of file + y_test_pred, show_figure=True, save_figure=False) diff --git a/examples/lof_example.py b/examples/lof_example.py index 511c239ff94ce2298460514193160842edd89c81..6a6a5365943e7e3984650b934d315e4b98edce96 100644 --- a/examples/lof_example.py +++ b/examples/lof_example.py @@ -15,96 +15,130 @@ import sys sys.path.append( os.path.abspath(os.path.join(os.path.dirname("__file__"), '..'))) -from sklearn.utils import check_X_y import matplotlib.pyplot as plt -from matplotlib.lines import Line2D from pyod.models.lof import LOF from pyod.utils.data import generate_data -from pyod.utils.data import get_color_codes +from pyod.utils.data import get_outliers_inliers +from pyod.utils.data import check_consistent_shape from pyod.utils.data import evaluate_print def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, - save_figure=False): # pragma: no cover - """ - Utility function for visualizing the results in examples - Internal use only + y_test_pred, show_figure=True, save_figure=False): + """Utility function for visualizing the results in examples. + Internal use only. + + Parameters + ---------- + clf_name : str + The name of the detector. - :param clf_name: The name of the detector - :type clf_name: str + X_train : numpy array of shape (n_samples, n_features) + The training samples. - :param X_train: The training samples - :param X_train: numpy array of shape (n_samples, n_features) + y_train : list or array of shape (n_samples,) + The ground truth of training samples. - :param y_train: The ground truth of training samples - :type y_train: list or array of shape (n_samples,) + X_test : numpy array of shape (n_samples, n_features) + The test samples. - :param X_test: The test samples - :type X_test: numpy array of shape (n_samples, n_features) + y_test : list or array of shape (n_samples,) + The ground truth of test samples. - :param y_test: The ground truth of test samples - :type y_test: list or array of shape (n_samples,) + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. - :param y_train_pred: The predicted outlier scores on the training samples - :type y_train_pred: numpy array of shape (n_samples, n_features) + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. - :param y_test_pred: The predicted outlier scores on the test samples - :type y_test_pred: numpy array of shape (n_samples, n_features) + show_figure : bool, optional (default=True) + If set to True, show the figure. - :param show_figure: If set to True, show the figure - :type show_figure: bool, optional (default=True) + save_figure : bool, optional (default=False) + If set to True, save the figure to the local. - :param save_figure: If set to True, save the figure to the local - :type save_figure: bool, optional (default=False) """ - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) + + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - c_train = get_color_codes(y_train) - c_test = get_color_codes(y_test) + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( + X_train, y_train_pred) + + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( + X_test, y_test_pred) + # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name)) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - plt.scatter(X_train[:, 0], X_train[:, 1], c=c_train) - plt.title('Train ground truth') - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='b', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='r', markersize=8)] - - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', + inlier_color='blue', outlier_color='orange') fig.add_subplot(222) - plt.scatter(X_test[:, 0], X_test[:, 1], c=c_test) - plt.title('Test ground truth') - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, + 'Train Set Prediction', inlier_color='blue', + outlier_color='orange') fig.add_subplot(223) - plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train_pred) - plt.title('Train prediction by {clf_name}'.format(clf_name=clf_name)) - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='0', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='yellow', markersize=8)] - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', + inlier_color='green', outlier_color='red') fig.add_subplot(224) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test_pred) - plt.title('Test prediction by {clf_name}'.format(clf_name=clf_name)) - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, + 'Test Set Prediction', inlier_color='green', + outlier_color='red') if save_figure: plt.savefig('{clf_name}.png'.format(clf_name=clf_name), dpi=300) + if show_figure: plt.show() + return diff --git a/examples/lscp_example.py b/examples/lscp_example.py index 557301ac80ef21ff262b873a9ae7f39e94d489fa..d8ea2e74b6c479bbcfbb6b33d72d752f19555d7e 100644 --- a/examples/lscp_example.py +++ b/examples/lscp_example.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """Example of using LSCP for outlier detection """ -# Author: Yue Zhao <yuezhao@cs.toronto.edu> +# Author: Zain Nasrullah <zain.nasrullah.zn@gmail.com> # License: BSD 2 clause from __future__ import division @@ -15,98 +15,132 @@ import sys sys.path.append( os.path.abspath(os.path.join(os.path.dirname("__file__"), '..'))) -from sklearn.utils import check_X_y import matplotlib.pyplot as plt -from matplotlib.lines import Line2D from pyod.models.lscp import LSCP from pyod.models.lof import LOF from pyod.utils.utility import standardizer from pyod.utils.data import generate_data -from pyod.utils.data import get_color_codes +from pyod.utils.data import get_outliers_inliers +from pyod.utils.data import check_consistent_shape from pyod.utils.data import evaluate_print def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, - save_figure=False): # pragma: no cover - """ - Utility function for visualizing the results in examples - Internal use only + y_test_pred, show_figure=True, save_figure=False): + """Utility function for visualizing the results in examples. + Internal use only. + + Parameters + ---------- + clf_name : str + The name of the detector. - :param clf_name: The name of the detector - :type clf_name: str + X_train : numpy array of shape (n_samples, n_features) + The training samples. - :param X_train: The training samples - :param X_train: numpy array of shape (n_samples, n_features) + y_train : list or array of shape (n_samples,) + The ground truth of training samples. - :param y_train: The ground truth of training samples - :type y_train: list or array of shape (n_samples,) + X_test : numpy array of shape (n_samples, n_features) + The test samples. - :param X_test: The test samples - :type X_test: numpy array of shape (n_samples, n_features) + y_test : list or array of shape (n_samples,) + The ground truth of test samples. - :param y_test: The ground truth of test samples - :type y_test: list or array of shape (n_samples,) + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. - :param y_train_pred: The predicted outlier scores on the training samples - :type y_train_pred: numpy array of shape (n_samples, n_features) + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. - :param y_test_pred: The predicted outlier scores on the test samples - :type y_test_pred: numpy array of shape (n_samples, n_features) + show_figure : bool, optional (default=True) + If set to True, show the figure. - :param show_figure: If set to True, show the figure - :type show_figure: bool, optional (default=True) + save_figure : bool, optional (default=False) + If set to True, save the figure to the local. - :param save_figure: If set to True, save the figure to the local - :type save_figure: bool, optional (default=False) """ - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) + + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - c_train = get_color_codes(y_train) - c_test = get_color_codes(y_test) + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( + X_train, y_train_pred) + + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( + X_test, y_test_pred) + # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name)) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - plt.scatter(X_train[:, 0], X_train[:, 1], c=c_train) - plt.title('Train ground truth') - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='b', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='r', markersize=8)] - - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', + inlier_color='blue', outlier_color='orange') fig.add_subplot(222) - plt.scatter(X_test[:, 0], X_test[:, 1], c=c_test) - plt.title('Test ground truth') - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, + 'Train Set Prediction', inlier_color='blue', + outlier_color='orange') fig.add_subplot(223) - plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train_pred) - plt.title('Train prediction by {clf_name}'.format(clf_name=clf_name)) - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='0', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='yellow', markersize=8)] - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', + inlier_color='green', outlier_color='red') fig.add_subplot(224) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test_pred) - plt.title('Test prediction by {clf_name}'.format(clf_name=clf_name)) - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, + 'Test Set Prediction', inlier_color='green', + outlier_color='red') if save_figure: plt.savefig('{clf_name}.png'.format(clf_name=clf_name), dpi=300) + if show_figure: plt.show() + return diff --git a/examples/mcd_example.py b/examples/mcd_example.py index 939a24af0a552f1e13a1cae3b75dda447b37c2f8..b6b467f76155c773ad982670093aaa6b5aa13f86 100644 --- a/examples/mcd_example.py +++ b/examples/mcd_example.py @@ -15,96 +15,130 @@ import sys sys.path.append( os.path.abspath(os.path.join(os.path.dirname("__file__"), '..'))) -from sklearn.utils import check_X_y import matplotlib.pyplot as plt -from matplotlib.lines import Line2D from pyod.models.mcd import MCD from pyod.utils.data import generate_data -from pyod.utils.data import get_color_codes +from pyod.utils.data import get_outliers_inliers +from pyod.utils.data import check_consistent_shape from pyod.utils.data import evaluate_print def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, - save_figure=False): # pragma: no cover - """ - Utility function for visualizing the results in examples - Internal use only + y_test_pred, show_figure=True, save_figure=False): + """Utility function for visualizing the results in examples. + Internal use only. + + Parameters + ---------- + clf_name : str + The name of the detector. - :param clf_name: The name of the detector - :type clf_name: str + X_train : numpy array of shape (n_samples, n_features) + The training samples. - :param X_train: The training samples - :param X_train: numpy array of shape (n_samples, n_features) + y_train : list or array of shape (n_samples,) + The ground truth of training samples. - :param y_train: The ground truth of training samples - :type y_train: list or array of shape (n_samples,) + X_test : numpy array of shape (n_samples, n_features) + The test samples. - :param X_test: The test samples - :type X_test: numpy array of shape (n_samples, n_features) + y_test : list or array of shape (n_samples,) + The ground truth of test samples. - :param y_test: The ground truth of test samples - :type y_test: list or array of shape (n_samples,) + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. - :param y_train_pred: The predicted outlier scores on the training samples - :type y_train_pred: numpy array of shape (n_samples, n_features) + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. - :param y_test_pred: The predicted outlier scores on the test samples - :type y_test_pred: numpy array of shape (n_samples, n_features) + show_figure : bool, optional (default=True) + If set to True, show the figure. - :param show_figure: If set to True, show the figure - :type show_figure: bool, optional (default=True) + save_figure : bool, optional (default=False) + If set to True, save the figure to the local. - :param save_figure: If set to True, save the figure to the local - :type save_figure: bool, optional (default=False) """ - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) + + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - c_train = get_color_codes(y_train) - c_test = get_color_codes(y_test) + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( + X_train, y_train_pred) + + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( + X_test, y_test_pred) + # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name)) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - plt.scatter(X_train[:, 0], X_train[:, 1], c=c_train) - plt.title('Train ground truth') - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='b', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='r', markersize=8)] - - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', + inlier_color='blue', outlier_color='orange') fig.add_subplot(222) - plt.scatter(X_test[:, 0], X_test[:, 1], c=c_test) - plt.title('Test ground truth') - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, + 'Train Set Prediction', inlier_color='blue', + outlier_color='orange') fig.add_subplot(223) - plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train_pred) - plt.title('Train prediction by {clf_name}'.format(clf_name=clf_name)) - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='0', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='yellow', markersize=8)] - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', + inlier_color='green', outlier_color='red') fig.add_subplot(224) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test_pred) - plt.title('Test prediction by {clf_name}'.format(clf_name=clf_name)) - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, + 'Test Set Prediction', inlier_color='green', + outlier_color='red') if save_figure: plt.savefig('{clf_name}.png'.format(clf_name=clf_name), dpi=300) + if show_figure: plt.show() + return diff --git a/examples/mo_gaal_example.py b/examples/mo_gaal_example.py index 2f754049374b387228998c5a724806eeaa86f31e..e6ed03f1d2573b912668c5977565680a80d08514 100644 --- a/examples/mo_gaal_example.py +++ b/examples/mo_gaal_example.py @@ -1,3 +1,10 @@ +# -*- coding: utf-8 -*- +"""Example of using Multiple-Objective Generative Adversarial Active +Learning (MO_GAAL) for outlier detection +""" +# Author: Winston Li <jk_zhengli@hotmail.com> +# License: BSD 2 clause + from __future__ import division from __future__ import print_function diff --git a/examples/ocsvm_example.py b/examples/ocsvm_example.py index 2acf08b00468535a193742222018901471d4045d..feda7a0f6eb76b053500e9a6aa1631b9b4bd0298 100644 --- a/examples/ocsvm_example.py +++ b/examples/ocsvm_example.py @@ -15,96 +15,130 @@ import sys sys.path.append( os.path.abspath(os.path.join(os.path.dirname("__file__"), '..'))) -from sklearn.utils import check_X_y import matplotlib.pyplot as plt -from matplotlib.lines import Line2D from pyod.models.ocsvm import OCSVM from pyod.utils.data import generate_data -from pyod.utils.data import get_color_codes +from pyod.utils.data import get_outliers_inliers +from pyod.utils.data import check_consistent_shape from pyod.utils.data import evaluate_print def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, - save_figure=False): # pragma: no cover - """ - Utility function for visualizing the results in examples - Internal use only + y_test_pred, show_figure=True, save_figure=False): + """Utility function for visualizing the results in examples. + Internal use only. + + Parameters + ---------- + clf_name : str + The name of the detector. - :param clf_name: The name of the detector - :type clf_name: str + X_train : numpy array of shape (n_samples, n_features) + The training samples. - :param X_train: The training samples - :param X_train: numpy array of shape (n_samples, n_features) + y_train : list or array of shape (n_samples,) + The ground truth of training samples. - :param y_train: The ground truth of training samples - :type y_train: list or array of shape (n_samples,) + X_test : numpy array of shape (n_samples, n_features) + The test samples. - :param X_test: The test samples - :type X_test: numpy array of shape (n_samples, n_features) + y_test : list or array of shape (n_samples,) + The ground truth of test samples. - :param y_test: The ground truth of test samples - :type y_test: list or array of shape (n_samples,) + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. - :param y_train_pred: The predicted outlier scores on the training samples - :type y_train_pred: numpy array of shape (n_samples, n_features) + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. - :param y_test_pred: The predicted outlier scores on the test samples - :type y_test_pred: numpy array of shape (n_samples, n_features) + show_figure : bool, optional (default=True) + If set to True, show the figure. - :param show_figure: If set to True, show the figure - :type show_figure: bool, optional (default=True) + save_figure : bool, optional (default=False) + If set to True, save the figure to the local. - :param save_figure: If set to True, save the figure to the local - :type save_figure: bool, optional (default=False) """ - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) + + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - c_train = get_color_codes(y_train) - c_test = get_color_codes(y_test) + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( + X_train, y_train_pred) + + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( + X_test, y_test_pred) + # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name)) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - plt.scatter(X_train[:, 0], X_train[:, 1], c=c_train) - plt.title('Train ground truth') - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='b', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='r', markersize=8)] - - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', + inlier_color='blue', outlier_color='orange') fig.add_subplot(222) - plt.scatter(X_test[:, 0], X_test[:, 1], c=c_test) - plt.title('Test ground truth') - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, + 'Train Set Prediction', inlier_color='blue', + outlier_color='orange') fig.add_subplot(223) - plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train_pred) - plt.title('Train prediction by {clf_name}'.format(clf_name=clf_name)) - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='0', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='yellow', markersize=8)] - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', + inlier_color='green', outlier_color='red') fig.add_subplot(224) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test_pred) - plt.title('Test prediction by {clf_name}'.format(clf_name=clf_name)) - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, + 'Test Set Prediction', inlier_color='green', + outlier_color='red') if save_figure: plt.savefig('{clf_name}.png'.format(clf_name=clf_name), dpi=300) + if show_figure: plt.show() + return diff --git a/examples/pca_example.py b/examples/pca_example.py index fce59c4aa5975f35bc4167ff4551664346453629..8d607ea8419c968936dca4f2fc0f7db0edcdc51d 100644 --- a/examples/pca_example.py +++ b/examples/pca_example.py @@ -15,96 +15,130 @@ import sys sys.path.append( os.path.abspath(os.path.join(os.path.dirname("__file__"), '..'))) -from sklearn.utils import check_X_y import matplotlib.pyplot as plt -from matplotlib.lines import Line2D from pyod.models.pca import PCA from pyod.utils.data import generate_data -from pyod.utils.data import get_color_codes +from pyod.utils.data import get_outliers_inliers +from pyod.utils.data import check_consistent_shape from pyod.utils.data import evaluate_print def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, - save_figure=False): # pragma: no cover - """ - Utility function for visualizing the results in examples - Internal use only + y_test_pred, show_figure=True, save_figure=False): + """Utility function for visualizing the results in examples. + Internal use only. + + Parameters + ---------- + clf_name : str + The name of the detector. - :param clf_name: The name of the detector - :type clf_name: str + X_train : numpy array of shape (n_samples, n_features) + The training samples. - :param X_train: The training samples - :param X_train: numpy array of shape (n_samples, n_features) + y_train : list or array of shape (n_samples,) + The ground truth of training samples. - :param y_train: The ground truth of training samples - :type y_train: list or array of shape (n_samples,) + X_test : numpy array of shape (n_samples, n_features) + The test samples. - :param X_test: The test samples - :type X_test: numpy array of shape (n_samples, n_features) + y_test : list or array of shape (n_samples,) + The ground truth of test samples. - :param y_test: The ground truth of test samples - :type y_test: list or array of shape (n_samples,) + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. - :param y_train_pred: The predicted outlier scores on the training samples - :type y_train_pred: numpy array of shape (n_samples, n_features) + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. - :param y_test_pred: The predicted outlier scores on the test samples - :type y_test_pred: numpy array of shape (n_samples, n_features) + show_figure : bool, optional (default=True) + If set to True, show the figure. - :param show_figure: If set to True, show the figure - :type show_figure: bool, optional (default=True) + save_figure : bool, optional (default=False) + If set to True, save the figure to the local. - :param save_figure: If set to True, save the figure to the local - :type save_figure: bool, optional (default=False) """ - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) + + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - c_train = get_color_codes(y_train) - c_test = get_color_codes(y_test) + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( + X_train, y_train_pred) + + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( + X_test, y_test_pred) + # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name)) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - plt.scatter(X_train[:, 0], X_train[:, 1], c=c_train) - plt.title('Train ground truth') - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='b', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='r', markersize=8)] - - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', + inlier_color='blue', outlier_color='orange') fig.add_subplot(222) - plt.scatter(X_test[:, 0], X_test[:, 1], c=c_test) - plt.title('Test ground truth') - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, + 'Train Set Prediction', inlier_color='blue', + outlier_color='orange') fig.add_subplot(223) - plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train_pred) - plt.title('Train prediction by {clf_name}'.format(clf_name=clf_name)) - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='0', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='yellow', markersize=8)] - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', + inlier_color='green', outlier_color='red') fig.add_subplot(224) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test_pred) - plt.title('Test prediction by {clf_name}'.format(clf_name=clf_name)) - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, + 'Test Set Prediction', inlier_color='green', + outlier_color='red') if save_figure: plt.savefig('{clf_name}.png'.format(clf_name=clf_name), dpi=300) + if show_figure: plt.show() + return diff --git a/examples/so_gaal_example.py b/examples/so_gaal_example.py index fbe85769101f9a883df8d8d2f49cc309126bd2ac..274ccf31941d5848c86ee3f33770f39c1c582ca3 100644 --- a/examples/so_gaal_example.py +++ b/examples/so_gaal_example.py @@ -1,3 +1,10 @@ +# -*- coding: utf-8 -*- +"""Example of using Single-Objective Generative Adversarial Active +Learning (SO_GAAL) for outlier detection +""" +# Author: Winston Li <jk_zhengli@hotmail.com> +# License: BSD 2 clause + from __future__ import division from __future__ import print_function diff --git a/examples/sos_example.py b/examples/sos_example.py index dedb7ab6cf91c240ee996e3ff5f506bafe5e842c..0fab713e72e288c0f39b6b2c4f4b7c2ae67f73d4 100644 --- a/examples/sos_example.py +++ b/examples/sos_example.py @@ -9,96 +9,130 @@ import sys sys.path.append( os.path.abspath(os.path.join(os.path.dirname("__file__"), '..'))) -from sklearn.utils import check_X_y import matplotlib.pyplot as plt -from matplotlib.lines import Line2D from pyod.models.sos import SOS from pyod.utils.data import generate_data -from pyod.utils.data import get_color_codes +from pyod.utils.data import get_outliers_inliers +from pyod.utils.data import check_consistent_shape from pyod.utils.data import evaluate_print def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, - save_figure=False): # pragma: no cover - """ - Utility function for visualizing the results in examples - Internal use only + y_test_pred, show_figure=True, save_figure=False): + """Utility function for visualizing the results in examples. + Internal use only. + + Parameters + ---------- + clf_name : str + The name of the detector. - :param clf_name: The name of the detector - :type clf_name: str + X_train : numpy array of shape (n_samples, n_features) + The training samples. - :param X_train: The training samples - :param X_train: numpy array of shape (n_samples, n_features) + y_train : list or array of shape (n_samples,) + The ground truth of training samples. - :param y_train: The ground truth of training samples - :type y_train: list or array of shape (n_samples,) + X_test : numpy array of shape (n_samples, n_features) + The test samples. - :param X_test: The test samples - :type X_test: numpy array of shape (n_samples, n_features) + y_test : list or array of shape (n_samples,) + The ground truth of test samples. - :param y_test: The ground truth of test samples - :type y_test: list or array of shape (n_samples,) + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. - :param y_train_pred: The predicted outlier scores on the training samples - :type y_train_pred: numpy array of shape (n_samples, n_features) + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. - :param y_test_pred: The predicted outlier scores on the test samples - :type y_test_pred: numpy array of shape (n_samples, n_features) + show_figure : bool, optional (default=True) + If set to True, show the figure. - :param show_figure: If set to True, show the figure - :type show_figure: bool, optional (default=True) + save_figure : bool, optional (default=False) + If set to True, save the figure to the local. - :param save_figure: If set to True, save the figure to the local - :type save_figure: bool, optional (default=False) """ - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) + + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - c_train = get_color_codes(y_train) - c_test = get_color_codes(y_test) + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( + X_train, y_train_pred) + + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( + X_test, y_test_pred) + # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name)) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - plt.scatter(X_train[:, 0], X_train[:, 1], c=c_train) - plt.title('Train ground truth') - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='b', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='r', markersize=8)] - - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', + inlier_color='blue', outlier_color='orange') fig.add_subplot(222) - plt.scatter(X_test[:, 0], X_test[:, 1], c=c_test) - plt.title('Test ground truth') - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, + 'Train Set Prediction', inlier_color='blue', + outlier_color='orange') fig.add_subplot(223) - plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train_pred) - plt.title('Train prediction by {clf_name}'.format(clf_name=clf_name)) - legend_elements = [Line2D([0], [0], marker='o', color='w', label='normal', - markerfacecolor='0', markersize=8), - Line2D([0], [0], marker='o', color='w', label='outlier', - markerfacecolor='yellow', markersize=8)] - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', + inlier_color='green', outlier_color='red') fig.add_subplot(224) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test_pred) - plt.title('Test prediction by {clf_name}'.format(clf_name=clf_name)) - plt.legend(handles=legend_elements, loc=4) + _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, + 'Test Set Prediction', inlier_color='green', + outlier_color='red') if save_figure: plt.savefig('{clf_name}.png'.format(clf_name=clf_name), dpi=300) + if show_figure: plt.show() + return @@ -136,4 +170,4 @@ if __name__ == "__main__": # visualize the results visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, save_figure=False) \ No newline at end of file + y_test_pred, show_figure=True, save_figure=False) diff --git a/examples/temp.txt b/examples/temp.txt deleted file mode 100644 index 35f40410d60ef7eab2154a89770ccc40b86e0d0d..0000000000000000000000000000000000000000 --- a/examples/temp.txt +++ /dev/null @@ -1,14 +0,0 @@ -***Utility Functions for Outlier Detection***: - 1. score_to_lable(): convert raw outlier scores to binary labels - 2. precision_n_scores(): one of the popular evaluation metrics for outlier - mining (precision @ rank n) - 3. generate_data(): generate pseudo data for outlier detection experiment - 4. wpearsonr(): weighted pearson is useful in pseudo ground truth generation - - -**Utility Functions for Outlier Detection**, see :mod:`pyod.utils`. - - 1. :func:`pyod.utils.utility.score_to_label`: converting raw outlier scores to binary labels - 2. :func:`pyod.utils.utility.precision_n_scores`: one of the popular evaluation metrics for outlier mining (precision @ rank n) - 3. :func:`pyod.utils.data.generate_data`: generate pseudo data for outlier detection experiment - 4. :func:`pyod.utils.stat_models.wpearsonr`:: weighted pearson is useful in pseudo ground truth generation \ No newline at end of file diff --git a/examples/temp_do_not_use.py b/examples/temp_do_not_use.py index e023ed04a3bd8474718b4401839e97ab23ae637a..ce6d20726a874020416bcf846041d75769db74f1 100644 --- a/examples/temp_do_not_use.py +++ b/examples/temp_do_not_use.py @@ -24,65 +24,9 @@ import matplotlib.pyplot as plt from pyod.models.lof import LOF from pyod.utils.data import generate_data +from pyod.utils.data import get_outliers_inliers from pyod.utils.data import evaluate_print - - -def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, - inlier_color='blue', outlier_color='orange'): - """Internal method to add subplot of inliers and outliers - - Parameters - ---------- - X_inliers : numpy array of shape (n_samples, n_features) - Outliers. - - X_outliers : numpy array of shape (n_samples, n_features) - Inliers. - - sub_plot_title : str - Subplot title. - - inlier_color : str, optional (default='blue') - The color of inliers. - - outlier_color : str, optional (default='orange') - The color of outliers. - - """ - plt.axis("equal") - plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', - color=inlier_color, s=40) - plt.scatter(X_outliers[:, 0], X_outliers[:, 1], - label='outliers', color=outlier_color, s=50, marker='^') - plt.title(sub_plot_title, fontsize=15) - plt.xticks([]) - plt.yticks([]) - plt.legend(loc=4, prop={'size': 10}) - - -def _get_sample_indices(X, y): - """Internal method to separate inliers from outliers. - - Parameters - ---------- - X : numpy array of shape (n_samples, n_features) - The input samples - - y : list or array of shape (n_samples,) - The ground truth of input samples. - - Returns - ------- - X_outliers : numpy array of shape (n_samples, n_features) - Outliers. - - X_inliers : numpy array of shape (n_samples, n_features) - Inliers. - - """ - X_outliers = X[np.where(y == 1)] - X_inliers = X[np.where(y == 0)] - return X_outliers, X_inliers +from pyod.utils.data import check_consistent_shape def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, @@ -117,53 +61,81 @@ def visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, If set to True, show the figure. save_figure : bool, optional (default=False) - If set to True, save the figure to the local - - Returns - ------- + If set to True, save the figure to the local. """ - # check input data shapes are consistent - X_train, y_train = check_X_y(X_train, y_train) - X_test, y_test = check_X_y(X_test, y_test) - y_test_pred = column_or_1d(y_test_pred) - y_train_pred = column_or_1d(y_train_pred) + def _add_sub_plot(X_inliers, X_outliers, sub_plot_title, + inlier_color='blue', outlier_color='orange'): + """Internal method to add subplot of inliers and outliers. + + Parameters + ---------- + X_inliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_outliers : numpy array of shape (n_samples, n_features) + Inliers. + + sub_plot_title : str + Subplot title. + + inlier_color : str, optional (default='blue') + The color of inliers. + + outlier_color : str, optional (default='orange') + The color of outliers. + + """ + plt.axis("equal") + plt.scatter(X_inliers[:, 0], X_inliers[:, 1], label='inliers', + color=inlier_color, s=40) + plt.scatter(X_outliers[:, 0], X_outliers[:, 1], + label='outliers', color=outlier_color, s=50, marker='^') + plt.title(sub_plot_title, fontsize=15) + plt.xticks([]) + plt.yticks([]) + plt.legend(loc=3, prop={'size': 10}) + return + + # check input data shapes are consistent + X_train, y_train, X_test, y_test, y_train_pred, y_test_pred = \ + check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred) - if X_train.shape[1] != 2 or X_test.shape[1] != 2: + if X_train.shape[1] != 2: raise ValueError("Input data has to be 2-d for visualization. The " "input data has {shape}.".format(shape=X_train.shape)) - check_consistent_length(y_train, y_train_pred) - check_consistent_length(y_test, y_test_pred) - X_train_outliers, X_train_inliers = _get_sample_indices(X_train, y_train) - X_train_outliers_pred, X_train_inliers_pred = _get_sample_indices( + X_train_outliers, X_train_inliers = get_outliers_inliers(X_train, y_train) + X_train_outliers_pred, X_train_inliers_pred = get_outliers_inliers( X_train, y_train_pred) - X_test_outliers, X_test_inliers = _get_sample_indices(X_test, y_test) - X_test_outliers_pred, X_test_inliers_pred = _get_sample_indices( + X_test_outliers, X_test_inliers = get_outliers_inliers(X_test, y_test) + X_test_outliers_pred, X_test_inliers_pred = get_outliers_inliers( X_test, y_test_pred) # plot ground truth vs. predicted results fig = plt.figure(figsize=(12, 10)) - plt.suptitle("Demo of {clf_name}".format(clf_name=clf_name), fontsize=15) + plt.suptitle("Demo of {clf_name} Detector".format(clf_name=clf_name), + fontsize=15) fig.add_subplot(221) - _add_sub_plot(X_train_inliers, X_train_outliers, 'Train set ground truth', + _add_sub_plot(X_train_inliers, X_train_outliers, 'Train Set Ground Truth', inlier_color='blue', outlier_color='orange') fig.add_subplot(222) _add_sub_plot(X_train_inliers_pred, X_train_outliers_pred, - 'Train set prediction', inlier_color='blue', + 'Train Set Prediction', inlier_color='blue', outlier_color='orange') fig.add_subplot(223) - _add_sub_plot(X_test_inliers, X_test_outliers, 'Test set ground truth', + _add_sub_plot(X_test_inliers, X_test_outliers, 'Test Set Ground Truth', inlier_color='green', outlier_color='red') fig.add_subplot(224) _add_sub_plot(X_test_inliers_pred, X_test_outliers_pred, - 'Test set prediction', inlier_color='green', + 'Test Set Prediction', inlier_color='green', outlier_color='red') if save_figure: @@ -209,4 +181,4 @@ if __name__ == "__main__": # visualize the results visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred, - y_test_pred, show_figure=True, save_figure=True) + y_test_pred, show_figure=True, save_figure=False) diff --git a/notebooks/Benchmark.ipynb b/notebooks/Benchmark.ipynb index 294fe46c95fbecd4f2aa1c56e961bbe6c9a0c4ef..dd640845e1782b66c01ffeb6a7186abb197fa2d6 100644 --- a/notebooks/Benchmark.ipynb +++ b/notebooks/Benchmark.ipynb @@ -8,41 +8,41 @@ "\n", "### The models are evaluaed on ROC, Precision @ n and execution time on 17 benchmark datasets. All datasets are splitted 60% for training and 40% for testing.\n", "\n", - "**[PyOD](https://github.com/yzhao062/Pyod)** is a comprehensive **Python toolkit** to **identify outlying objects** in \n", + "**[PyOD](https://github.com/yzhao062/pyod)** is a comprehensive **Python toolkit** to **identify outlying objects** in \n", "multivariate data with both unsupervised and supervised approaches.\n", - "\n", + "The model covered in this example includes:\n", "\n", " 1. Linear Models for Outlier Detection:\n", " 1. **PCA: Principal Component Analysis** use the sum of\n", " weighted projected distances to the eigenvector hyperplane \n", - " as the outlier outlier scores) [10]\n", + " as the outlier outlier scores)\n", " 2. **MCD: Minimum Covariance Determinant** (use the mahalanobis distances \n", - " as the outlier scores) [11, 12]\n", - " 3. **One-Class Support Vector Machines** [3]\n", + " as the outlier scores)\n", + " 3. **OCSVM: One-Class Support Vector Machines**\n", " \n", " 2. Proximity-Based Outlier Detection Models:\n", - " 1. **LOF: Local Outlier Factor** [1]\n", - " 2. **CBLOF: Clustering-Based Local Outlier Factor** [15]\n", + " 1. **LOF: Local Outlier Factor**\n", + " 2. **CBLOF: Clustering-Based Local Outlier Factor**\n", " 3. **kNN: k Nearest Neighbors** (use the distance to the kth nearest \n", " neighbor as the outlier score)\n", - " 4. **Average kNN** Outlier Detection (use the average distance to k \n", - " nearest neighbors as the outlier score)\n", - " 5. **Median kNN** Outlier Detection (use the median distance to k nearest \n", + " 4. **Median kNN** Outlier Detection (use the median distance to k nearest \n", " neighbors as the outlier score)\n", - " 6. **HBOS: Histogram-based Outlier Score** [5]\n", + " 5. **HBOS: Histogram-based Outlier Score**\n", " \n", " 3. Probabilistic Models for Outlier Detection:\n", - " 1. **ABOD: Angle-Based Outlier Detection** [7]\n", - " 2. **FastABOD: Fast Angle-Based Outlier Detection using approximation** [7]\n", + " 1. **ABOD: Angle-Based Outlier Detection**\n", " \n", " 4. Outlier Ensembles and Combination Frameworks\n", - " 1. **Isolation Forest** [2]\n", - " 2. **Feature Bagging** [9]" + " 1. **Isolation Forest**\n", + " 2. **Feature Bagging**\n", + " 3. **LSCP**\n", + " \n", + "Corresponding file could be found at /examples/compare_all_models.py" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": { "collapsed": true }, @@ -79,6 +79,7 @@ "from pyod.models.mcd import MCD\n", "from pyod.models.ocsvm import OCSVM\n", "from pyod.models.pca import PCA\n", + "from pyod.models.lscp import LSCP\n", "\n", "from pyod.utils.utility import standardizer\n", "from pyod.utils.utility import precision_n_scores\n", @@ -87,7 +88,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -96,214 +97,224 @@ "text": [ "\n", "... Processing arrhythmia.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.7687, precision @ rank n:0.3571, execution time: 0.171s\n", - "Cluster-based Local Outlier Factor ROC:0.778, precision @ rank n:0.5, execution time: 0.0344s\n", - "Feature Bagging ROC:0.7736, precision @ rank n:0.5, execution time: 0.5254s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.8511, precision @ rank n:0.5714, execution time: 0.2122s\n", - "Isolation Forest ROC:0.8217, precision @ rank n:0.5, execution time: 0.2036s\n", - "K Nearest Neighbors (KNN) ROC:0.782, precision @ rank n:0.5, execution time: 0.0853s\n", - "Local Outlier Factor (LOF) ROC:0.7787, precision @ rank n:0.4643, execution time: 0.0702s\n", - "Minimum Covariance Determinant (MCD) ROC:0.8228, precision @ rank n:0.4286, execution time: 0.5374s\n", - "One-class SVM (OCSVM) ROC:0.7986, precision @ rank n:0.5, execution time: 0.0481s\n", - "Principal Component Analysis (PCA) ROC:0.7997, precision @ rank n:0.5, execution time: 0.0572s\n", + "Angle-based Outlier Detector (ABOD) ROC:0.7687, precision @ rank n:0.3571, execution time: 0.1454s\n", + "Cluster-based Local Outlier Factor ROC:0.778, precision @ rank n:0.5, execution time: 0.0301s\n", + "Feature Bagging ROC:0.7736, precision @ rank n:0.5, execution time: 0.5825s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.8511, precision @ rank n:0.5714, execution time: 0.0622s\n", + "Isolation Forest ROC:0.8217, precision @ rank n:0.5, execution time: 0.2477s\n", + "K Nearest Neighbors (KNN) ROC:0.782, precision @ rank n:0.5, execution time: 0.0932s\n", + "Local Outlier Factor (LOF) ROC:0.7787, precision @ rank n:0.4643, execution time: 0.0681s\n", + "Minimum Covariance Determinant (MCD) ROC:0.8228, precision @ rank n:0.4286, execution time: 0.5083s\n", + "One-class SVM (OCSVM) ROC:0.7986, precision @ rank n:0.5, execution time: 0.0471s\n", + "Principal Component Analysis (PCA) ROC:0.7997, precision @ rank n:0.5, execution time: 0.0602s\n", + "Locally Selective Combination (LSCP) ROC:0.7754, precision @ rank n:0.4286, execution time: 2.4836s\n", "\n", "... Processing cardio.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.5668, precision @ rank n:0.209, execution time: 0.5818s\n", - "Cluster-based Local Outlier Factor ROC:0.8987, precision @ rank n:0.5075, execution time: 0.031s\n", - "Feature Bagging ROC:0.5667, precision @ rank n:0.1194, execution time: 0.909s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.8102, precision @ rank n:0.3731, execution time: 0.0469s\n", - "Isolation Forest ROC:0.8726, precision @ rank n:0.3433, execution time: 0.2626s\n", - "K Nearest Neighbors (KNN) ROC:0.7252, precision @ rank n:0.2388, execution time: 0.1524s\n", - "Local Outlier Factor (LOF) ROC:0.5313, precision @ rank n:0.1493, execution time: 0.0898s\n", - "Minimum Covariance Determinant (MCD) ROC:0.7966, precision @ rank n:0.3284, execution time: 0.4314s\n", - "One-class SVM (OCSVM) ROC:0.9055, precision @ rank n:0.3731, execution time: 0.0922s\n", - "Principal Component Analysis (PCA) ROC:0.9237, precision @ rank n:0.4925, execution time: 0.004s\n", + "Angle-based Outlier Detector (ABOD) ROC:0.5952, precision @ rank n:0.1884, execution time: 0.399s\n", + "Cluster-based Local Outlier Factor ROC:0.8894, precision @ rank n:0.4928, execution time: 0.0261s\n", + "Feature Bagging ROC:0.5628, precision @ rank n:0.1594, execution time: 0.8914s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.8227, precision @ rank n:0.4783, execution time: 0.006s\n", + "Isolation Forest ROC:0.8953, precision @ rank n:0.4493, execution time: 0.3219s\n", + "K Nearest Neighbors (KNN) ROC:0.7442, precision @ rank n:0.2899, execution time: 0.3168s\n", + "Local Outlier Factor (LOF) ROC:0.5459, precision @ rank n:0.1594, execution time: 0.1494s\n", + "Minimum Covariance Determinant (MCD) ROC:0.7774, precision @ rank n:0.4203, execution time: 0.6467s\n", + "One-class SVM (OCSVM) ROC:0.914, precision @ rank n:0.4493, execution time: 0.0983s\n", + "Principal Component Analysis (PCA) ROC:0.9323, precision @ rank n:0.5507, execution time: 0.004s\n", + "Locally Selective Combination (LSCP) ROC:0.622, precision @ rank n:0.1884, execution time: 5.0424s\n", "\n", "... Processing glass.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.7605, precision @ rank n:0.0, execution time: 0.0681s\n", - "Cluster-based Local Outlier Factor ROC:0.7457, precision @ rank n:0.0, execution time: 0.0192s\n", - "Feature Bagging ROC:0.758, precision @ rank n:0.2, execution time: 0.0156s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.6346, precision @ rank n:0.0, execution time: 0.0156s\n", - "Isolation Forest ROC:0.5556, precision @ rank n:0.0, execution time: 0.1253s\n", - "K Nearest Neighbors (KNN) ROC:0.8198, precision @ rank n:0.0, execution time: 0.0091s\n", - "Local Outlier Factor (LOF) ROC:0.8395, precision @ rank n:0.2, execution time: 0.002s\n", - "Minimum Covariance Determinant (MCD) ROC:0.7728, precision @ rank n:0.0, execution time: 0.0356s\n", - "One-class SVM (OCSVM) ROC:0.5506, precision @ rank n:0.0, execution time: 0.0s\n", - "Principal Component Analysis (PCA) ROC:0.5506, precision @ rank n:0.0, execution time: 0.0s\n", + "Angle-based Outlier Detector (ABOD) ROC:0.8588, precision @ rank n:0.0, execution time: 0.0401s\n", + "Cluster-based Local Outlier Factor ROC:0.7765, precision @ rank n:0.0, execution time: 0.012s\n", + "Feature Bagging ROC:0.4235, precision @ rank n:0.0, execution time: 0.0281s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.6, precision @ rank n:0.0, execution time: 0.002s\n", + "Isolation Forest ROC:0.7765, precision @ rank n:0.0, execution time: 0.1684s\n", + "K Nearest Neighbors (KNN) ROC:0.8353, precision @ rank n:0.0, execution time: 0.018s\n", + "Local Outlier Factor (LOF) ROC:0.3882, precision @ rank n:0.0, execution time: 0.003s\n", + "Minimum Covariance Determinant (MCD) ROC:0.8353, precision @ rank n:0.0, execution time: 0.0431s\n", + "One-class SVM (OCSVM) ROC:0.7529, precision @ rank n:0.0, execution time: 0.001s\n", + "Principal Component Analysis (PCA) ROC:0.7176, precision @ rank n:0.0, execution time: 0.002s\n", + "Locally Selective Combination (LSCP) ROC:0.7529, precision @ rank n:0.0, execution time: 0.2878s\n", "\n", "... Processing ionosphere.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.92, precision @ rank n:0.8333, execution time: 0.0937s\n", - "Cluster-based Local Outlier Factor ROC:0.812, precision @ rank n:0.6111, execution time: 0.0156s\n", - "Feature Bagging ROC:0.9004, precision @ rank n:0.7407, execution time: 0.0625s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.6005, precision @ rank n:0.4259, execution time: 0.0313s\n", - "Isolation Forest ROC:0.8587, precision @ rank n:0.6667, execution time: 0.16s\n", - "K Nearest Neighbors (KNN) ROC:0.9378, precision @ rank n:0.8704, execution time: 0.0157s\n", - "Local Outlier Factor (LOF) ROC:0.9063, precision @ rank n:0.7407, execution time: 0.0156s\n", - "Minimum Covariance Determinant (MCD) ROC:0.9513, precision @ rank n:0.8704, execution time: 0.0468s\n", - "One-class SVM (OCSVM) ROC:0.8497, precision @ rank n:0.7593, execution time: 0.0s\n", - "Principal Component Analysis (PCA) ROC:0.8025, precision @ rank n:0.6481, execution time: 0.0s\n", + "Angle-based Outlier Detector (ABOD) ROC:0.9302, precision @ rank n:0.8462, execution time: 0.0792s\n", + "Cluster-based Local Outlier Factor ROC:0.8073, precision @ rank n:0.6154, execution time: 0.0271s\n", + "Feature Bagging ROC:0.9092, precision @ rank n:0.7692, execution time: 0.0722s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.5869, precision @ rank n:0.4038, execution time: 0.008s\n", + "Isolation Forest ROC:0.8734, precision @ rank n:0.7115, execution time: 0.2347s\n", + "K Nearest Neighbors (KNN) ROC:0.9358, precision @ rank n:0.8846, execution time: 0.0251s\n", + "Local Outlier Factor (LOF) ROC:0.9114, precision @ rank n:0.7692, execution time: 0.006s\n", + "Minimum Covariance Determinant (MCD) ROC:0.9576, precision @ rank n:0.9038, execution time: 0.0682s\n", + "One-class SVM (OCSVM) ROC:0.8861, precision @ rank n:0.8077, execution time: 0.005s\n", + "Principal Component Analysis (PCA) ROC:0.8204, precision @ rank n:0.6154, execution time: 0.002s\n", + "Locally Selective Combination (LSCP) ROC:0.9041, precision @ rank n:0.75, execution time: 0.5264s\n", "\n", "... Processing letter.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.8992, precision @ rank n:0.3438, execution time: 0.4973s\n", - "Cluster-based Local Outlier Factor ROC:0.5905, precision @ rank n:0.0625, execution time: 0.0156s\n", - "Feature Bagging ROC:0.8938, precision @ rank n:0.4062, execution time: 0.7252s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.6328, precision @ rank n:0.0312, execution time: 0.0625s\n", - "Isolation Forest ROC:0.6445, precision @ rank n:0.0312, execution time: 0.2632s\n", - "K Nearest Neighbors (KNN) ROC:0.8972, precision @ rank n:0.3438, execution time: 0.1263s\n", - "Local Outlier Factor (LOF) ROC:0.8821, precision @ rank n:0.3125, execution time: 0.0943s\n", - "Minimum Covariance Determinant (MCD) ROC:0.8766, precision @ rank n:0.125, execution time: 0.9454s\n", - "One-class SVM (OCSVM) ROC:0.6071, precision @ rank n:0.0938, execution time: 0.0762s\n", - "Principal Component Analysis (PCA) ROC:0.5265, precision @ rank n:0.0625, execution time: 0.004s\n", + "Angle-based Outlier Detector (ABOD) ROC:0.9035, precision @ rank n:0.4255, execution time: 0.3579s\n", + "Cluster-based Local Outlier Factor ROC:0.5555, precision @ rank n:0.0851, execution time: 0.021s\n", + "Feature Bagging ROC:0.9077, precision @ rank n:0.4894, execution time: 0.751s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.6056, precision @ rank n:0.1915, execution time: 0.008s\n", + "Isolation Forest ROC:0.5945, precision @ rank n:0.1064, execution time: 0.2597s\n", + "K Nearest Neighbors (KNN) ROC:0.8909, precision @ rank n:0.4043, execution time: 0.1584s\n", + "Local Outlier Factor (LOF) ROC:0.8821, precision @ rank n:0.4681, execution time: 0.1203s\n", + "Minimum Covariance Determinant (MCD) ROC:0.8144, precision @ rank n:0.1915, execution time: 1.1551s\n", + "One-class SVM (OCSVM) ROC:0.5727, precision @ rank n:0.1489, execution time: 0.0852s\n", + "Principal Component Analysis (PCA) ROC:0.5104, precision @ rank n:0.1277, execution time: 0.004s\n", + "Locally Selective Combination (LSCP) ROC:0.857, precision @ rank n:0.4043, execution time: 4.7737s\n", "\n", "... Processing lympho.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.7155, precision @ rank n:0.0, execution time: 0.0401s\n", - "Cluster-based Local Outlier Factor ROC:0.9914, precision @ rank n:0.5, execution time: 0.017s\n", - "Feature Bagging ROC:0.9483, precision @ rank n:0.5, execution time: 0.023s\n", - "Histogram-base Outlier Detection (HBOS) ROC:1.0, precision @ rank n:1.0, execution time: 0.0071s\n", - "Isolation Forest ROC:1.0, precision @ rank n:1.0, execution time: 0.1614s\n", - "K Nearest Neighbors (KNN) ROC:0.9397, precision @ rank n:0.5, execution time: 0.005s\n", - "Local Outlier Factor (LOF) ROC:0.9569, precision @ rank n:0.5, execution time: 0.002s\n", - "Minimum Covariance Determinant (MCD) ROC:0.9483, precision @ rank n:0.5, execution time: 0.031s\n", - "One-class SVM (OCSVM) ROC:0.9655, precision @ rank n:0.5, execution time: 0.002s\n", - "Principal Component Analysis (PCA) ROC:0.9914, precision @ rank n:0.5, execution time: 0.002s\n", + "Angle-based Outlier Detector (ABOD) ROC:0.9357, precision @ rank n:0.3333, execution time: 0.0231s\n", + "Cluster-based Local Outlier Factor ROC:0.9708, precision @ rank n:0.6667, execution time: 0.015s\n", + "Feature Bagging ROC:0.924, precision @ rank n:0.3333, execution time: 0.0231s\n", + "Histogram-base Outlier Detection (HBOS) ROC:1.0, precision @ rank n:1.0, execution time: 0.004s\n", + "Isolation Forest ROC:0.9942, precision @ rank n:0.6667, execution time: 0.2065s\n", + "K Nearest Neighbors (KNN) ROC:0.9064, precision @ rank n:0.3333, execution time: 0.011s\n", + "Local Outlier Factor (LOF) ROC:0.924, precision @ rank n:0.3333, execution time: 0.003s\n", + "Minimum Covariance Determinant (MCD) ROC:0.7778, precision @ rank n:0.0, execution time: 0.0491s\n", + "One-class SVM (OCSVM) ROC:0.9357, precision @ rank n:0.3333, execution time: 0.002s\n", + "Principal Component Analysis (PCA) ROC:0.9649, precision @ rank n:0.6667, execution time: 0.001s\n", + "Locally Selective Combination (LSCP) ROC:0.9357, precision @ rank n:0.3333, execution time: 0.2988s\n", "\n", "... Processing mnist.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.7747, precision @ rank n:0.384, execution time: 7.7986s\n", - "Cluster-based Local Outlier Factor ROC:0.8431, precision @ rank n:0.365, execution time: 0.067s\n", - "Feature Bagging ROC:0.7246, precision @ rank n:0.3422, execution time: 42.0965s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.5769, precision @ rank n:0.1217, execution time: 0.9069s\n", - "Isolation Forest ROC:0.8033, precision @ rank n:0.2966, execution time: 1.4098s\n", - "K Nearest Neighbors (KNN) ROC:0.8431, precision @ rank n:0.4183, execution time: 5.7465s\n", - "Local Outlier Factor (LOF) ROC:0.7101, precision @ rank n:0.3384, execution time: 5.7854s\n", - "Minimum Covariance Determinant (MCD) ROC:0.9059, precision @ rank n:0.5133, execution time: 2.0246s\n", - "One-class SVM (OCSVM) ROC:0.851, precision @ rank n:0.3802, execution time: 4.2719s\n", - "Principal Component Analysis (PCA) ROC:0.8497, precision @ rank n:0.3688, execution time: 0.125s\n", + "Angle-based Outlier Detector (ABOD) ROC:0.7978, precision @ rank n:0.3594, execution time: 7.2033s\n", + "Cluster-based Local Outlier Factor ROC:0.8477, precision @ rank n:0.3915, execution time: 0.0622s\n", + "Feature Bagging ROC:0.7451, precision @ rank n:0.3452, execution time: 57.4463s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.5645, precision @ rank n:0.1174, execution time: 0.0451s\n", + "Isolation Forest ROC:0.8154, precision @ rank n:0.3096, execution time: 1.7867s\n", + "K Nearest Neighbors (KNN) ROC:0.8643, precision @ rank n:0.4448, execution time: 7.1259s\n", + "Local Outlier Factor (LOF) ROC:0.7442, precision @ rank n:0.3523, execution time: 6.4782s\n", + "Minimum Covariance Determinant (MCD) ROC:0.8926, precision @ rank n:0.4875, execution time: 2.4916s\n", + "One-class SVM (OCSVM) ROC:0.8595, precision @ rank n:0.3915, execution time: 4.6975s\n", + "Principal Component Analysis (PCA) ROC:0.8572, precision @ rank n:0.3843, execution time: 0.1494s\n", + "Locally Selective Combination (LSCP) ROC:0.7873, precision @ rank n:0.3665, execution time: 191.5348s\n", "\n", "... Processing musk.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.2716, precision @ rank n:0.0714, execution time: 2.2028s\n", - "Cluster-based Local Outlier Factor ROC:1.0, precision @ rank n:1.0, execution time: 0.028s\n", - "Feature Bagging ROC:0.6591, precision @ rank n:0.2143, execution time: 10.1455s\n", - "Histogram-base Outlier Detection (HBOS) ROC:1.0, precision @ rank n:1.0, execution time: 0.5653s\n", - "Isolation Forest ROC:1.0, precision @ rank n:1.0, execution time: 0.8163s\n", - "K Nearest Neighbors (KNN) ROC:0.8247, precision @ rank n:0.2857, execution time: 1.5487s\n", - "Local Outlier Factor (LOF) ROC:0.6128, precision @ rank n:0.2143, execution time: 1.466s\n", - "Minimum Covariance Determinant (MCD) ROC:1.0, precision @ rank n:0.9762, execution time: 8.3801s\n", - "One-class SVM (OCSVM) ROC:1.0, precision @ rank n:1.0, execution time: 1.3012s\n", - "Principal Component Analysis (PCA) ROC:1.0, precision @ rank n:1.0, execution time: 0.1484s\n", - "\n", - "... Processing optdigits.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.4971, precision @ rank n:0.0299, execution time: 2.8534s\n", - "Cluster-based Local Outlier Factor ROC:0.5922, precision @ rank n:0.0, execution time: 0.025s\n", - "Feature Bagging ROC:0.4715, precision @ rank n:0.0448, execution time: 10.828s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.8553, precision @ rank n:0.209, execution time: 0.4581s\n", - "Isolation Forest ROC:0.7033, precision @ rank n:0.0299, execution time: 0.658s\n", - "K Nearest Neighbors (KNN) ROC:0.4029, precision @ rank n:0.0, execution time: 1.7452s\n", - "Local Outlier Factor (LOF) ROC:0.4934, precision @ rank n:0.0448, execution time: 1.9845s\n", - "Minimum Covariance Determinant (MCD) ROC:0.4041, precision @ rank n:0.0, execution time: 1.2785s\n" + "Angle-based Outlier Detector (ABOD) ROC:0.2111, precision @ rank n:0.0488, execution time: 2.3532s\n", + "Cluster-based Local Outlier Factor ROC:0.9864, precision @ rank n:0.6829, execution time: 0.0361s\n", + "Feature Bagging ROC:0.6141, precision @ rank n:0.2195, execution time: 13.4944s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.9999, precision @ rank n:0.9756, execution time: 0.0822s\n", + "Isolation Forest ROC:0.9997, precision @ rank n:0.9756, execution time: 1.5561s\n", + "K Nearest Neighbors (KNN) ROC:0.8224, precision @ rank n:0.2439, execution time: 2.3803s\n", + "Local Outlier Factor (LOF) ROC:0.6232, precision @ rank n:0.2195, execution time: 2.0785s\n", + "Minimum Covariance Determinant (MCD) ROC:0.9984, precision @ rank n:0.878, execution time: 14.7882s\n", + "One-class SVM (OCSVM) ROC:1.0, precision @ rank n:1.0, execution time: 1.3396s\n", + "Principal Component Analysis (PCA) ROC:0.9999, precision @ rank n:0.9512, execution time: 0.1594s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "One-class SVM (OCSVM) ROC:0.4808, precision @ rank n:0.0, execution time: 1.5436s\n", - "Principal Component Analysis (PCA) ROC:0.5016, precision @ rank n:0.0, execution time: 0.0537s\n", + "Locally Selective Combination (LSCP) ROC:0.5304, precision @ rank n:0.1463, execution time: 116.7357s\n", + "\n", + "... Processing optdigits.mat ...\n", + "Angle-based Outlier Detector (ABOD) ROC:0.4294, precision @ rank n:0.0149, execution time: 3.1473s\n", + "Cluster-based Local Outlier Factor ROC:0.49, precision @ rank n:0.0, execution time: 0.0261s\n", + "Feature Bagging ROC:0.4108, precision @ rank n:0.0149, execution time: 14.9847s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.835, precision @ rank n:0.209, execution time: 0.0341s\n", + "Isolation Forest ROC:0.7365, precision @ rank n:0.0299, execution time: 0.8773s\n", + "K Nearest Neighbors (KNN) ROC:0.3836, precision @ rank n:0.0, execution time: 1.9953s\n", + "Local Outlier Factor (LOF) ROC:0.3996, precision @ rank n:0.0149, execution time: 1.7457s\n", + "Minimum Covariance Determinant (MCD) ROC:0.3791, precision @ rank n:0.0, execution time: 1.0467s\n", + "One-class SVM (OCSVM) ROC:0.532, precision @ rank n:0.0, execution time: 1.4028s\n", + "Principal Component Analysis (PCA) ROC:0.525, precision @ rank n:0.0, execution time: 0.0451s\n", + "Locally Selective Combination (LSCP) ROC:0.3975, precision @ rank n:0.0149, execution time: 60.2475s\n", "\n", "... Processing pendigits.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.6957, precision @ rank n:0.1127, execution time: 1.8649s\n", - "Cluster-based Local Outlier Factor ROC:0.9329, precision @ rank n:0.2394, execution time: 0.0669s\n", - "Feature Bagging ROC:0.4277, precision @ rank n:0.0986, execution time: 4.0121s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.9322, precision @ rank n:0.3099, execution time: 0.1376s\n", - "Isolation Forest ROC:0.9756, precision @ rank n:0.3944, execution time: 0.5828s\n", - "K Nearest Neighbors (KNN) ROC:0.7694, precision @ rank n:0.1549, execution time: 0.5576s\n", - "Local Outlier Factor (LOF) ROC:0.4056, precision @ rank n:0.0986, execution time: 0.5517s\n", - "Minimum Covariance Determinant (MCD) ROC:0.8413, precision @ rank n:0.0986, execution time: 1.609s\n", - "One-class SVM (OCSVM) ROC:0.9376, precision @ rank n:0.3662, execution time: 0.8713s\n", - "Principal Component Analysis (PCA) ROC:0.9384, precision @ rank n:0.3803, execution time: 0.005s\n", + "Angle-based Outlier Detector (ABOD) ROC:0.6608, precision @ rank n:0.1224, execution time: 1.4017s\n", + "Cluster-based Local Outlier Factor ROC:0.934, precision @ rank n:0.2041, execution time: 0.0551s\n", + "Feature Bagging ROC:0.3992, precision @ rank n:0.0408, execution time: 4.9451s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.9209, precision @ rank n:0.3061, execution time: 0.011s\n", + "Isolation Forest ROC:0.9296, precision @ rank n:0.3061, execution time: 0.5765s\n", + "K Nearest Neighbors (KNN) ROC:0.7086, precision @ rank n:0.0408, execution time: 0.9656s\n", + "Local Outlier Factor (LOF) ROC:0.419, precision @ rank n:0.0408, execution time: 0.6006s\n", + "Minimum Covariance Determinant (MCD) ROC:0.8369, precision @ rank n:0.0612, execution time: 1.8158s\n", + "One-class SVM (OCSVM) ROC:0.9267, precision @ rank n:0.2449, execution time: 1.0207s\n", + "Principal Component Analysis (PCA) ROC:0.9359, precision @ rank n:0.2653, execution time: 0.01s\n", + "Locally Selective Combination (LSCP) ROC:0.487, precision @ rank n:0.0408, execution time: 25.4254s\n", "\n", "... Processing pima.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.6623, precision @ rank n:0.4906, execution time: 0.1805s\n", - "Cluster-based Local Outlier Factor ROC:0.7654, precision @ rank n:0.5755, execution time: 0.022s\n", - "Feature Bagging ROC:0.6523, precision @ rank n:0.4811, execution time: 0.0851s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.7016, precision @ rank n:0.5283, execution time: 0.0168s\n", - "Isolation Forest ROC:0.696, precision @ rank n:0.5283, execution time: 0.1829s\n", - "K Nearest Neighbors (KNN) ROC:0.71, precision @ rank n:0.5094, execution time: 0.0156s\n", - "Local Outlier Factor (LOF) ROC:0.6455, precision @ rank n:0.4717, execution time: 0.0156s\n", - "Minimum Covariance Determinant (MCD) ROC:0.6755, precision @ rank n:0.5094, execution time: 0.0468s\n", - "One-class SVM (OCSVM) ROC:0.6024, precision @ rank n:0.4528, execution time: 0.0s\n", - "Principal Component Analysis (PCA) ROC:0.6508, precision @ rank n:0.5, execution time: 0.0s\n", + "Angle-based Outlier Detector (ABOD) ROC:0.6864, precision @ rank n:0.5847, execution time: 0.1334s\n", + "Cluster-based Local Outlier Factor ROC:0.7064, precision @ rank n:0.5678, execution time: 0.0221s\n", + "Feature Bagging ROC:0.618, precision @ rank n:0.4746, execution time: 0.0942s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.7031, precision @ rank n:0.5847, execution time: 0.003s\n", + "Isolation Forest ROC:0.6704, precision @ rank n:0.5424, execution time: 0.2035s\n", + "K Nearest Neighbors (KNN) ROC:0.712, precision @ rank n:0.5847, execution time: 0.0662s\n", + "Local Outlier Factor (LOF) ROC:0.6356, precision @ rank n:0.5169, execution time: 0.01s\n", + "Minimum Covariance Determinant (MCD) ROC:0.7026, precision @ rank n:0.5678, execution time: 0.0852s\n", + "One-class SVM (OCSVM) ROC:0.6297, precision @ rank n:0.5085, execution time: 0.012s\n", + "Principal Component Analysis (PCA) ROC:0.6602, precision @ rank n:0.5508, execution time: 0.002s\n", + "Locally Selective Combination (LSCP) ROC:0.6538, precision @ rank n:0.5339, execution time: 1.1691s\n", "\n", "... Processing satellite.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.5821, precision @ rank n:0.4077, execution time: 2.2945s\n", - "Cluster-based Local Outlier Factor ROC:0.5428, precision @ rank n:0.3153, execution time: 0.0313s\n", - "Feature Bagging ROC:0.5469, precision @ rank n:0.3957, execution time: 6.9375s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.7471, precision @ rank n:0.5612, execution time: 0.2903s\n", - "Isolation Forest ROC:0.7153, precision @ rank n:0.5743, execution time: 0.5562s\n", - "K Nearest Neighbors (KNN) ROC:0.6868, precision @ rank n:0.5072, execution time: 0.8947s\n", - "Local Outlier Factor (LOF) ROC:0.5509, precision @ rank n:0.3993, execution time: 0.8896s\n", - "Minimum Covariance Determinant (MCD) ROC:0.8059, precision @ rank n:0.6906, execution time: 1.679s\n", - "One-class SVM (OCSVM) ROC:0.6564, precision @ rank n:0.5372, execution time: 1.225s\n", - "Principal Component Analysis (PCA) ROC:0.5902, precision @ rank n:0.4712, execution time: 0.0313s\n", + "Angle-based Outlier Detector (ABOD) ROC:0.5676, precision @ rank n:0.4078, execution time: 1.89s\n", + "Cluster-based Local Outlier Factor ROC:0.7307, precision @ rank n:0.4539, execution time: 0.025s\n", + "Feature Bagging ROC:0.5645, precision @ rank n:0.4054, execution time: 8.0935s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.7593, precision @ rank n:0.5804, execution time: 0.019s\n", + "Isolation Forest ROC:0.6947, precision @ rank n:0.5686, execution time: 0.8693s\n", + "K Nearest Neighbors (KNN) ROC:0.6827, precision @ rank n:0.5, execution time: 1.2533s\n", + "Local Outlier Factor (LOF) ROC:0.5676, precision @ rank n:0.4066, execution time: 1.0658s\n", + "Minimum Covariance Determinant (MCD) ROC:0.7991, precision @ rank n:0.6832, execution time: 2.8646s\n", + "One-class SVM (OCSVM) ROC:0.6551, precision @ rank n:0.5355, execution time: 1.3265s\n", + "Principal Component Analysis (PCA) ROC:0.5976, precision @ rank n:0.4787, execution time: 0.0271s\n", + "Locally Selective Combination (LSCP) ROC:0.5809, precision @ rank n:0.4184, execution time: 34.2882s\n", "\n", "... Processing satimage-2.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.8216, precision @ rank n:0.2, execution time: 1.8979s\n", - "Cluster-based Local Outlier Factor ROC:0.9372, precision @ rank n:0.6, execution time: 0.0468s\n", - "Feature Bagging ROC:0.3658, precision @ rank n:0.04, execution time: 5.081s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.9862, precision @ rank n:0.68, execution time: 0.242s\n", - "Isolation Forest ROC:0.9959, precision @ rank n:0.88, execution time: 0.4869s\n", - "K Nearest Neighbors (KNN) ROC:0.9528, precision @ rank n:0.28, execution time: 0.7402s\n", - "Local Outlier Factor (LOF) ROC:0.3717, precision @ rank n:0.0417, execution time: 0.7539s\n", - "Minimum Covariance Determinant (MCD) ROC:0.9949, precision @ rank n:0.52, execution time: 1.4754s\n", - "One-class SVM (OCSVM) ROC:0.9975, precision @ rank n:0.96, execution time: 1.1365s\n", - "Principal Component Analysis (PCA) ROC:0.9901, precision @ rank n:0.8, execution time: 0.0022s\n", - "\n", - "... Processing shuttle.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.6164, precision @ rank n:0.1785, execution time: 19.6385s\n", - "Cluster-based Local Outlier Factor ROC:0.9899, precision @ rank n:0.95, execution time: 0.0781s\n", - "Feature Bagging ROC:0.5342, precision @ rank n:0.0836, execution time: 57.0473s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.9847, precision @ rank n:0.9657, execution time: 0.4604s\n", - "Isolation Forest ROC:0.9963, precision @ rank n:0.9022, execution time: 2.8161s\n", - "K Nearest Neighbors (KNN) ROC:0.6409, precision @ rank n:0.2028, execution time: 7.8509s\n", - "Local Outlier Factor (LOF) ROC:0.5373, precision @ rank n:0.1329, execution time: 10.3425s\n", - "Minimum Covariance Determinant (MCD) ROC:0.9898, precision @ rank n:0.7192, execution time: 7.8624s\n", - "One-class SVM (OCSVM) ROC:0.9919, precision @ rank n:0.9559, execution time: 38.0809s\n", - "Principal Component Analysis (PCA) ROC:0.9901, precision @ rank n:0.9507, execution time: 0.0373s\n", + "Angle-based Outlier Detector (ABOD) ROC:0.8497, precision @ rank n:0.1667, execution time: 1.7396s\n", + "Cluster-based Local Outlier Factor ROC:0.9568, precision @ rank n:0.5, execution time: 0.0531s\n", + "Feature Bagging ROC:0.4798, precision @ rank n:0.1, execution time: 7.2252s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.9948, precision @ rank n:0.7, execution time: 0.0211s\n", + "Isolation Forest ROC:0.9997, precision @ rank n:0.9333, execution time: 0.6788s\n", + "K Nearest Neighbors (KNN) ROC:0.9693, precision @ rank n:0.4, execution time: 1.1992s\n", + "Local Outlier Factor (LOF) ROC:0.4819, precision @ rank n:0.1, execution time: 0.9445s\n", + "Minimum Covariance Determinant (MCD) ROC:0.996, precision @ rank n:0.7, execution time: 2.1818s\n", + "One-class SVM (OCSVM) ROC:1.0, precision @ rank n:1.0, execution time: 1.114s\n", + "Principal Component Analysis (PCA) ROC:0.9974, precision @ rank n:0.8333, execution time: 0.0211s\n", + "Locally Selective Combination (LSCP) ROC:0.6986, precision @ rank n:0.1, execution time: 33.6747s\n", "\n", "... Processing vertebral.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.3435, precision @ rank n:0.0, execution time: 0.0671s\n", - "Cluster-based Local Outlier Factor ROC:0.504, precision @ rank n:0.0, execution time: 0.0156s\n", - "Feature Bagging ROC:0.4013, precision @ rank n:0.0, execution time: 0.0346s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.4278, precision @ rank n:0.0, execution time: 0.0s\n", - "Isolation Forest ROC:0.3628, precision @ rank n:0.0, execution time: 0.1377s\n", - "K Nearest Neighbors (KNN) ROC:0.3226, precision @ rank n:0.0, execution time: 0.0156s\n", - "Local Outlier Factor (LOF) ROC:0.4382, precision @ rank n:0.0, execution time: 0.0s\n", - "Minimum Covariance Determinant (MCD) ROC:0.3772, precision @ rank n:0.0, execution time: 0.0534s\n", - "One-class SVM (OCSVM) ROC:0.3868, precision @ rank n:0.0, execution time: 0.001s\n", - "Principal Component Analysis (PCA) ROC:0.427, precision @ rank n:0.0, execution time: 0.001s\n", + "Angle-based Outlier Detector (ABOD) ROC:0.2428, precision @ rank n:0.0, execution time: 0.0371s\n", + "Cluster-based Local Outlier Factor ROC:0.2588, precision @ rank n:0.0, execution time: 0.023s\n", + "Feature Bagging ROC:0.2909, precision @ rank n:0.0, execution time: 0.0391s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.1524, precision @ rank n:0.0, execution time: 0.003s\n", + "Isolation Forest ROC:0.2449, precision @ rank n:0.0, execution time: 0.1775s\n", + "K Nearest Neighbors (KNN) ROC:0.2791, precision @ rank n:0.0, execution time: 0.018s\n", + "Local Outlier Factor (LOF) ROC:0.293, precision @ rank n:0.0, execution time: 0.003s\n", + "Minimum Covariance Determinant (MCD) ROC:0.3273, precision @ rank n:0.0, execution time: 0.0491s\n", + "One-class SVM (OCSVM) ROC:0.2909, precision @ rank n:0.0, execution time: 0.002s\n", + "Principal Component Analysis (PCA) ROC:0.2439, precision @ rank n:0.0, execution time: 0.001s\n", + "Locally Selective Combination (LSCP) ROC:0.2503, precision @ rank n:0.0, execution time: 0.3359s\n", "\n", "... Processing vowels.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.9718, precision @ rank n:0.5, execution time: 0.395s\n", - "Cluster-based Local Outlier Factor ROC:0.5681, precision @ rank n:0.0, execution time: 0.0156s\n", - "Feature Bagging ROC:0.9304, precision @ rank n:0.3636, execution time: 0.2297s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.7306, precision @ rank n:0.1818, execution time: 0.0072s\n", - "Isolation Forest ROC:0.7791, precision @ rank n:0.2727, execution time: 0.1966s\n", - "K Nearest Neighbors (KNN) ROC:0.9661, precision @ rank n:0.4545, execution time: 0.0731s\n", - "Local Outlier Factor (LOF) ROC:0.9277, precision @ rank n:0.3182, execution time: 0.0313s\n", - "Minimum Covariance Determinant (MCD) ROC:0.6799, precision @ rank n:0.0455, execution time: 0.5917s\n", - "One-class SVM (OCSVM) ROC:0.7739, precision @ rank n:0.3182, execution time: 0.0313s\n", - "Principal Component Analysis (PCA) ROC:0.6362, precision @ rank n:0.2727, execution time: 0.0156s\n", + "Angle-based Outlier Detector (ABOD) ROC:0.9726, precision @ rank n:0.5, execution time: 0.2637s\n", + "Cluster-based Local Outlier Factor ROC:0.574, precision @ rank n:0.0, execution time: 0.0221s\n", + "Feature Bagging ROC:0.955, precision @ rank n:0.25, execution time: 0.2787s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.6683, precision @ rank n:0.0625, execution time: 0.004s\n", + "Isolation Forest ROC:0.7809, precision @ rank n:0.0625, execution time: 0.2557s\n", + "K Nearest Neighbors (KNN) ROC:0.9775, precision @ rank n:0.3125, execution time: 0.1153s\n", + "Local Outlier Factor (LOF) ROC:0.9514, precision @ rank n:0.3125, execution time: 0.0351s\n", + "Minimum Covariance Determinant (MCD) ROC:0.7081, precision @ rank n:0.0625, execution time: 0.7189s\n", + "One-class SVM (OCSVM) ROC:0.8244, precision @ rank n:0.1875, execution time: 0.0441s\n", + "Principal Component Analysis (PCA) ROC:0.5585, precision @ rank n:0.0, execution time: 0.002s\n", + "Locally Selective Combination (LSCP) ROC:0.9604, precision @ rank n:0.3125, execution time: 2.3161s\n", "\n", "... Processing wbc.mat ...\n", - "Angle-based Outlier Detector (ABOD) ROC:0.9723, precision @ rank n:0.7273, execution time: 0.1057s\n", - "Cluster-based Local Outlier Factor ROC:0.9658, precision @ rank n:0.6364, execution time: 0.0156s\n", - "Feature Bagging ROC:0.9562, precision @ rank n:0.7273, execution time: 0.0703s\n", - "Histogram-base Outlier Detection (HBOS) ROC:0.9678, precision @ rank n:0.7273, execution time: 0.0171s\n", - "Isolation Forest ROC:0.9516, precision @ rank n:0.6364, execution time: 0.1392s\n", - "K Nearest Neighbors (KNN) ROC:0.962, precision @ rank n:0.6364, execution time: 0.0156s\n", - "Local Outlier Factor (LOF) ROC:0.9542, precision @ rank n:0.7273, execution time: 0.0179s\n", - "Minimum Covariance Determinant (MCD) ROC:0.9523, precision @ rank n:0.5455, execution time: 0.0541s\n", - "One-class SVM (OCSVM) ROC:0.9555, precision @ rank n:0.6364, execution time: 0.005s\n", - "Principal Component Analysis (PCA) ROC:0.951, precision @ rank n:0.6364, execution time: 0.002s\n" + "Angle-based Outlier Detector (ABOD) ROC:0.8803, precision @ rank n:0.2, execution time: 0.0632s\n", + "Cluster-based Local Outlier Factor ROC:0.9374, precision @ rank n:0.4, execution time: 0.015s\n", + "Feature Bagging ROC:0.9224, precision @ rank n:0.2, execution time: 0.0702s\n", + "Histogram-base Outlier Detection (HBOS) ROC:0.9415, precision @ rank n:0.4, execution time: 0.008s\n", + "Isolation Forest ROC:0.9102, precision @ rank n:0.2, execution time: 0.2055s\n", + "K Nearest Neighbors (KNN) ROC:0.9034, precision @ rank n:0.2, execution time: 0.0291s\n", + "Local Outlier Factor (LOF) ROC:0.9211, precision @ rank n:0.2, execution time: 0.007s\n", + "Minimum Covariance Determinant (MCD) ROC:0.9129, precision @ rank n:0.2, execution time: 0.0602s\n", + "One-class SVM (OCSVM) ROC:0.9224, precision @ rank n:0.2, execution time: 0.006s\n", + "Principal Component Analysis (PCA) ROC:0.9102, precision @ rank n:0.2, execution time: 0.002s\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Locally Selective Combination (LSCP) ROC:0.9116, precision @ rank n:0.4, execution time: 0.5545s\n" ] } ], @@ -322,7 +333,7 @@ " 'pima.mat',\n", " 'satellite.mat',\n", " 'satimage-2.mat',\n", - " 'shuttle.mat',\n", + "# 'shuttle.mat',\n", " 'vertebral.mat',\n", " 'vowels.mat',\n", " 'wbc.mat']\n", @@ -332,11 +343,17 @@ "\n", "df_columns = ['Data', '#Samples', '# Dimensions', 'Outlier Perc',\n", " 'ABOD', 'CBLOF', 'FB', 'HBOS', 'IForest', 'KNN', 'LOF', 'MCD',\n", - " 'OCSVM', 'PCA']\n", + " 'OCSVM', 'PCA', 'LSCP']\n", "roc_df = pd.DataFrame(columns=df_columns)\n", "prn_df = pd.DataFrame(columns=df_columns)\n", "time_df = pd.DataFrame(columns=df_columns)\n", "\n", + "# initialize a set of detectors for LSCP\n", + "detector_list = [LOF(n_neighbors=5), LOF(n_neighbors=10), LOF(n_neighbors=15),\n", + " LOF(n_neighbors=20), LOF(n_neighbors=25), LOF(n_neighbors=30),\n", + " LOF(n_neighbors=35), LOF(n_neighbors=40), LOF(n_neighbors=45),\n", + " LOF(n_neighbors=50)]\n", + "\n", "for mat_file in mat_file_list:\n", " print(\"\\n... Processing\", mat_file, '...')\n", " mat = loadmat(os.path.join('data', mat_file))\n", @@ -379,6 +396,9 @@ " random_state=random_state),\n", " 'Principal Component Analysis (PCA)': PCA(\n", " contamination=outliers_fraction, random_state=random_state),\n", + " 'Locally Selective Combination (LSCP)': LSCP(\n", + " detector_list, contamination=outliers_fraction,\n", + " random_state=random_state),\n", " }\n", "\n", " for clf_name, clf in classifiers.items():\n", @@ -414,7 +434,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -459,6 +479,7 @@ " <th>MCD</th>\n", " <th>OCSVM</th>\n", " <th>PCA</th>\n", + " <th>LSCP</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", @@ -468,16 +489,17 @@ " <td>452</td>\n", " <td>274</td>\n", " <td>14.6018</td>\n", - " <td>0.171</td>\n", - " <td>0.0344</td>\n", - " <td>0.5254</td>\n", - " <td>0.2122</td>\n", - " <td>0.2036</td>\n", - " <td>0.0853</td>\n", - " <td>0.0702</td>\n", - " <td>0.5374</td>\n", - " <td>0.0481</td>\n", - " <td>0.0572</td>\n", + " <td>0.1454</td>\n", + " <td>0.0301</td>\n", + " <td>0.5825</td>\n", + " <td>0.0622</td>\n", + " <td>0.2477</td>\n", + " <td>0.0932</td>\n", + " <td>0.0681</td>\n", + " <td>0.5083</td>\n", + " <td>0.0471</td>\n", + " <td>0.0602</td>\n", + " <td>2.4836</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -485,16 +507,17 @@ " <td>1831</td>\n", " <td>21</td>\n", " <td>9.6122</td>\n", - " <td>0.5818</td>\n", - " <td>0.031</td>\n", - " <td>0.909</td>\n", - " <td>0.0469</td>\n", - " <td>0.2626</td>\n", - " <td>0.1524</td>\n", - " <td>0.0898</td>\n", - " <td>0.4314</td>\n", - " <td>0.0922</td>\n", + " <td>0.399</td>\n", + " <td>0.0261</td>\n", + " <td>0.8914</td>\n", + " <td>0.006</td>\n", + " <td>0.3219</td>\n", + " <td>0.3168</td>\n", + " <td>0.1494</td>\n", + " <td>0.6467</td>\n", + " <td>0.0983</td>\n", " <td>0.004</td>\n", + " <td>5.0424</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -502,16 +525,17 @@ " <td>214</td>\n", " <td>9</td>\n", " <td>4.2056</td>\n", - " <td>0.0681</td>\n", - " <td>0.0192</td>\n", - " <td>0.0156</td>\n", - " <td>0.0156</td>\n", - " <td>0.1253</td>\n", - " <td>0.0091</td>\n", + " <td>0.0401</td>\n", + " <td>0.012</td>\n", + " <td>0.0281</td>\n", " <td>0.002</td>\n", - " <td>0.0356</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", + " <td>0.1684</td>\n", + " <td>0.018</td>\n", + " <td>0.003</td>\n", + " <td>0.0431</td>\n", + " <td>0.001</td>\n", + " <td>0.002</td>\n", + " <td>0.2878</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -519,16 +543,17 @@ " <td>351</td>\n", " <td>33</td>\n", " <td>35.8974</td>\n", - " <td>0.0937</td>\n", - " <td>0.0156</td>\n", - " <td>0.0625</td>\n", - " <td>0.0313</td>\n", - " <td>0.16</td>\n", - " <td>0.0157</td>\n", - " <td>0.0156</td>\n", - " <td>0.0468</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", + " <td>0.0792</td>\n", + " <td>0.0271</td>\n", + " <td>0.0722</td>\n", + " <td>0.008</td>\n", + " <td>0.2347</td>\n", + " <td>0.0251</td>\n", + " <td>0.006</td>\n", + " <td>0.0682</td>\n", + " <td>0.005</td>\n", + " <td>0.002</td>\n", + " <td>0.5264</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -536,16 +561,17 @@ " <td>1600</td>\n", " <td>32</td>\n", " <td>6.25</td>\n", - " <td>0.4973</td>\n", - " <td>0.0156</td>\n", - " <td>0.7252</td>\n", - " <td>0.0625</td>\n", - " <td>0.2632</td>\n", - " <td>0.1263</td>\n", - " <td>0.0943</td>\n", - " <td>0.9454</td>\n", - " <td>0.0762</td>\n", + " <td>0.3579</td>\n", + " <td>0.021</td>\n", + " <td>0.751</td>\n", + " <td>0.008</td>\n", + " <td>0.2597</td>\n", + " <td>0.1584</td>\n", + " <td>0.1203</td>\n", + " <td>1.1551</td>\n", + " <td>0.0852</td>\n", " <td>0.004</td>\n", + " <td>4.7737</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -553,16 +579,17 @@ " <td>148</td>\n", " <td>18</td>\n", " <td>4.0541</td>\n", - " <td>0.0401</td>\n", - " <td>0.017</td>\n", - " <td>0.023</td>\n", - " <td>0.0071</td>\n", - " <td>0.1614</td>\n", - " <td>0.005</td>\n", - " <td>0.002</td>\n", - " <td>0.031</td>\n", - " <td>0.002</td>\n", + " <td>0.0231</td>\n", + " <td>0.015</td>\n", + " <td>0.0231</td>\n", + " <td>0.004</td>\n", + " <td>0.2065</td>\n", + " <td>0.011</td>\n", + " <td>0.003</td>\n", + " <td>0.0491</td>\n", " <td>0.002</td>\n", + " <td>0.001</td>\n", + " <td>0.2988</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -570,16 +597,17 @@ " <td>7603</td>\n", " <td>100</td>\n", " <td>9.2069</td>\n", - " <td>7.7986</td>\n", - " <td>0.067</td>\n", - " <td>42.0965</td>\n", - " <td>0.9069</td>\n", - " <td>1.4098</td>\n", - " <td>5.7465</td>\n", - " <td>5.7854</td>\n", - " <td>2.0246</td>\n", - " <td>4.2719</td>\n", - " <td>0.125</td>\n", + " <td>7.2033</td>\n", + " <td>0.0622</td>\n", + " <td>57.4463</td>\n", + " <td>0.0451</td>\n", + " <td>1.7867</td>\n", + " <td>7.1259</td>\n", + " <td>6.4782</td>\n", + " <td>2.4916</td>\n", + " <td>4.6975</td>\n", + " <td>0.1494</td>\n", + " <td>191.535</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -587,16 +615,17 @@ " <td>3062</td>\n", " <td>166</td>\n", " <td>3.1679</td>\n", - " <td>2.2028</td>\n", - " <td>0.028</td>\n", - " <td>10.1455</td>\n", - " <td>0.5653</td>\n", - " <td>0.8163</td>\n", - " <td>1.5487</td>\n", - " <td>1.466</td>\n", - " <td>8.3801</td>\n", - " <td>1.3012</td>\n", - " <td>0.1484</td>\n", + " <td>2.3532</td>\n", + " <td>0.0361</td>\n", + " <td>13.4944</td>\n", + " <td>0.0822</td>\n", + " <td>1.5561</td>\n", + " <td>2.3803</td>\n", + " <td>2.0785</td>\n", + " <td>14.7882</td>\n", + " <td>1.3396</td>\n", + " <td>0.1594</td>\n", + " <td>116.736</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -604,16 +633,17 @@ " <td>5216</td>\n", " <td>64</td>\n", " <td>2.8758</td>\n", - " <td>2.8534</td>\n", - " <td>0.025</td>\n", - " <td>10.828</td>\n", - " <td>0.4581</td>\n", - " <td>0.658</td>\n", - " <td>1.7452</td>\n", - " <td>1.9845</td>\n", - " <td>1.2785</td>\n", - " <td>1.5436</td>\n", - " <td>0.0537</td>\n", + " <td>3.1473</td>\n", + " <td>0.0261</td>\n", + " <td>14.9847</td>\n", + " <td>0.0341</td>\n", + " <td>0.8773</td>\n", + " <td>1.9953</td>\n", + " <td>1.7457</td>\n", + " <td>1.0467</td>\n", + " <td>1.4028</td>\n", + " <td>0.0451</td>\n", + " <td>60.2475</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -621,16 +651,17 @@ " <td>6870</td>\n", " <td>16</td>\n", " <td>2.2707</td>\n", - " <td>1.8649</td>\n", - " <td>0.0669</td>\n", - " <td>4.0121</td>\n", - " <td>0.1376</td>\n", - " <td>0.5828</td>\n", - " <td>0.5576</td>\n", - " <td>0.5517</td>\n", - " <td>1.609</td>\n", - " <td>0.8713</td>\n", - " <td>0.005</td>\n", + " <td>1.4017</td>\n", + " <td>0.0551</td>\n", + " <td>4.9451</td>\n", + " <td>0.011</td>\n", + " <td>0.5765</td>\n", + " <td>0.9656</td>\n", + " <td>0.6006</td>\n", + " <td>1.8158</td>\n", + " <td>1.0207</td>\n", + " <td>0.01</td>\n", + " <td>25.4254</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -638,16 +669,17 @@ " <td>768</td>\n", " <td>8</td>\n", " <td>34.8958</td>\n", - " <td>0.1805</td>\n", - " <td>0.022</td>\n", - " <td>0.0851</td>\n", - " <td>0.0168</td>\n", - " <td>0.1829</td>\n", - " <td>0.0156</td>\n", - " <td>0.0156</td>\n", - " <td>0.0468</td>\n", - " <td>0</td>\n", - " <td>0</td>\n", + " <td>0.1334</td>\n", + " <td>0.0221</td>\n", + " <td>0.0942</td>\n", + " <td>0.003</td>\n", + " <td>0.2035</td>\n", + " <td>0.0662</td>\n", + " <td>0.01</td>\n", + " <td>0.0852</td>\n", + " <td>0.012</td>\n", + " <td>0.002</td>\n", + " <td>1.1691</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -655,16 +687,17 @@ " <td>6435</td>\n", " <td>36</td>\n", " <td>31.6395</td>\n", - " <td>2.2945</td>\n", - " <td>0.0313</td>\n", - " <td>6.9375</td>\n", - " <td>0.2903</td>\n", - " <td>0.5562</td>\n", - " <td>0.8947</td>\n", - " <td>0.8896</td>\n", - " <td>1.679</td>\n", - " <td>1.225</td>\n", - " <td>0.0313</td>\n", + " <td>1.89</td>\n", + " <td>0.025</td>\n", + " <td>8.0935</td>\n", + " <td>0.019</td>\n", + " <td>0.8693</td>\n", + " <td>1.2533</td>\n", + " <td>1.0658</td>\n", + " <td>2.8646</td>\n", + " <td>1.3265</td>\n", + " <td>0.0271</td>\n", + " <td>34.2882</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -672,33 +705,17 @@ " <td>5803</td>\n", " <td>36</td>\n", " <td>1.2235</td>\n", - " <td>1.8979</td>\n", - " <td>0.0468</td>\n", - " <td>5.081</td>\n", - " <td>0.242</td>\n", - " <td>0.4869</td>\n", - " <td>0.7402</td>\n", - " <td>0.7539</td>\n", - " <td>1.4754</td>\n", - " <td>1.1365</td>\n", - " <td>0.0022</td>\n", - " </tr>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>shuttle</td>\n", - " <td>49097</td>\n", - " <td>9</td>\n", - " <td>7.1511</td>\n", - " <td>19.6385</td>\n", - " <td>0.0781</td>\n", - " <td>57.0473</td>\n", - " <td>0.4604</td>\n", - " <td>2.8161</td>\n", - " <td>7.8509</td>\n", - " <td>10.3425</td>\n", - " <td>7.8624</td>\n", - " <td>38.0809</td>\n", - " <td>0.0373</td>\n", + " <td>1.7396</td>\n", + " <td>0.0531</td>\n", + " <td>7.2252</td>\n", + " <td>0.0211</td>\n", + " <td>0.6788</td>\n", + " <td>1.1992</td>\n", + " <td>0.9445</td>\n", + " <td>2.1818</td>\n", + " <td>1.114</td>\n", + " <td>0.0211</td>\n", + " <td>33.6747</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -706,16 +723,17 @@ " <td>240</td>\n", " <td>6</td>\n", " <td>12.5</td>\n", - " <td>0.0671</td>\n", - " <td>0.0156</td>\n", - " <td>0.0346</td>\n", - " <td>0</td>\n", - " <td>0.1377</td>\n", - " <td>0.0156</td>\n", - " <td>0</td>\n", - " <td>0.0534</td>\n", - " <td>0.001</td>\n", + " <td>0.0371</td>\n", + " <td>0.023</td>\n", + " <td>0.0391</td>\n", + " <td>0.003</td>\n", + " <td>0.1775</td>\n", + " <td>0.018</td>\n", + " <td>0.003</td>\n", + " <td>0.0491</td>\n", + " <td>0.002</td>\n", " <td>0.001</td>\n", + " <td>0.3359</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -723,16 +741,17 @@ " <td>1456</td>\n", " <td>12</td>\n", " <td>3.4341</td>\n", - " <td>0.395</td>\n", - " <td>0.0156</td>\n", - " <td>0.2297</td>\n", - " <td>0.0072</td>\n", - " <td>0.1966</td>\n", - " <td>0.0731</td>\n", - " <td>0.0313</td>\n", - " <td>0.5917</td>\n", - " <td>0.0313</td>\n", - " <td>0.0156</td>\n", + " <td>0.2637</td>\n", + " <td>0.0221</td>\n", + " <td>0.2787</td>\n", + " <td>0.004</td>\n", + " <td>0.2557</td>\n", + " <td>0.1153</td>\n", + " <td>0.0351</td>\n", + " <td>0.7189</td>\n", + " <td>0.0441</td>\n", + " <td>0.002</td>\n", + " <td>2.3161</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -740,62 +759,61 @@ " <td>378</td>\n", " <td>30</td>\n", " <td>5.5556</td>\n", - " <td>0.1057</td>\n", - " <td>0.0156</td>\n", - " <td>0.0703</td>\n", - " <td>0.0171</td>\n", - " <td>0.1392</td>\n", - " <td>0.0156</td>\n", - " <td>0.0179</td>\n", - " <td>0.0541</td>\n", - " <td>0.005</td>\n", + " <td>0.0632</td>\n", + " <td>0.015</td>\n", + " <td>0.0702</td>\n", + " <td>0.008</td>\n", + " <td>0.2055</td>\n", + " <td>0.0291</td>\n", + " <td>0.007</td>\n", + " <td>0.0602</td>\n", + " <td>0.006</td>\n", " <td>0.002</td>\n", + " <td>0.5545</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ - " Data #Samples # Dimensions Outlier Perc ABOD CBLOF FB \\\n", - "0 arrhythmia 452 274 14.6018 0.171 0.0344 0.5254 \n", - "0 cardio 1831 21 9.6122 0.5818 0.031 0.909 \n", - "0 glass 214 9 4.2056 0.0681 0.0192 0.0156 \n", - "0 ionosphere 351 33 35.8974 0.0937 0.0156 0.0625 \n", - "0 letter 1600 32 6.25 0.4973 0.0156 0.7252 \n", - "0 lympho 148 18 4.0541 0.0401 0.017 0.023 \n", - "0 mnist 7603 100 9.2069 7.7986 0.067 42.0965 \n", - "0 musk 3062 166 3.1679 2.2028 0.028 10.1455 \n", - "0 optdigits 5216 64 2.8758 2.8534 0.025 10.828 \n", - "0 pendigits 6870 16 2.2707 1.8649 0.0669 4.0121 \n", - "0 pima 768 8 34.8958 0.1805 0.022 0.0851 \n", - "0 satellite 6435 36 31.6395 2.2945 0.0313 6.9375 \n", - "0 satimage-2 5803 36 1.2235 1.8979 0.0468 5.081 \n", - "0 shuttle 49097 9 7.1511 19.6385 0.0781 57.0473 \n", - "0 vertebral 240 6 12.5 0.0671 0.0156 0.0346 \n", - "0 vowels 1456 12 3.4341 0.395 0.0156 0.2297 \n", - "0 wbc 378 30 5.5556 0.1057 0.0156 0.0703 \n", + " Data #Samples # Dimensions Outlier Perc ABOD CBLOF FB \\\n", + "0 arrhythmia 452 274 14.6018 0.1454 0.0301 0.5825 \n", + "0 cardio 1831 21 9.6122 0.399 0.0261 0.8914 \n", + "0 glass 214 9 4.2056 0.0401 0.012 0.0281 \n", + "0 ionosphere 351 33 35.8974 0.0792 0.0271 0.0722 \n", + "0 letter 1600 32 6.25 0.3579 0.021 0.751 \n", + "0 lympho 148 18 4.0541 0.0231 0.015 0.0231 \n", + "0 mnist 7603 100 9.2069 7.2033 0.0622 57.4463 \n", + "0 musk 3062 166 3.1679 2.3532 0.0361 13.4944 \n", + "0 optdigits 5216 64 2.8758 3.1473 0.0261 14.9847 \n", + "0 pendigits 6870 16 2.2707 1.4017 0.0551 4.9451 \n", + "0 pima 768 8 34.8958 0.1334 0.0221 0.0942 \n", + "0 satellite 6435 36 31.6395 1.89 0.025 8.0935 \n", + "0 satimage-2 5803 36 1.2235 1.7396 0.0531 7.2252 \n", + "0 vertebral 240 6 12.5 0.0371 0.023 0.0391 \n", + "0 vowels 1456 12 3.4341 0.2637 0.0221 0.2787 \n", + "0 wbc 378 30 5.5556 0.0632 0.015 0.0702 \n", "\n", - " HBOS IForest KNN LOF MCD OCSVM PCA \n", - "0 0.2122 0.2036 0.0853 0.0702 0.5374 0.0481 0.0572 \n", - "0 0.0469 0.2626 0.1524 0.0898 0.4314 0.0922 0.004 \n", - "0 0.0156 0.1253 0.0091 0.002 0.0356 0 0 \n", - "0 0.0313 0.16 0.0157 0.0156 0.0468 0 0 \n", - "0 0.0625 0.2632 0.1263 0.0943 0.9454 0.0762 0.004 \n", - "0 0.0071 0.1614 0.005 0.002 0.031 0.002 0.002 \n", - "0 0.9069 1.4098 5.7465 5.7854 2.0246 4.2719 0.125 \n", - "0 0.5653 0.8163 1.5487 1.466 8.3801 1.3012 0.1484 \n", - "0 0.4581 0.658 1.7452 1.9845 1.2785 1.5436 0.0537 \n", - "0 0.1376 0.5828 0.5576 0.5517 1.609 0.8713 0.005 \n", - "0 0.0168 0.1829 0.0156 0.0156 0.0468 0 0 \n", - "0 0.2903 0.5562 0.8947 0.8896 1.679 1.225 0.0313 \n", - "0 0.242 0.4869 0.7402 0.7539 1.4754 1.1365 0.0022 \n", - "0 0.4604 2.8161 7.8509 10.3425 7.8624 38.0809 0.0373 \n", - "0 0 0.1377 0.0156 0 0.0534 0.001 0.001 \n", - "0 0.0072 0.1966 0.0731 0.0313 0.5917 0.0313 0.0156 \n", - "0 0.0171 0.1392 0.0156 0.0179 0.0541 0.005 0.002 " + " HBOS IForest KNN LOF MCD OCSVM PCA LSCP \n", + "0 0.0622 0.2477 0.0932 0.0681 0.5083 0.0471 0.0602 2.4836 \n", + "0 0.006 0.3219 0.3168 0.1494 0.6467 0.0983 0.004 5.0424 \n", + "0 0.002 0.1684 0.018 0.003 0.0431 0.001 0.002 0.2878 \n", + "0 0.008 0.2347 0.0251 0.006 0.0682 0.005 0.002 0.5264 \n", + "0 0.008 0.2597 0.1584 0.1203 1.1551 0.0852 0.004 4.7737 \n", + "0 0.004 0.2065 0.011 0.003 0.0491 0.002 0.001 0.2988 \n", + "0 0.0451 1.7867 7.1259 6.4782 2.4916 4.6975 0.1494 191.535 \n", + "0 0.0822 1.5561 2.3803 2.0785 14.7882 1.3396 0.1594 116.736 \n", + "0 0.0341 0.8773 1.9953 1.7457 1.0467 1.4028 0.0451 60.2475 \n", + "0 0.011 0.5765 0.9656 0.6006 1.8158 1.0207 0.01 25.4254 \n", + "0 0.003 0.2035 0.0662 0.01 0.0852 0.012 0.002 1.1691 \n", + "0 0.019 0.8693 1.2533 1.0658 2.8646 1.3265 0.0271 34.2882 \n", + "0 0.0211 0.6788 1.1992 0.9445 2.1818 1.114 0.0211 33.6747 \n", + "0 0.003 0.1775 0.018 0.003 0.0491 0.002 0.001 0.3359 \n", + "0 0.004 0.2557 0.1153 0.0351 0.7189 0.0441 0.002 2.3161 \n", + "0 0.008 0.2055 0.0291 0.007 0.0602 0.006 0.002 0.5545 " ] }, - "execution_count": 3, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -814,7 +832,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -859,6 +877,7 @@ " <th>MCD</th>\n", " <th>OCSVM</th>\n", " <th>PCA</th>\n", + " <th>LSCP</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", @@ -878,6 +897,7 @@ " <td>0.8228</td>\n", " <td>0.7986</td>\n", " <td>0.7997</td>\n", + " <td>0.7754</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -885,16 +905,17 @@ " <td>1831</td>\n", " <td>21</td>\n", " <td>9.6122</td>\n", - " <td>0.5668</td>\n", - " <td>0.8987</td>\n", - " <td>0.5667</td>\n", - " <td>0.8102</td>\n", - " <td>0.8726</td>\n", - " <td>0.7252</td>\n", - " <td>0.5313</td>\n", - " <td>0.7966</td>\n", - " <td>0.9055</td>\n", - " <td>0.9237</td>\n", + " <td>0.5952</td>\n", + " <td>0.8894</td>\n", + " <td>0.5628</td>\n", + " <td>0.8227</td>\n", + " <td>0.8953</td>\n", + " <td>0.7442</td>\n", + " <td>0.5459</td>\n", + " <td>0.7774</td>\n", + " <td>0.914</td>\n", + " <td>0.9323</td>\n", + " <td>0.622</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -902,16 +923,17 @@ " <td>214</td>\n", " <td>9</td>\n", " <td>4.2056</td>\n", - " <td>0.7605</td>\n", - " <td>0.7457</td>\n", - " <td>0.758</td>\n", - " <td>0.6346</td>\n", - " <td>0.5556</td>\n", - " <td>0.8198</td>\n", - " <td>0.8395</td>\n", - " <td>0.7728</td>\n", - " <td>0.5506</td>\n", - " <td>0.5506</td>\n", + " <td>0.8588</td>\n", + " <td>0.7765</td>\n", + " <td>0.4235</td>\n", + " <td>0.6</td>\n", + " <td>0.7765</td>\n", + " <td>0.8353</td>\n", + " <td>0.3882</td>\n", + " <td>0.8353</td>\n", + " <td>0.7529</td>\n", + " <td>0.7176</td>\n", + " <td>0.7529</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -919,16 +941,17 @@ " <td>351</td>\n", " <td>33</td>\n", " <td>35.8974</td>\n", - " <td>0.92</td>\n", - " <td>0.812</td>\n", - " <td>0.9004</td>\n", - " <td>0.6005</td>\n", - " <td>0.8587</td>\n", - " <td>0.9378</td>\n", - " <td>0.9063</td>\n", - " <td>0.9513</td>\n", - " <td>0.8497</td>\n", - " <td>0.8025</td>\n", + " <td>0.9302</td>\n", + " <td>0.8073</td>\n", + " <td>0.9092</td>\n", + " <td>0.5869</td>\n", + " <td>0.8734</td>\n", + " <td>0.9358</td>\n", + " <td>0.9114</td>\n", + " <td>0.9576</td>\n", + " <td>0.8861</td>\n", + " <td>0.8204</td>\n", + " <td>0.9041</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -936,16 +959,17 @@ " <td>1600</td>\n", " <td>32</td>\n", " <td>6.25</td>\n", - " <td>0.8992</td>\n", - " <td>0.5905</td>\n", - " <td>0.8938</td>\n", - " <td>0.6328</td>\n", - " <td>0.6445</td>\n", - " <td>0.8972</td>\n", + " <td>0.9035</td>\n", + " <td>0.5555</td>\n", + " <td>0.9077</td>\n", + " <td>0.6056</td>\n", + " <td>0.5945</td>\n", + " <td>0.8909</td>\n", " <td>0.8821</td>\n", - " <td>0.8766</td>\n", - " <td>0.6071</td>\n", - " <td>0.5265</td>\n", + " <td>0.8144</td>\n", + " <td>0.5727</td>\n", + " <td>0.5104</td>\n", + " <td>0.857</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -953,16 +977,17 @@ " <td>148</td>\n", " <td>18</td>\n", " <td>4.0541</td>\n", - " <td>0.7155</td>\n", - " <td>0.9914</td>\n", - " <td>0.9483</td>\n", - " <td>1</td>\n", + " <td>0.9357</td>\n", + " <td>0.9708</td>\n", + " <td>0.924</td>\n", " <td>1</td>\n", - " <td>0.9397</td>\n", - " <td>0.9569</td>\n", - " <td>0.9483</td>\n", - " <td>0.9655</td>\n", - " <td>0.9914</td>\n", + " <td>0.9942</td>\n", + " <td>0.9064</td>\n", + " <td>0.924</td>\n", + " <td>0.7778</td>\n", + " <td>0.9357</td>\n", + " <td>0.9649</td>\n", + " <td>0.9357</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -970,16 +995,17 @@ " <td>7603</td>\n", " <td>100</td>\n", " <td>9.2069</td>\n", - " <td>0.7747</td>\n", - " <td>0.8431</td>\n", - " <td>0.7246</td>\n", - " <td>0.5769</td>\n", - " <td>0.8033</td>\n", - " <td>0.8431</td>\n", - " <td>0.7101</td>\n", - " <td>0.9059</td>\n", - " <td>0.851</td>\n", - " <td>0.8497</td>\n", + " <td>0.7978</td>\n", + " <td>0.8477</td>\n", + " <td>0.7451</td>\n", + " <td>0.5645</td>\n", + " <td>0.8154</td>\n", + " <td>0.8643</td>\n", + " <td>0.7442</td>\n", + " <td>0.8926</td>\n", + " <td>0.8595</td>\n", + " <td>0.8572</td>\n", + " <td>0.7873</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -987,16 +1013,17 @@ " <td>3062</td>\n", " <td>166</td>\n", " <td>3.1679</td>\n", - " <td>0.2716</td>\n", - " <td>1</td>\n", - " <td>0.6591</td>\n", - " <td>1</td>\n", - " <td>1</td>\n", - " <td>0.8247</td>\n", - " <td>0.6128</td>\n", - " <td>1</td>\n", - " <td>1</td>\n", + " <td>0.2111</td>\n", + " <td>0.9864</td>\n", + " <td>0.6141</td>\n", + " <td>0.9999</td>\n", + " <td>0.9997</td>\n", + " <td>0.8224</td>\n", + " <td>0.6232</td>\n", + " <td>0.9984</td>\n", " <td>1</td>\n", + " <td>0.9999</td>\n", + " <td>0.5304</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1004,16 +1031,17 @@ " <td>5216</td>\n", " <td>64</td>\n", " <td>2.8758</td>\n", - " <td>0.4971</td>\n", - " <td>0.5922</td>\n", - " <td>0.4715</td>\n", - " <td>0.8553</td>\n", - " <td>0.7033</td>\n", - " <td>0.4029</td>\n", - " <td>0.4934</td>\n", - " <td>0.4041</td>\n", - " <td>0.4808</td>\n", - " <td>0.5016</td>\n", + " <td>0.4294</td>\n", + " <td>0.49</td>\n", + " <td>0.4108</td>\n", + " <td>0.835</td>\n", + " <td>0.7365</td>\n", + " <td>0.3836</td>\n", + " <td>0.3996</td>\n", + " <td>0.3791</td>\n", + " <td>0.532</td>\n", + " <td>0.525</td>\n", + " <td>0.3975</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1021,16 +1049,17 @@ " <td>6870</td>\n", " <td>16</td>\n", " <td>2.2707</td>\n", - " <td>0.6957</td>\n", - " <td>0.9329</td>\n", - " <td>0.4277</td>\n", - " <td>0.9322</td>\n", - " <td>0.9756</td>\n", - " <td>0.7694</td>\n", - " <td>0.4056</td>\n", - " <td>0.8413</td>\n", - " <td>0.9376</td>\n", - " <td>0.9384</td>\n", + " <td>0.6608</td>\n", + " <td>0.934</td>\n", + " <td>0.3992</td>\n", + " <td>0.9209</td>\n", + " <td>0.9296</td>\n", + " <td>0.7086</td>\n", + " <td>0.419</td>\n", + " <td>0.8369</td>\n", + " <td>0.9267</td>\n", + " <td>0.9359</td>\n", + " <td>0.487</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1038,16 +1067,17 @@ " <td>768</td>\n", " <td>8</td>\n", " <td>34.8958</td>\n", - " <td>0.6623</td>\n", - " <td>0.7654</td>\n", - " <td>0.6523</td>\n", - " <td>0.7016</td>\n", - " <td>0.696</td>\n", - " <td>0.71</td>\n", - " <td>0.6455</td>\n", - " <td>0.6755</td>\n", - " <td>0.6024</td>\n", - " <td>0.6508</td>\n", + " <td>0.6864</td>\n", + " <td>0.7064</td>\n", + " <td>0.618</td>\n", + " <td>0.7031</td>\n", + " <td>0.6704</td>\n", + " <td>0.712</td>\n", + " <td>0.6356</td>\n", + " <td>0.7026</td>\n", + " <td>0.6297</td>\n", + " <td>0.6602</td>\n", + " <td>0.6538</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1055,16 +1085,17 @@ " <td>6435</td>\n", " <td>36</td>\n", " <td>31.6395</td>\n", - " <td>0.5821</td>\n", - " <td>0.5428</td>\n", - " <td>0.5469</td>\n", - " <td>0.7471</td>\n", - " <td>0.7153</td>\n", - " <td>0.6868</td>\n", - " <td>0.5509</td>\n", - " <td>0.8059</td>\n", - " <td>0.6564</td>\n", - " <td>0.5902</td>\n", + " <td>0.5676</td>\n", + " <td>0.7307</td>\n", + " <td>0.5645</td>\n", + " <td>0.7593</td>\n", + " <td>0.6947</td>\n", + " <td>0.6827</td>\n", + " <td>0.5676</td>\n", + " <td>0.7991</td>\n", + " <td>0.6551</td>\n", + " <td>0.5976</td>\n", + " <td>0.5809</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1072,33 +1103,17 @@ " <td>5803</td>\n", " <td>36</td>\n", " <td>1.2235</td>\n", - " <td>0.8216</td>\n", - " <td>0.9372</td>\n", - " <td>0.3658</td>\n", - " <td>0.9862</td>\n", - " <td>0.9959</td>\n", - " <td>0.9528</td>\n", - " <td>0.3717</td>\n", - " <td>0.9949</td>\n", - " <td>0.9975</td>\n", - " <td>0.9901</td>\n", - " </tr>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>shuttle</td>\n", - " <td>49097</td>\n", - " <td>9</td>\n", - " <td>7.1511</td>\n", - " <td>0.6164</td>\n", - " <td>0.9899</td>\n", - " <td>0.5342</td>\n", - " <td>0.9847</td>\n", - " <td>0.9963</td>\n", - " <td>0.6409</td>\n", - " <td>0.5373</td>\n", - " <td>0.9898</td>\n", - " <td>0.9919</td>\n", - " <td>0.9901</td>\n", + " <td>0.8497</td>\n", + " <td>0.9568</td>\n", + " <td>0.4798</td>\n", + " <td>0.9948</td>\n", + " <td>0.9997</td>\n", + " <td>0.9693</td>\n", + " <td>0.4819</td>\n", + " <td>0.996</td>\n", + " <td>1</td>\n", + " <td>0.9974</td>\n", + " <td>0.6986</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1106,16 +1121,17 @@ " <td>240</td>\n", " <td>6</td>\n", " <td>12.5</td>\n", - " <td>0.3435</td>\n", - " <td>0.504</td>\n", - " <td>0.4013</td>\n", - " <td>0.4278</td>\n", - " <td>0.3628</td>\n", - " <td>0.3226</td>\n", - " <td>0.4382</td>\n", - " <td>0.3772</td>\n", - " <td>0.3868</td>\n", - " <td>0.427</td>\n", + " <td>0.2428</td>\n", + " <td>0.2588</td>\n", + " <td>0.2909</td>\n", + " <td>0.1524</td>\n", + " <td>0.2449</td>\n", + " <td>0.2791</td>\n", + " <td>0.293</td>\n", + " <td>0.3273</td>\n", + " <td>0.2909</td>\n", + " <td>0.2439</td>\n", + " <td>0.2503</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1123,16 +1139,17 @@ " <td>1456</td>\n", " <td>12</td>\n", " <td>3.4341</td>\n", - " <td>0.9718</td>\n", - " <td>0.5681</td>\n", - " <td>0.9304</td>\n", - " <td>0.7306</td>\n", - " <td>0.7791</td>\n", - " <td>0.9661</td>\n", - " <td>0.9277</td>\n", - " <td>0.6799</td>\n", - " <td>0.7739</td>\n", - " <td>0.6362</td>\n", + " <td>0.9726</td>\n", + " <td>0.574</td>\n", + " <td>0.955</td>\n", + " <td>0.6683</td>\n", + " <td>0.7809</td>\n", + " <td>0.9775</td>\n", + " <td>0.9514</td>\n", + " <td>0.7081</td>\n", + " <td>0.8244</td>\n", + " <td>0.5585</td>\n", + " <td>0.9604</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1140,16 +1157,17 @@ " <td>378</td>\n", " <td>30</td>\n", " <td>5.5556</td>\n", - " <td>0.9723</td>\n", - " <td>0.9658</td>\n", - " <td>0.9562</td>\n", - " <td>0.9678</td>\n", - " <td>0.9516</td>\n", - " <td>0.962</td>\n", - " <td>0.9542</td>\n", - " <td>0.9523</td>\n", - " <td>0.9555</td>\n", - " <td>0.951</td>\n", + " <td>0.8803</td>\n", + " <td>0.9374</td>\n", + " <td>0.9224</td>\n", + " <td>0.9415</td>\n", + " <td>0.9102</td>\n", + " <td>0.9034</td>\n", + " <td>0.9211</td>\n", + " <td>0.9129</td>\n", + " <td>0.9224</td>\n", + " <td>0.9102</td>\n", + " <td>0.9116</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", @@ -1158,44 +1176,42 @@ "text/plain": [ " Data #Samples # Dimensions Outlier Perc ABOD CBLOF FB \\\n", "0 arrhythmia 452 274 14.6018 0.7687 0.778 0.7736 \n", - "0 cardio 1831 21 9.6122 0.5668 0.8987 0.5667 \n", - "0 glass 214 9 4.2056 0.7605 0.7457 0.758 \n", - "0 ionosphere 351 33 35.8974 0.92 0.812 0.9004 \n", - "0 letter 1600 32 6.25 0.8992 0.5905 0.8938 \n", - "0 lympho 148 18 4.0541 0.7155 0.9914 0.9483 \n", - "0 mnist 7603 100 9.2069 0.7747 0.8431 0.7246 \n", - "0 musk 3062 166 3.1679 0.2716 1 0.6591 \n", - "0 optdigits 5216 64 2.8758 0.4971 0.5922 0.4715 \n", - "0 pendigits 6870 16 2.2707 0.6957 0.9329 0.4277 \n", - "0 pima 768 8 34.8958 0.6623 0.7654 0.6523 \n", - "0 satellite 6435 36 31.6395 0.5821 0.5428 0.5469 \n", - "0 satimage-2 5803 36 1.2235 0.8216 0.9372 0.3658 \n", - "0 shuttle 49097 9 7.1511 0.6164 0.9899 0.5342 \n", - "0 vertebral 240 6 12.5 0.3435 0.504 0.4013 \n", - "0 vowels 1456 12 3.4341 0.9718 0.5681 0.9304 \n", - "0 wbc 378 30 5.5556 0.9723 0.9658 0.9562 \n", + "0 cardio 1831 21 9.6122 0.5952 0.8894 0.5628 \n", + "0 glass 214 9 4.2056 0.8588 0.7765 0.4235 \n", + "0 ionosphere 351 33 35.8974 0.9302 0.8073 0.9092 \n", + "0 letter 1600 32 6.25 0.9035 0.5555 0.9077 \n", + "0 lympho 148 18 4.0541 0.9357 0.9708 0.924 \n", + "0 mnist 7603 100 9.2069 0.7978 0.8477 0.7451 \n", + "0 musk 3062 166 3.1679 0.2111 0.9864 0.6141 \n", + "0 optdigits 5216 64 2.8758 0.4294 0.49 0.4108 \n", + "0 pendigits 6870 16 2.2707 0.6608 0.934 0.3992 \n", + "0 pima 768 8 34.8958 0.6864 0.7064 0.618 \n", + "0 satellite 6435 36 31.6395 0.5676 0.7307 0.5645 \n", + "0 satimage-2 5803 36 1.2235 0.8497 0.9568 0.4798 \n", + "0 vertebral 240 6 12.5 0.2428 0.2588 0.2909 \n", + "0 vowels 1456 12 3.4341 0.9726 0.574 0.955 \n", + "0 wbc 378 30 5.5556 0.8803 0.9374 0.9224 \n", "\n", - " HBOS IForest KNN LOF MCD OCSVM PCA \n", - "0 0.8511 0.8217 0.782 0.7787 0.8228 0.7986 0.7997 \n", - "0 0.8102 0.8726 0.7252 0.5313 0.7966 0.9055 0.9237 \n", - "0 0.6346 0.5556 0.8198 0.8395 0.7728 0.5506 0.5506 \n", - "0 0.6005 0.8587 0.9378 0.9063 0.9513 0.8497 0.8025 \n", - "0 0.6328 0.6445 0.8972 0.8821 0.8766 0.6071 0.5265 \n", - "0 1 1 0.9397 0.9569 0.9483 0.9655 0.9914 \n", - "0 0.5769 0.8033 0.8431 0.7101 0.9059 0.851 0.8497 \n", - "0 1 1 0.8247 0.6128 1 1 1 \n", - "0 0.8553 0.7033 0.4029 0.4934 0.4041 0.4808 0.5016 \n", - "0 0.9322 0.9756 0.7694 0.4056 0.8413 0.9376 0.9384 \n", - "0 0.7016 0.696 0.71 0.6455 0.6755 0.6024 0.6508 \n", - "0 0.7471 0.7153 0.6868 0.5509 0.8059 0.6564 0.5902 \n", - "0 0.9862 0.9959 0.9528 0.3717 0.9949 0.9975 0.9901 \n", - "0 0.9847 0.9963 0.6409 0.5373 0.9898 0.9919 0.9901 \n", - "0 0.4278 0.3628 0.3226 0.4382 0.3772 0.3868 0.427 \n", - "0 0.7306 0.7791 0.9661 0.9277 0.6799 0.7739 0.6362 \n", - "0 0.9678 0.9516 0.962 0.9542 0.9523 0.9555 0.951 " + " HBOS IForest KNN LOF MCD OCSVM PCA LSCP \n", + "0 0.8511 0.8217 0.782 0.7787 0.8228 0.7986 0.7997 0.7754 \n", + "0 0.8227 0.8953 0.7442 0.5459 0.7774 0.914 0.9323 0.622 \n", + "0 0.6 0.7765 0.8353 0.3882 0.8353 0.7529 0.7176 0.7529 \n", + "0 0.5869 0.8734 0.9358 0.9114 0.9576 0.8861 0.8204 0.9041 \n", + "0 0.6056 0.5945 0.8909 0.8821 0.8144 0.5727 0.5104 0.857 \n", + "0 1 0.9942 0.9064 0.924 0.7778 0.9357 0.9649 0.9357 \n", + "0 0.5645 0.8154 0.8643 0.7442 0.8926 0.8595 0.8572 0.7873 \n", + "0 0.9999 0.9997 0.8224 0.6232 0.9984 1 0.9999 0.5304 \n", + "0 0.835 0.7365 0.3836 0.3996 0.3791 0.532 0.525 0.3975 \n", + "0 0.9209 0.9296 0.7086 0.419 0.8369 0.9267 0.9359 0.487 \n", + "0 0.7031 0.6704 0.712 0.6356 0.7026 0.6297 0.6602 0.6538 \n", + "0 0.7593 0.6947 0.6827 0.5676 0.7991 0.6551 0.5976 0.5809 \n", + "0 0.9948 0.9997 0.9693 0.4819 0.996 1 0.9974 0.6986 \n", + "0 0.1524 0.2449 0.2791 0.293 0.3273 0.2909 0.2439 0.2503 \n", + "0 0.6683 0.7809 0.9775 0.9514 0.7081 0.8244 0.5585 0.9604 \n", + "0 0.9415 0.9102 0.9034 0.9211 0.9129 0.9224 0.9102 0.9116 " ] }, - "execution_count": 4, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -1207,7 +1223,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -1252,6 +1268,7 @@ " <th>MCD</th>\n", " <th>OCSVM</th>\n", " <th>PCA</th>\n", + " <th>LSCP</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", @@ -1271,6 +1288,7 @@ " <td>0.4286</td>\n", " <td>0.5</td>\n", " <td>0.5</td>\n", + " <td>0.4286</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1278,16 +1296,17 @@ " <td>1831</td>\n", " <td>21</td>\n", " <td>9.6122</td>\n", - " <td>0.209</td>\n", - " <td>0.5075</td>\n", - " <td>0.1194</td>\n", - " <td>0.3731</td>\n", - " <td>0.3433</td>\n", - " <td>0.2388</td>\n", - " <td>0.1493</td>\n", - " <td>0.3284</td>\n", - " <td>0.3731</td>\n", - " <td>0.4925</td>\n", + " <td>0.1884</td>\n", + " <td>0.4928</td>\n", + " <td>0.1594</td>\n", + " <td>0.4783</td>\n", + " <td>0.4493</td>\n", + " <td>0.2899</td>\n", + " <td>0.1594</td>\n", + " <td>0.4203</td>\n", + " <td>0.4493</td>\n", + " <td>0.5507</td>\n", + " <td>0.1884</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1297,11 +1316,12 @@ " <td>4.2056</td>\n", " <td>0</td>\n", " <td>0</td>\n", - " <td>0.2</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", - " <td>0.2</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", + " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", @@ -1312,16 +1332,17 @@ " <td>351</td>\n", " <td>33</td>\n", " <td>35.8974</td>\n", - " <td>0.8333</td>\n", - " <td>0.6111</td>\n", - " <td>0.7407</td>\n", - " <td>0.4259</td>\n", - " <td>0.6667</td>\n", - " <td>0.8704</td>\n", - " <td>0.7407</td>\n", - " <td>0.8704</td>\n", - " <td>0.7593</td>\n", - " <td>0.6481</td>\n", + " <td>0.8462</td>\n", + " <td>0.6154</td>\n", + " <td>0.7692</td>\n", + " <td>0.4038</td>\n", + " <td>0.7115</td>\n", + " <td>0.8846</td>\n", + " <td>0.7692</td>\n", + " <td>0.9038</td>\n", + " <td>0.8077</td>\n", + " <td>0.6154</td>\n", + " <td>0.75</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1329,16 +1350,17 @@ " <td>1600</td>\n", " <td>32</td>\n", " <td>6.25</td>\n", - " <td>0.3438</td>\n", - " <td>0.0625</td>\n", - " <td>0.4062</td>\n", - " <td>0.0312</td>\n", - " <td>0.0312</td>\n", - " <td>0.3438</td>\n", - " <td>0.3125</td>\n", - " <td>0.125</td>\n", - " <td>0.0938</td>\n", - " <td>0.0625</td>\n", + " <td>0.4255</td>\n", + " <td>0.0851</td>\n", + " <td>0.4894</td>\n", + " <td>0.1915</td>\n", + " <td>0.1064</td>\n", + " <td>0.4043</td>\n", + " <td>0.4681</td>\n", + " <td>0.1915</td>\n", + " <td>0.1489</td>\n", + " <td>0.1277</td>\n", + " <td>0.4043</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1346,16 +1368,17 @@ " <td>148</td>\n", " <td>18</td>\n", " <td>4.0541</td>\n", - " <td>0</td>\n", - " <td>0.5</td>\n", - " <td>0.5</td>\n", - " <td>1</td>\n", + " <td>0.3333</td>\n", + " <td>0.6667</td>\n", + " <td>0.3333</td>\n", " <td>1</td>\n", - " <td>0.5</td>\n", - " <td>0.5</td>\n", - " <td>0.5</td>\n", - " <td>0.5</td>\n", - " <td>0.5</td>\n", + " <td>0.6667</td>\n", + " <td>0.3333</td>\n", + " <td>0.3333</td>\n", + " <td>0</td>\n", + " <td>0.3333</td>\n", + " <td>0.6667</td>\n", + " <td>0.3333</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1363,16 +1386,17 @@ " <td>7603</td>\n", " <td>100</td>\n", " <td>9.2069</td>\n", - " <td>0.384</td>\n", - " <td>0.365</td>\n", - " <td>0.3422</td>\n", - " <td>0.1217</td>\n", - " <td>0.2966</td>\n", - " <td>0.4183</td>\n", - " <td>0.3384</td>\n", - " <td>0.5133</td>\n", - " <td>0.3802</td>\n", - " <td>0.3688</td>\n", + " <td>0.3594</td>\n", + " <td>0.3915</td>\n", + " <td>0.3452</td>\n", + " <td>0.1174</td>\n", + " <td>0.3096</td>\n", + " <td>0.4448</td>\n", + " <td>0.3523</td>\n", + " <td>0.4875</td>\n", + " <td>0.3915</td>\n", + " <td>0.3843</td>\n", + " <td>0.3665</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1380,16 +1404,17 @@ " <td>3062</td>\n", " <td>166</td>\n", " <td>3.1679</td>\n", - " <td>0.0714</td>\n", - " <td>1</td>\n", - " <td>0.2143</td>\n", - " <td>1</td>\n", - " <td>1</td>\n", - " <td>0.2857</td>\n", - " <td>0.2143</td>\n", - " <td>0.9762</td>\n", - " <td>1</td>\n", + " <td>0.0488</td>\n", + " <td>0.6829</td>\n", + " <td>0.2195</td>\n", + " <td>0.9756</td>\n", + " <td>0.9756</td>\n", + " <td>0.2439</td>\n", + " <td>0.2195</td>\n", + " <td>0.878</td>\n", " <td>1</td>\n", + " <td>0.9512</td>\n", + " <td>0.1463</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1397,16 +1422,17 @@ " <td>5216</td>\n", " <td>64</td>\n", " <td>2.8758</td>\n", - " <td>0.0299</td>\n", + " <td>0.0149</td>\n", " <td>0</td>\n", - " <td>0.0448</td>\n", + " <td>0.0149</td>\n", " <td>0.209</td>\n", " <td>0.0299</td>\n", " <td>0</td>\n", - " <td>0.0448</td>\n", + " <td>0.0149</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", + " <td>0.0149</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1414,16 +1440,17 @@ " <td>6870</td>\n", " <td>16</td>\n", " <td>2.2707</td>\n", - " <td>0.1127</td>\n", - " <td>0.2394</td>\n", - " <td>0.0986</td>\n", - " <td>0.3099</td>\n", - " <td>0.3944</td>\n", - " <td>0.1549</td>\n", - " <td>0.0986</td>\n", - " <td>0.0986</td>\n", - " <td>0.3662</td>\n", - " <td>0.3803</td>\n", + " <td>0.1224</td>\n", + " <td>0.2041</td>\n", + " <td>0.0408</td>\n", + " <td>0.3061</td>\n", + " <td>0.3061</td>\n", + " <td>0.0408</td>\n", + " <td>0.0408</td>\n", + " <td>0.0612</td>\n", + " <td>0.2449</td>\n", + " <td>0.2653</td>\n", + " <td>0.0408</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1431,16 +1458,17 @@ " <td>768</td>\n", " <td>8</td>\n", " <td>34.8958</td>\n", - " <td>0.4906</td>\n", - " <td>0.5755</td>\n", - " <td>0.4811</td>\n", - " <td>0.5283</td>\n", - " <td>0.5283</td>\n", - " <td>0.5094</td>\n", - " <td>0.4717</td>\n", - " <td>0.5094</td>\n", - " <td>0.4528</td>\n", - " <td>0.5</td>\n", + " <td>0.5847</td>\n", + " <td>0.5678</td>\n", + " <td>0.4746</td>\n", + " <td>0.5847</td>\n", + " <td>0.5424</td>\n", + " <td>0.5847</td>\n", + " <td>0.5169</td>\n", + " <td>0.5678</td>\n", + " <td>0.5085</td>\n", + " <td>0.5508</td>\n", + " <td>0.5339</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1448,16 +1476,17 @@ " <td>6435</td>\n", " <td>36</td>\n", " <td>31.6395</td>\n", - " <td>0.4077</td>\n", - " <td>0.3153</td>\n", - " <td>0.3957</td>\n", - " <td>0.5612</td>\n", - " <td>0.5743</td>\n", - " <td>0.5072</td>\n", - " <td>0.3993</td>\n", - " <td>0.6906</td>\n", - " <td>0.5372</td>\n", - " <td>0.4712</td>\n", + " <td>0.4078</td>\n", + " <td>0.4539</td>\n", + " <td>0.4054</td>\n", + " <td>0.5804</td>\n", + " <td>0.5686</td>\n", + " <td>0.5</td>\n", + " <td>0.4066</td>\n", + " <td>0.6832</td>\n", + " <td>0.5355</td>\n", + " <td>0.4787</td>\n", + " <td>0.4184</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1465,33 +1494,17 @@ " <td>5803</td>\n", " <td>36</td>\n", " <td>1.2235</td>\n", - " <td>0.2</td>\n", - " <td>0.6</td>\n", - " <td>0.04</td>\n", - " <td>0.68</td>\n", - " <td>0.88</td>\n", - " <td>0.28</td>\n", - " <td>0.0417</td>\n", - " <td>0.52</td>\n", - " <td>0.96</td>\n", - " <td>0.8</td>\n", - " </tr>\n", - " <tr>\n", - " <th>0</th>\n", - " <td>shuttle</td>\n", - " <td>49097</td>\n", - " <td>9</td>\n", - " <td>7.1511</td>\n", - " <td>0.1785</td>\n", - " <td>0.95</td>\n", - " <td>0.0836</td>\n", - " <td>0.9657</td>\n", - " <td>0.9022</td>\n", - " <td>0.2028</td>\n", - " <td>0.1329</td>\n", - " <td>0.7192</td>\n", - " <td>0.9559</td>\n", - " <td>0.9507</td>\n", + " <td>0.1667</td>\n", + " <td>0.5</td>\n", + " <td>0.1</td>\n", + " <td>0.7</td>\n", + " <td>0.9333</td>\n", + " <td>0.4</td>\n", + " <td>0.1</td>\n", + " <td>0.7</td>\n", + " <td>1</td>\n", + " <td>0.8333</td>\n", + " <td>0.1</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1509,6 +1522,7 @@ " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", + " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1518,14 +1532,15 @@ " <td>3.4341</td>\n", " <td>0.5</td>\n", " <td>0</td>\n", - " <td>0.3636</td>\n", - " <td>0.1818</td>\n", - " <td>0.2727</td>\n", - " <td>0.4545</td>\n", - " <td>0.3182</td>\n", - " <td>0.0455</td>\n", - " <td>0.3182</td>\n", - " <td>0.2727</td>\n", + " <td>0.25</td>\n", + " <td>0.0625</td>\n", + " <td>0.0625</td>\n", + " <td>0.3125</td>\n", + " <td>0.3125</td>\n", + " <td>0.0625</td>\n", + " <td>0.1875</td>\n", + " <td>0</td>\n", + " <td>0.3125</td>\n", " </tr>\n", " <tr>\n", " <th>0</th>\n", @@ -1533,16 +1548,17 @@ " <td>378</td>\n", " <td>30</td>\n", " <td>5.5556</td>\n", - " <td>0.7273</td>\n", - " <td>0.6364</td>\n", - " <td>0.7273</td>\n", - " <td>0.7273</td>\n", - " <td>0.6364</td>\n", - " <td>0.6364</td>\n", - " <td>0.7273</td>\n", - " <td>0.5455</td>\n", - " <td>0.6364</td>\n", - " <td>0.6364</td>\n", + " <td>0.2</td>\n", + " <td>0.4</td>\n", + " <td>0.2</td>\n", + " <td>0.4</td>\n", + " <td>0.2</td>\n", + " <td>0.2</td>\n", + " <td>0.2</td>\n", + " <td>0.2</td>\n", + " <td>0.2</td>\n", + " <td>0.2</td>\n", + " <td>0.4</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", @@ -1551,44 +1567,42 @@ "text/plain": [ " Data #Samples # Dimensions Outlier Perc ABOD CBLOF FB \\\n", "0 arrhythmia 452 274 14.6018 0.3571 0.5 0.5 \n", - "0 cardio 1831 21 9.6122 0.209 0.5075 0.1194 \n", - "0 glass 214 9 4.2056 0 0 0.2 \n", - "0 ionosphere 351 33 35.8974 0.8333 0.6111 0.7407 \n", - "0 letter 1600 32 6.25 0.3438 0.0625 0.4062 \n", - "0 lympho 148 18 4.0541 0 0.5 0.5 \n", - "0 mnist 7603 100 9.2069 0.384 0.365 0.3422 \n", - "0 musk 3062 166 3.1679 0.0714 1 0.2143 \n", - "0 optdigits 5216 64 2.8758 0.0299 0 0.0448 \n", - "0 pendigits 6870 16 2.2707 0.1127 0.2394 0.0986 \n", - "0 pima 768 8 34.8958 0.4906 0.5755 0.4811 \n", - "0 satellite 6435 36 31.6395 0.4077 0.3153 0.3957 \n", - "0 satimage-2 5803 36 1.2235 0.2 0.6 0.04 \n", - "0 shuttle 49097 9 7.1511 0.1785 0.95 0.0836 \n", + "0 cardio 1831 21 9.6122 0.1884 0.4928 0.1594 \n", + "0 glass 214 9 4.2056 0 0 0 \n", + "0 ionosphere 351 33 35.8974 0.8462 0.6154 0.7692 \n", + "0 letter 1600 32 6.25 0.4255 0.0851 0.4894 \n", + "0 lympho 148 18 4.0541 0.3333 0.6667 0.3333 \n", + "0 mnist 7603 100 9.2069 0.3594 0.3915 0.3452 \n", + "0 musk 3062 166 3.1679 0.0488 0.6829 0.2195 \n", + "0 optdigits 5216 64 2.8758 0.0149 0 0.0149 \n", + "0 pendigits 6870 16 2.2707 0.1224 0.2041 0.0408 \n", + "0 pima 768 8 34.8958 0.5847 0.5678 0.4746 \n", + "0 satellite 6435 36 31.6395 0.4078 0.4539 0.4054 \n", + "0 satimage-2 5803 36 1.2235 0.1667 0.5 0.1 \n", "0 vertebral 240 6 12.5 0 0 0 \n", - "0 vowels 1456 12 3.4341 0.5 0 0.3636 \n", - "0 wbc 378 30 5.5556 0.7273 0.6364 0.7273 \n", + "0 vowels 1456 12 3.4341 0.5 0 0.25 \n", + "0 wbc 378 30 5.5556 0.2 0.4 0.2 \n", "\n", - " HBOS IForest KNN LOF MCD OCSVM PCA \n", - "0 0.5714 0.5 0.5 0.4643 0.4286 0.5 0.5 \n", - "0 0.3731 0.3433 0.2388 0.1493 0.3284 0.3731 0.4925 \n", - "0 0 0 0 0.2 0 0 0 \n", - "0 0.4259 0.6667 0.8704 0.7407 0.8704 0.7593 0.6481 \n", - "0 0.0312 0.0312 0.3438 0.3125 0.125 0.0938 0.0625 \n", - "0 1 1 0.5 0.5 0.5 0.5 0.5 \n", - "0 0.1217 0.2966 0.4183 0.3384 0.5133 0.3802 0.3688 \n", - "0 1 1 0.2857 0.2143 0.9762 1 1 \n", - "0 0.209 0.0299 0 0.0448 0 0 0 \n", - "0 0.3099 0.3944 0.1549 0.0986 0.0986 0.3662 0.3803 \n", - "0 0.5283 0.5283 0.5094 0.4717 0.5094 0.4528 0.5 \n", - "0 0.5612 0.5743 0.5072 0.3993 0.6906 0.5372 0.4712 \n", - "0 0.68 0.88 0.28 0.0417 0.52 0.96 0.8 \n", - "0 0.9657 0.9022 0.2028 0.1329 0.7192 0.9559 0.9507 \n", - "0 0 0 0 0 0 0 0 \n", - "0 0.1818 0.2727 0.4545 0.3182 0.0455 0.3182 0.2727 \n", - "0 0.7273 0.6364 0.6364 0.7273 0.5455 0.6364 0.6364 " + " HBOS IForest KNN LOF MCD OCSVM PCA LSCP \n", + "0 0.5714 0.5 0.5 0.4643 0.4286 0.5 0.5 0.4286 \n", + "0 0.4783 0.4493 0.2899 0.1594 0.4203 0.4493 0.5507 0.1884 \n", + "0 0 0 0 0 0 0 0 0 \n", + "0 0.4038 0.7115 0.8846 0.7692 0.9038 0.8077 0.6154 0.75 \n", + "0 0.1915 0.1064 0.4043 0.4681 0.1915 0.1489 0.1277 0.4043 \n", + "0 1 0.6667 0.3333 0.3333 0 0.3333 0.6667 0.3333 \n", + "0 0.1174 0.3096 0.4448 0.3523 0.4875 0.3915 0.3843 0.3665 \n", + "0 0.9756 0.9756 0.2439 0.2195 0.878 1 0.9512 0.1463 \n", + "0 0.209 0.0299 0 0.0149 0 0 0 0.0149 \n", + "0 0.3061 0.3061 0.0408 0.0408 0.0612 0.2449 0.2653 0.0408 \n", + "0 0.5847 0.5424 0.5847 0.5169 0.5678 0.5085 0.5508 0.5339 \n", + "0 0.5804 0.5686 0.5 0.4066 0.6832 0.5355 0.4787 0.4184 \n", + "0 0.7 0.9333 0.4 0.1 0.7 1 0.8333 0.1 \n", + "0 0 0 0 0 0 0 0 0 \n", + "0 0.0625 0.0625 0.3125 0.3125 0.0625 0.1875 0 0.3125 \n", + "0 0.4 0.2 0.2 0.2 0.2 0.2 0.2 0.4 " ] }, - "execution_count": 5, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } diff --git a/notebooks/Compare All Models.ipynb b/notebooks/Compare All Models.ipynb index 32e0a0bc61854aa9f370f648c342cf3038817899..649072469a150fc79304dafe495e6bc7ca46e1eb 100644 --- a/notebooks/Compare All Models.ipynb +++ b/notebooks/Compare All Models.ipynb @@ -6,36 +6,34 @@ "source": [ "# Example of Comparing All Implemented Outlier Detection Models\n", "\n", - "**[PyOD](https://github.com/yzhao062/Pyod)** is a comprehensive **Python toolkit** to **identify outlying objects** in \n", + "**[PyOD](https://github.com/yzhao062/pyod)** is a comprehensive **Python toolkit** to **identify outlying objects** in \n", "multivariate data with both unsupervised and supervised approaches.\n", "The model covered in this example includes:\n", "\n", " 1. Linear Models for Outlier Detection:\n", " 1. **PCA: Principal Component Analysis** use the sum of\n", " weighted projected distances to the eigenvector hyperplane \n", - " as the outlier outlier scores) [10]\n", + " as the outlier outlier scores)\n", " 2. **MCD: Minimum Covariance Determinant** (use the mahalanobis distances \n", - " as the outlier scores) [11, 12]\n", - " 3. **One-Class Support Vector Machines** [3]\n", + " as the outlier scores)\n", + " 3. **OCSVM: One-Class Support Vector Machines**\n", " \n", " 2. Proximity-Based Outlier Detection Models:\n", - " 1. **LOF: Local Outlier Factor** [1]\n", - " 2. **CBLOF: Clustering-Based Local Outlier Factor** [15]\n", + " 1. **LOF: Local Outlier Factor**\n", + " 2. **CBLOF: Clustering-Based Local Outlier Factor**\n", " 3. **kNN: k Nearest Neighbors** (use the distance to the kth nearest \n", " neighbor as the outlier score)\n", - " 4. **Average kNN** Outlier Detection (use the average distance to k \n", - " nearest neighbors as the outlier score)\n", - " 5. **Median kNN** Outlier Detection (use the median distance to k nearest \n", + " 4. **Median kNN** Outlier Detection (use the median distance to k nearest \n", " neighbors as the outlier score)\n", - " 6. **HBOS: Histogram-based Outlier Score** [5]\n", + " 5. **HBOS: Histogram-based Outlier Score**\n", " \n", " 3. Probabilistic Models for Outlier Detection:\n", - " 1. **ABOD: Angle-Based Outlier Detection** [7]\n", - " 2. **FastABOD: Fast Angle-Based Outlier Detection using approximation** [7]\n", + " 1. **ABOD: Angle-Based Outlier Detection**\n", " \n", " 4. Outlier Ensembles and Combination Frameworks\n", - " 1. **Isolation Forest** [2]\n", - " 2. **Feature Bagging** [9]\n", + " 1. **Isolation Forest**\n", + " 2. **Feature Bagging**\n", + " 3. **LSCP**\n", " \n", "Corresponding file could be found at /examples/compare_all_models.py" ] @@ -75,7 +73,8 @@ "from pyod.models.lof import LOF\n", "from pyod.models.mcd import MCD\n", "from pyod.models.ocsvm import OCSVM\n", - "from pyod.models.pca import PCA" + "from pyod.models.pca import PCA\n", + "from pyod.models.lscp import LSCP" ] }, { @@ -97,7 +96,13 @@ "n_inliers = int((1. - outliers_fraction) * n_samples)\n", "n_outliers = int(outliers_fraction * n_samples)\n", "ground_truth = np.zeros(n_samples, dtype=int)\n", - "ground_truth[-n_outliers:] = 1" + "ground_truth[-n_outliers:] = 1\n", + "\n", + "# initialize a set of detectors for LSCP\n", + "detector_list = [LOF(n_neighbors=5), LOF(n_neighbors=10), LOF(n_neighbors=15),\n", + " LOF(n_neighbors=20), LOF(n_neighbors=25), LOF(n_neighbors=30),\n", + " LOF(n_neighbors=35), LOF(n_neighbors=40), LOF(n_neighbors=45),\n", + " LOF(n_neighbors=50)]" ] }, { @@ -140,36 +145,43 @@ "source": [ "random_state = np.random.RandomState(42)\n", "# Define nine outlier detection tools to be compared\n", - "classifiers = {'Angle-based Outlier Detector (ABOD)':\n", - " ABOD(n_neighbors=10,\n", - " contamination=outliers_fraction),\n", - " 'Cluster-based Local Outlier Factor (CBLOF)':\n", - " CBLOF(contamination=outliers_fraction,\n", - " check_estimator=False, random_state=random_state),\n", - " 'Feature Bagging':\n", - " FeatureBagging(LOF(n_neighbors=35),\n", - " contamination=outliers_fraction,\n", - " check_estimator=False,\n", - " random_state=random_state),\n", - " 'Histogram-base Outlier Detection (HBOS)': HBOS(\n", - " contamination=outliers_fraction),\n", - " 'Isolation Forest': IForest(contamination=outliers_fraction,\n", - " random_state=random_state),\n", - " 'K Nearest Neighbors (KNN)': KNN(\n", - " contamination=outliers_fraction),\n", - " 'Average KNN': KNN(method='mean',\n", - " contamination=outliers_fraction),\n", - " 'Median KNN': KNN(method='median',\n", - " contamination=outliers_fraction),\n", - " 'Local Outlier Factor (LOF)':\n", - " LOF(n_neighbors=35, contamination=outliers_fraction),\n", - " 'Minimum Covariance Determinant (MCD)': MCD(\n", - " contamination=outliers_fraction, random_state=random_state),\n", - " 'One-class SVM (OCSVM)': OCSVM(contamination=outliers_fraction,\n", - " random_state=random_state),\n", - " 'Principal Component Analysis (PCA)': PCA(\n", - " contamination=outliers_fraction, random_state=random_state),\n", - " }" + "classifiers = {\n", + " 'Angle-based Outlier Detector (ABOD)':\n", + " ABOD(contamination=outliers_fraction),\n", + " 'Cluster-based Local Outlier Factor (CBLOF)':\n", + " CBLOF(contamination=outliers_fraction,\n", + " check_estimator=False, random_state=random_state),\n", + " 'Feature Bagging':\n", + " FeatureBagging(LOF(n_neighbors=35),\n", + " contamination=outliers_fraction,\n", + " check_estimator=False,\n", + " random_state=random_state),\n", + " 'Histogram-base Outlier Detection (HBOS)': HBOS(\n", + " contamination=outliers_fraction),\n", + " 'Isolation Forest': IForest(contamination=outliers_fraction,\n", + " random_state=random_state),\n", + " 'K Nearest Neighbors (KNN)': KNN(\n", + " contamination=outliers_fraction),\n", + " 'Average KNN': KNN(method='mean',\n", + " contamination=outliers_fraction),\n", + " # 'Median KNN': KNN(method='median',\n", + " # contamination=outliers_fraction),\n", + " 'Local Outlier Factor (LOF)':\n", + " LOF(n_neighbors=35, contamination=outliers_fraction),\n", + " # 'Local Correlation Integral (LOCI)':\n", + " # LOCI(contamination=outliers_fraction),\n", + " 'Minimum Covariance Determinant (MCD)': MCD(\n", + " contamination=outliers_fraction, random_state=random_state),\n", + " 'One-class SVM (OCSVM)': OCSVM(contamination=outliers_fraction,\n", + " random_state=random_state),\n", + " 'Principal Component Analysis (PCA)': PCA(\n", + " contamination=outliers_fraction, random_state=random_state),\n", + " # 'Stochastic Outlier Selection (SOS)': SOS(\n", + " # contamination=outliers_fraction),\n", + " 'Locally Selective Combination (LSCP)': LSCP(\n", + " detector_list, contamination=outliers_fraction,\n", + " random_state=random_state)\n", + "}" ] }, { @@ -188,11 +200,11 @@ "Model 5 Isolation Forest\n", "Model 6 K Nearest Neighbors (KNN)\n", "Model 7 Average KNN\n", - "Model 8 Median KNN\n", - "Model 9 Local Outlier Factor (LOF)\n", - "Model 10 Minimum Covariance Determinant (MCD)\n", - "Model 11 One-class SVM (OCSVM)\n", - "Model 12 Principal Component Analysis (PCA)\n" + "Model 8 Local Outlier Factor (LOF)\n", + "Model 9 Minimum Covariance Determinant (MCD)\n", + "Model 10 One-class SVM (OCSVM)\n", + "Model 11 Principal Component Analysis (PCA)\n", + "Model 12 Locally Selective Combination (LSCP)\n" ] } ], @@ -218,16 +230,16 @@ "5 fitting Isolation Forest\n", "6 fitting K Nearest Neighbors (KNN)\n", "7 fitting Average KNN\n", - "8 fitting Median KNN\n", - "9 fitting Local Outlier Factor (LOF)\n", - "10 fitting Minimum Covariance Determinant (MCD)\n", - "11 fitting One-class SVM (OCSVM)\n", - "12 fitting Principal Component Analysis (PCA)\n" + "8 fitting Local Outlier Factor (LOF)\n", + "9 fitting Minimum Covariance Determinant (MCD)\n", + "10 fitting One-class SVM (OCSVM)\n", + "11 fitting Principal Component Analysis (PCA)\n", + "12 fitting Locally Selective Combination (LSCP)\n" ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABBoAAAMlCAYAAADdV5CpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvFvnyVgAAIABJREFUeJzs3Xl4VNX9x/H3ydzJRgJkQxIWESFo\nQEQEl6jgAqh1F0GpVXFDrUXUqlXUuiGorVbAat1q+WnrLi6tG1gxVVxaEVEWQZQ9QDaykPVO7u+P\nO5NMhkkymbkzc2fyfT1PHsIsd87M5M7c87nnfI8yDAMhhBBCCCGEEEIIKyREuwFCCCGEEEIIIYSI\nHxI0CCGEEEIIIYQQwjISNAghhBBCCCGEEMIyEjQIIYQQQgghhBDCMhI0CCGEEEIIIYQQwjISNAgh\nhBBCCCGEEMIyEjQIIYQQMUopNUgpZSilNPf/31NKXRLGx9uklJoQru13oR1hfZ5CCCGECI0EDUII\nIUSEKKWmK6W+U0rVKqV2KqWeUEr17sL9O+zoG4ZxqmEYi6xpbfB8A5AQt3W3UuoF78vs8jyFEEII\n4Z8EDUIIIUQEKKV+CzwI3Az0Ao4C9geWKKUSo9y2kAMBIYQQQggPCRqEEEKIMFNK9QTuAWYahvG+\nYRhNhmFsAqZihg2/ct/ub0qpOV73O14ptc39+/PAQOAdpVSNUuoWP4+zTCl1hdf/L1NKrVVKVSil\nPlBK7e91naGUulYptQHY0E67L1JKbVZKlSmlbve5LkEpdatSaqP7+leUUpnuq4vc/+5xt/XoANoz\nXCm1RClVrpTapZSarZQ6BZgNnO/ezre+z9Pdjjvc7dytlPo/pVQv93WekRWXKKW2KKVKfZ+HEEII\nIawnQYMQQggRfoVAMvCG94WGYdQA7wETO9uAYRgXAVuAMwzDSDMM46GObq+UOhuzk34ukAP8B3jR\n52ZnA0cCBX7uXwA8AVwE5AFZQH+vm1znvv949/UVwJ/d141z/9vb3dbPO2qPUiodWAq8797WEOAj\nwzDeB+YCL7u3c6ifpzrd/XMCMBhIAx7zuc2xwDDgJOD3SqmD/WxHCCGEEBaRoEEIIYQIv2yg1DAM\n3c91xe7rrXYVMM8wjLXux50LjPIeReC+vtwwjDo/9z8P+KdhGEWGYTQAdwLNPtu/3TCMbe7r7wbO\n62AaRkftOR3YaRjGw4Zh1BuGUW0YxpcBPs8LgUcMw/jJHdzcBlzg0457DMOoMwzjW+BbwF9gIYQQ\nQgiLSNAghBBChF8pkN1OJzzXfb3V9gfmK6X2KKX2AOWAAvp53WZrB/fP877eMIy9QJnP9hd7bX8t\n4AL2C6I9A4CNXXlyPu3c7PX/zYDm046dXr/XYo56EEIIIUSYSNAghBBChN/nQAPmtIEWSqkewKnA\nR+6L9gKpXjfp67MdowuPuRW4yjCM3l4/KYZhLA9we8WYAYCnramY0ye8t3+qz/aTDcPY3s52O2rP\nVuDAdtrR2XPegRlieAwEdGBXJ/cTQgghRJhI0CCEEEKEmWEYlZjFIBcqpU5RSjmVUoOAV4FtwPPu\nm64EfqGUylRK9QWu99nULsw6BIH4C3CbUmo4gFKql1JqShea/RpwulLqWPeqGPfS9rjhL8D9nqkY\nSqkcpdRZ7utKMKdZDPa5fXvt+SfQVyl1vVIqSSmVrpQ60us5D1JKtXfM8iJwg1LqAKVUGq01HfxN\nUxFCCCFEBEjQIIQQQkSAu3jjbOCPQBXwJeaZ/JPcNQ7ADBy+BTYBHwIv+2xmHnCHe/rBTZ083mLM\n5TRfUkpVAd9jjp4ItL2rgWuBf2CObqjADEU85gNvAx8qpaqBLzALS2IYRi1wP/CZu61HddQewzCq\nMQtinoE5zWEDZnFHMMMYgDKl1Ao/Tf0r5utWBPwM1AMzA32eQgghhLCeMoyujMIUQgghhBBCCCGE\naJ+MaBBCCCGEEEIIIYRlJGgQQgghhBBCCCGEZSRoEEIIIYQQQgghhGUkaBBCCCGEEEIIIYRlJGgQ\nQgghhBBCCCGEZSRoEEIIIYQQQgghhGUkaBBCCCGEEEIIIYRlJGgQQgghhBBCCCGEZSRoEEIIIYQQ\nQgghhGUkaBBCCCGEEEIIIYRlJGgQQgghhBBCCCGEZSRoEEIIIYQQQgghhGUkaBBCCCGEEEIIIYRl\nJGgQQgghhBBCCCGEZSRoEEIIIYQQQgghhGUkaBBCCCGEEEIIIYRlJGgQQgghhBBCCCGEZSRoEEII\nIYQQQgghhGUkaBBCCCGEEEIIIYRlJGgQQgghhBBCCCGEZSRoEEIIIYQQQgghhGUkaBBCCCGEEEII\nIYRlJGgQQgghhBBCCCGEZbRoPKhK7GGolMxoPLQQogNG1bZSwzBywrFtu+z3zuTkaDch4lJSnNFu\nQofq6pqi3YSIa6qvj3YTWoRzv8/MyjYGDNw/HJsWwlYa9eZoN6FL1n2/Mu6/77srZ3IyKSlO0pMd\n0W5KG9X1Lurqmmz1/dcdhfM731d0goaUTJKOmhWNhxZCdKD+w5s3h2vbdtjvc4cXRPXxw21kQZ9o\nN8FSq9bsjnYTwq549ZpoNyGs+/2AgfvzwbIvwrV5IWxhU8neaDehy44emhHX3/fdWd+Cgzl0+H6M\ny7dX2FO0vpxvV+9i55q10W5KtxbO73xfUQkahBAikuI1YIi3YMGXv+cXb+FD7vACW4QNQojgDcrp\nwaaSvQzK6QG0Hzx4bieEEN2BBA1CiLgWTyFDvAcLgfB9DeIhePD8jUrgIETs8oQMnt99AwXP9RI2\nCCG6CwkahBBxKR4CBgkWOuf9GsV66CCjG4SIHxIoCCG6OwkahBBxJ5ZDBgkXghcPoYOMbhAifniH\nDZ6pFRI+CCG6CwkahBBxJRZDBgkXrBfroYOMbhAiPviGDaJV34KDI/p4UoRQiMiSoEEIERckYBDt\nidXQQcIGIWKfd7ggIxpMkQ4YfB/XboGD1a+HHVecABiXn8m3q3dZvl2rXj8r/y6i9Tdut79tCRqE\nEDEvlkIGCReiy/P6x0rgIFMphIht3kUiPf/vzmFDtDpgvm0ItUNmh+fRmcI8e4UNy3eUc+jw/aLd\njHZZ8Xfh2U60WPUcrCJBgxAipsVKyCABg73E2igHGd0gRPzo7mGDEKJ76JZBg2/HRA7erCdn4US4\nScAgrBIroxwkbBAifnS0BKaEEEKIeGBJ0KCU6g08A4wADOAywzA+t2LbVmqvY+J9uRzEBc/f6yuB\nQ3yL1r5v95BBwoXYFAuBgx3Chlj5zhfC7jxhQyxMr5D9XgjRVVaNaJgPvG8YxnlKqUQg1aLtWsK7\nU+KvA+B9UGmHg7hY5HmNRw3L5OYvXuSQFZ8xb9KVrB52OKvW7JbXNX5FfN+3c8ggAUN8sHvgYIPP\nU1t/5wsRS3xDBhuT/V4I0SUhBw1KqZ7AOGA6gGEYjUBjqNu1gr+A4fT0vZz8xRJodqH3yqB6zNEs\nzT+IovXlLQeVchY+cJ7XamRBH07JbmbaA7+l15efAjDn+68puvo2/nTYuRI2xKFo7PsSMthXQ3UF\ntaU7SM3OIyk9I9rNsYSdA4dofU/Z+TtfRF5paQnbtmym/8D9yc7OiXZz4oYNRzPIfi/aqCgrpXj7\nFnL7DSQjKzvazRE2ZcWIhsFACfCcUupQ4GtglmEYYfmU7GpHw3OgeEH9T5yz+BmSPl5iDvjycEDS\nY3+HgqMA+41uCOT5RquN3iHDhDwnl996Cc7vvmUX8J4Dprtg/OPz2PbkEVDQ35YH6yIktt73fblq\nK9GrdqH13A9Hai+LWiUBA8C2L99n5aI5KE3D0HVGXXIn/Y88OdrNsozdA4cIfwdEdL+3gnSGw2Px\nay9x48yrcDqdNDU18cjCpzjnvPOj3ayYZ7eQwS3m9vtwfecL+PCd15g7+zo0zYmuNzF73kImnT45\n2s0SNmRF0KABo4GZhmF8qZSaD9wK3Ol9I6XUDGAGAMm9u/wg/joZIwv67HPg53vQP/7AXkx5/Wn6\nP/4HMMDlgLeaYaMDDnHBKS4Y9psLUY/8FUaNB4ILG6wKBILpTEWjxoR3yJBSV8OMu2/F+d23bASO\nBXa6wAFcBPRa+SWM7t9yv2iHN8Iyne77oe73HqGGDDXrllG6ZD4kaNCskz3xetIOGh/SNiVgMDVU\nV7By0RxcTQ3Q1ADAykX3kVNwRNyMbPCwa+AQ4c/VLu33/QYMjFS7/JLOcHiUlpZw48yrqK+ro76u\nDoAbZ87guONPlDAnSDYNGDwi9n1vhZp1yyhbuqDlOz9r4izShoX2nS9MFWWlzJ19HQ31dTRg7vtz\nb5vJ2KPHy8gGsQ8rgoZtwDbDML50//81zA+fNgzDeAp4CiCh1wDD9/qO+E6BmJDnZMzLzzD2nreo\ny+zDD8NG8tPRJ7B1dCEo1XLbwrxMst98if5//gMoqJ0EQz+GHS5AN2/zUALc7IL8Gy8j6a1vOnx8\n3wO5jjo//g5Ig+0sddSh8T3gDXfo4O85PPTjhyT+90tcSXAOsLMBEoG+7utTNv5gfj2JeNPpvh/K\nfu9hxUiG0iXzMfTWkZ6lSx4lZeCooM5ySMDQVm3pDpSmtYQMAMqhUVu6I+6CBg9/IXe0RTBs6NJ+\nf+hhhwe131tBOsPhs23LZpxOZ8vrCuDUnGzbslle2/gUke97K7hqKylbuqDNd37ZkvmkDAjuO1+0\nVbx9C5rmbAkZADRNo3j7FgkaxD5CDhoMw9iplNqqlBpmGMYPwElAWI52Rhb04Y+VXzPk+qvBHfym\nbdvK4au+5vBXn6PxiKP48dpbqSpsTS1zN683fzkbVh8Ge/8DNLVuc34i3FwPKGhKSQGq2338QDo8\nnk7IuPxMUstLOfPwJLSGepZUJlGd3prwdnSQ6tuRGZefCYCzdi+F6RpFjRqGw7HP/doLHaw6+PR9\n/p52fjpsNNMc4GiAN4G7gEuBE4FK4KdJZ1ny+MJewr3vt7e/dXU4pF61yzyr4T2dNEFDr9rV5YMO\nCRn2lZqdh6HrbS4zXDqp2XlRalFk2HF0QyTChkh+53sLZvqDdIbDp//A/WlqampzWZPeRP+B+0ep\nRbHPjitNeERrvw9m+oOV3/liX7n9BqLrbfd9XdfJ7Rfd0WvCnqxadWIm8Hd3FdqfMPuZlhpZ0Ie7\nBxoMOflqAHblwSW7ISkBCnW4PhGSvvqCgq/OpvytD2gcfwIACaUl5gZ+hAOOgkZX2+2e7d5XmgpG\n0aw5Q2ofmKHAsRnJjJz9a5L/+VbL9RcDeu/e7DnmBN6Y/lvopMPiCRdOrCvloHnXkfjl5yRUlANw\nuAP0QUMoPu08jr38N3y6p6HNfcMROHQUshSPGM36R/5K/rzLGLwTnndfvhN48+a7eL/X8KAfV9he\nWPb99v7egpkCofXcD5rbdoRp1s3LAxRMwBCPxRH9SUrPYNQld7Jy0X0oh4bhMms0xPNz9ma30Q0R\nGtkQ9u98b8FOf4hGZ7i71IPIzs7hkYVPcePMGTg1J026+b7E83OOBM8KFDYNHCK63wc7/cGK7/yu\n6k71IDKyspk9byFzb5uJpmnous7seQtlNIPwy5KgwTCMlcAYK7bVnlVrdtOcP6Dl/4NLoNb9OfI2\n8EeXWaUGQNWaH9CbSvYy7OzJpCx+Ab6D7Hvgm4Pg8jVQ64BROixwD+7aOnV6yG0cl5/JcT0SOHTG\nFBK/WA6JUJ0CW6tggAHpe/aQ/a/FzPhoMRN/9xBvjj+7ZWRC0frylnAB4NjeSRT8bT5pC/4AnnBE\nA9yDLrSNPzJgwQMM+L8HGHbfU6ydeK7f18xbVwOHQIesF60vh1HjOe6dn8h7ej7q5x+pbWhg2/Wz\nqc3aH7xW9IgHvq9Ld645EY59v6ORDMFMgXCk9iJ74vWULnm0TUARyMFAsCMY4r04oq/+R55MTsER\n3SJY8cduoxvCHTZE4jvfI5TpD5HuDHe3ehDnnHc+xx1/YrcIVkRk9/tQpj84UnuRNXEWZV4nJbIm\nzgpbANAd60FMOn0yY48eL6tOiE5ZNaIhIpYZqRya1w/Hju2coeBlr+saNajpA2nbwUhtHX72w+HH\nk/TeSgruu4mkj5cybBV8Ci01GgBqrr+JN487w+wwB8G7M3LgbTPNkCETyn8D/R+AOneYMRj4k4Iz\n6+GAe25hxlVb+O6m+1i+ozVkKMzLRDXUc9hFp+P85mvzjicAZwOZQALmZ+4G4CXgJ+g1cwZj8h8m\n+4rrKT1rKmB2/ts7+LVqicBVa3a3PEbR+nLIz4QLr2u5vmh9OZQF95raVe7wAg4s28IFDeuZn1VI\nTVKqFLi0UEd/m6EMh0w7aDwpA0d16YxDsCFDPBRH9A49A5cJHNjyv2A/T2OZnQKHePlcCnX6Q6Q6\nw921HkR2dk5cPz8RHaFOf0gbNp6UAV37zg9Gd64HkZGVLQGD6FRMBQ0oRe3Fl5H+wH080QjfAuvc\nV41pMkMGkuCnvgeyfIfXQa4jnY/v+gsTr9vK4H+9jNE7g5SX/4GrTx8aJp7C6stugOIKIPQDRD29\np/nLSNioQaKDlnIpPwEXJcOKX8CBr0OP5x7jgNl3QV7bg/pD/nS3GTJkYQ5UG9p6XUkVbCqBQQMg\n5x7gc+AV0Nb/wJBbrmHAOy+TeN98s9NPa+AQrgPffcIGr8vbE6sHwLnDCyjcspL/+9ftJNTDhQe+\nw28vmcf23EFA9x7ZYIXOArBQh0M6UnsF/MUfSi2GcBRHtHIaRnAhgvWPE4tBRKDvg12mU8TqZ603\nK6Y/RKIzHI56EN1lGobdRfp9sOm0iYiyYvpDV77zgxWOehDdaRqGnRmNNRh1FaiUDFRiWrSbE7Ni\nImgoXr2G3OEFPPbmOjjzYn79/Soy/vkWnwFXJMJyA17rBZRCzazb0TOzYEd5y4HsuPxMUIolmQMp\n/N08c6NX3dKy/eVetw3VjqtvoM/if8B/4JBqmNpolpdchlmzoMkFPU8ElgPFkPzOm3DyeS33H/rj\nSlKffdJ8Z24ADmjd9ovL4fKnzfCi0QXPXgnTjgGOBD4DXoKk/yxj9CmHMviRZ1g30VzTtqPRDVaw\nwwF1uOUOL2Bo6WYWLb6dhGazyGWvjT/yp/un8MxrX7Mqto/loy6QUTahTIEIlBXFHq0ujhjKNIxI\nhQrB8Nc2O4cPXX0fJGywRqzUArC6HkR3m4ZhV/I+REekpz8Ey+p6EN1xGoYd6cXfoK9+FZQDDBfa\n8ClouYdFu1kxKSaCBvAKG95ejzbzfq7esZ3MFf/jjUYwEkCVgr7/AayZdlXb0QzQJnDwvc5XqAeH\n9QcMoWbmjaQteITkr93r/GAudPGOgkOGQs7vgTIgAVz9+7e5v2Pzz+Yvo2gTMpRUmSFDXWPrCInL\nn4YJIyCnJzDefZ/ngP9C719fwYibf4Irb2rZhnfgEKhwHShbvSJGJPyy9CsczeaaTpcCXwIFDZC2\n8ktAKm1HQjBTIAJl1YoSVhZH7Oo0DDsHC4Gwa/gQ7HQYu0yliPWwIRZqAVgZiHTXaRh2E433QUYz\ntIrU9IdQWBmIdOdpGHZiNNaYIUNzE55lCvXVr+LIGiojG4IQM0GDt39vqUO750ku/Okrejz8INqW\nTZAB3z37Os1p6VDV9QPTcfmZQR/QeqYPeO6/fPK1nHzUSfT4/lv2+3kt+o7tpP3n35zbDKw27+PK\n60flE8+yvuDINttyDRxk/uLTlE0lbadhADgd8M0myOgBg3IgpxdwPbAU+Buk/WEuI0tL4HfzWL6r\nsuUgvivP07vzFY6D5Vg4AM4dXsDIgj6MWfIdAP8GaoA97ut/WLkWZEmvoHW1ZojVwyHDsWSlVcUR\n25uGUbnlB5yp6Zx0ZAFpvbOsarYteYcP0QodQp0OY4fRDbHwWduRWKgFYFUg0t40jO9XraR37wzb\nhi3xJtLLo0rIsK9ITH8IlVWBSHvTMBp2b8SRnGbbsCXeGHUV5kgGvEaoqQRzGoUEDV0WU0GDZ1SD\necDWh/pRkyj86AKcu4ppTu2By1Mfwa2z8KDQqzaCpyBjsDUNfMOGIvrAARPNH+AXMxs55YsPUE06\ne8adxN4RoyAhYZ/t6AXDwYlZ0GEH4B5tPShn36U565vgrEcgSfOaSlEITMCsy/YopD73NKNXf8eB\njz/Dxl79ADgmO43kzRtJ2r4V5+6dOPbupaHfAOr3P4C6IQexfFdly2N4v36Bvi6eg9lAO5CxMrqh\noW8/+P5rHgZuB/phfh0UOQdHt2ExzKrCpMEKR8jgkZSeEXI9Bb/TMPRG/vv4TWjORD7Xm5h6ywOM\nnnBGSI8TK6IVOlgxHUbChu7BikDE3zSM+vp6pv9yMomJiTKEP0IiuTyqhAyxzYpAxN80DENvZPc7\n96EcTplKESEqJQMMnw6X0WxeLrospoIGf5bvKKcwL7fd69sbSlyYl0nyxvWkrVqBo7aGM1PT+Ndh\n49uEDdC1s/jt3XZkQR/erUik5oxLWi/cuafNbTyhx89NiaRfeAWpf3sGPqBlleKcnmaQcPnT5kiG\nJh30ZqjXzcABfKZSjAZuAp6CxK++IGfMCLJ69cZIT8exYys0+38Orv4DGHH+L9lw2jQaBrR+mXoO\n6js7WA7lINbuB8FFtz7I3l07OO67/9EPqAV+d/LFbM/Nt3W77SqeQwareKZhrHp+Dg5NQ29qotnl\nwtXYgN5onl1/5aFbyR9TGPcjG3xFMnSwajqMhA0iEPtMw2hqRHe5aKivp6G+HpCpFJEQyfogg3J6\nSNjQze0zDcOlYzS7oFnHcJkH+jKVIvxUYhra8CnuGg0JYDSjDZ8ioxmCFHNBQ9tRDa11F7xHJ3h+\nb68eQ2FeJpnvLib/xsvAK7T6dcFw1s79M+QPCLhjHQh/9/cNQLyfQ/05U8ygYXPb+0wrNIOETSVQ\nsRemLoBKr7kUTod5XY5nYMdI4EHgBeAzSKjcA5V7QAH7uX8ygESgBNgCjm1bSXv4QQ5b+CCVf3gC\nTj2f5cUVbUaHhPKadNS5W7Vmt21HN3ie77KZj1O14jWaB/bnkx1N/Mt5UJRbFpskZAjMuPxMyJ/G\nmWdMorx4O7XVlTx/90zq91a33MahaZQXb+92QYO3SIQOVk2HsUvdBmFv3tMw9uypYMb0aVR7nV0P\n5xB+0SqS9UEkbBDe0zBc9TWUvPsARmNt6w1CXNFCBEbLPQxH1lBZdcICMRc0dGTYVx+R8sLfMNJ7\n4urbl7RjJlEz+sg2gUNh397s9/xTHHDf78DALKCYBXwPzjWrGXnu8Qx6cD6FZ1/cshqFVWehfJeC\nbLdwm2dKhZ93J6en+VNSte9UiiaXOcWijR7AVcCVwF6gHuiFGS7gtVxmDuSkYa4XuhT4EnrNuoZD\nP/0EddejfFa2N6A6FoF2ICfmOjjrg5dxVFWyVYfth4xhUcGhLa+zbc+6KcXTh08BYFWJ2VZbttPG\nJGTomL/PhbTeWaT1zqJmTxkuve1QXpeuk5nbr8uPU7OnjPLi7WTm9ourkCKYWjSBsmI6jEc0RzfY\n9vNVtOGZhlFaWmLZEH5ZMrPrIlkfRMIG4ZmG4aqttGxFi4qyUoq3byG330AysrItaml8U4lpEjBY\nIC6ChsK8TIZ9uZSMi6aY4YHbiAWP0HhUIQXnTmVnci/6VpeS+uyTaD/9aN5gMnAOlFTDlqPh4M8g\n9WPoefMsslUSjJ3Ysq1Ihg2OH9ebv3Tw973PVAp3jYacnu3cIQFId/+4+V0usxAowFwu86+Q8upL\njGxqwnjgyZaCksGGL57nfWpmE5fdMh3nGrMypmfiy4ALrmDuCVewcl2ZebnNDoblDGToohky+AYM\nDdUVIZ+dtlIgK0ak9c5i6i0P8MpDt+LQNFy6ztRbHuhyULBi6du88tBtODQnrijUeYhEyBHOwMEq\nEjZEXix2tK0awm+HpRpj8fWPNAkbrOeqrbT16hX+WLWixYfvvMbc2dehaU50vYnZ8xYy6fTJYWq1\nf56go0ZLxxxWLbqLuAga0lb+j4xL3SHDyZgrDW4HPobEL5aT+MVy2vS/s4ELgKP37Wx/egyM/gyG\n/O5qJv39PcjPD+uBqr+wIem9f5q/jNr39t4jELynUgzK6SBk8KPT5TKPwax2OAdS3nydQ/rmwW/v\n7XR50M5M6pvA5df+Em3LJiozYG4V5Cn4tQ5jXnqGp6vKWHTLHyjaUNEylSLaB8Oe6TrtXSfszzdk\n2Pbl+6xcNAelaRi6Od++/5EnR6VtgQQM3h3z0RPOIH9MYdAd9Zo9Zbzy0G00NdTT1GDO945knYdI\nhxx2DxwkbIgcO3S0u8K7Ux7qEH47LJkZa6+/iA8165ZRtnRBm866nQsqeocioa5oUVFWytzZ19FQ\nX0eD+2h/7m0zGXv0+IiNbPAOOhqbGhl50R2Q5qeDI+LSvssexKA+Lz5nrkIyHrgISg6D/x4JpfcD\nlwAnAmPdPzcAfwKObtvZrqwz/z32v1B/BOCCjH+/H1R7ilevCfrg7QBHPckfvWcGfj774YvLYf9Z\nMHGe+e+Ly81QYOyBXQsZoHW5TG+eGg8tBgE3Ag7o8eRCErdv6fLz8TXwf5+hbdmEvh+MqIGHXHC9\nDpMwZ3ZkvbuYnju3tblPtIfag/9AoTsdoFvBmZwc1u27aitp2LneHG7oxd9IhpWL5uBqakCv24ur\nqYGVi+6joboirO3zNS4/M6CQYcXSt5kzdRxP/vZi5kwdx4ql75DWO4uBB48MKhgoL96OQ3O2ucxT\n5yHcvEOO+r3VNDXU88pDt1Kzpyzsjx3o6x0N0ZzOY4fP11CUlpawcsX/KC0t6fR2no52dVUV9XV1\n3DhzRqf3i5bFr73E2EOGMPXsUxh7yBAWv/Yy2dk5jBo9JqhgwLNUozdPnYdIiLXXP9oG5fSIdhNs\nr73vfN/blC1dgKE3YjTWYuiNlC2Z3+F9oqlm3TK2/fVSdr5xB9v+eik1P3yCI7UXSX3zgxqJUbx9\nC5rP972maRRbcDwfCO+gY29NFU0N9axcdJ9tX39hvbgIGlI3rDV/OQ5e/Ly1Mz7wd/BiGnA5cL37\nZwwtz7q9znate8Ra/aAhAbfBEy50tfPpOfD1FIJMXfSsWaByBNC79Xb+QpHLnzYvb8MA1gJvA48B\nizCXyjTa3szfcplNLkhLhv/wQGPdAAAgAElEQVRu9NpuAXCkef/8t15oU3SzKwfHnts2pJlzN2pT\noNprPM0yYI17NNXRRi125P0eS8hgLzXrlrH12ekUv347W5+dTs26TwD/f6O1pTtQWtvBXMqhUVu6\nIyJt7UqHNxwd88zcfvvUedCbmqitrgx7hz+aIYeHXQMHu9cOsSN/nfH2RLuj3RXh6JT7XaqxqZE9\neyoi0tmPpddf2J+/Drk/etUucySDN3dBRbsJRyiS228gup/v++rKPVSUlYba5E75CzqUw56vvwiP\nuAganKXmsNNyR4CdcTd/ne0LGyHD3YcsGtC6okAwSzp2pTOasLeGkfN+R/o9d5gX+IzqCmgEQj3w\nZ2AO8DLwOfAhcCcwG/ih9aaeGg8pidAzxfz38vFw+B1tR0wAcJL5T/IbrwGBDfVuT8WAA0BBz03w\nQINZqxLgZuBwTxjiarZlR0DYk6u2ktIl89t8OZcueZRhA5x+b5+anYeh+6xV7dJJzc4LazuD6eCG\no2PuqfPgTEomuUcaDs1Js8vF83fPbBkxES7+Qo5gi1mGyo6Bg4QNgetqZ9xvRzvIgorhFo5OuafO\nQ3JKCunpPXE6E9FdLmZMn9ZpSGOFWHr9hb11pUOu9dzPsoKK4RaOUCQjK5vZ8xaSlJxCj7R0NKcT\n3eXi9usu5ZzjR/LhP18PsdUd8xd0GC57vv4iPGK6RsOqNbsZl59J3dCDSCreTvk6szPuteJj65KP\n32B2upswpyUMhpwzWgsq7p8A9zbCFHfwsPl391IxcHCn83pDObPtOcgdn6hz6JRT0TasBwdmkcoj\n2962vREILatM7AQeBbYCybD3ol+jH3Qw2ob19Pj7QtgC3AecDpwLJLat8ZCWbIYMfms2DAWcoG3+\nGUd1aMOdqnIHsOS39zPxT7dztQuuBnYAni5e9a138kH/g2w7n1rYT+uXc2PLZQ7NSW3pDr9FHpPS\nMxh1yZ2sXHQfyqFhuMwaDeEsCBlshzZcHXNPnYftG9bw19lX4WpsaFkyM5z1GqwqZmklu9VwiGbN\nhlji6Yx76g1Ax0s+WlVQMRLC1Sn31Hn4ftVKpv9yMg319S1LZoa7XkMsvf4ivHauWUvfgoODvr+/\n7/z2ln1sr6BiyabQRzDuXLM25G0ALa9FuEKRSadPZuzR41m/ZhW3XHMhjQ317K0x9/tA6jWEVpst\ngfNuntfmO3/kRXewetMOzKP/0IXyt+TLqvc01L/xUB/bTmIyaPAuzle0vpyjDhxBYdFHDCqCNB28\nu8JNLjhQB54Bmr2u2AZ8DtOOgnMOB8e34GwGnPDzrQ+yeMJ5LQee/g76rBo6X7hfL0ZceZ4ZMvQH\nroWS3rDp57YFHjtcZeJr4AmgDvQhQ6l44VU2ZrUekKjf3M7wvz5C2p8egneAFZg9/MGty2X+d2MH\nIU1PIAPYDYk7tkF6Ll3lWW2jaH05nHEBZfsP4YxVn5D67OPkNUNzEmz40wv8a/jRtjngF7HB35dz\nZyMU+h95MjkFR4R91YmuBAz+VmIIZ8c8rXcWKWm90JyJ6I0NLZd7RkyEq/MfajHLcAlk+d5IkbCh\nc8F0xkMtqBgO/lZhCGenPDs7h969M0hMTKShvr7l8o5CGqvY8fW3K1l1on1d7ZD7FlS0ImSwgtFY\ng1FXQfHKGnJHjbVslQlvrSFBAlsaE0jQnNDQut8rh4MPVn7PwINHhvhs2uf7nf/cx7sx53hbw24d\naw+7tivSYjJo8PXN5EsY+8USnGvX8G0fGFMB5VprZzzzTaAZ6k8/ix+uuYWE+nqGvPY3Ul58Hv4D\nnhJ1DRNOZvXvH2aZkRKRkAGg3+MPk/SfZdATuBVeXAuX3+VnyUn8rDJhAC8A75nX1595DpULn+Ln\nxta3dfmOcgrzMvn+mtsYevJp9Lr2CrQfN8BdwBnAOYCzkxET9UAJ4ID6/QdDeR3BaBM2JA/mpSMG\nox12IWekVlGT3ZclxTp08LoL4Y8jtRfZE6+ndMmjODRnwCMUktIzbDOKoaOVGMLZMY/WVIa03lm2\nCRi82Wl0g4QNHQu2M56dnWObDm5HqzCEs1MezWkMdnr9RfSEcsY3mA65I7WX1/XRDxr04m/QV78K\nygGGi21lU+h/0i9DXmXC49vVu/Y5Bonm1MW23/nyvdadxHzQYB6I9cF539NcfsMvydq6mR8zYc0v\noe9wyGnErFuQDN/f8Ud09/Cgb0eOZujFl6GtXwcOjeKknrw7ZDQYCREJGcblZ4Jh0O+5x8wLroES\nRydLTjZDThXk7AaK3D+NgILqu+eyetrV0Kj2GebU8v/BI1GLP2HEXx6ix+OPwlvAV8B0yBnezoiJ\nZOCvgAFNIw7DSE6h7biHrvH3muoFfaBYb/egWgovis6kHTSewydOCPsIhUB0dZpEIMtNhqtjbsep\nDHZgl9ENEjZ0LJbPkAey3GS4OuUyjcH+BuX0kFENHbCqQx4NRmONGTI0N2HO5wZ99au4jj6tJRAJ\nx/OR73sRDTEbNHhPnwB4tyKRMX//FyNuuoLEr77gkGeBCUBf83o9bwj98wewqay1k7xhyCgYYq4h\n6emMR2okQ9H6crND4nC/BYNaCz62mb6QAJXLIGcTsBqoabud+lNOY+9vb2XDoBH7BAzeB8rj8jNb\nrjeuv4uhp51Jr+uvQVv/A8wDMmDaIXDmyVDqgsyekF6JOfJhC6BBzc2z22yvaH25JQfCdjiQDmSJ\nNwk87C3cIxQCEUwtBk/Bxyav4Yzhnr7gza5TGaLNLqMbJGzoWKyeIe9qjQmrxXJIIwT4jlKIHUZd\nhTmSAa/RBSrBb40Jq8n3vYi0mA0aoDVs8AzJX2ak0PTsGxx6x29IfusNsx6Bm/bTj+QcOozku+5j\n3bjTQZlrKXp3zjsKGcLFlZdHwp4KWAKDJu47feGuRhjiVQza1X8gTSMPRS8YwcbjT6Nu2HDA//Pw\n5rnMEzgs77E/x7zxCQUvPUnq00/g2LUTisxVIHxXb9YHD2HPc3/nx7x8wFyKc/mO8jZhA1j/uoWz\nYx/M2vG5wwskbLCpaFfrD2X1AjusxGDXqQx2YIfRDRI2xB87rMIQqyFNdyCjGeKXSskAw+dg32iO\n2EoM8n0vIimmgwZvLQdh+ZkYDz1N/oWX0Ov6X+PYsR1GA5vAsXUzva+4mMOOHU/VY0+xsUdr56Sz\nkCHYDqbvyAtfP199E/mzLoU3zGkRr50L570B/RLgzka4uBlwQPXv5/LjMafQsP8BLfddvqMcOgkY\nfHkHDp+V7eWzib+i8OKZpP6wmp5ffEp2/R5UZSXK5cJwJtLcty+1V1zDzw1t19YszMtEKysl4YA0\nmp2JbQIHCG450EgIJmDwvb+EDfYSyyEDyHDGWCBhg7CaTF8QHZGpE/FLJaahDZ/irtGQYIYMw6fE\n5OgMITpjWdCglHIA/wO2G4ZxulXb7Yx3R77NQdhh4zjs4OFm0HACMAqzpsGLkPTpJ/S++Hx4ZWmk\nmtlGm6KIh47jjD88ydCbr4Kl8Aug1vvGTqh4fjE/HH484H+ZmfYOgH0PSr07ZPvcp2ceTJra5qLC\nPHcHqrUgPYNyeqAqK+l92YUkffQhYwBXn/04/+wLeH3ylejJKR1OqYhWJ72jgMFfR7WjA3rPtiRw\niN5+7xHrIYOH3YcztnwWdCC0JbDszy5TKewg2vt9vJDpCyLWyL5vDS33MBxZQzHqKlApGajEtGg3\nSYiwsHJEwyzM9Up6WrjNgPiOGihab660kFBaYl6QDiQAxwOHA7eDc9VKDn73JZYffmrYRjO01z7P\nY7WEDWMnMOml9xn8/uukvvg0ZAKl0HDcJGpuuo0NQ0Z1WH/BV3vPw3O5b+esvW211JGgtaORsH0b\nGVPOxLnme3ACLnDs3kW/p+Zz9XuL+XHOAsg/xLL6DVbwFzL4vga+ZywDmQ4ioxuAKO738RIyeERr\nOGMgIYI/FWWlFG/fQm6/gWRkZXebMCKaoxvs8plKFPf7eBNr0xf8LccpuhXZ9y2iEtNiJmDwt/y2\nEIGwJGhQSvUHTgPuB260YpvB8nTgl+8o54itW8wL3aORSqrMgov550CvZyBt3r3w6ikRaVenYUP+\nUJh+K8fO+j2Oulr09J58VuYe2+BTqLIjgRyEdnQbfyGEp65DYV4mvWdMN0OGPOBmeGk9PPk0LHDB\nIVu3cND0s2l+6X3IH7pPe6PRKfd9zb2f3wmDejBp2zqSN2/EuWInE086lSU55tQUT9vDVX8iHkRz\nv+9KyNBQXWHpahRWBwyRFGyo4OvDd15j7uzr0DQnut7E7HkLmXT65KAePxbDh+4cNtjp+74j0iG2\nXkfLcQpr2XHaRCzs+67ayphcicLOOlp+W4jOWDWi4VHgFsyxA34ppWYAMwBI7m3Rw7by15FvGj2G\npKUfwDJ4sb+5dGOiAxp1qNJAK9mNs878MI/EgVt7YYO3opbfqrq8fSueg7/pFt4jG4ykJPOKc6Ek\nGS57Fup0swzGAuAaA4bcMYulT7wZcltC1V7IMC4/k5OqiymYeTHOdWtbru//l4c54Le3svrSGwD8\njnCAtq9RNx/V0KX93pEe+YP9bV++z8pFc1CahqHrjLrkTvofeXLQ24u1kMGqYMFbRVkpc2dfR0N9\nHQ3uNXLm3jaTsUePJ8O9fHBXeLcxlkKHbhw2dGm/7zdgYISa1Uo6xNYLZDlOYR2b1mjocN8P93F+\nZ2rWLaNs6QJI0KBZJ2viLNKGjY94O+JJIMtvC9GRhFA3oJQ6HdhtGMbXHd3OMIynDMMYYxjGmHAP\nFVq1ZjdF68vZcMX1ADR/ZIYMdY1QWQd1TbBDN2/bo8ycXtHRGdJQCwh6a69TumrN7n1+OrrO+za+\nt7eSZ7tF68tZvqOc3SPGmFd8ApuLzeAGQMeMt7cpSN7wA2d8+WFY2hOojkKGE+vLOHTysWbI0Adz\nSs3x5u3S/vgAo8+fyPGqtt1Ope/fipV/H7EimP3ekWLN2YVARzM0VFewctEcXE0N6HV7cTU1sHLR\nfTRUVwT1uLESMhTmZbb8hEPx9i1omrPNZZqmUbx9S8jbDnfbrRbNv4loTB0KZr/PCiJ8CoV3h7i6\nqor6ujpunDmDUs9UShEUz3Kc3jzLcYr4F8i+H8njfF+u2krKli7A0BsxGmsx9EbKlszHVVsZ0XbE\nG8/y2948y28LEQgrRjQcA5yplPoFkAz0VEq9YBjGryzYdpf4jhj4cL8hjFCQUAOpyVDnddtvE2Bg\nM5yw/mv2nHRepzUFrDxz7dlOZx3UrkyD6OigM9QQwnuKR+8jJ3BZ6jz4DkbqkKeD52N8IpBngKHg\n67ToneHo6HUt7NOTgum/MgtcjgGugZJGc0rN0NHQ+wVwfr+K0Wcdgva3Isjfd4lBf0t6dsORDVHZ\n77vSuaot3YHSNGhqrWaqHBq1pTu6PIXC7iFDJDvmuf0Govssx6nrOrn9rD1zHe6RDlbNObXDihQR\nZJvv+/Z4OsSes+7Q2iGWM+/Bs8NynFaIpSk1NhvVYOt9X6/aZY5koLH1wgQNvWqXTKEIgR2W37aK\n0VgjxTejIOQRDYZh3GYYRn/DMAYBFwD/tssHDwkJuLLNjskQve1Vbynz37xPl7Y5oI3UyAYwAwfv\nn2B11vmy4syXZ9TE27U9eX7+25AOiWthdRN8peCjBHgb8w9q26zb2TbqyJAf0yreoxkKFi8i8cvP\noTcwA15cAfvPgonzIO8xeO0M4CCgAkaeNY5Z5x/LjJlTuPL6C5jxm/O48In7mNDP2dLxjHZBwmiJ\nxn7f1dc6NTsPQ2+74xsundTsvC5tx84hQzTO/mdkZTN73kKSklPokZZOUnIKs+ctDGraRKCsHumw\nYunbzJk6jid/ezFzpo5jxdJ3QtpetP5GIv35Y+vve7d46RDbjWc5zuSUFNLTe5KckhJzy3Eufu0l\nxh4yhKlnn8LYQ4aw+LWXo92kmGH3fV/ruR80+xzoN+vm5SJonuW3nUnJJPdIw5mUHJPLb+vF39BQ\nNJfG/z1FQ9Fc9OJvot2kbsPKVSdsZdWa3YzLz6T82JPIWfwiS1NhRB1UaNDkgtmDgXXQnNPaCfUu\nANjRyAYIT2HDjrbZlZDD96C3KytAdDbaYtWa3VCQS+OT/+bMV58i562XGNsMGGBoUHvldbx61nSK\n1pdHfA5xIK9R4rKPzF+mQomrdUqN59zXxc/D+D9CzutAETh2FpO2s7jl/mnffcPVKz7n+wX/B/nZ\nbc5kdsNRDbaWlJ7BqEvuZOWi+1AODcNl1mjoymgGu4YM0Z5aMOn0yYw9enybVScixfPcgx3lEK45\np9Ea2RDt4pB24+kQ3zhzBk7NSZPeFHMdYruK5eU4pcZEfHOk9iJr4izKlsxvU6NBRjOEzu7Lb3fG\naKxBX/0qNDcBZgitr34VR9ZQGdkQAZYGDYZhLAOWWbnNUBStL0e7ajZXb95A2or/sQnYORZ6pkPq\nh4AD1l3ZWjjXN2yA9qcdhDNw8CeQ6RaeTtGEPdtJ3F3MD7sr2D10OOPy8wIKG7yfi/fvfgtYFvSh\n8vr7mfirK8lLUdR++BG7LriEogaH34PtcLxOgQQL3qMZCvMyca7+zrxiqDldItHRdkqN0wGb9kDO\nDOAyYA9UbIOdFZDbA3q/Dtr6Hxh19pEY730L7te8G0+hiMh+H+yZ2/5HnkxOwRFBrTphx5Ah2gGD\nt4ys7IgGDL6CDRw8c049IQO0zjn1PoAKZmpFd5pGYbfve2+x3CG2u1hbjtOjK1Nq7DC9wkZTJvZh\n130/bdh4UgaMklUnwiBay29bwairAOXAEzIAoBLMaRReQYNMrQiPuB3R4KGnpLLq8X9w6NUX4Pxp\nBX2Xt15XffOdNOw/uM3tfQ8U21ttwCPSHUt/K1e0MAzOf/Ex+j35KGDOAMAJi+99GgpP7DBs6Og5\n+As5WopEepZSHn42fFfZ5rpw6MrIDn+d0+bsHBzbt8F3MOhoaHS1vb7JBYM8xxUavLjea7USFyy6\nBKYUAT9A/svP8PG064N/MiIgoQ4PT0rPiPmaDHYKGOymq4FDIHNOQ1nOKxphg4xq2FesdohFeAQ6\npcYOK5bYOWSwSt+Cg8OyXUdqLwkYgEOHy5QRD5WSAYbPwb7RbF7uphd/Y456UA4wXGjDp6DlHhbh\nlsankGs02I13h9mz+sSc7yr5+pWlrPvjS1TfeS97Z1zL2ufeYPXlN7J8R/k+B6jj8jP3+QHzYM5f\npyfSqw74CwXG5Wdyzr9fN0MGBzQWQPUAoAnOuf1KTv3p23Y7T4EGJb6387fyRVdDjEDlDi8IOmTw\nft41N882f3kTctLg2SshJRF6ppj/Pnsl5Lizk5Iqn9VKGuGSRVB+nnl9j78t5Jis1JCfm7AXO4UM\nXa1LUFFWyppVK6goKw1jq+wp0Nepszmn3lMr6vdW09RQzysP3UrNnrKA2xKNv6HuWi9GmGfgV674\nn6ys0YFAakzIiiUiWoINXly1lTTsXC+ra3RAJaahDZ8CCU5wJEGCE234lJZRC22mVrjqobkJffWr\nGI01UW55fIj7EQ0eD3yykXHDxsKwsa0XdnAGrDAvk+SfNjDs2T+h/bCOc884n10XXMJnZbUtt/Hu\nVNthZEP/N/4OwJfj4ITPIDEB7k+Aa5uh76K/wD1P+N1OVx8X/I9u6Oj24ebvINv7YN/TCfnhiJMY\nO2B/HFs3wzaYVggTRpjTKAbltIYM0P7Uit3bIRPABai4y+psJdKdJ7uEDMGMYPjwndeYO/s6NM2J\nrjcxe95CJp0+OQyts69ARzd0NOc00KkVnelO0yhE9NjhDHys6GxKjaxYImJJzbpllC1d0KYmRdqw\n8dFuli1puYfhyBrqd2pEoFMrRHDiPmjwLM0IdHrQ5+lkFOZlMvyFP5N+7x1gmNcN+vYbBjz3GL1+\n/wc46IguFViMhP+t3IJz9SqMBPjFp1DXZHaQ7wWuAXp/+iGJe6ste7yOakZYHS74ewx/HdDxB/ai\nR9kuajOyaXYmtlzeptOmFI1jjyBl62bYCAw0wwXvgMFjUM6+Uyv66DDkX+bv1bfczWelkniGS3c9\nQxtMyFBRVsrc2dfRUF9Hgzsam3vbTMYePT6qdRSiJZDAob05p1Yu5xXpsMFO30ki/KTAYdd1NKXG\nLiuW2GxZS2FDrtpKypYuwNAb8SzpWbZkPikDRsnUkXaoxDS/wUEgUytE8OLydGxHQ/wDouukz3WH\nDOOh6lKo3Q8c27dx0K+n8Yv1/7PFmU/P81y1ZjfNCQoSQDXDRNV6m91ABaB0SK6q9Hv/UNtg1TKd\ngfIu8HjCoB48+tMHvPrYDG44OZ8ZU47j+l8czLW3X8aVy15mXIqfDWhO8996P9d5yenZOrViRBLc\n4IDVCrQS0IcMZc20q619YgHyTCPx/RGh8d2na/aUsWXtqi4NmQ9FKMs3Fm/fgub5u3bTNI3i7Vus\naFrMCub1tHo5r0h/V3TXgM4qsTQNwXMG3pvnDLzounhYwlMEx2isoblya8wMl9erdpkjGbwlaObl\noks6m1ohQhP3Ixq8dRQ2jCzoQ9H6csblZ5K85WdzBE0mvDjCnKef5J6G8GsXHPTr81mx4HXQBkau\n8Z2oT+7B5pvuZf8Hf88TjVAMFAEjgSxAz8qmqm8/qK6IbkND5B0ynLHiYw549H60zT+33iANqIGk\nTz8h6dNPGHP/bKpvuou9t9yOqq4m7cE5pLzyD/fGzH9KqvxPnQCY5oIpvcxwAQAX1J/8C1bf/Sc+\nK9sb8WU8PYHCyII+YBiM/OpDDlz7JY8MOR3iaMWLaE+ZCKUYYDBCLfaY228gus9ZeF3Xye1nn8+o\naGlvdENHq0rYfTmvhuqKoFZSER2LtWkIdjkDH2s6WlUimiuWdDaKoaKsNCpLCse7WCwEqPXcD5r1\nthc26+blwq+OVpXoaGpFtMX6ahhxGzR0uDqDH95TLNK//hKAhn6txQDrgGuBwxUc2QSDvvoPFF4Y\nhpZ3jed5rlqzm9fPnMa1K5aTseR9PgFec8Bx7tFAFeMmglIdbitWjMvP5Oyitxl85w3mBf2h8jTY\nmAkDBkIOwDrMxZe+hfS595D28AMo1dA6imE8kAcvLm+7qsSzV5p1G3ABfwc+MHeS5l692XPEMZSd\nejbvjD4BGlXElvH08A4Z5vQqJ+u235C7cQMARyz/J78cfxUcdkbchA2R4m8kg6cYoGee/isP3Ur+\nmMKwdDitWFEiIyub2fMWMve2mWiahq7rzJ63MO4PRrty4F2Yl9kSNgQSJFm5nJeVUyi2ffk+KxfN\nQWkahq4z6pI76X/kyW1uI1Moui4WpyF4zsDfOHMGTs1Jk97ULc7Ah7L8ZCBhUiRXLAl0ioTU4AmP\nNoUA3XP09dWv4sgaautOnSO1F1kTZ1G2ZH6bGg3xPG0ilA53IGFSe1MroikWQzBfcRs0hKLfJ+8B\nUDwIEn9sLQaYB4wywFCwduKZYLMpdEU/7sF544NMP3wsaQ/dx3nukKHh+JN45fJbIn723QreYZEn\nCDrw0yUM/r07ZLgAXsqAy571ExYcAbwGLAbV0GDefjBwGXBA21UlPO/x5U/DhOGQ8wKwHHDAT3c9\nwlvHno7hcABta31E4/Wcm7idg6edjXJBCVAOHGwY/HPZX5iad3DMj2yI5GgGf8ParSoG2Bmrl6yc\ndPpkxh49vtuc8QrmwLswL5MP12yIaJDkYUXY0FBdwcpFc3A1NUCT+Zm2ctF95BQcISMbQhSrhQCj\neQY+GkIZdWKnMKkrNRikBk/4xHIhwLRh40kZMAq9ahdaz/3iOmQIpcMdq2FSrLbblwQNbt6dG819\nlrj3UGj8wLxsCPA6kARUTjyVd/amt7l/NDt23qMaoA9Np06n56gJnPbuP3Cl92TWiHNxFeudbicW\njMvP5NRnFpn1M86FkvFw2Sw/YUEB5HwHfOqzgeOBA8xf21tVouYDyFkOJMP3f3uPD3Pz9+kghGsZ\nz/Z4j2YY9PGTKHeIdBnQAHwI9AOO2fApr+03JGzt6A6sLAbYHqtDBo+MrOxuceAZyoF3f706IkGS\nP6GGDbWlO1Ca1hIyACiHRm3pjn2CBhnV0DWxPA0hkmfgoynUoMAuYVJXCz16avA0eB2teGrwdIfP\n+3CK9UKAjtRecR0wQOgd7lgNk2K13b66XdDQ0dnScflmMbaGEyeh/biB3s/AexNg3ftwaTMkAhV9\n83j56rugLDpns9vTNmwASOWfx13Rcr1vW2P5jLe2Yb35y4ltwwINuBg4zQW9bgXci2w0Z2Wj9tag\n6uvhOSAZKPS/qsQBOgwyB7SwYc6T+4QM7b3n4X49vd/fF067hGk//0T6J//mHVo/gt5NSOCtQ34R\n1naEW7RHM0BrMcBXHroVh6bh0vWQigH6ClfI0J2EcuCd228ghqtt8Gp1kBQuqdl5GHrbthsundTs\nvCi1KH5012kIsSTUoCDSYZJVK0dIDZ7w8RQCNM+WJ4DRLIUAbSbUDneshkmx2m5f3SpoaK8T49vh\nqJv2K3r8/c9QBePfNafzGwoqJl/ASxfdyAe7VZsOp1067fuGDbHNt8bGuPxMju2dREJ5GTiB3jDI\nPV2iD/Ay5oAFXEA16PsfQM3vbmfdCWcxaL90ejz8AOn33w2PA0WQM9mcZnH50+ZIholN8H+JoPZC\n3dRpvDN2gi1CBu/HyR1ewLt7kmm49VFGpP6ew997k57ACwkJLJx+F029+tjm79HOOlsJIFzFACVk\nsEYoB97e9SyUw2F5kNSZUEY1JKVnMOqSO1m56D6UQ8NwmTUa2ps2IaMausYO0xC8O6eDcnpE/PHt\nLNSgINgwyfOeeN6PSC892V1r8ESKnQsBitA73LEaJsVqu311m6DBe7WCjizfUQ79D8L4eBU95j+M\nY8tm0DTW/+Y2lmQP2qfOgd06dYEUwbRbmwPhef8cNe5hCimAgpxUKDoK8orMGhrFwDeTL6Tf5ddS\nd+Awlu/cA7urQNPgksMrWl0AACAASURBVOso6NmLnvfcAN8D38O0oXDOodBQAb1+BHRoPKqQ7257\nEKpaD2iiHTJ480yR+ejc20ks/BX7/fA1G0eNp2S7KybfWw+7LctnZTFAkJDBSqEeePvWs1jbENmV\nnkMJG/ofeTI5BUfIqhNhEs1pCL4d2EA7tN0lkAgmKPANCQIJk9p73SMdMHjrbjV4Is2OhQCFyYoO\nd6yGSbHabm9xGzT4KyI4Lj+T01Z/zoF/vBtVuxcjtQeNhcey+sZ7cKWb6xou31Fuhg15A+DuR1su\nK1pfDuX2Dhk8PO3yDRzs2l5/fN+/cfmZHJuRTMGcO80L04AyYCGMMUtqUDFiJGsfeIJ16X1ZBxQV\n/dSyDc/SpcuPOpPjPjmL3Ocep/9zf4QN5kyKZIAkqLr7YdaccwnLd1W2dATsFDLs+5gpkHMsxHjI\nEEmdhY3hICGD9UI98PauZ1HIvstf2llSekbAAYOMaogN0ezExpLOggLfYMGfjsIkO78P3aUGjxC+\nrOhwx2qYFKvt9ojboMHXuKEZTHnjWQbMn9vmcu2nHznsi8/4/s9/p37w0JbLvQ86/XU4Y6FTFwtt\n9MffiIyT9u5m+IxL0X5YZ/7VDgBmAzVABlTe+RiLRp7Esp9roNh/h8HzPhYB486/hqRf/JIJW9fi\n2FuNamyk8tgTWGakgk1DhvYePzfGV5mAyI1mkJChY1afGQ33QXssH3hbueSlnTXqzQF1/kTwNpXs\n7VavrW9Q4O9zJpDRId6vmZ0DBiFE7He4u6tuETSMy8/klE3fmSGDAs4HjgEqgKdB+3EDBz1yNysf\n+3ub+0V7GcPuyN9IlHv71jNy6nFmqJAHTAceAnRomHgK3923kKKGhE7DAe9tem7bUHBU65VGYO+5\n3Tr1dmuPaGX3kCHcnRPf7dv5YL4wLzPioxoiFTbYZVSD7/vfnTrHHbFiv2hvG/H6GofzNRNCCGGN\nbhE0AAz6+J/mL6ebSyJuKjFXHciZDtwHCXsqWm7b2VKG0rELD38hwxTXNkZOO8cMGQ4FZmEWYtCh\n6aCD+ebP/2B5cUVAIYPv9SML+rR7kB8rIUM8iNRohtF9DLasXWVpcceO2DVkiGbHw+5nEKMRNnRn\nVvwNdPb3XFpaEtXijp0J934QD8Ul7fhZIezPVVuJXrULred+cb8EpBB2FfdBg6cTk/TuOwB8kATn\nzDKXRGx0wTunwkkACY7WWgxe7HAWqDvwV5PhzP8uYchtV0MT7BkKTZdDThLwnXm75v1yuxQy+OrK\n7SVgiG3bvnyfd5+/H4fmxKU3MfWWBxg94YywPZ7dQgY7djA6Cx0qykqjUvgs0mFDdxvVYLWOOqEf\nvvMac2dfh6Y50fUmZs9byKTTJ3e6zXDvL9HqONt1RIl3u6K134v4UrNuGWVLF0CCBs06WRNnkTZs\nfLSbJTpgNNbEdNFD4V/cBw2r1uxmXH4mzbl5OHbvYsGbUKfTsvr6Lf+Cr4GEkl373E9Ehm/IMP7A\nXsx47c/0WPgIAM8nwG+3Qs1N8PrZcOqr5m03T7446JChKyRkCJ9IjGZoqK5g1fP309RQT1NDPQCv\nPHQr+WMKI7akYbTYpSPRGd9l44LtIFpFRjbEvoqyUubOvo6G+joa3N/4c2+bydijx3fagQ0kCOho\n34qVM/DRqJ0RjmBIdMyOn2U716ylb8HBYdm2q7aSsqULMPRGoBGAsiXzSRkwyrYjG6x+Pb5dvSsq\nNamCpRd/415VwgGGC234FLTcw6LdLGGBuA8aPFz9B+D89hv6qraXF2uADtqmDSR4rcser2d/2tPZ\nkpgeVne6/Y1kuHT1xy0hw3UOWOgC6iER0F4FDCg9fTL/PPQ48Flu1GoSMsS+2tIdODRnS8gA4NA0\nyou3hyVosMNohlgJGHwNyulBaWlJ0B1EK0UybOguhSEjqXj7FjTN2fI3BKBpGsXbt1jydxQrYUKs\nCCUYEv7ZMWCIBL1qlzmSwR0yAJCgoVftsm3QAGbYYJW+BQe3rLZmJ/6+54zGGjNkaG4CzH6YvvpV\nHFlDZWRDHOg2QcPuYSMZ+K+3meSCv3pdvqcZ9L6g7YTJb/2N5nOvoGiDWa+hO4QNgQYMYG2n2/dx\nvc9sO7ZtBaBkNPzfWqAOsoEXgQkGuJLgvbOnU9RByBBoW9t7/hIwxI+Tjizgc68QEcCl62Tm9rP8\nsSRkCN22LZtJTHTSUB+eDmJ31h2+0zxy+w1E99nvdV0nt9/AKLXIfqLxWdHelKlwB0PCfqzsWHsz\nGmswfPZ9Q2+ifGclqjw8jymCZ9RVmCMZ8HrPVII5jUKChpiXEOoGlFIDlFIfK6XWKqVWK6VmWdEw\nKxWtL+fDIyYCMFnB8Rr0TIGURHj2StDOAhQMWPAAv37oBk7uY7SkgJEqVBeLcocXdCmo8Ny+s/sY\nyckAZK2FvjqcAvwATAB2Ac8+8DyvG339HjAXr17TpZDAc3vfH9G5UPf9SO1bab2zmHrLAziTkknu\nkYYzKZmptzxg+WiGaIcMg3J6xHzIANB/4P40NdmjgxjJ99RuZ57aEwvf+WAufTp73kKSklPokZZO\nUnIKs+ctlE6rmx0+K7w/syQYsl5hXqZln2Gxst+DuQyiNnwKJDjBkQQJTrThU6TTalMqJQMMV9sL\njWbzchHzrBjRoAO/NQxjhVIqHfhaKbXEMAxb9daqcvtTN+0iUl58nn8nws+nQvpJkNPbfYNU4C+Q\n/O47zPhuFasffwHy8+J6OGuooxnC1SH/eczxHNofErbB9w4zDUsAlqsEXr12Nj+nHdRuyCAiyvb7\nvqfzNnrCGeSPKaS8eHvEVp2IJDt0GqySnZ3DIwuf4saZM3BqTpr0Jh5Z+FTUOojxVq/BglENtt/v\nPSadPpmxR4+X4oIxwBMMzb1tJpqmoeu6BEMWsPCzK2b2ewAt9zAcWUOluGAM8ARDZo2GBDCaJRiK\nIyEHDYZhFGMuOIhhGNVKqbVAP8BWHz5F68tRV9zBr+p1cha/yOA3gHXAdUA6MAZ4AFgAjo2bGTnl\nOHi5CPLN4dXxNty0KyFDuB/P98z2Rz36oL+8loJH7iLl9VcwFHx9wWUsnTqDn0sdEjLYRKzs+x5p\nvbPCFjBEazRDPAUM3s4573yOO/7EfZYljPd58bFQqyHW9vuMrGzprPqxqWRv1D8/fPdnCYasY3U4\nGmv7PZgdWOmsxgYJhuKXpTUalFKDgMOAL63cbqhWrdnNyII+fPJTFcZ193LW2EIOfGCm+fE4B5gL\nODALAdwBPAF8BQUzL6boiTej2PLI8nT4QwlVQg0wPMVrPtET+eS6eeSeOIVmTePVhP5Q6v8+EjJE\nX1f3/UhMm4jUUHQJGcIjO/v/2Tvv8KbK9o9/0qymCzpSWjooIKtIFRChIKXlFUQEFVmKDJGl/AB9\nRVkuEATEifjiK7hwAqKICq8iClSFKjKsypJCW7qguxQ6kjS/P04TkjRt0zabfK6rVzPOSZ6T5D7n\nPN9z399bqRcYdMQofR0iNrhbVoO1cNZjvofGcdb9h0cYcn48ce/BFniEIfekxR4NOkQikR/wOfCo\nVqstM/P8TJFI9LtIJPpdW11urbetF9PJp27ynHymhB0DhnN4599ootpBFrDn6nL5lfD7baCKBklm\nOg9+vt7mY7U35owYDSd+zZ0EWitLIvl0kf5viyxGEBkQvkNTEcQjMjiehmLfMO41FaWOGaAFlJcU\nknkilfKSQkcPxSKcdZJgDxzlRWEvQckeApk1hD5L476kqB6F2AkoLizgeOoRigudd4y2wFn2H84y\nDnfEVvsrS+PeHuf5zUVbXU5N6XmceYwePLgLVsloEIlEUoQdz8darfYLc8totdoNwAYAr1ZRWmu8\nb1PRZTYkny6CzkFcnDyP25+fDx8CcvhUBtM2gkwMN6tgNyA9fIiEKQvdrnSiIRI6B+lPdhvq7GAN\nGjvhbWlXCQ+2pbHYN4x7eZtOdov7pkzWjuz5iq1rFiOWSNGoVYxbsJpet460aF1HZDN4Ts4FHJXd\n4KFpcd+tR0+HHO8bY/fX21i5ZB4SiRS1WsWSVesYOmK0o4flwYPT0pS4d9R5fmOoc4/WegGIQatB\n0n0skvCejh6WBw9uS4uFBpFIJALeAU5otdpXWj4k22I4cU2OSSB2wTLarXkW7dvwggQqVFAB5NUu\no6msdPqa2ZaiE2ASOgeRpLnE9fPG4JV/EU279ky4rhtfjHuIl2h8cp/793F9VoM5AaGpgoVHZHBu\nmhv7ztTJpbykkK1rFqOqqkRVVQnA1jWL6HxTf6c0jPSIDMbYW2zwlFC43jHfHMWFBaxcMo+qygp9\nO8WVi+fSJ36QJ23fg1tg7f2UO8S9trpcEBlqVOhaKar//gxxcCdPyr4HDzbCGhkNA4BJwJ8ikehY\n7WNLtFrtLiu8drOxNI1/54DhzOZZRFqIEcEftY/H1P6/IpfbYnhOSZLmEnGT70SclQmAOCebsIM/\nM/3vo/z0wIv8SstKI5oywbS1yFDf78MjYjQJp4z9plCUm41YItWLDABiiYSi3OxGhQZ7ZzN4RAbz\nuGNmg5ObQrp83OdmZyKRSPUiA4BEIiE3O9MjNHhweWwkhrp83GsrioVMBgzaqIq8BANCj9DgwYNN\nsEbXiZ8BkRXGYjd0E96EToFMXzIVAFUk7L9wdZnba/8X9hlo59HZHt1k2jD7YEi45KrIcB0UjYf8\n83DdTpAd+Z2N6vlsuHkUpzpcz4WQCFJP5OvXhbrCgOF9SwWGxjIerCECNCZA6Z73CA6N46yx35Sy\niaDwCDQmvds1ajVB4RHWHlaLsKfIUFCQX6fbg4eruEtWQ3PbXDpr3DeF8Iho1CZxr1arCY+IdtCI\nHI8j4t7dBEJHYK99kTvEvUgRCFqN8YPaGuHxa5TykkK3bfvtwTmwatcJZ6G+yaThhDehcxAitRrZ\n0Z8AkI6F9dUwbQM8oYVZamG5yjtGgYE/nDtNQA1LHXwLL+ozGb4cABNeFLwqwtXwux/4pR7hsdQj\nANQEBaO6sReFMZ2pOaqgRi6nKro9l7tez155EPvTBNO/ppzEOoPIYLqsO33XHszj1zqYcQtWs3XN\nIsQSCRq1mnELVjtVNoM9RYbt2zbz2NxZSKVSVCoVr6zbwKgx4+32/s3FHbMaPNiOwOAQlqxax8rF\nc5FIJKjVapasWuf22Qz17UscFfe68Xhi14M9EMn8kHQfW+vR4AXaGiTdx16z2Qwt8afy4MFS3FJo\nMIe5q+rx0aFcevQZ/Fc9B6/CfRNgdCeQ1c4vy5av5vvgdlDo+levGiL1+EWIDWVC/4HIDvzEbx9B\nhUbwqigFugAn7wa/DCANvIoKkf/4PW35vs5r9YiMYtTkh9nZfxgQatQpwpG1+c3piOERG6yPM/kz\n6Oh160g639TfKVV9e2cyPDZ3FpUVFVRWCCnlj82dycDEwS6R2WBPscEeWQ1OXj7h8gwdMZo+8YPI\nzc4kPCLarUWGhvYjzhD3HsGh+ZiK3u6QbWVLJOE9EQd3EsolFIHXrMjgav5UHlwXtxMazE0oTSc3\nhqnVV/7vUfw3PCdkLXwCMgA5FL+9lfeie9u864KjMcxq2HfLcIYe+Ik+JstcksCJXtBnLKAFCoB0\nBMdMFVAF5ADnQJx1npiVS/g/7yUoX/gEYjvpPz+d6WRzxmht6huH6XftERtci+a2BvRrHWzxwdUR\nnSbsQVZmBlKpVD/ZAJBKpGRlZriE0ACezAYPTSMwOMRtBQZLRUpninvDMXviuHnojk8ewaF+RDK/\na1Zg0NESfyoPHpqCWwkNTRUZAM5ViOCPIry/+AzJib9BqyVt+Fj2tIqoczXJ3SecPkWC70K6SVMi\nlQZidOcbIkBZ+2dKDXAY+A44AeOWTKDsnX2k1j7d3M+vpZN909+F3qPD5LeQfLrIrOeEo8QGj2Hl\ntY29zR8jo9uhUhnXravUKiKj29l1HK6CO3g1NNenwYPz0dz9hbPGvbnt8YgPltOYIO7q+y4PLcNV\n/Kk8uD5uIzQ0JjIYTipNd8DnKkRw+zi9A+SBnCK9yHAtnYR1Khe2eeAtoEgBqVgQGd6ZAcqAhtfN\nL4P0fIjpAsrewAvAXzDk8D5WGuRImE6Sm1PS0BJ0bTzFVVWM/eBVQvd/x4VbR3Bx7GRoIFXZnmKD\nJYaVHrHBvXFEh4mQECWvrNvAY3NnIpVIUamFWm3dVU3ZT/tRvLcBr5IS8PJCK5FQ4edHoY8v8rgb\nkd07Ea2f468SuVNWg6d8wkNjtHRf0Vjcm8NRhrGejAfr4a6ZeR4so7n+VB7zSA9NxS2EhvquWEPD\nAoMp16LCa/jZiTSCG+9NnSDjvlrhQNm4yLAlRcTsD+TEREeQnpnN+kmVjG8P/AWiGk2D6xqWbjS0\nTHMxfG2dyDD4Sj7d509DevxvACLOvErEf1+l0+OLYOQMfWaDvcsoGvod69CNyRW7YygUUkcPocW4\n+8nZqDHjGdy5C6L33yby6GF8jk4CxSThyV+AL4yX9wZ0ft1fnJxH/5eqARCn/YMmOgakjvnO3Uls\n8ODBHNYUI0eNGc/AxMEWiQc7vtjK4sfnEdMuhvSMdFa99Dp33TPOamOxFI+vgwcPLaOp/lTHfvyG\nHWuXEhXdjvOZGdz5yFJ6Dh5hp9F6cFXcQmgwxDQtvn/bIORZmVy372ukv6UgunIFkUpF5Z2juDJt\nFukl1XVew1w2gytN6JqKbgLu/13tZyEVxIXGBAYQMhlmfyBnb/KvxMXFkZqaSlJCX0YMrMQXCP3n\nL+JG3knq8Yv1TtQtERuag6nIAJCkucSN4/rBJSAMym6H6iMQ8gf4vbSawUPuIbmBDk62EhvMjXVw\nOx8GF5/H59RxRCoVi0P7elKdG6C5/gzOhiOyGQCkB37G941XCfvf14IXC4AP0L/2dmdgNuALpVdg\nzntSVs1fRKRGQ0FaGjM+28HJ3jKU/sAjoFFEcfn/HqVi8oNofR2zTfVRXFhgFRNAdyif8OBa2Gr/\nEBKibDQ7oaAgn8WPz2Pf3r36431iUhIDEpIc5uPS1BILa8W+h4aRensTFtvN0cO4ZrmhexsSOgc1\nfnGkbRDEdmr09YoLC1j++jJ+2r9PH/uDEpOYcPtwl4gjzZVS1GUXkAS0QezTytHDcTjpu+33Xi4v\nNJiboOmCyzf1CJ2XzkK+d0+d9WQHfsLn7TeRvbiW09fH2228zoTp5F5y5h/hRhvLXyM9H2KiI4iL\niwMgLi6OdlFtOdPlLDfsBu+vtrNy9BSWxEY0KjYYjqm+EouWTPL/FSnn+v+7VxAZroet/eGB94U2\nnuu8YFINdN70Bq16309pQP07Z2uLDeZ+w8uDL9FjfB8ovrrch91ieX/ZW2AgNnjKKDy0FPE/p/B/\nehHe3+6sfQC4GegHXG+woIE3y+k0ON4xmsjnngMgBGjXoyPp+WdRagCZYAwbsHg+ASvnU7riTSom\nTQUvL3ttVr1ZDbu/3sbKJfOQSKSo1SqWrFrH0BGj7TYuDx6agz0FSK/zmUiPHUF8Lg1xTg6iy+WI\nLpcjzjrPl2q10fH+aW9v5CueRdH7ZjTR7VDHdqdG6djuQtZs4+nJmGgeCoWUG7rXfzLp6AsDzlaS\nZu3Po3/bINqLrhAysDteJcVml6kcPpLSdz4CwCszA2XfOLPLaUUiDi9dSfuYGCH2n3uOuFdfJePS\nJRS39kIsFuuX1UREUnjgiP5+yI1d8SoWPmutjw/dFj8DNwyx1mbqaejzO7LnK7a+aVkbT2v/Lhzx\nO7dkG9JtPww9Iq1W2/hSVsarVZRW3u+RFr9OfSLD4Cv5xD7zCLJDvwpPyoDetX/+QBlCCnAuIIaC\nH1I4E9HFyJsB3DujQffZ6bIZBgT70rdXGFQDbwEWllrnl0HXRd51MhpOrq5E+QOwDfCBv97fzVOl\ngfrPtKmfp6ko0tD69ZUgrKk8Tue5UyAUChZB9CKoqE3iSAD261ZQwBdL3+GDIOOdrmkmgbV+E6a/\n439Fypk9fTji7CxQQmUH0KaBogAqbxvOvWOWGY3Hmr/Nyt1PHNZqtTdZ7QUNaB0Tq0186gNbvDRg\n+x26PcomHJHNEHavDL5FqIO4HRgCNCL4Nxj3AQjGsEeBr4AzwjrVAxIoXf82mnYxNtsWU0wnCcWF\nBYxKjKOq8qrDvtxbwfZ9qc2+KmOrjAbDWtgjF+vPsrIGO2b0sVnc39Czt/a7fSkWLWuNSZ1pDNli\notjUOG3JGByyT5gog2/MP3cFOPPHH/q4b3XjjbQzOY9U3diLqiHDqJj4gF3jvSEKCvLp0+M6o+4a\n3goFh/48Y3E2hj1EB3tmXMR3CrRZ3Ed17aH994YdDS7jqFLEayELrX/bIPr9FijE8af1LNQHeLT2\ndr7BbTOUzIWOH9Qe8zdvhlWrzC8YAqw1uD8LKDe4L4Vfj+byS+EVi7ajpZSXFLJiXIJRdw2p3Jun\ntiY7lceEvb0v5g/qaLPYN8XlMxoMSegcxNC8f7j+wWFwGfAFEoE7qTtxvhl4F9gPrR+ciNfnPxo9\n7c7p6YYig45Opw8LIkM4FokMevNHJayfVElSQl/aRbUl43wO6yfVTjZGAhnAIbh+0lBWvvM1394d\nqxdzbF2CYIpKdzKhgHPlQiaD7pQjGXhUCsvbgn8G3LNoGsrpj5N61/18n6sGqNORwtrZBLrXv+fL\ndwWRIQa2DIOp70JbL/gTUHy3i4gBU8kOj7Ha+3q4dgnbKYN7AQUWCwyNxj2AF4Kw2wtIAT4A2S/J\nKId2Ju/vKyCxz6HHNKshNzsTiURKFVcnGxKJhNzszGaf1NuifOLInq/YuubqFZi4SU8R2fc2q76H\nM2Jad2+vSbat36c5HRTste2yn/bjs34t3lHfwKDaB/sC54EwhImDAspqIK8KTpXAAwZx/12Clnat\nEdpeXwTSQXrsCNJjR/A7s5K89+qWpzoCa7TxtLWI5cm28mB1hiEc281hmGAYjDAnMiH/EmRehOjw\nq8f8zhFhXAiQ89K4Ku652WQFU038FYPbMwEVeFXbb5/gCm08TY/3DWVcuCIuKzSYM/lL0lzi+qnD\nBMm9F/B/CFfpzCEBHgDOgeTsGbrt+JCfk+695ly+dWUm8k/+JzyQi5CuH1j/OkbmjxnZzL+tkp+f\nrKS88qyxeaQEmIuQIfELxE4fSfWO3/QeCC2ZqBt+/5Z6PPwQGEV3MZAJ3VKhjRpKDZ7fIIInF4D/\nD8AXMHDjSwx89yXu75vI92On87FfF8C4JZy1W28mdAok/PH3ASjvJYgMFdWQBnyAIA7fkvwFT/aY\nqN92D+6BvSYWotJS/Jc9iU/8BsGDQQqMaXw9i+Pe6M2AeIQSjP8CQyDsOx/y7nDM5CM8Ihq1SUsv\ntVpNeES0Q8ZjjvKSQrauWYyqqlJ/cnRs03KUsTcj929gx+xG2DIWHOWBYoo5M0N7jk168Bf8nl+K\n/OfaXL5OXBUaOgALri6ri/12URGcy8jm6ZGVDOxaT9xXAyeAA8DgWjETKM1fjzgnm8sPz0UbaP8r\n2bZo42lN4aG4sICVS+ZRVVmhF0JXLp5Ln/hBLlED78FJkWDZTM8LkBs/ZBr3a8ZVcnJ1Jen56RYZ\nxQPCBV8d3kBlfQvaBmdv42nueL91zSI639TfaYSQlmK/glkbI66u4vr5066KDI9Sv8igQwbcXXvz\nxz1GaVzmHP/dAdOSCd02n7nrfjRRtQfcpxBmtmYwNH88nHqGvT/9yvM7fei3TMb3f5pZQQw8hHCF\npBK6P/oA8qoKMwu2fJsaQ63wIfPRp0ELftvglArOAsNkoJDVtvFsDYyG0oegLAa0NdD6wD7GPjaR\n10/sIKFT3RN9axpZJv9TTM6kmQD4fAl3GTxXWwjEgJJ0t/19Nhd3KJuwB6KyMgLHjMDn3Q3wtuXr\n1Rf3/ZfLOZYhZDnklzXwAv7A48CNwt2wnTJE9dSN2pLA4BCWrFqH3FuBr58/cm8FS1atMzqRLy4s\n4HjqEYoLC+w+Prh6BcYQkVjClYIch4zH1YlR+hr9ORv2Hpvk7z9pPf5ugm9PEkQGH2A08G/zyxvG\n/pE/z7D/5195aruCn07WE/cy4AbgYUC329RCq9Wz8VvzPG26heG34llEJSU22kLz6Np4eisU+PsH\n4K1QGLXxLCjI59iR3ykoyG/2e5j+1pryveqyrQzRZVt58NBUpBfz4AlgRfPWNxf3j3yi4MOfWjCo\njkAn0Bp4OtgaXRtPqdwbb18/pHJvozae5SWFZJ5Ipbyk0G5jMsTc8V6XceEuuLzQoJtwTT24A+nR\nw4JZ2UMIE1yEYDmUJvw3vK2ndo4oP7AXNPW3YrRFVwR7Y65kAoSDY0Wnrhz9bA/V8bdACfAf869h\nzvyxQ4cOaL3kvHe0I10XerPloMlKXsAMIBykJ47zyOEvTF/Wbmy78wHOvPgmlbcNpyagFe2BnRrI\nux/uq3XX//QAhL8L0RcgSgJ/9Qa0EP3KCoaf/I2EzkFWm+gbZiTosiS2jplJzrQ5eNXAhmrhvA3g\nEELpe/TvB1keIhS9ucPv0hYYHjwcfSBxGmpqaP3g/YJ3TQhwn+Wrmov7Ll26MHHKDB75RMGsrR3p\nushM7BtimFJ5BNrEtkFy7Ei9i1sL0xP9oSNGs31fKq9v+pLt+1KNUpN3f72NUYlxzJsyilGJcez+\n5nObj88Uc1dgtBo1PiFt7T4WV8NwsmiNiaO7IdvzHSEDeuP93S7hQswohHrqe6i3bCo9H9pFGcd+\n+/btWfK53LK41zENIbOpEvxeWkWb60Px2fgmmGQZ2JJRY8Zz6M8zbN3xLYf+PKM3gty+bTN9elzH\nuLuH0afHdWzftsWq72uJ6OAK2VbOiqk47Gix2BkQadSQA1xo3vpWi3tDlgBLocbHvoJvr1tH8tTW\nZGa9/CFPbU3WlyUc2fMVK8Yl8Nb8yawYl8CRPV/bdVzg/BkX1sBlSycMSegUiM+L7wt3JqNP1fn0\nAEzbKNTiX6kGJZX9TgAAIABJREFUkQgUUqjWCFev7+uPcKVNAVSA+HK52dd3N1KPXzSaKKfnX641\nwizh4+7XIzv4M8SYXzdGCekZ2aSmpurNoNLS0ti1axeJiYns27ePu0bcRlx0Nd0M40SB8N28AH33\nbGfOh3NI/ufqFc3GSgCs0QIz+XQRCZ2D+OrmoXDzUERqNUlvrODG7R8S8B5wDC5dD/M2Q4VK8G8o\nBW7+E/JvB9//QevkPdCtb4vG0RB6b5BJjzLvh134p5+ljwT+lEKaBk53g65/wHWb3iDujkVu7SXS\nXAzr3aorKxCJREjl3k5d+2aPq5k+b7yKfM93ggfLk+g7SFiCubjPyMjg3LlzpKSkEB4ezvfff89D\nDz3I4O5VjadU/gFcgdaT76Uw+Te0rVs3f8OaQWBwSJ10ZGdJXdZdgdm6ZhFiiQSNWk3cpKeumbKJ\n5mLYUaCiogIRIrwV3hZ3F3BXvPJyqQkLF0oYqhHividCNqcFXd78vOFsunHsnzt3jm+//Zbu3btb\nFvcihIs6scApYCtwEgKeeATFu29R8ul2NDHtrbG5jWLaxrOgIJ/H5s6isqJC79/w2NyZDEwcbJOW\nnQ3t65esWsfKxXORSCSo1eo62VYe6mLqazFizES+2faRx+eihVgl7p0Iv9bBRqUIzlKyYO54b5hx\n4Q64pNBgOuEMOXsayelTwkHzBuGx/DJBZKioBsNE/WrB149pG+HW62trjLwRhIbyMowLitwLw8m6\nboKafLqIoW1EhOTnsfb07/i+91/hpOCeuuvnl8HGvVCl0hAfH094eDgFBQWEhYWRmJjIli1bmD17\nNmFt29F/+Xn+O6WS8YadQ7sD/iA+n8G8mXcwasJ0Fnbsx+9pZRZ5HTRXbDAUVkz9N/YPn8dw7zBm\nbn0RjoL/UdgjErxCdVXkUjHk+QpZX0GnzNWHWJfU4xdJ6BxEcVxvlOln+d8YOBkrTPaUauBRUOz4\nHGW/KYDY0+LSAHMHD0CvGLtb7ZuliE+dIGDZYuHOLKAJCTnm4r6oqIjHH3+crVu3cuLECZKSkoiJ\niaFaI2bjj7Dk7kZe9H4gDSTn0vFfuoSy19Y3c8usR0uMIq1tCNnr1pF0vqm/kQv1teQd1FTMTRYB\nVCphL27LiaOzIs5Ix2/pEhTfbYPXEE5tZMBLWHTmp4v7F/8np1Urf/r160enTp3IzMwkNDSUCxcu\nMHr06KbFPUAXhPLMw8DHIC05jvKPLuTFOMa3xRomkdYgRunLzKmTuWfk7WRlZhAZ3Y6QEKWnvWYD\nmBOHP/9oI4DH56KZ2CzuAXQX7h3Q7dAUZzKJNHe8dydcvnQCBH8GQKgHrC2ZSM8XMhnqQyoWlgH0\n2oKk1Lhm0DQ93p3S1Ofc3ZUVrYrZsulxZt95E5OnjaDdi0tBg3ClI9J4+S0pIrou9Oa9Ix2Refsx\nYcIEsrOzqaysJCcnhxdffJHZs2ezd+9eTp0+zf6ff2X2h97GZSpihPRJf5CcPkX7pU/w8Ya5DIwU\nvihbfr6pxy/We/V/1+BxTF39P84+9wrq4BBu0BqXtYWoIWa3cDu/zy1WH5s5kSD5dBFHu/YCwP8k\n9OlYK4oFATcBWpiU/ovHq8EEc/Vuhrhb7Zul+D+zWIjtRAQPGwupL+4rKipYu3Ytx48f56GHHmLv\n3r0cPnyYgwcP8vJ33g37NYAw4XkY8AKfTW8jOfF3czfNIizJGHG21GW/1sFEd4tzu5MOW6CbLNaH\nbuJ4LeCVfxG/ZxejvKkziu3bQA2cM1jAApHBMO5FEh/WvLyO22+/nZMnTyKVSsnJyWle3OsQIRzH\nXkDwbpEIvi1hH8gIHDEExYfvIyotbfg1rIQtTCJbQkiIkht73aQXOZrr+XAtYM7XwhSPz4Xl2Dzu\nHwIeAHH5JRtuhWU4W8mCOx/v3UJoqPLzF26UAbVCWYxSKJGoD5VGWAYQyieAdudP079tkM2N5RxF\nePdY4mJDmXNnZx7a9ALXjxsqmEHJEISFOARDKBMHer0pzE+/8s8/Z/jiiy/48MMPmT17NnK5nKio\nKJ555hnhPcLDyc/Pp6qqCqWyzVUxR0cfYB0wB2gD0tRjbPz4KeK6KfVjtCU6wcFUeChuHcKXg+7i\n5JufUCOC+cAZEbzvBalyEJdB9YAEsuYttun4DMf5cZtewgnZX4ChvUCtl0T8r3v0v1V3EsFagrmD\nhyHuVvtmESoV3updQsnEOMtXayjuZTIZAQEBiMVivLy8jOM+1EzcmyMCGIxgzrri2eZtmxWxxCjS\ng3NibrJoiCMnjvZC8ucftJo2kdBukfitfVm4ejgAeBHBG8FCTON+3759zJo1i507dyKVSmnVqhVS\nqRSpVEpVVRUnTpxoWtwbIkNooaljD8h/3k+ruTNpc52SVjMfQPrrQZteAW3MJNIZ8YgPAubEYVM8\nPheWYde4dwIaM4n0YD3cQmgoC4sQxIJChDYCCFd/35khdBMIUAgZDDKJcFvfYUBXV9RT+Nfq8el4\np50GrrrYu2NWw9jt7wqu8xKEtgZvAC9A/sNwKLCui/TRdFCGBBMeHs7GjRsZOXIkwcHBrF+/nief\nfJIVK1Ygl8tRKBS0b9+eDh06MGPGDDKzL/LTSeE1jIw4pQgt754FAkB25HfGqzL0n3V491j9n60x\nFBuSTxexu01HMhevRCSCjlqYUgO+5aDqFkvqy2/zS/4lkk8XWd0bwVxWQ2lAEJUjRwlXpN4FtMLn\nd9gXtGKQHjvM4IoCo8/tWsf04OElliCWSFt0ILF1xwmbnyRKpfAggumbmZpssya52CDuzTEKEIP3\nrq/wys6y2iY3l4aMIh1N1aViis/9TdUl+3frcHZMJ4sSqRSpVOYyE8cWo9US8kAfFJ9vFTKXegHP\nAbMRjF/NUF9spudDRNswqqqqyM/PZ8+ePVy5coXQ0FCkUikrVqxg/vz5lJWVMXHiRHr37s3YsWOb\nFvf1cSeCcXQsoALF1k8Ivm0QIf1uwPe1F5v4YpZTn0mkM2Cpqem1KDyYE4dHT5zhEYsboCVx/+yz\nz3Lp0iXGjx9Pr1696sR9Q6/vjNRnEukMuJOJuUt6NJhSI5Vx+YHH8F33CnyPUEyPYPZ46/W1jum1\n5xi620bmJbcDZ4DfoMf0MYhfe4/vlVeNieJiQ13edE83CR1NLlHrVglXyv+Nvt2crl9uTHQE6ZnZ\nrJ8k+CtsSRExe5OcoFBvOnToQFVVFVKpFB8fH8rLy3nmmWcEsz2pFD8/P0pLS1GpVPznP//B39+f\nW/r3BVEVz38tJyoqgvPns1k/uda7oRWQAHwDg/d/zZYhc/XjNRR4bO0/oPtu42JDhTro28bzr/4J\nyLMykedlU9GhM9+Hd0JTJTYrMthqfKnHL7JpyhPM2rMdjsGPn8GI/wklQS9rYZoWuq5dDvdcvRp8\nLfo1mGYgmda7AW5b+2YJuj725tr9OiTuDWmNkEJdIKR810RE1h2knTFnFOlojuz5iu9XL0IkkaBV\nq7lxytNE9r3N0cNyKkaNGc/AxMH6+nbAqNbdXdHH9xTgZ+AO6hUXdNQX9wDHMkWcSb/Agw8+SFqa\n0Oe6ffv2nD9/nuHDhzNlyhQAoqOjycvLY8KECWzZsoVPPvmEyRPvo+ByFf/dKye6obivDwVCeVci\ncBH4EdgPklMn8f/uSfw7PUneHbbxcjA1iXQGDA1Om2pqaig2uLPPw9ARo+kTP4jc7EzCI6IJDA5h\n2pwFRvevRTQ+fjAMoX1tLc2N+1GjRjF9+nRUKhUSiQRvb28kEgkXLlzg008/ZfLE+7g+qpKMQhGL\ntjZyzHcyTE0inQFDQ3NnNjG3FLcQGgBO3z2Jnv95RTjQJiEYDiEICoaigll3VC8Eg7RiEP9znh73\n3Yr85ffhhoFmDbhceTIXdupPobwkHr3IYNgvV+cum5TQl7joSn0qVVxcHF9++SUTJkzg4MGD+uX6\n9etHSEgIBQUFlJSUoNFoiIyMZMiQIcyYMYPWQUqe+qKAlJQU/ToJt/RlcPdK4bu4AfgGFGdP68do\nLovEHp+3UXYDchB3gohOUAWkXwYu211wuhzShvzb7kW5fTNffAMVGsHc9CmELHj//33DlIS72BR7\no8uLYdbE9ODhbAcSeyH5K1Xoi9oNoXTCAIfGvSEPA1JQ39gE84hrCJ3BqUZVBSrBj+jYpuUoY2/2\ndKIwwXSy6GwTR2vidfEC3p9thnYIFw46or/I0hD1xf3g7oIp2hNbvElJSUEqlRIfH09ycrJR3IeG\nhlJQUEBZWRkqlYp9+/ZRU1PDxIkT8fHx57XdIsvivjFCgXsRSjlPoN9/he2UQSYU3vQTqj626wDl\naKzZDUMnOrir4GAqDjujWGxvNK1aw6Sr91sa9zU1NURGRpKVlUV6ejodOnTg7NmzTJgwgYCAVtz7\nXzGV1TXWif1rGGfphmFN3KJ0AqAqOobLM+cKk+g1wLEmvoA3wuwtCVBB53kPMHb7uyR0Ek7k3MV0\nT6FLwzHYB6fnQ0z01X654eHhhAQHsecviI4UHt+yZQtTpkwhMjLSqK9uZGQkpaWlPP7445SVlZGS\nksKZM2dISUlh48aNXLhwoc46IaERHE2vffPakwdpQb7Rlen6Sldy/z5ulwyH+v5MsfVYkk8XkSET\nThKUoquP5wGramXCkRtWO4WLrwfnQ/HJh4Lj/Ld1nzON+7i4ONqGt2HzQYiKsHHcG1Lr5aW/MuvB\nCHMGpyKxhCsFOQ4akQdnoPWkcQQ8+QTsatp69cX9rmOw43cICW3LiRMn6NevH23atLEo7g8ePIhM\nJqOoqIi2bdtaFveWIgF6ALok00rgdQi+YyDi9HP1r+fimDM4bamp6bVUVuHBmJbEfUREBDKZjIUL\nF+Lj40NKSgp//fUXKSkpyGQyiouLuVKptvyY76FezB3vXd3E3CpCg0gkGiYSiU6JRKIzIpFokTVe\n0xJMJ6F/PvIMFePvFw5ELwGbgIImvKAEoSvCBEAEUa89L4gN9Ux6XRGVojaPysD0NUYJ6ZlCv9wt\nW7bQpUsXarwULP7cm1Nnc9i3bx+zZ89mx44dFBYWkpqaCkBqaiqFhYXs2LGDtWvX1tnJtG3blrVr\n19ZZJzc39+qb116QU6Sn8ehdN3Fq79OsqfgLtFoj4cHUf6A5E3ydSNHQX1Nfzx4UdBDSc0aamJte\nqNUWRGq1XcZhDkfFvgfLkJys/Y12qPucYdwDrFmzhrSMi2z+M4bT52wc96aogDwQXbKdG7WrnmCb\nMzjVatT4hLR10Ig8ce9oROXlyH49KIh0TWyEVF/cr9nfkbkfe5Odnc3DDz/Mjh07KCgosDjuw8LC\n8PLyoqioyPK4bw4SBBPJapD+esC6r+1EOFs3DPDEvSshqqqCkwhl4dQf9y9aEPdFRUV89dVXPP74\n40RERNQ53otEIr799tumHfM9mMXZumFYgxaXTohEIjHwH2AIkAUcEolEX2m1WvvXFkgklP73XdTt\nO+C/ejnsBn4AZmL2YJxfVo9/wx1AMPAGRK1dyZ0RUdB3qFEZhauVT+T+fZzw7rHkdRV2EKRdfU4Z\nAOsnVTLolpup1ojrpEgPGzaMqKgoEhMTWb9+PYMGDSIkJISioiLWr19PYmIiYWFhnD9/ntTUVP26\nOTk5XLlyhfXr15OUlERwcDAXL15EpFXRM6b2zf0QarSPgFdJMV7Hiuk8byoPjx7Hm/NWWW3bbbGs\ntdF9R6acTrqDYesW0Ksc7pPATikEquF1OVAO5+YsBJGo7gvaGKeK/SZQXlJo5Nlget+dEGfUXvEz\no5Hq4j4poS9tw9uQlnFRn/a4Zs0a28a9Ka8Bx0AWtpeqO+600afhmugMTjevXohILEGrETwaHFU2\n4apxX1CQb+TZYHrflfDSXd0KxKzBa0M0FPepqan07t2boKCgJsd9eno6YrGYSZMmkZSURLt27Th1\n6hQ1mur64745SIDrgAzwKnMBx7lmojM4fWzuTKQSKSq1yqGmpq4a98WFBUZ+DcWFBWSe+Mstj/eG\nSIvyYTlCS/R11on7tm3bkpaWVifuRSIRFy5cqHPM98LkmP8goIYauTdcKnfI5+Ls6I73W9csQiyR\noFGrXb4bhjU8Gm4Gzmi12rMAIpFoM0IvA7vsfBI6B+ld4XVXrC4vepqqEXfRatZUpH//CenUERo+\nPQDTNgrGeleqhXmaQiq0xHxnhmAkSSnwAUR//gH0HWqPzbE5+0ql3Adwxfjx8fEQ6FvFE193NFIr\nO3bsyIkTJ8jOFpTQ8ePHI5fLGT9+PGvXrmXw4MGkpqaSkZFBYGCg/gQjIyMDpVLJ0qVLSUtL4/PP\nP2fYsGEAPDZMdbVmS2dKWQNcBn4DPgTF51sZ9O+lUJvV0Fz/AVcSg+pDLffm0r+fw3/5M3yiBtSg\n9QJROahu6MnXfW6FNPv0HDfBobHfHExNdvoMH8uhXZ+5jemOKV4lJcINf/PPj4+Hwd0r2Xwwg9fV\nV2N/6tSpvPjii3Xi/t5772Xz5s1ERESwb9++5se9Kf4m4/VgRK9bR1IYGMuVghx8Qto62pvB5eLe\n1FTvvolT+fSj95plsucMSI7/JdxoZpJlfXEfHh5OaGgoOTk5TY77Nm3a8PzzzzNnzhx++eUXjh49\nyrRp05iVpLZ+jbZC+Ce65L5CA9Q1OHWwIOZycb/7622sXDIPiUSKWq1ixJiJfLPtI0RiiVse7w3R\neomFGzVXH9PF/a5jGbz2s3Hch4WFNRr3586do3Xr1mbj/uGHH+bUqVP6Y75UrOXtB02O+QNqxybz\nlEk2hKmhuSuLDGAdoSECOG9wPwuo49AjEolmIuQWgHfrZr+Z7opvXGwoCZ2DuLX4PNdtegGvvFxq\nAoPQtO/AlVlzUHeNvap232T8GvllgshQUS0Y6+mors1An7ZR6FahTAA+BtlvBxno61Vn0utKWQ26\nz+1WRa0ZkJmOfT1jIPN8tl6tXLNmDWlpaURGRlJZWcmgQYNQKpXk5eUhl8t5+eWXmT9/PtXV1Wg0\nGkpLS9m1axe+vr5cvnyZ0aNHExwcTM+ePSkuLsbLywsvVPx7mMkbb0Lw1ngA+BeCed2fEPD7QeiZ\nWO821ZcBYPi8O5B8ugj+NYFxxeVEJq+BVBDVQHX8AN5Z+Ar7HSMygAWxbxj3iiDDhun2x5zJzoHt\nHwK4jelOvTSQ8KIMgC7hkJOTS2pqKidOnODhhx/Gx8cHsVisj/vCwkIGDx7MhAkTiIyM5Pz581RV\nVTU/7j00Cbl/oKMFBh1NivuIKMf2sDdnqvfexvUALTbZcxTyH/cIN1rQ0bi+uPf19SUgIICkpCQi\nIyM5c+aMUdxnZWXVG/dDhgwhKCiI2267jYKCArQ1Kp68yzrbbERtBx3RFfc0NzTEibphNCnuA9s4\nrrQLhEyGlUvmUVVZQVXtmf7nH200WsZtj/dAjXetGmfSpEUZAMNvhEc/yW5W3JeVldUb971799bH\n/W/La+jmutn+DscZu2E0F2sIDeZOYes402m12g3ABgCvVlHNcq4zFBlG+F9m8qJHkR38pc5yik8/\npHrQYMTnM0AJdDZ+Pj1fyGSoqLOmgFQsLKPsCIQDWSDPPg+tXTNq9J9bNyV3fvKK8KCZMj9lAKwZ\nV0m/fv2IiYkhPT2dlJQUwsPD6dKlC++99x6TJk1CIpGwf/9+vRixdOlS2rdvT0ZGBsOHD6dTp05k\nZWWxcOFCli5dikajISgoiCuXitkw1eTqxhWEEhcQ2nIpgeuBPyHmndcZsGWkvmTFnLBTn9jgqiKD\n6fakHr8otN38pxjGzkJ6x0QUpcVcDlKikcv1n41O/LLzdjca+4Zx3zom1qGOlTqTHZ2oYA6d6Y67\n7OC1itqTjUqggauKPWPACxUDBw5ErVZz8OBBo7ifMmUKmzZtYtq0aaSkpOhPTiIiIvRt75oU96bU\nfiVab7mVttyDDWlS3N/Qs7dD415nqqcTFcyhM9lzkgldo4jTaguvLegy0RANxf0XX3xBdXU1Y8aM\n4eDBg0ZlVUuXLiUgIIDhw4fTtm1bioqKePPNN8nNzSUnJ0cQKUUa3pupsY3jvK6EWXfV1kOTiFH6\nNqcDRZPiPqprD4fGfW52JhKJVC8ymMPdjveGaHVGomYsvHTn+n379sXLy8v6cT/LjMhQA3wPZde/\nZutN9+BkWMMMMguIMrgfCdjUDnt4YDUPPDldEBl8gNuBRxCMHKNBknYGn3c3CAsPpc7uMUYplEjU\nh0pz1bdBF6Q1ctc8ATYUZz7+fRPyfT8Ivgj3CJkdh9KE/zpmDIYVoyo4c+aM3vRFqVTy5ptvcv/9\n9yOTyQgODiYuLo78/HxeeOEFUlJSOH36NIcOHUKr1XLixAnCwsJ44YUXWLp0KX5+QmuJjQ9W1e2p\na9g99GTt/1sBJUj//IPu775KQucgtzDitBRTsUAnIiSfLuKHrCq+ueTD3ozLdUQGB2D32G8J5kx2\nTHF10x1TNLqryYXGj5vGvjIAXrlPRWVlpd413jDuFQoF9957L8HBwYSHhzN79mz27dvHmTNn9HF/\n/Phxy+PelFrTXk10jNW23YPNcKm4N2eqZ4qjTfaaSk1IiJCV2MTTkqbE/R133MHs2bNRqVRmj/l5\neXns2rWLrKws1Go1L7zwAomJiQBIpVLemVbdeNw3l9pDnrpDC5WWa5hmmOO6VNyHR0SjvsaO90YY\n+HaZO9e/+yZAqyI8PLxO3D/++ONUVFRYN+61wAfgv3i+LbfagxNiDaHhENBJJBK1F4lEMoTOx19Z\n4XWN0E2Yn40TMXPmACRpZ1BFwpFHIP9OhOqxwcAykxU/Bp4ETl19SBkg+DAoZBCgEDIYZBLhtkIm\nPKcMAP5C6CMoBlWI605042JDWanIw3fDf4QclodhywkRXRd589BnHem6yJstB68uP7ArhClb6euz\nAbp164ZEIsHf31/vKp2enk5UVFSd9ldKpZL333+fr776CoVCga+vL2WlhSSZS/M0/AXqjgnewAxA\nBH4vreLufV/qO1A0VCrhztTXXtOBIgPYKfZNqbpUTPG5v6m6VNyk9XQmO1K5N96+fkjl3gwYNcno\nvqub7phS8t4n8C7Q7epjW1LMx/6N7aBtm9b6Ok24Gve+vr788MMPXLx4ke+//56YmJg6cd+6dWve\nf/99fv75Z2JiYpDJZJSWFJiPe0PU6E9X1e3NtMfw4Gw4JO4LCvI5duR3Cgrym7SezlTPW6HA3z8A\nb4WCqTNmG913pMlecyh9/1NYB3SyfJ2G4r5juzZcvHixTtxrtVqOHDlS7zE/MTGRqKgotm3bxurV\nq1mzZg0+Pj6UFOU3Hvct4WHgFagaNsKGb+LBBIfEfXFhAcdTj1Bc2JQWchAYHMKSVeuQeyvw9fNH\n7q1g9MQZyL0Vbnu8N4e6BrNxn54PnTpEkZ+fbxT3MpmM4cOHEx4e7nxx78ElaXHphFarVYtEojnA\nd4AYeFer1f7d4pEZoJtcLu9Szf2zR0EF5IdDzwtQ/pqBgWMvjHZ7VyY+gPzbnYgz8uE5BCOSe4Aw\nwezx1uvr6ToRAJQAbwmPX1q0lJ8u1xh1nXBmdJ+X/sq4Vkunl54Vbt8N+R1g9iI5e5N/1TvHJiX0\nZXD3SpQBwmdw6dIl1Ooa4uPj6dChA2lpaYSEhHDx4kVGjRql77V74cIFIwfa7OxspFIpr732Gtu3\nbycyMpKCggI06hp+/Ju6SmdbhES7PIxb8HVH8Gx4Dzosnc9tn3QjOTbU7MS6Ma8GV6S+bdJtvzNk\neNgj9k3J+vVbjm1agUgiQasW3PfpfJ/F65sz2Rn6wFy3Md0xpSYs3OiqZ34ZzP7AfOzHKKGkpBSt\n1qtO3Ofm5vLLL7+g0WiYNm0aXl5edeJeLBazd+9ennvuObRaLeHh4ZSWlrLiSzVrJzcwyHNAFai7\ndEVrw8leM1KFPZjBEXFvaubYVPNGc6Z6jy180llM9mxOY3F/4WI+Y8febzbuVSoVkyZNavCY//PP\nP/PKK6/o4/7KlSus+LKi4bhvCWLIe7C68eU8WA1HxL2pmeOSVesYOmK0xesPHTGaPvGDjLpOTJuz\ngO+OuX/XCR3VauqN++ycvDpx36ZNG15//XW8vLy46667nCvuPbgkIq3W/mVUXq2itPJ+j1i0rGHq\n/yfJ6/H58D2qekDYSSipvQIuAqaJ4b9+IK71xSt550NOJozAq+IKsR/+B79XVwpXzrwQOlDcDMQA\nrTEurSgF9gDfA5eguncfjny0iwMXy0g+XVRnoutsXgCmk9O42FAUFeV8+kiSkLq0Ag7VwEOfdeRw\n6hn9cr16dOStcWfpU5uJuOUgPPi2mBqkvPPOO/Ts2ZOjR4/ywAMPIJFI2LVrFwcOHGDZsmWIxWIi\nIiLIzs5GIpGgVgv1Joatc/r164fUS8Nnc4RWVxbXbX4KfAMEwfr3f2f3BeH3as6TwHDbne17aS5N\nFVBaut2Vu584rNVqb2p8yabTOiZWm/jUB81ev+pSMd8vHIlGVaV/TCyV88y2n2x6wqDramMrmpHC\n2iTCdsoEDwQvOHS+4djfchCmvSNBo5WYjXudZ0tSUhJnz57Vxz2ASCSipqYGhULBvn37jGL//ekV\nJMXWE/c1QBYUdd9NdUKizT4HWwsNB3JsK0TbUujeMaOPzeL+hp69td/tS2n2+gUF+fTpcZ2Rx4K3\nQsGhP8+4vUDQGGEvywTP/3saXu5QWuNx/9AmOZUqkdm4F4lE7Ny5k7Vr17Jz506kUinh4eHk5ORQ\nU1ODSCRqetw3FS3ChaTWwCDIu8MjNLSU8NYym8V9VNce2n9v2NHgMg0dW4sLCxiVGEdV5dW4l3sr\n2L4vlcDgkBaNzdb7amegf1hrfN8IZum3UXx+OlP/uLm4r1KJeNsg7qdNm0ZwcDBFRUXs2rXLOnGv\nASaDVizm15MF18R34MzMH9TRZrFvijVKJ+zGpVq/hLxo0NbmYvRByOfaqBFEBlXP3px861NOJozg\nQE4RPxejaahnAAAgAElEQVRX8tfMJzj67RGuTHxAWCkZeAmYg3DVfBYwG6HH62zgCwSRYUACf77x\nkcuIDKbornpXKPy4MG6K8OAnEBME6Zm1ZRE1NfyVkkLG+ZyrvhQImQfbH9EQGtyKuXPnMnLkSObM\nmcPSpUvp1KkTiYmJLFmyhKysLJRKJb169UIikZCWlsbixYuJjIw0Sq0OCwvDS+rD7C1hdUo1GmQs\nQnpoEdw3+x5m/baZKUV/MO+ODsTFhhLePbZuBocD0I2jvj97jsNduVKQg0hinIQlEkv44VfnjkNH\nU3ZuDfwf8IuQraSPfRBa0xrE/vh4OPeKmrt6VjJjxow6ca+r5fzrr78IDw+nc+fOeHl5kZGRwcaN\nGwkODqZ9+/ZGbbOCg4N57LPg+uPeC4jGrMjQ3HR5D+6DzszREJ1547WMV/5FeAH4HDjQ8LKWxP3p\nNVXce7MQ92PHjmX69OmsWLGCL7/8kvbt25OYmMj27dv5448/CAgIICsri8OHD/Puu+82L+4boE5N\n+UWEDNOtwDtwMe5M/St7MEt6/uU6f86MzszREIlEQm52Zj1reDDCy4uwWNh3Mb/RuH/gFiHuJ0yY\nwPTp01m2bBnbt2+nY8eOTYp73bn+vM2t6bxA3uS4Ly8pJPNEKuUlhY0v7MFlcCmhoarWtKXdTnis\nWijTSwZ6A9nA9n8vY90rm9nV9WZW7ztD8ukikk8XsXrfGfZKW/HfGU9zdPcRcqbPpeqWQdS0ai1k\nOZQjZDJUAWKovH0Ef3/0DW88/y77qyUuUzJhiGlq/fnHngZf4Dgol8HebpV8c3NvsrzldIqP56v4\nyjpXHXrGQHl5Kc8//zwSiYRTp04xY8YMsrKy9Duu3NxcCgoK+Prrr9m4cSNKpZIxY8YYLbNmzRry\n8vIICQmhuKyahUuWMftDbyNjmnqRwI54wTMyMCuT2ze+zKiF05n91DQGRyucooTAksl9c0WH+sST\nuNhQo79rAZ+QtmjVxhbKWo0anxDbttFydeW9JiREyGjYCUofWD+pkqSEvvTq0ZGkhL6sn2Qc+8oA\nWDcZqFHh5eVlNu5TU1PJy8tj7969vPPOOyiVSoYMGUJRURHnzp0jNTWVLVu20KVLF+RyOVeqaszH\n/UVAa/7q5PZtm+nT4zrG3T2MPj2uY/u2Lbb8mDw4KebMHF3NvNEW1ChDKVv2snBnPfAZQnaQGZQB\nlsX9mvvAS6Rh/PjxdOzYkQULFtCzZ09yc3P1sa9SqSgtLWXdunV069ateXHfAJ8egHaPwJBV0HMe\npC8DHgN+AqRQsvEjahzcMtWVcAVRwRzmzBzVajXhEZ7v3lIsjftlo0Em1nDPPfdw3XXXsWDBAmJi\nYoz8mhqLe7h6rh8eEYNI4sP0d6UWx/2RPV+xYlwCb82fzIpxCRzZ87W1Pw4PDsIa7S3txteDRzPt\nzN94/7idZ8qvPv62l5j3Jj+JMnY4nCmpk3kQFxuqFwuSgYRJjwpPaLWIq6sZ0EqGSK3iQJkKlcJH\n79ZqKDC4WjaDjoTOQfRvG4Qa+Oud/9F1wcNIMtOJy4c4g743A/YAPRFaS9ai20k9tOBRqjVicnNz\niYuLY+HChfTr14/OnTuTlpZGVVUVMpmMbt0ExzmVSoVKpaJfv36EhYWRl5dnVEaRlJRE2/A2pOdn\nNJpSmV8G922GMGAcQrXLXUB4ygEmrXqMffc9Bxi3vrTnd2OuVEWHqKYGrZdXnd9OUzIwLBUm4gz8\nK8y1AXUH5P6B3DjlaY5tWo5ILEGrETwa5P6Bjh5ai0jPv2zT8onKe8ahXrMSydkz8COMHwqDu1eS\nnn/2qieNCcoAeO1+FY98kmVx3Ofm5qLRaLh8+TL9+vVDJBJx8ODB+uO+AngWUIKofyHaoKvlLwUF\n+Tw2dxaVFRX6lPnH5s5kYOLgaz5d/lpDZ+b42NyZSCVSVGqVy5k32oorD81BdLkc/+efhS8RTK9H\nIZi/mlxGGh9vWdy/PbWK6S88T41WrK/J1sV+u3btyMjIQKPR0LdvX6AZcd8A+WUwbSNUVMMQ4E2g\n7WnQiqFy7ETKH1uApnPXFn9u1wKuKC4YojNzXLl4rr4kd8mqdS0um7hWEFVVwXoYL4HBqxuP+/9O\nqeKhF5+nWtP0uI+Pjyc0NJQLFy4YnevHx8dzNF3F0LjaN5IAUlmd9y8vKWTrmsWoqir17ce3rllE\n55v6XxM+Gu6O0wsNOlM8YRIVStX8lxg+fCyBe7+j1e8H+LbnAD6Pv4/cLDW59TjwN+bMvxfDHXKV\n0XP1mQ+6GjFKX9J792Pd+7tpd+gnEr/7DK1Uxr4h99A/9SDhH7wllJPMAgwMG4WTkyo2/giJA/sS\nFdmW9MwcRFo1RYWFSCQS3nzzTfLz84mPjyc8PJwLedk8fZearm3V7Dtxjp+8O9ZxqE9PO2lUqlEf\n6fkgEwt+cS/UPvY/GeyohsB9u4lOmMIxWuuXd9R3oxMY7hFfZNjOTwj8+wjSf05QfMsQPn/4Kb65\n5AMY/56aKwgYihm6bhzJp4uuCbEhsu9tKGNv5kpBDj4hbV1eZLALMhmXlq0kcNI4IfX4RlCGNl43\nPWMwQAWDbhHiPuN843G/akw1t98I63bD/qxG4v4ToAyqu/ZDG2hcq6tLlzesy9ely3smmNce5swc\nPQAiEZcfX4zq5niCJg2FEwh/Y4G76y6uDGg87nXH/Fe/hUG39CUioi1nM3Lx9/cnJyeHFStWUFlZ\nSXx8PO3bt+fs2bM8ObKasX0tjPsG0B3vK4DxCF7RB8Viqj/YQpc77mzSR3Ot4uoCgyHmzBw9WIao\nRgO/ADJQzrQ87nXn+uHhbTmXaVncb/+9mn/y0vlZbBz74eHhQJrwBmJgE1y4oxRMfqNFudmIJVK9\nyAAglkgoys32CA1ugNMLDWAqNkCyuBPc2glunQPAKYPJm7nJlelV4ea2BHT1iVvAgf08vPltZL+l\n4FVYAP6wd8BEFgSN4MC9VbTZ/D68AfyG4FfhL6ynDIAld8OMwVdV0YJL0HfZRb765jsSExNJTU1l\n+fLlpKens/9JDQO6COsmxULXRdlGbrX//PMPaydUN24QVQZdj8ND1cKJB4APcF9tNl1VQhKZER3h\npGPquUx/V/eXn2Ls4olCmnotgfu/Z3rK9/xrwQtsv3UMYLnYYC6bQScy6ASGgb5e+P9+kISeN5Nc\nKTJ6fXcVG+T+gR6BoYlUjbiLyhF34f3NDvgP8DQW7f1nDIa7b2p63C8b3Ujc/wL8KIyh7OV1Rj2/\nwfrp8vY0giwvKbR6FxNXLN+zNiEhSo/AUA/VCYlcPHQen7fewPuLbUhuSrv6ZBYQhHDwtBBlAKwc\nB/8eJsR+tRpuf1ljFPcrVqzgn3/+4ckR1TxTa0bZaNzXRw3wK1ynELqIAawEDgLvSqX82te0XZXz\nUVCQ7zAhzJ3EBVMCg0M8AoOdMD3XtzTuu0UI2UidFhjHfsHFbHrGNP6+QeERaEzKZDRqNUG15fLO\njC2O9+6GSwgNUFdsMPd8Q+tCy4zyXH7CVlND7NS7jWs4L8EbL43j3498RDxj2LOsBx1WzReEht8Q\nTkxaAQOBJOOrIcoA2Di1mjtH3E5oWIQ+jer/br062dAtp6sRi67Nhlg7obL2amk9aIFU4C3wL4XV\nZp5Xx3TgncdfpOaC/bummKKb/I96czlUQmZHmJQBRWJ4RgVjq6D98oXcHtMBOvcC6ooNUH8HDVN0\n5TDyjHP0GDsWybk0EEFcn35Ej5/NR7Hdmi2meXAMti6fQCSidN1beB/YAWeAzcBEy1a1etwfBzYK\ny5WueQN1jxvqvKerpssf2fMVW9csRiyRolGrGLdgNb1uHenoYTmUanWNRRMhW3dfcXdqQttQ/vRy\nyp96Ti/chX0tg3VAGUKWwyCEK4sWYhj7pnGvVquZcouKZ0YbL9+k432twMCXQBYEXgcv/+cDHps3\ni0yJlLddJO5b2n61qbizsODB8TQ17nXrvDWlkqSBfYmMbEtWVg5vTanr/WYOv9bBjFuwmq1rFiGW\nSNCo1YxbsNrpJ+6e471lOH17S3NYo41hY6KDKwoLhttkeOW7f9sgYpS+BA/qi/SPo4LZwTDgVeBP\nQAGfPf8BC88Hs6SvH5NfXoDs0K/GLy4F2gNRCF0g4gGJoGLuPQ4XSuHW6wVl0xz5ZUJaZH01YtQA\nh4GjwF9AbZJCde8+/NmhB8EiNVculeEdrETSJoz8u+9l+ckrZttc2gvTz3vz50vx/nYnD4vhv5qr\ny63wgidroPrmfryx5iOS/ykGmp5ZY/idDinKpMeUJOEEMhC4hGBsKoHPV7/Ph626N+uzceb2lg2h\ny/CwFbZucQn2mWhJjh0lZEZfeAThd9NMmh33fwOvAJVw5cGZZrMZDLHWVUJ7ZDSUlxSyYlyCUfqn\nVO7NU1uTW3zCZOuMBlu2t+zWo6f2ve17m7WuaUzU9z16RArziAryCZw4FllKbVuKSISahJ4Yt/W2\nEKsd79UI6QpfATnCQ5rIaMqfWEzFpKkUFBW6TJmMvdqv2mIfFt8p0GnbW9oSVzd4toRbAr25OS4C\nZMB7LXstS+Net6zZ2NcAS0DVqgeHv0w2+x24UnaALY/39sCe7S1dJqPBEGtMKl1RSGiIxoST9PzL\n+Iy9TxAaTiM4Ks5HcFv6FcYunIx67Ta2XAql7KVP8FJVI62sIOzEHwze+SmB+3YL650GfgB2A3NA\n2QbG9TPzhmXAWeA84CMspxQhCAnVQC8gGOGE4yiwDSHFs5aaoGB+GT2VV28aw7GThXU7KzhYZNC9\nr5Ho1XcQ7b/dyZsayEO4SAPwhwSoBtlvKbTOSkdIE2k+/du0otukqcJnfD0UTIOMAoj9CRTJMHrZ\nA3z8UvP71nuoy4GcIoedFFkT9Y09yfutirBd8toHEESqJooOyoB64t7MckYnG38DlVAxbgJlL73e\noMgA1kmXt9fVP3vXmVZdKnZ7rxJLvztzy3nEB9CGKCn6317kOz7H/9knkWScg5cRzA+GAIkIExEL\naXbcG5KO4Acl6O1ootpRPn8hFRMmg0wYjCuVyWRlZiAWS7la4Nmwn4zutxqj9G3Wvqm4sMDjWeDB\nrlga97pl6439LJDk1n++7tc62CUm6WD/470riTCmuKTQ4KHpxCh9qWlb2wZQ50YtBeYACmAf3Ld4\nDOUbktlZe/VMZ8BJz0cI6TyZ231LGFyZxS1ff4L4bKbQcioSoSWEHOEKSQmCYFDSyIA2AV1ql63t\nIKKOjiFn3BT2d+nNFzVt+ONkAbmf/wTUX/7iTILRN/1uY2r8DqQHf2E7cAxh/tautnNfVeK/KA2P\ngrMW9vupB+UXnyLJTIdA2HILTF0oGGip1HDRD3wvQdsLmdTEtr9mSiiSTxfZPKvB1ti8fEKHSETe\nHdWE7ZQJJRQ/ATMQ+gQ34ypno9RwdZ8zBkqT1lMx+UHwcqnuyo1izzrTrF+/5dimFYgkErRqoftK\nZN/brP4+rkxjk7hrRogQiai6ewxVt4/EZ+Ob+P7nNcQ5ObADaKiE0VpUIvQf71h7PxS4DOouXbk8\ndz4V4+7TCwyuguFvS+ujrNOGsVqlQuujbPA32ByRYffX21i5ZB4SiRS1WsWSVesYOmJ04yt68ODB\nqtjzeO/qJRoeocENMTUMRKtF9v23BMyfJ9xXIrRxOFz7P7d2xVKY9O5qLi1ZxxtfngQMJvLdY/mQ\nQP7o1ZcNXYfy8q8fEZb8riAUGGQi6Kjx9UV9Qy8Kr4tFXH6J1rmZoK2htE0k/jXVeO/68v/ZO+/4\npqr+j79vku7SjewWZaigyN6jTFGGIMgUQVTAgQgqgooTFXGhIqKiIu6fPi58fFQ2IqAIIggyBNpS\naGlLF90Z9/fHbULSJulKk5vkvF+vvKA35557bpLvved87neAcgj0V7bjzNib+XbgGLYkKTffA0cy\n7IoIahIWwDZ3yIHDsGX6i9zedCWd//MxHcvbFEZGkjt5JvdeMwFjuchQGwHgwOEMFvaPo9UDcwHI\nHwu3vqeUAisGooB0vTKfu9Z0jne51CXnKPBN0q8tIvr9sQQV/KSEUV0FTAKX/WyKgI0oSR+fAKIg\nfVSZizqvHu7wZjC7gLorzrT0Qg77P1iKUV8KeqVK0v4PnqZhu+4+69lQH/idEBEURNE991E0+26C\nfvgOqbiYKN1M5b0LwGqgP0pYRV3X/QaUEMidwB8oDzVWKv+m31SG7qpDGK5oV6VHk5pw9HtxVxnG\nnPNZPPvwvZSWFFNa7j3x7OK5dOs1QHg2CCohazSKHbcBFjloFA48avX3syiesjYdlb+GAMPKtx0G\n3nVy8CVgKQb3HoonozmcWFuDJDEqxl33e18o/SmEBh+hohu/md6NIunw5HxCP/5A2RALNEKpX2+s\n1Bxjm8sVF/ExV1jEBnP/1sfp3WgcPR+cRpPM0zTKPEOgvgyNyciFsAhSmrViY4YOWdJcPKZVsvgO\n7S5h2B2PMvTkX+yKaEJWq8uVGOSkQo+HQ9QG689+/9Fs7omfQsDMIUzM+YP8+LYkt+upXPTLqa2X\nwT2j23LrU3dCHnAlHI2/WAosGtiKIjKURcA3IUJk8Ebc5tUAoNOR83/fEvrWG0Q8fb+yMHgUuALF\nrbozNV9wyCjhUjtQBIZyb+ILmc9QOPVBV41ctXQeMoq2XXu71MWxYn6GoqyzSDqdRWQAkLQ6irLO\nCqHBhbgrgaX1cdxi+wEBlN6gPAVPL88I2/juQMUFbz+KzV8JtAdao9y7g6vRbw6wDTha/rKqFF7W\nsRe5nddhKq8aY7iyvUtOpb6prlDpjjKMaWdS0OkCLCIDgE6nI+1MitcKDf6QK8FTyEHBZG34jbjX\neyihyfaoGOJwFktIUyXyrP5fhhIf7AjrtUWObduiO+5ysqN3UR/3+4r4QulPITT4KP3bxnDjT5/R\nYt1qtKmnldCGcUBvlNwMRigeP5HS60dhuPxKZJ0OdDpOhDcGlCQ929td4tCroEn7duxOKgJi6dD1\nSsBqAZ0JSI6rKJhDMn4O66BckI5l2yy+vUlkMFMxtEMfeQkfRV6vvHkkq1Z9Wuel6N8mmjnvPkPQ\nlo1K2dG7oaVWKQUWBHwIdACOShLPzPuQ/JhGfhM24S58JU+DDRoNRXfOpXjSVMJfep6wNa8onkZH\ngNdQJiI/oCw2mpb/bQ6TMucRNj+U/ALYjc2korRfIoULFlI2cIg7zsYGT2Vmr+8409C4psgGg802\n2WggNK5prfoT14naU/E3Vl2hwNFv0+2iQznnlqYTcvUnhHz6oZLH6S+Ul5kQFNsPK3+ZUJ58Xg7c\nWt6mFOUaUI6+3VWUjB1PyU2TMLa8zA1n4Rpqe92o7zKMTZrFVwrRMBgMNGkWX2/HrAsZOSW8/vU/\nTttc076Rm0Zjy1+HznnkuFXhys9j+7FsFiW2Jfn+owRMt3+Nl7U6ittcYfk7+JOjaCr8xpR2WvQx\ncRhilZwjmqsKCRyaVqmdmdLmCcgBAQAEvHoWbXERAKbgELbKIWzf+q9qv4PaEQBHMgDX30uNRUWU\nlpbabCstLeOrfUVojzi3L7UghAYfZfTvP9Py2UeUPxoCs1GeUuwCSqGsRy/y3lkHkuT0xnrtTYn8\n9MXWStutF9bVEQmqIx54o8BQEXvnUJuyqhVFhknrXiH0w/eVp03lFQMaAmtnQMw7MERWCnUsHj8P\nU/zlfrl48IU8DeBmr4Zy5OgYLix9noKHHiX4848J/H03IbGfKInb/q9CYx2KyGAEVqD8EEEJwUoH\nU2wcJaPHUnzzDPRdurntHDyBJ57IBTWIpuP0Jez/4GkkrQ7ZqORoEN4MnseV4pZ10sD6Ro6OoWjO\nPRTNuQfNuXQCN28gcPdOAv74HW3aWTTZ561zHV4kVPknfUQZGI00OLkY/TUdKes/EFPjJvU+7prg\n7SUh3RWi4Sr0JSWkH3a+EKrqfX/DlZ9H43ZXsozyEOoIJyK09T0s1EkC1tIKbYOczLUyL1j9EQxB\n5S5RsjJP++vQOfHd1wDtleMxHPoCJA3IJrRXjicz6SyWkj0qRwgNXo69RWxMTgatH7tT+eMWFDdo\nDcrioLwYQenwESRlFVn2cTZhbtK+XZ0EBEf7mcfuCwKDM2oqPtjk2JBlJn72Bk3fewNZC8cmQkyz\n8rVdEUzYCsigD4Mvnv2E/UmRoFLvkOLiykq5QF3IDRpQfPscim+fQx5r0Z78l9CUVQT8fQBt0kk0\n57OQSi668J2/Yiv6nr0B0DXbh1RSgr5rd9B59tbi7YsKa+xVl2je41oatuvu81UnBO4VHABMjRpT\nMnkaJZOnKRtkGSkvF01mBprcXKTcHNBqMTW8BFOjxpguKX8Kq9Vy4ZnlbhljdfHm64C96hLuCNEQ\nCASeRS4rQC7OQQqJRgoMR9ekE9rYNjbbvAkhNHghjhap5gXqgq+XQwmUdoADraBlQXm5mYMoiZmC\noGTseMBWYKjvWu0VUdMi2N04CiuxRmPQM3XlkzT8+lNMEkyT4L9fQtnnsO4WGL8FOAHEwkev/Mzy\nP20X8v78+dYX7gqfqItXQ1ZWpstq0Bsva82F51++uEGWobRUqRih09lUjjB07FynYwkq88mHnzis\nLhHUIFoIDH5EVYKDK+3eBklCjorGGBVtL62TqvBmYcEaZ9Ul6jtEQ+BdVFyUCrwbQ9qf5d4LWpCN\n6NrfhK5JJ6TAcK/9foXQ4EVUJTD0bxtDqx0buOqHLzBpoOs/cHqZEsf//kyY+KfSvnDWAk6ENbKI\nDO4WGAS22Evk2b9tDFNWPkHDrz9FDoTxJvjagJLNG2j0LiArJUHXLv+AZ38rsPQl8F++/vIzFsyd\nTUBAAHq9npdff5ux4ye67gCSBMHVyQznOdy12KjvsImC3POiuoSgEvbyONS73asQXxEVKiKqSwiq\ni6NFqcA7kcsKlO/TpAeUB4eGQ1+gjW3jtSIDCKHBK6iOwNA3IoD2q54j7J03AVgF/F3+W40HWr2F\nEjqhhVP9r2Pn2WwbgcEfY/rVhD2xIehMCgBJw2HzBiwiQ2ugnwz6sDDWvrCO53ZfEAJDOe7I06BW\nr4asrEwWzJ1NSXExJcXKBHXB3Fn0Sxzk2iecKsaXFh/ZaWfqvbqEuO57N0mZheScz/Ibu/cl+3aE\nL1aXELgeX12U+jNycY4iGmHlnSxpFI8VL/5OhdCgcuyJDDaJAtvG0CcunE4ThhBw6CBo4Uw/eHI3\nUAItUKrMtZKh+JJGfPPEG6RdcplFZKjORFMsYt2L+TuZeHUnInduo3EmlFklmZ9a/m9mr0T+mx+C\nUgRd4IvURGxITUkmICDAstgACNAFkJqS7HMLDk/jjiSQMU2aubS6hMA3STuTglYbgHW2Rl+xe38Q\nFiribdUlBJ7BVxel/owUEg1yhQA12aRs92KE0KBirEUGa3HBjPWT24ATB5X/9IbAiVC4U6k89TOK\nR8NeSWLZ3DfQByRUKicJQkxQAxW9GrZf05fJ0gpCdsGZOJiTC+2Ax8vXHu9fPtDS1lnCTjVx4HCG\n3d+yt+HOUpfVFRuaxyeg19tOUPUGPc3La9f7Or62KNmXIYnqEoIqsbcwLdPrkUMbeqSCTV3xNTuu\nKTWtLmFP9DTfmzxRFUfgHnx1UerPSIHh6NrfZFNhQtf+Jq8XjoTQoFLMC86K3gv2kAMDyXvhbSLn\nzoJfoOEvcD5EKX0NsEvSsPjmxaRkh0C2EBjUjFlsOHA4A9olEPbUKkY/dRfRWfC5Vbstc5ewp8MA\n4fpsB18pc2lNdRYMcXENefn1t1kwdxYBugD0BiVW29ufalYHdy5O3Dl5r8/qEuLa4RtUtTC1l9NB\nbfi7uFARZ9UlqnP9EQKD7+Ori1J/x9srTNijTkKDJEkvAKOAMpT897fKspzrioH5K9ZPtO8ZcwWD\nynKI3vQ/9DFxrDcORtZq7e73z/CbuOJNLVH33AYaCCkGU0gISZ178vzI+0jJUL5qISx4DwcOZ/Be\nu25kfLiNofu3E/HbDrSFBewYNo63E/p5bFzC7hXc6dVQXcaOn0i/xEH1k31epfjiIsU6f46aqkvU\nxvYL9IZqLXzUZkveRHXLHqpJdPBFu3UFF21FA3EtyS0FPCwciHu+OvHFRakAr64wYY+6ejRsABbL\nsmyQJOl5YDHwUN2H5X9UDJNY2iCLVnePJeTvA5bt93Tqwv53vuSXQpPNvpYb05AbCdrYFcmgR9Lr\n2RQSx/Z/czlwOEMIDF6EdQiF4tlwCd+3Gg6thtu0s34i6ebvt0527yvhE/WFvfrpUP0Qiri4hn4h\nMID7FyviSWH93fOduYD7A47svrrUtOxhVeUy6wN/Fxe8+Poh5vr1RF3LU/raolTge9RJaJBl+Wer\nP3cD4+s2HP/EWmTo3DaaV/d9SpPVL6ORIQ/4UQNjAiDoz72EH/yT3n0H2i1NaVumUseBw8fcdAYC\nV1NJbKiirTvxBrt3V/iEq70anNVPB88sDtSKvy9aPIG7bb8mCzNvFiWqsvv6pL69HPzZTr1YWLDB\nG+753ogoTynwB1yZo2EmtmHkghoy77pLufPxWQTu2oEJeA54GigzwZFSpayhPjauUmnKiohEj76B\n+XtzVN5UJd+rsHsXUZP66d6Y5M2VeGLx4q5Fg7Nru6twUX4GVdl+db8ftQkSNbH7+qY2QqY/CwkV\n8RVhoQpUZffeiihPKfAXqhQaJEnaCDS289Yjsix/W97mEcAAfOykn1nALACCo2ozVp9nYFEGgbt2\nADAiEH4sg6bAVygigzEQtmsjql2aUiULUUEd8cT3WB92r23gXnd+b/NqqGn9dH8VG8TCpn5xhe1b\n2310I3WV46y4GPS08FBTu3cHwsaqhy8JC662ezHPd44oTynwF6oUGmRZHuLsfUmSpgMjgcGyLMtO\n+nkbeBtAE9nCYTt/ZlNEU9pf0ghtxjnaGiEL+BZFbEiRJLYueYONZ/XVeholRAZBXagPuw9q1MbS\nTpaoZlAAACAASURBVORpqExt6qf7k9jgycWPL3kzVIUrbN/a7ltccbWq7/eeTFS582w2BboGlOnL\nbLaX6fVO7V7gGXxJWKiIq+1ezPOdI8pTCvyFuladGI6SEGaALMtFrhmS/yJrtRTPuJ3w5c/wqtX1\nZ5tGw1NTFnEqO8FSnlIICQJP4U12701eDTWtn27GH/I2+IPI4C7qEjbhTbbvShx5QdTW7q37C4+K\nZcLCZfzf8kVodTqMBgMTFi7jn1KNpdqAp70u/BVfs/3a4q92X5+I8pQCf6GuORpWAkHABkmSAHbL\nsjynzqPyU7Yfy0YaPp0xwRG0+Ow9jEFHyWw+khcH3smpNCEuCFSDS+ze17waXCE2VLdMnT180bvB\nn1y41eDNUA3EPR/bBWh1QjGqWrB2HjKKtl17k512hpgmzQiPinW4vxAd7FNbUaB30xghKFSNsPt6\nQJSnFPgDda060dpVA/FnzBUGzE+a5MHjYdA4tGVlbEku5JBrEncJBC5B2L1jXOXZUNvYbF/yblCD\nyCAWILYI26+a2v5mwqNiKwkMVfXvb6JDfdijsPGqEXZff4jylAJfx5VVJwR1oKLYYMZF2cEFAr/F\nXeETasKbBQc1CAzg3gWIu7wZxP3Et/AH0UEIAQKBQOC9CKFBhYjJoMBfcFf4hDvFBldVoXAF3iQ4\nqEVgALG4EXgfviQ6CPsTCAQC30AIDSrC7NVgb7tAIPAe1CQ2gHoFBzWJC55CeDMIXI03iw5CZKh/\nvCQfjEAg8AE0nh6AwJa0Q4ctL/PfAoEv464FkLsnV2qcMCdlFlpe/jwGZ6jxexMIaou3/J53ns32\nmrF6M0JkEAgE7kR4NKgYITIIBN6N2jwbrKm40K9Pbwe1igoVcfdCR3gzCNyBmq9D4D1iiDdgHSYo\nRAWBQOBphNAgEAg8ji/majCj9km+GUdiQHUFCG8RExwhFjsCgcAXEAKDQCBQC0JoEAgEgnrGW8QG\ne3i7gFAdPCEyCG8GgTtR4zVIiHuuRQgMAoFAbYgcDQKBwK/w1GRMTKrViS+LDAKBNWrJg6CWcfgK\n249li2uKQCBQJUJoEAgEqsCdT16F2CAA3/8+hDeDwB6e/N37us25C7O4IAQGgUCgZoTQIBAI/BIh\nNvg3nvoexMJAoAbc+fs3ezCIa1/dEeKCQCDwJkSOBoFAoBrclRTS06gxXtpf8ORix50LBOHNIKgK\nsy3U17VICAu1R4gJAoHAFxAeDQKBQFX4QwgFiEm4J/AXkUEg8DTi+lZ7xLVCIBD4CkJoEAgEfo2n\nxQYxIXcP/vQ5C28GQU1wtW34k625EhEWIRAIfA0ROiEQCFSHu0Moth/Lpn9bz4UyiFCK+sXTCx9/\nXjxcKDFWOn9P2prAPtY2UtNrkafty5vx52uDQCDwfYTQoDKatG9n83faocMeGolAIHAnQmxwPWpY\nALl7IeEN3gzWn4kj0cHT4p8/owa78WWEuCAQCPwFITS4maiwAB65qT2tGoejkSTLdm1AgP0dxjXG\nqNe7aXQCf8Aky5xIL+CZLw6RW6je35YveTUEYKJdaClhWhOSs4YXCgEI0oqotrpSajTRp4Fnx1Ci\nN9Klg3tvs/orG9vdbgJScvSs/DWb/FLZrWNyhrNFV3UECbVTbdsX+DwleiOAW68JMpBRLPPNKSNF\nBrcd1u9xNNd3F9qAAAICNAQHFLr92M7o0kGH/somGPVxnh6Kz6OWub4QGtzMIze1p1v7BHRB4VB+\n8QkMCbFpExKso7jE9o5QVlzstjEKfBxZJia2gEeAB9fu9/RonOIrYkO70FISGsUQFhmNVM1JR3iA\n1uXj8AcKyifznqagxP2z+or3DWtkWSY2No97gGc3n3ffoFyEt4Zf1Mb2Bb6DJ64D1siyTGxBHpDB\nJ8fVcW30B+zN9d1JQEgwocEBhAera5lXUGKgqESPvrjE00PxfVQy11fXL9APaNU43K7IEGJ1MZBk\nk12xQSBwCZKELiicVo3DPT0SVVIfYkOY1lTjhYZ5wSwEh+qhFoHBU1R1v5AkiYDQSOKjvU9ksIe3\neDvUxvYF3omnRQV7SJJEcHgkl4RkenoofkXFub5A4HZUMtcXQoOb0UiSXU+G8GAdurJSYjLOoCks\nJK9xMzKDI4TYIKgfJMkj7ny1wd1eDeB6sUGCWi80hODgHDUKDGpccIDyG/TFoByz6GBts2oRIqpj\n+xV/L2p7CuntFJQY6u0zVautWyNJkgjbcTPWc32BwGOoYK4v7mYqoGFUMFHFBQSfPqUE1AGR6WeQ\nGslkBEcKsUHg9/iC2OAMk9GAQV+GLiAQjdb+ZVkIDraoUWAA9YVM+BOO8j3YEyLUQn5RKSZDGRpd\nIBqNYtvWvyEhOtQMR/bnaHtNP19vEBYEXoBsApMBNDqQfFH+FQgUxK/bw5hDJgIz0kGGbOBMufjU\n4NxZoiTlplYxj0Nd6Neplcv6qiuzpt3I4YPOY4f++G0n982eVqv+n37kfk7+e9Th+6tfXc5vO7fX\nqu+KPLzgTiaNGsTHa99ySX+gnPtf+/ZY/v7y0w/4/pv/c1n/Aue4Izt4UX4uaSeOkHn6FGknjlCU\nn+u0fYHeWKtFduO4qNoO0eVcN2ww+/b+4bTNL9u3Mf7GGyptr87533/PHI4e+cfh+8uXPsn2LZuq\nN9gquPPWaQzq1ZW3Vr7mskXIb79uZ9/vuy1/f7J2DV9//ondtkJkqD7bj2WrKuN/9vnz5Kcep/Bc\nCvmpxykrzK/UpqDEYHnVllZNYusyTJdy4/VD2b9vr9M2O3/ZxrSbxtaoX/Nn9PD8uzl+1LHtr1j2\nNL9u21Jpv+q+rLlv9gxGDujB+6tX1miszqiJ7Qu8FH0R8oU05MJM5AtpoC+ql8Nc07JRvfRbG6pj\n92Ku75tzfZdI5ZIkPQC8ADSUZTnLFX36G1JZKQDJgFGGQKAhEHM2GVOLVpwrMBAYEqKqpJBGoxGt\nVt1PV5c885LT9+fMW+iS42RlZnDgzz18v8X54qmm7P19J6GhYVzTuRsA4ydPd2n/dcWdtu8Jrwao\nX88Gk9FATnoqsiyDrLgz5aSnEhwW7tCzwYz1YtudXg6esvuaiCsvrVzt9P2Fjz5e1+EAkHEunT2/\n7+aPQ8dd+qTzt19/ITQsnM7dewIwZcbtLuvbFXj7Pb8qscEdng/5RaUUnU8DWVbsHyg6fxZdSJjF\ns6Eing6xUOs93/pzefaVN5y2vW/REpccM/PcOf7c8xvb9jkWNWqDmm3f2+1eFcgm5OIcLO7LgFyc\ng6QLVq1ng1rt3hox11cvdf5VS5LUAhgKpNR9OP6KjFJ8TBEXAFKBIkBTVkZkYf5Fz4eQEJd6N6xb\ns4pbxg1n0qhBvPXaC5bt9981g5tvHMaEEQP46vMPLdv7dWrF6leXM/2m6zn45x+MGtSNt157galj\nhzJx1ECSThwHoLioiCcXz+eWccOZMmYoWzf+CEBJSTGL589h0qhBLL5vNqUl9jPP7ty+mXHD+3Lb\n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\nxm4WobBm1UrWrFpB764Z9OnWib/+2Ms/+/4C4LWFr9CrSwcG9erOwQMFztejo6MZeGX1tZMDhlwJ\nQKvWbdifn+dse96sF8nJ7MiwgX0oryinoGA/G39cz7CR1wHQtPnFXHTJZTXs2vfnHzRumkb6Bc0R\nBIErh1/rfG/96pUsmvsSg7M7c8PQ/lRUlHPwwH42rP2B60bdgakq5bR+SvXOoUlaOvvzcnlqyn9Z\nu2o5SXWTq73/919/0rhpGs0ubAHAVSOvZ8vPZzIBevUfBMDFl7fm4P7wAvoZmT2om1yPOnFxXNDi\nIg4W7GfH1s20y+hC46ZpANSrn+KzjdNFhZwuKqR9p0wAhgy7rrq9/ez2XnJ5aw4WSP8AIlDtu+re\nWlbos83anuHgoF5Kiqyp0ytXLGfVihVkdmpP184d+HPvXvb9ZU8DXDh/Hp07tqVnj0wOFOx3vh4d\nHc2VV11drR2H7jPatyM/L4+kmGjW/7CS+bNf8qn7Sy67nIsvu7yGXX/9sZcmaelc0Nyue8fxoIzu\ni8stjLj+xmpPBTz5tlDp2iOb5Hr1iIuLo+VFF1OwP5+tm38mo0tXmqY3AyClgedBbaXFRoXZxumi\nQoqKCsno0g2Aq0bewOafzjy97DNwCACXtWpNQZh+yhNS6V7Obe/0jNa1nxQTTRRCyH1+KNr31u7a\n1au4+bYz2nfXTlp6M/L++YepD0xk1fLvqZtcXfv7/vyDJmnpXNjC3udrVfsOigoLKSw8RZeu3QFl\ntS9Hf68UevAJKQ0aOO9jOZCqzx9SNfZv3aYt+Xl2TaxauZyZL75Al4x2XDMoPN17GusP7dUlZN3/\n9MMKkt10/+cfe0lLT6dFC3vmwfU33syP68/o3vEdtap7r36qTRv25/m2V85tYX3h984WBGEFcI6H\nt6YCDwN9AjmRKIqLgcUAdc5uIZ5zycVBmKl9Qq3b4J6BIMWuExDYmiZRFBl//4PcfFv1tUAb1q1h\n7epVfLFiDQkJCVw9oDcVFfa0pzpxcTXWasXWqQNAVHQ0FovF2faSdz6geZWYXQlkyx9vx4iiyLzX\n3+WC5i1rvO6r3Xr1U/jih59Y98MK3nl9MV9//gnT5yyo9nlfxMbav2N0VDRWq/81kdHRJmyivepv\nZUX1lLGYOrHO/4+KisZqtYIo2vPnJMJhb1R0YPZ6Qgrtu+s+kPNqrYaDHLg/jXStQO064LDcPppi\n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\n8f2XGP2OtaYt/hwbkdWF9jeUUp9SSqV6NszAmDj9ouoq2D/OPEZ8q0MkCmYIQuBQRmXpi7XN1QWC\ngPlw+o3W+tysOwuCxyilarXWzeZM3XKMwlNZl+jzoF13AY9rrVe5eI1HgXla6zdTvHcyMFdr/QW3\nru8GptC8X2t9j99tEYKDxc7rMCZHzkw1OeAXZsTAr7XW6SraBxKl1DTgFK31zX63RRDCgGkzH9Va\n21mhIjCIb3UOiWgQgsx1GFW3w8Rw7K0jLgh+8F0zaicRnfB7n9uTYAFG/rormCGSv08lMgBordcB\nz6jc1+H2m710LbMrCAmeMO38r8AtQRIZ4PAM5S9U5oKRQSSCEckhCIINzImMzX63Iw/EtzqERDQI\ngiAIgiAIgiAIguAYEtEgCIIgCIIgCIIgCIJjiNAgCIIgCIIgCIIgCIJjiNAgCIIgCIIgCIIgCIJj\niNAgCIIgCIIgCIIgCIJjiNAgCIIgCIIgCIIgCIJjiNAgCIIgCIIgCIIgCIJjiNAgCIIgCIIgCIIg\nCIJjiNAgCIIgCIIgCIIgCIJjiNAgCIIgCIIgCIIgCIJjiNAgCIIgCIIgCIIgCIJjiNAgCIIgCIIg\nCIIgCIJjiNAgCIIgCIIgCIIgCIJjiNAgCIIgCIIgCIIgCIJjiNAgCIIgCIIgCIIgCIJjiNAgCIIg\nCIIgCIIgCIJjiNAgCIIgCIIgCIIgCIJjiNAgCIIgCIIgCIIgCIJjiNAgCIIgCIIgCIIgCIJjiNAg\nCIIgCIIgCIIgCIJjiNAgCIIgCIIgCIIgCIJjiNAgCIIgCIIgCIIgCIJjRPy4aJ9+dXrQkOGuX6ci\nIjqK07THO7Puk+p7t3Oc4D9vvLa+QWvd341zq4oeWlX3K/g80aoqB1qTnerqqCfXKZSeVeV+NyEw\nHGjt8LsJtmhpiXlynVhrq6399P5tgbd7QRCcxU27L6/urSO9jsr7+LD4XyFceOV7c8Wur3YKN20/\nGV+EhkFDhnPf8mc8udbI/j08uU6psHn3waz7WL9zO/sLweH0Y/pucevcqroflR+bU9A5Bo4+3qHW\npOekMQNcv0YhTBwlgzY7PPvWHr+bkJVXNr7v+jV2bXo96z6tK74daLsXBMF53LT7SK+jGHL5XXkd\nO3Z0/gKFINhhw6YP/G7CEezcuMmza7lp+8n4IjR4hYgM/iIig+AUpS4wiLiQO8nfWRCFh5PGDHBd\n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\nBByJYAAAAABJRU5ErkJggg==\n", + "image/png": "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\nTsq6J0sp8w5dtwFYoNaxjtotQll/6hcAXoFSjg0XchPKlJbDVb1+D8rAEQBLayYcB2AsgN+q71Xb\nEtJyuyBsENEkIrraxVsatlOgjF7PVb/LYTC2W+sBPErKtKKH0nyrbmUc1ue0A0rdfheUcnSTWu+t\nhmLbrkfXlNedUAaM/gLgfqv1Y0jq6m5t3zT1j5X22r0AxqnHjkXXgu5PAzhfzZvZgn5W276mpPQJ\nzLDSJ3gKQC81vYsA/ITrdHNIWIokDw4iOhfKvJZWAHuhhLssCzZVjEyQMvp7sbC/snam+x4LYJiw\nMf9TbWjcIDLPT5IOUtYdeEgIsSvotDCMF5Cy2F21sDEfNYtnnQNlaotp5ILBNb0BzBFCLMp4smSQ\nMnXndtVRzkgMKdt5F0EZLdwHxZG3IvWY1W9JREsBfBZKeHUrgG+LDOsdEdE0KLtIWR3lkwIn7QLG\nGaRMSz4VSrRKKxQn/NtpL2JyHg/7BFynm50ruzOBYRiGYRiGYRiGYRi5CHo3B4ZhGIZhGIZhGIZh\nQgY7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiG\nYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiG\nYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiG\nYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7\nExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiG\nsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiGYRiGsQU7ExiGYRiGYRiG\nYRiGsUXM6wfkFfYXsX6HeHLvwsK4J/dl5KWlpT3jOfpyYeX8sNDe2urq/cSebQkhRKWrN1XJLy4R\nheWD055TXJDnyrOK4tmZseb2pON76q91co3T5/pBunT6wd7WjkCf7xZ+2iArNsJL3QNA35IyUTZw\niGv3C1ITdjTgVzqD1qVsyG4nZNK/l9ovKSsXg4YM8+LWnfSO8finFxxIHsx4jtm7t3ItEyzv/XOj\n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\nKHjB3h/YsrVcOxX2Z+4lMUDvE5MS2Z+5N6T7fz6lyDuTxM+nVIlpL2rWnGv6DbT9LtdyVjnpWiC7\ndnxboHut2l3Orh3f2uYXCWWp9/66HIpOl+Q8iLd+IVY6VKqjvpVSv1VK/UopdWtZC1QSm7YcKvdR\nCqlpaeQFTP7y8vJITUuLKN/k5BSyf9IDbN+eq6pVqxZJk1S5MkeytGd02dLFADRu0pQ77xnJrAVL\nGPuHP1E/NdU2/2bNW7Bh3VoANq5bS7PmzW3zc5IlFJxkCazHyhXLGXn/OP41831eeu6ZYs/TDjd/\n0zqav9iQVwZOHHBX7ysC9VJTycsv2g7y8/Oo56BvoXJWcjI5OUV1LSVQ75OSOH70CACfW5EFaY0a\n8+vb7uT1abMYMWos5zms9Ddu0oyvv9oAwDebNtK4STPb/JxkCQUnWapUKVqPdWtWMnzESKa88i/+\n9Y+XyI/QiWaITO+D/Xa7l4lltEJ5s/f/PXCIk7n5LFn8kZ8syeRYTv1w9L5Rk6bcdtfveHvOIu4d\n/zB161l6X7XoKvjqlSu4a/QYXpv2H/7+0rMh2XsnvDRZcCkqATD2PtrUS21YzD7l5+VTL7Vh2Hn5\nt1k7Xatio/e+CIjPlunIAiddC6RJs+Z8tWEdAF9tWEeTZs1t83OSJRQi1ftgE/9g+u0l3S8LYumM\ni9vfDXMzSiHaA4zatesw5W+vkZySQrXq1UlOSWHK316jdu3I9qJ2Tu/O/Lmz6de9C2tXr7JN06tv\nf6a+9jLj7xtJzVp6L+nNw+/g48Uf0b9HV6a/OdVx28CoMeOY895/6Ne9C9VrnEPX7lfb5heqLHaE\nKssFFzZm1Ig76NW1I+k9ehZb+fHHTScCRM+RkJeTW2aOBEP0qVmrNhMmTeGs5GSqnl2Ns5KTmTBp\nCjVr1Y4o3/ZXduaTj+Zz+w39+GrDWts0Xbr3Yub0qTw5YTw1zqkJwODrb2bVio+548b+zP7PdM53\nGFwMv2sUH82fw+039KNatep06NTVNr9QZbEjVFkaNLyACeNHcevQXlzRKb3Yyo/BHeLRoeDD37EQ\nDdtfHux9ytnVadcxnc49evPWP17lT2NHc07NQnvfsUs3Ppr/Adf17sb6tZ+HXIcbbh7OiqUfcX2f\n7syY9iZ1HWRJa9SYsb+7kyE9O3NVeo+g9j4YXppMuOlIMESfWufW5rG/vEhycgpnV6tGcnIKj/3l\n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\n", "text/plain": [ "<Figure size 1080x864 with 12 Axes>" ] diff --git a/notebooks/Model Combination.ipynb b/notebooks/Model Combination.ipynb index 2bce2ff7565f8606fe0063ac970625df8e897937..c160430fe205212bb5140eebc189597a585d7ae1 100644 --- a/notebooks/Model Combination.ipynb +++ b/notebooks/Model Combination.ipynb @@ -19,8 +19,10 @@ }, { "cell_type": "code", - "execution_count": 12, - "metadata": {}, + "execution_count": 1, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "from __future__ import division\n", @@ -46,7 +48,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -80,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -99,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -155,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -180,17 +182,17 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Combination by Average ROC:0.9182, precision @ rank n:0.5522\n", - "Combination by Maximization ROC:0.9225, precision @ rank n:0.597\n", - "Combination by AOM ROC:0.9288, precision @ rank n:0.6119\n", - "Combination by MOA ROC:0.9245, precision @ rank n:0.5821\n" + "Combination by Average ROC:0.9017, precision @ rank n:0.5342\n", + "Combination by Maximization ROC:0.9024, precision @ rank n:0.5616\n", + "Combination by AOM ROC:0.9073, precision @ rank n:0.5342\n", + "Combination by MOA ROC:0.91, precision @ rank n:0.5342\n" ] } ], diff --git a/notebooks/benchmark.py b/notebooks/benchmark.py index ad2d52e119c1bd38de46d769b23bb4f02f5980ed..17a4ea72d61de4dcb7646b330edb6dbe3d2cdfc5 100644 --- a/notebooks/benchmark.py +++ b/notebooks/benchmark.py @@ -35,6 +35,7 @@ from pyod.models.lof import LOF from pyod.models.mcd import MCD from pyod.models.ocsvm import OCSVM from pyod.models.pca import PCA +from pyod.models.lscp import LSCP from pyod.utils.utility import standardizer from pyod.utils.utility import precision_n_scores @@ -56,21 +57,25 @@ mat_file_list = ['arrhythmia.mat', 'pima.mat', 'satellite.mat', 'satimage-2.mat', - 'shuttle.mat', + # 'shuttle.mat', 'vertebral.mat', 'vowels.mat', 'wbc.mat'] -n_ite = 20 -n_classifiers = 10 +n_ite = 10 +n_classifiers = 11 df_columns = ['Data', '#Samples', '# Dimensions', 'Outlier Perc', 'ABOD', 'CBLOF', 'FB', 'HBOS', 'IForest', 'KNN', 'LOF', - 'MCD', 'OCSVM', 'PCA'] + 'MCD', 'OCSVM', 'PCA', 'LSCP'] roc_df = pd.DataFrame(columns=df_columns) prn_df = pd.DataFrame(columns=df_columns) time_df = pd.DataFrame(columns=df_columns) +# initialize a set of detectors for LSCP +detector_list = [LOF(n_neighbors=10), LOF(n_neighbors=20), LOF(n_neighbors=30), + LOF(n_neighbors=40), LOF(n_neighbors=50)] + for j in range(len(mat_file_list)): mat_file = mat_file_list[j] @@ -91,7 +96,7 @@ for j in range(len(mat_file_list)): time_mat = np.zeros([n_ite, n_classifiers]) for i in range(n_ite): - print("\n... Processing", mat_file, '...', 'Iteration', i+1) + print("\n... Processing", mat_file, '...', 'Iteration', i + 1) random_state = np.random.RandomState(i) # 60% data for training and 40% for testing @@ -122,18 +127,22 @@ for j in range(len(mat_file_list)): random_state=random_state), 'Principal Component Analysis (PCA)': PCA( contamination=outliers_fraction, random_state=random_state), + 'Locally Selective Combination (LSCP)': LSCP( + detector_list, contamination=outliers_fraction, + random_state=random_state) } - classifiers_indices = {'Angle-based Outlier Detector (ABOD)': 0, - 'Cluster-based Local Outlier Factor': 1, - 'Feature Bagging': 2, - 'Histogram-base Outlier Detection (HBOS)': 3, - 'Isolation Forest': 4, - 'K Nearest Neighbors (KNN)': 5, - 'Local Outlier Factor (LOF)': 6, - 'Minimum Covariance Determinant (MCD)': 7, - 'One-class SVM (OCSVM)': 8, - 'Principal Component Analysis (PCA)': 9 - } + classifiers_indices = { + 'Angle-based Outlier Detector (ABOD)': 0, + 'Cluster-based Local Outlier Factor': 1, + 'Feature Bagging': 2, + 'Histogram-base Outlier Detection (HBOS)': 3, + 'Isolation Forest': 4, + 'K Nearest Neighbors (KNN)': 5, + 'Local Outlier Factor (LOF)': 6, + 'Minimum Covariance Determinant (MCD)': 7, + 'One-class SVM (OCSVM)': 8, + 'Principal Component Analysis (PCA)': 9, + 'Locally Selective Combination (LSCP)': 10} for clf_name, clf in classifiers.items(): t0 = time() @@ -169,10 +178,10 @@ for j in range(len(mat_file_list)): prn_df = pd.concat([prn_df, temp_df], axis=0) # No need to save locally -time_df.to_excel('time_v1.xlsx', index=False) -roc_df.to_excel('roc_v1.xlsx', index=False) -prn_df.to_excel('prc_v1.xlsx', index=False) +# time_df.to_excel('time.xlsx', index=False) +# roc_df.to_excel('roc.xlsx', index=False) +# prn_df.to_excel('prc.xlsx', index=False) -time_df.to_csv('time_v1.csv', index=False) -roc_df.to_csv('roc.csv', index=False) -prn_df.to_csv('prc_v1.csv', index=False) +time_df.to_csv('time.csv', index=False) +roc_df.to_csv('roc.csv', index=False) +prn_df.to_csv('prc.csv', index=False) diff --git a/pyod/models/abod.py b/pyod/models/abod.py index 3a14b9aabee273934d8766d160f3dfb567715193..777756b74dbabb11e5fe4965a0f4efa7f24c9077 100644 --- a/pyod/models/abod.py +++ b/pyod/models/abod.py @@ -21,24 +21,24 @@ from ..utils.utility import check_parameter @njit def _wcos(curr_pt, a, b): # pragma: no cover - """Internal function to calculate weighted cosine using - optimized numba code + """Internal function to calculate weighted cosine using optimized + numba code. Parameters ---------- curr_pt : numpy array of shape (n_samples, n_features) - Current sample to be calculated + Current sample to be calculated. a : numpy array of shape (n_samples, n_features) - training sample a + Training sample a. b : numpy array of shape (n_samples, n_features) - training sample b + Training sample b. Returns ------- wcos : float in range [-1, 1] - Cosine similarity between a-curr_pt and b-curr_pt + Cosine similarity between a-curr_pt and b-curr_pt. """ @@ -53,7 +53,7 @@ def _wcos(curr_pt, a, b): # pragma: no cover def _calculate_wocs(curr_pt, X, X_ind): - """Calculated the variance of weighted cosine of a point + """Calculated the variance of weighted cosine of a point. wcos = (<a_curr, b_curr>/((|a_curr|*|b_curr|)^2) Parameters @@ -80,7 +80,6 @@ def _calculate_wocs(curr_pt, X, X_ind): b = X[b_ind, :] # skip if no angle can be formed - # array_equal is not supported in numba if np.array_equal(a, curr_pt) or np.array_equal(b, curr_pt): continue # add the weighted cosine to the list @@ -96,9 +95,10 @@ class ABOD(BaseDetector): See :cite:`kriegel2008angle` for details. Two version of ABOD are supported: - Fast ABOD: use k nearest neighbors to approximate for complexity reduction - Original ABOD: consider all training points with high time complexity at - O(n^3). + + - Fast ABOD: use k nearest neighbors to approximate. + - Original ABOD: consider all training points with high time complexity at + O(n^3). Parameters ---------- @@ -143,6 +143,16 @@ class ABOD(BaseDetector): self.n_neighbors = n_neighbors def fit(self, X, y=None): + """Fit detector. y is optional for unsupervised methods. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The input samples. + + y : numpy array of shape (n_samples,), optional (default=None) + The ground truth of the input samples (labels). + """ # validate inputs X and y (optional) X = check_array(X) self._set_n_classes(y) @@ -166,7 +176,6 @@ class ABOD(BaseDetector): def _fit_default(self): """Default ABOD method. Use all training points with high complexity O(n^3). For internal use only. - :return: None """ for i in range(self.n_train_): curr_pt = self.X_train_[i, :] @@ -181,9 +190,8 @@ class ABOD(BaseDetector): return self def _fit_fast(self): - """Fast ABOD method. Only use n_neighbors for angle calculation + """Fast ABOD method. Only use n_neighbors for angle calculation. Internal use only - :return: None """ # make sure the n_neighbors is in the range @@ -206,11 +214,26 @@ class ABOD(BaseDetector): # noinspection PyPep8Naming def decision_function(self, X): + """Predict raw anomaly score of X using the fitted detector. - check_is_fitted(self, - ['X_train_', 'n_train_', 'decision_scores_', - 'threshold_', - 'labels_']) + The anomaly score of an input sample is computed based on different + detector algorithms. For consistency, outliers are assigned with + larger anomaly scores. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The training input samples. Sparse matrices are accepted only + if they are supported by the base estimator. + + Returns + ------- + anomaly_scores : numpy array of shape (n_samples,) + The anomaly score of the input samples. + """ + + check_is_fitted(self, ['X_train_', 'n_train_', 'decision_scores_', + 'threshold_', 'labels_']) X = check_array(X) if self.method == 'fast': # fast ABOD @@ -220,13 +243,18 @@ class ABOD(BaseDetector): return self._decision_function_default(X) * -1 def _decision_function_default(self, X): - """Internal method for predicting outlier scores using default ABOD + """Internal method for predicting outlier scores using default ABOD. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The training input samples. + + Returns + ------- + pred_score : array, shape (n_samples,) + The anomaly score of the input samples. - :param X: The training input samples. Sparse matrices are accepted only - if they are supported by the base estimator. - :type X: numpy array of shape (n_samples, n_features) - :return: The anomaly score of the input samples. - :rtype: array, shape (n_samples,) """ # initialize the output score pred_score = np.zeros([X.shape[0], 1]) @@ -240,13 +268,18 @@ class ABOD(BaseDetector): return pred_score.ravel() def _decision_function_fast(self, X): - """Internal method for predicting outlier scores using Fast ABOD + """Internal method for predicting outlier scores using Fast ABOD. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The training input samples. + + Returns + ------- + pred_score : array, shape (n_samples,) + The anomaly score of the input samples. - :param X: The training input samples. Sparse matrices are accepted only - if they are supported by the base estimator. - :type X: numpy array of shape (n_samples, n_features) - :return: The anomaly score of the input samples. - :rtype: array, shape (n_samples,) """ check_is_fitted(self, ['tree_']) diff --git a/pyod/models/auto_encoder.py b/pyod/models/auto_encoder.py index 4ac00fba988e55c775287c8a8c0f2e2d7bcadeac..f4b7bec820c98b713c22853cc0869bb7ee4c34c4 100644 --- a/pyod/models/auto_encoder.py +++ b/pyod/models/auto_encoder.py @@ -185,6 +185,16 @@ class AutoEncoder(BaseDetector): # noinspection PyUnresolvedReferences def fit(self, X, y=None): + """Fit detector. y is optional for unsupervised methods. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The input samples. + + y : numpy array of shape (n_samples,), optional (default=None) + The ground truth of the input samples (labels). + """ # validate inputs X and y (optional) X = check_array(X) self._set_n_classes(y) @@ -237,6 +247,23 @@ class AutoEncoder(BaseDetector): return self def decision_function(self, X): + """Predict raw anomaly score of X using the fitted detector. + + The anomaly score of an input sample is computed based on different + detector algorithms. For consistency, outliers are assigned with + larger anomaly scores. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The training input samples. Sparse matrices are accepted only + if they are supported by the base estimator. + + Returns + ------- + anomaly_scores : numpy array of shape (n_samples,) + The anomaly score of the input samples. + """ check_is_fitted(self, ['model_', 'history_']) X = check_array(X) diff --git a/pyod/models/base.py b/pyod/models/base.py index 78d73e87ad78d06c4532dd113ccb3e75c97bb676..7d006bd544ad907a64c297fa971b1992e2448d6e 100644 --- a/pyod/models/base.py +++ b/pyod/models/base.py @@ -42,8 +42,7 @@ class BaseDetector(object): decision_scores_ : numpy array of shape (n_samples,) The outlier scores of the training data. The higher, the more abnormal. Outliers tend to have higher - scores. This value is available once the detector is - fitted. + scores. This value is available once the detector is fitted. threshold_ : float The threshold is based on ``contamination``. It is the @@ -66,6 +65,21 @@ class BaseDetector(object): self.contamination = contamination + # noinspection PyIncorrectDocstring + @abc.abstractmethod + def fit(self, X, y=None): + """Fit detector. y is optional for unsupervised methods. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The input samples. + + y : numpy array of shape (n_samples,), optional (default=None) + The ground truth of the input samples (labels). + """ + pass + @abc.abstractmethod def decision_function(self, X): """Predict raw anomaly score of X using the fitted detector. @@ -87,21 +101,6 @@ class BaseDetector(object): """ pass - # noinspection PyIncorrectDocstring - @abc.abstractmethod - def fit(self, X, y=None): - """Fit detector. y is optional for unsupervised methods. - - Parameters - ---------- - X : numpy array of shape (n_samples, n_features) - The input samples. - - y : numpy array of shape (n_samples,), optional (default=None) - The ground truth of the input samples (labels). - """ - pass - def fit_predict(self, X, y=None): """Fit detector first and then predict whether a particular sample is an outlier or not. @@ -377,6 +376,7 @@ class BaseDetector(object): # Extract and sort argument names excluding 'self' return sorted([p.name for p in parameters]) + # noinspection PyPep8 def get_params(self, deep=True): """Get parameters for this estimator. @@ -419,6 +419,7 @@ class BaseDetector(object): return out def set_params(self, **params): + # noinspection PyPep8 """Set the parameters of this estimator. The method works on simple estimators as well as on nested objects (such as pipelines). The latter have parameters of the form @@ -458,6 +459,7 @@ class BaseDetector(object): return self def __repr__(self): + # noinspection PyPep8 """ See http://scikit-learn.org/stable/modules/generated/sklearn.base.BaseEstimator.html and sklearn/base.py for more information. diff --git a/pyod/models/feature_bagging.py b/pyod/models/feature_bagging.py index 927edd4fdaf519e8e9254b499004ef3d1cd474c0..889c2cc193ef968bfdf883b0786b29f26902f943 100644 --- a/pyod/models/feature_bagging.py +++ b/pyod/models/feature_bagging.py @@ -21,42 +21,12 @@ from .base import BaseDetector from .sklearn_base import _partition_estimators from .combination import average, maximization from ..utils.utility import check_parameter +from ..utils.utility import generate_indices +from ..utils.utility import generate_bagging_indices MAX_INT = np.iinfo(np.int32).max -def _generate_indices(random_state, bootstrap, n_population, n_samples): - """Draw randomly sampled indices. Internal use only. - See sklearn/ensemble/bagging.py - """ - # Draw sample indices - if bootstrap: - indices = random_state.randint(0, n_population, n_samples) - else: - indices = sample_without_replacement(n_population, n_samples, - random_state=random_state) - - return indices - - -def _generate_bagging_indices(random_state, bootstrap_features, n_features, - min_features, max_features): - """Randomly draw feature indices. Internal use only. - Modified from sklearn/ensemble/bagging.py - """ - # Get valid random state - random_state = check_random_state(random_state) - - # decide number of features to draw - random_n_features = random_state.randint(min_features, max_features) - - # Draw indices - feature_indices = _generate_indices(random_state, bootstrap_features, - n_features, random_n_features) - - return feature_indices - - def _set_random_states(estimator, random_state=None): """Sets fixed random_state parameters for an estimator. Internal use only. Modified from sklearn/base.py @@ -64,20 +34,18 @@ def _set_random_states(estimator, random_state=None): Finds all parameters ending ``random_state`` and sets them to integers derived from ``random_state``. + Parameters + ---------- + estimator : estimator supporting get/set_params + Estimator with potential randomness managed by random_state + parameters. - :param estimator: Estimator with potential randomness managed by - random_state parameters. - :type estimator: estimator supporting get/set_params - - :param random_state : The object to control the random process. + random_state : int, RandomState instance or None, optional (default=None) If int, random_state is the seed used by the random number generator; If RandomState instance, random_state is the random number generator; If None, the random number generator is the RandomState instance used by `np.random`. - :type random_state: int, RandomState instance or None, - optional (default=None) - Notes ----- This does not necessarily set *all* ``random_state`` attributes that @@ -85,8 +53,8 @@ def _set_random_states(estimator, random_state=None): ``estimator.get_params()``. ``random_state``s not controlled include those belonging to: - - cross-validation splitters - - ``scipy.stats`` rvs + * cross-validation splitters + * ``scipy.stats`` rvs """ random_state = check_random_state(random_state) to_set = {} @@ -228,6 +196,16 @@ class FeatureBagging(BaseDetector): self.estimator_params = {} def fit(self, X, y=None): + """Fit detector. y is optional for unsupervised methods. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The input samples. + + y : numpy array of shape (n_samples,), optional (default=None) + The ground truth of the input samples (labels). + """ random_state = check_random_state(self.random_state) X = check_array(X) @@ -275,11 +253,11 @@ class FeatureBagging(BaseDetector): # max_features is incremented by one since random # function is [min_features, max_features) - features = _generate_bagging_indices(random_state, - self.bootstrap_features, - self.n_features_, - self.min_features_, - self.max_features_ + 1) + features = generate_bagging_indices(random_state, + self.bootstrap_features, + self.n_features_, + self.min_features_, + self.max_features_ + 1) # initialize and append estimators estimator = self._make_estimator(append=False, random_state=random_state) @@ -301,6 +279,23 @@ class FeatureBagging(BaseDetector): return self def decision_function(self, X): + """Predict raw anomaly score of X using the fitted detector. + + The anomaly score of an input sample is computed based on different + detector algorithms. For consistency, outliers are assigned with + larger anomaly scores. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The training input samples. Sparse matrices are accepted only + if they are supported by the base estimator. + + Returns + ------- + anomaly_scores : numpy array of shape (n_samples,) + The anomaly score of the input samples. + """ check_is_fitted(self, ['estimators_', 'estimators_features_', 'decision_scores_', 'threshold_', 'labels_']) X = check_array(X) diff --git a/pyod/models/gaal_base.py b/pyod/models/gaal_base.py new file mode 100644 index 0000000000000000000000000000000000000000..fb61f222b310909320e7b7f56fb7e822548a26e7 --- /dev/null +++ b/pyod/models/gaal_base.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- +"""Base file for Generative Adversarial Active Learning. +Part of the codes are adapted from https://github.com/leibinghe/GAAL-based-outlier-detection +""" +# Author: Winston Li <jk_zhengli@hotmail.com> +# License: BSD 2 clause + +from __future__ import division +from __future__ import print_function + +import math + +import keras +from keras.layers import Input, Dense +from keras.models import Sequential, Model + + +# TODO: create a base class for so_gaal and mo_gaal +def create_discriminator(latent_size, data_size): # pragma: no cover + """Create the discriminator of the GAN for a given latent size. + + Parameters + ---------- + latent_size : int + The size of the latent space of the generator. + + data_size : int + Size of the input data. + + Returns + ------- + D : Keras model() object + Returns a model() object. + """ + + dis = Sequential() + dis.add(Dense(int(math.ceil(math.sqrt(data_size))), + input_dim=latent_size, activation='relu', + kernel_initializer=keras.initializers.VarianceScaling( + scale=1.0, mode='fan_in', distribution='normal', + seed=None))) + dis.add(Dense(1, activation='sigmoid', + kernel_initializer=keras.initializers.VarianceScaling( + scale=1.0, mode='fan_in', distribution='normal', + seed=None))) + data = Input(shape=(latent_size,)) + fake = dis(data) + return Model(data, fake) + + +def create_generator(latent_size): # pragma: no cover + """Create the generator of the GAN for a given latent size. + + Parameters + ---------- + latent_size : int + The size of the latent space of the generator + + Returns + ------- + D : Keras model() object + Returns a model() object. + """ + + gen = Sequential() + gen.add(Dense(latent_size, input_dim=latent_size, activation='relu', + kernel_initializer=keras.initializers.Identity( + gain=1.0))) + gen.add(Dense(latent_size, activation='relu', + kernel_initializer=keras.initializers.Identity( + gain=1.0))) + latent = Input(shape=(latent_size,)) + fake_data = gen(latent) + return Model(latent, fake_data) diff --git a/pyod/models/hbos.py b/pyod/models/hbos.py index 5bca7c0888f0efe91df11dd63fd66325259c38cb..943d6985bdb754f66408af777e1b1af9d5a699df 100644 --- a/pyod/models/hbos.py +++ b/pyod/models/hbos.py @@ -27,10 +27,10 @@ class HBOS(BaseDetector): Parameters ---------- n_bins : int, optional (default=10) - The number of bins + The number of bins. alpha : float in (0, 1), optional (default=0.1) - The regularizer for preventing overflow + The regularizer for preventing overflow. tol : float in (0, 1), optional (default=0.1) The parameter to decide the flexibility while dealing @@ -44,16 +44,15 @@ class HBOS(BaseDetector): Attributes ---------- bin_edges_ : numpy array of shape (n_bins + 1, n_features ) - The edges of the bins + The edges of the bins. hist_ : numpy array of shape (n_bins, n_features) - The density of each histogram + The density of each histogram. decision_scores_ : numpy array of shape (n_samples,) The outlier scores of the training data. The higher, the more abnormal. Outliers tend to have higher - scores. This value is available once the detector is - fitted. + scores. This value is available once the detector is fitted. threshold_ : float The threshold is based on ``contamination``. It is the @@ -77,6 +76,16 @@ class HBOS(BaseDetector): check_parameter(tol, 0, 1, param_name='tol') def fit(self, X, y=None): + """Fit detector. y is optional for unsupervised methods. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The input samples. + + y : numpy array of shape (n_samples,), optional (default=None) + The ground truth of the input samples (labels). + """ # validate inputs X and y (optional) X = check_array(X) self._set_n_classes(y) @@ -105,6 +114,23 @@ class HBOS(BaseDetector): return self def decision_function(self, X): + """Predict raw anomaly score of X using the fitted detector. + + The anomaly score of an input sample is computed based on different + detector algorithms. For consistency, outliers are assigned with + larger anomaly scores. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The training input samples. Sparse matrices are accepted only + if they are supported by the base estimator. + + Returns + ------- + anomaly_scores : numpy array of shape (n_samples,) + The anomaly score of the input samples. + """ check_is_fitted(self, ['hist_', 'bin_edges_']) X = check_array(X) @@ -136,10 +162,10 @@ def _calculate_outlier_scores(X, bin_edges, hist, n_bins, alpha, The density of each histogram. n_bins : int, optional (default=10) - The number of bins + The number of bins. alpha : float in (0, 1), optional (default=0.1) - The regularizer for preventing overflow + The regularizer for preventing overflow. tol : float in (0, 1), optional (default=0.1) The parameter to decide the flexibility while dealing @@ -149,7 +175,6 @@ def _calculate_outlier_scores(X, bin_edges, hist, n_bins, alpha, ------- outlier_scores : numpy array of shape (n_samples, n_features) Outlier scores on all features (dimensions). - """ n_samples, n_features = X.shape[0], X.shape[1] diff --git a/pyod/models/iforest.py b/pyod/models/iforest.py index 9b7f1c543def01d5521a379f379d51d11f9be3ae..67e27e328c4f5a6c6c91fd11dad81be038eedc23 100644 --- a/pyod/models/iforest.py +++ b/pyod/models/iforest.py @@ -126,6 +126,16 @@ class IForest(BaseDetector): self.verbose = verbose def fit(self, X, y=None): + """Fit detector. y is optional for unsupervised methods. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The input samples. + + y : numpy array of shape (n_samples,), optional (default=None) + The ground truth of the input samples (labels). + """ # validate inputs X and y (optional) X = check_array(X) self._set_n_classes(y) @@ -149,6 +159,23 @@ class IForest(BaseDetector): return self def decision_function(self, X): + """Predict raw anomaly score of X using the fitted detector. + + The anomaly score of an input sample is computed based on different + detector algorithms. For consistency, outliers are assigned with + larger anomaly scores. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The training input samples. Sparse matrices are accepted only + if they are supported by the base estimator. + + Returns + ------- + anomaly_scores : numpy array of shape (n_samples,) + The anomaly score of the input samples. + """ check_is_fitted(self, ['decision_scores_', 'threshold_', 'labels_']) # invert outlier scores. Outliers comes with higher outlier scores return invert_order(self.detector_.decision_function(X)) diff --git a/pyod/models/knn.py b/pyod/models/knn.py index e094eb77a536ec0dcd208554456ec0ffb74c8f0b..07d7d89313df69351f873e0f0f9ad08a6333a024 100644 --- a/pyod/models/knn.py +++ b/pyod/models/knn.py @@ -155,6 +155,16 @@ class KNN(BaseDetector): **kwargs) def fit(self, X, y=None): + """Fit detector. y is optional for unsupervised methods. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The input samples. + + y : numpy array of shape (n_samples,), optional (default=None) + The ground truth of the input samples (labels). + """ # validate inputs X and y (optional) X = check_array(X) @@ -173,7 +183,23 @@ class KNN(BaseDetector): return self def decision_function(self, X): + """Predict raw anomaly score of X using the fitted detector. + + The anomaly score of an input sample is computed based on different + detector algorithms. For consistency, outliers are assigned with + larger anomaly scores. + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The training input samples. Sparse matrices are accepted only + if they are supported by the base estimator. + + Returns + ------- + anomaly_scores : numpy array of shape (n_samples,) + The anomaly score of the input samples. + """ check_is_fitted(self, ['tree_', 'decision_scores_', 'threshold_', 'labels_']) diff --git a/pyod/models/loci.py b/pyod/models/loci.py index 138a14dbe9101dffeb0a11b08566ea4b74df6778..effeb57f7f9f324156c479f2e5f69632b4a5b663 100644 --- a/pyod/models/loci.py +++ b/pyod/models/loci.py @@ -9,6 +9,7 @@ from __future__ import division from __future__ import print_function import numpy as np +from numba import njit from sklearn.utils import check_array from sklearn.utils.validation import check_is_fitted from scipy.spatial.distance import pdist, squareform @@ -16,6 +17,69 @@ from scipy.spatial.distance import pdist, squareform from .base import BaseDetector +@njit +def _get_critical_values(dist_matrix, alpha, p_ix, r_max, + r_min=0): # pragma: no cover + """Computes the critical values of a given distance matrix. + + Parameters + ---------- + dist_matrix : array-like, shape (n_samples, n_features) + The distance matrix w.r.t. to the training samples. + + p_ix : int + Subsetting index + + alpha : int, default = 0.5 + The neighbourhood parameter measures how large of a neighbourhood + should be considered "local". + + r_max : int + Maximum neighbourhood radius + + r_min : int, default = 0 + Minimum neighbourhood radius + + Returns + ------- + cv : array, shape (n_critical_val, ) + Returns a list of critical values. + """ + + distances = dist_matrix[p_ix, :] + mask = (r_min < distances) & (distances <= r_max) + cv = np.sort( + np.concatenate((distances[mask], distances[mask] / alpha))) + return cv + + +@njit +def _get_sampling_N(dist_matrix, p_ix, r): # pragma: no cover + """Computes the set of r-neighbours. + + Parameters + ---------- + dist_matrix : array-like, shape (n_samples, n_features) + The distance matrix w.r.t. to the training samples. + + p_ix : int + Subsetting index + + r : int + Neighbourhood radius + + + Returns + ------- + sample : array, shape (n_sample, ) + Returns a list of neighbourhood data points. + """ + + p_distances = dist_matrix[p_ix, :] + sample = np.nonzero(p_distances <= r)[0] + return sample + + class LOCI(BaseDetector): """Local Correlation Integral. @@ -84,90 +148,36 @@ class LOCI(BaseDetector): def __init__(self, contamination=0.1, alpha=0.5, k=3): super(LOCI, self).__init__(contamination=contamination) - self._alpha = alpha + self.alpha = alpha self.threshold_ = k - def _get_critical_values(self, dist_matrix, p_ix, r_max, r_min=0): - """Computes the critical values of a given distance matrix. - - Parameters - ---------- - dist_matrix : array-like, shape (n_samples, n_features) - The distance matrix w.r.t. to the training samples. - - p_ix : int - Subsetting index - - r_max : int - Maximum neighbourhood radius - - r_min : int, default = 0 - Minimum neighbourhood radius - - Returns - ------- - cv : array, shape (n_critical_val, ) - Returns a list of critical values. - """ - - distances = dist_matrix[p_ix, :] - mask = (r_min < distances) & (distances <= r_max) - cv = np.sort( - np.concatenate((distances[mask], distances[mask] / self._alpha))) - return cv - - def _get_sampling_N(self, dist_matrix, p_ix, r): - """Computes the set of r-neighbours. - - Parameters - ---------- - dist_matrix : array-like, shape (n_samples, n_features) - The distance matrix w.r.t. to the training samples. - - p_ix : int - Subsetting index - - r : int - Neighbourhood radius - - - Returns - ------- - sample : array, shape (n_sample, ) - Returns a list of neighbourhood data points. - """ - - p_distances = dist_matrix[p_ix, :] - sample = np.nonzero(p_distances <= r)[0] - return sample - def _get_alpha_n(self, dist_matrix, indices, r): """Computes the alpha neighbourhood points. - + Parameters ---------- dist_matrix : array-like, shape (n_samples, n_features) The distance matrix w.r.t. to the training samples. - + indices : int Subsetting index - + r : int Neighbourhood radius - + Returns ------- alpha_n : array, shape (n_alpha, ) - Returns the alpha neighbourhood points. + Returns the alpha neighbourhood points. """ if type(indices) is int: alpha_n = np.count_nonzero( - dist_matrix[indices, :] < (r * self._alpha)) + dist_matrix[indices, :] < (r * self.alpha)) return alpha_n else: alpha_n = np.count_nonzero( - dist_matrix[indices, :] < (r * self._alpha), axis=1) + dist_matrix[indices, :] < (r * self.alpha), axis=1) return alpha_n def _calculate_decision_score(self, X): @@ -186,15 +196,15 @@ class LOCI(BaseDetector): outlier_scores = [0] * X.shape[0] dist_matrix = squareform(pdist(X, metric="euclidean")) max_dist = dist_matrix.max() - r_max = max_dist / self._alpha + r_max = max_dist / self.alpha for p_ix in range(X.shape[0]): - critical_values = self._get_critical_values(dist_matrix, p_ix, - r_max) + critical_values = _get_critical_values(dist_matrix, self.alpha, + p_ix, r_max) for r in critical_values: n_values = self._get_alpha_n(dist_matrix, - self._get_sampling_N(dist_matrix, - p_ix, r), r) + _get_sampling_N(dist_matrix, + p_ix, r), r) cur_alpha_n = self._get_alpha_n(dist_matrix, p_ix, r) n_hat = np.mean(n_values) mdef = 1 - (cur_alpha_n / n_hat) diff --git a/pyod/models/lscp.py b/pyod/models/lscp.py index 372350e30007aa8b9594d9d97dceb448b2ae8df4..52154460096256aa96d395f328d5baf5f51b27c0 100644 --- a/pyod/models/lscp.py +++ b/pyod/models/lscp.py @@ -2,7 +2,7 @@ Locally Selective Combination of Parallel Outlier Ensembles (LSCP) Adapted from the original implementation: """ -# Author: Zain Nasrullah +# Author: Zain Nasrullah <zain.nasrullah.zn@gmail.com> # License: BSD 2 clause # system imports @@ -107,7 +107,6 @@ class LSCP(BaseDetector): >>> from pyod.utils.utility import standardizer >>> from pyod.models.lscp import LSCP >>> from pyod.models.lof import LOF - >>> >>> X_train, y_train, X_test, y_test = generate_data( ... n_train=50, n_test=50, ... contamination=0.1, random_state=42) @@ -137,20 +136,16 @@ class LSCP(BaseDetector): self.random_state = random_state def fit(self, X, y=None): - """ Fit LSCP using X as training data + """Fit detector. y is optional for unsupervised methods. Parameters ---------- - X : numpy array, shape (n_samples, n_features) - Training data - y : None, optional (default=None) - Labels not necessary for unsupervised method + X : numpy array of shape (n_samples, n_features) + The input samples. - Returns - ------- - self + y : numpy array of shape (n_samples,), optional (default=None) + The ground truth of the input samples (labels). """ - # check detector_list if len(self.detector_list) < 2: raise ValueError("The detector list has less than 2 detectors.") @@ -181,18 +176,22 @@ class LSCP(BaseDetector): return self def decision_function(self, X): - """ Predict outlier scores on test data X (note: model must already - be fit) + """Predict raw anomaly score of X using the fitted detector. + + The anomaly score of an input sample is computed based on different + detector algorithms. For consistency, outliers are assigned with + larger anomaly scores. Parameters ---------- - X : numpy array, shape (n_samples, n_features) - Test data + X : numpy array of shape (n_samples, n_features) + The training input samples. Sparse matrices are accepted only + if they are supported by the base estimator. Returns ------- - decision_scores : numpy array, shape (n_samples) - Outlier scores for test samples + anomaly_scores : numpy array of shape (n_samples,) + The anomaly score of the input samples. """ # check whether model has been fit check_is_fitted(self, ['training_pseudo_label_', 'train_scores_', diff --git a/pyod/models/mo_gaal.py b/pyod/models/mo_gaal.py index 85b51a49e9680b012eda7811f9d8a83518a83476..0cbebb2d66565ad5bb60a39d6964c8a664b422b5 100644 --- a/pyod/models/mo_gaal.py +++ b/pyod/models/mo_gaal.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -"""Grubbs' test for outliers. -Part of the codes are adapted from https://github.com/Cloudy10/loci +"""Multiple-Objective Generative Adversarial Active Learning. +Part of the codes are adapted from https://github.com/leibinghe/GAAL-based-outlier-detection """ # Author: Winston Li <jk_zhengli@hotmail.com> # License: BSD 2 clause @@ -8,19 +8,20 @@ Part of the codes are adapted from https://github.com/Cloudy10/loci from __future__ import division from __future__ import print_function -import math from collections import defaultdict import numpy as np -import keras -from keras.layers import Input, Dense -from keras.models import Sequential, Model + +from keras.layers import Input +from keras.models import Model from keras.optimizers import SGD from sklearn.utils import check_array from sklearn.utils.validation import check_is_fitted from .base import BaseDetector +from .gaal_base import create_discriminator +from .gaal_base import create_generator class MO_GAAL(BaseDetector): @@ -46,7 +47,7 @@ class MO_GAAL(BaseDetector): The number of epochs of training. lr_d : float, default = 0.01 - The learn rate of the discrinimator. + The learn rate of the discriminator. lr_g : float, default = 0.0001 The learn rate of the generator. @@ -59,24 +60,22 @@ class MO_GAAL(BaseDetector): Attributes ---------- - decision_scores\_: numpy array of shape (n_samples,) + decision_scores_ : numpy array of shape (n_samples,) The outlier scores of the training data. The higher, the more abnormal. Outliers tend to have higher - scores. This value is available once the detector is - fitted. - - threshold\_: float + scores. This value is available once the detector is fitted. + + threshold_ : float The threshold is based on ``contamination``. It is the ``n_samples * contamination`` most abnormal samples in ``decision_scores_``. The threshold is calculated for generating binary outlier labels. - - labels\_: int, either 0 or 1 + + labels_ : int, either 0 or 1 The binary labels of the training data. 0 stands for inliers and 1 for outliers/anomalies. It is generated by applying ``threshold_`` on ``decision_scores_``. - Examples -------- >>> from pyod.models.mo_gaal import MO_GAAL @@ -86,8 +85,8 @@ class MO_GAAL(BaseDetector): >>> contamination = 0.1 >>> n_features = 300 >>> X_train, y_train, X_test, y_test = generate_data( - >>> n_train=n_train, n_test=n_test, n_features=n_features, - >>> contamination=contamination, random_state=42) + ... n_train=n_train, n_test=n_test, n_features=n_features, + ... contamination=contamination, random_state=42) >>> >>> clf = MO_GAAL() >>> clf.fit(X_train) @@ -104,74 +103,16 @@ class MO_GAAL(BaseDetector): self.decay = decay self.momentum = momentum - def create_generator(self, latent_size): - """Cretes the generator of the GAN for a given latent size. - - Parameters - ---------- - latent_size : int - The size of the latent space of the generator - - Returns - ------- - D : Keras model() object - Returns a model() object. - """ - - gen = Sequential() - gen.add(Dense(latent_size, input_dim=latent_size, activation='relu', - kernel_initializer=keras.initializers.Identity( - gain=1.0))) - gen.add(Dense(latent_size, activation='relu', - kernel_initializer=keras.initializers.Identity( - gain=1.0))) - latent = Input(shape=(latent_size,)) - fake_data = gen(latent) - return Model(latent, fake_data) - - def create_discriminator(self, latent_size, data_size): - """Cretes the discriminator of the GAN for a given latent size. - - Parameters - ---------- - latent_size : int - The size of the latent space of the generator. - - data_size : int - Size of the input data. - - Returns - ------- - D : Keras model() object - Returns a model() object. - """ - - dis = Sequential() - dis.add(Dense(int(math.ceil(math.sqrt(data_size))), - input_dim=latent_size, activation='relu', - kernel_initializer=keras.initializers.VarianceScaling( - scale=1.0, mode='fan_in', distribution='normal', - seed=None))) - dis.add(Dense(1, activation='sigmoid', - kernel_initializer=keras.initializers.VarianceScaling( - scale=1.0, mode='fan_in', distribution='normal', - seed=None))) - data = Input(shape=(latent_size,)) - fake = dis(data) - return Model(data, fake) - def fit(self, X, y=None): - """Fit the model using X as training data. - + """Fit detector. y is optional for unsupervised methods. + Parameters ---------- - X : array, shape (n_samples, n_features) - Training data. - - Returns - ------- - self : object + X : numpy array of shape (n_samples, n_features) + The input samples. + y : numpy array of shape (n_samples,), optional (default=None) + The ground truth of the input samples (labels). """ X = check_array(X) @@ -183,25 +124,25 @@ class MO_GAAL(BaseDetector): latent_size = X.shape[1] data_size = X.shape[0] # Create discriminator - self.discriminator = self.create_discriminator(latent_size, data_size) + self.discriminator = create_discriminator(latent_size, data_size) self.discriminator.compile( optimizer=SGD(lr=self.lr_d, decay=self.decay, momentum=self.momentum), loss='binary_crossentropy') # Create k combine models for i in range(self.k): - names['sub_generator' + str(i)] = self.create_generator( - latent_size) + names['sub_generator' + str(i)] = create_generator(latent_size) latent = Input(shape=(latent_size,)) names['fake' + str(i)] = names['sub_generator' + str(i)](latent) self.discriminator.trainable = False names['fake' + str(i)] = self.discriminator(names['fake' + str(i)]) names['combine_model' + str(i)] = Model(latent, names['fake' + str(i)]) - names['combine_model' + str(i)].compile(optimizer=SGD(lr=self.lr_g, - decay=self.decay, - momentum=self.momentum), - loss='binary_crossentropy') + names['combine_model' + str(i)].compile( + optimizer=SGD(lr=self.lr_g, + decay=self.decay, + momentum=self.momentum), + loss='binary_crossentropy') # Start iteration for epoch in range(epochs): @@ -271,11 +212,9 @@ class MO_GAAL(BaseDetector): noise = np.random.uniform(0, 1, (int(noise_size), latent_size)) if stop == 0: for i in range(self.k): - names['sub_generator' + str(i) + '_loss'] = names[ - 'combine_model' + str(i)].train_on_batch(noise, - names[ - 'trick' + str( - i)]) + names['sub_generator' + str(i) + '_loss'] = \ + names['combine_model' + str(i)].train_on_batch( + noise, names['trick' + str(i)]) self.train_history[ 'sub_generator{}_loss'.format(i)].append( names['sub_generator' + str(i) + '_loss']) @@ -304,6 +243,23 @@ class MO_GAAL(BaseDetector): self._process_decision_scores() def decision_function(self, X): + """Predict raw anomaly score of X using the fitted detector. + + The anomaly score of an input sample is computed based on different + detector algorithms. For consistency, outliers are assigned with + larger anomaly scores. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The training input samples. Sparse matrices are accepted only + if they are supported by the base estimator. + + Returns + ------- + anomaly_scores : numpy array of shape (n_samples,) + The anomaly score of the input samples. + """ check_is_fitted(self, ['discriminator']) X = check_array(X) pred_scores = self.discriminator.predict(X) diff --git a/pyod/models/ocsvm.py b/pyod/models/ocsvm.py index c20f3f9cd114a70b94fa31e170a06f00c1ed8df7..cae144f83d9569da238c282b933931dc6ec82983 100644 --- a/pyod/models/ocsvm.py +++ b/pyod/models/ocsvm.py @@ -137,6 +137,16 @@ class OCSVM(BaseDetector): self.random_state = random_state def fit(self, X, y=None, sample_weight=None, **params): + """Fit detector. y is optional for unsupervised methods. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The input samples. + + y : numpy array of shape (n_samples,), optional (default=None) + The ground truth of the input samples (labels). + """ # validate inputs X and y (optional) X = check_array(X) self._set_n_classes(y) @@ -162,6 +172,23 @@ class OCSVM(BaseDetector): return self def decision_function(self, X): + """Predict raw anomaly score of X using the fitted detector. + + The anomaly score of an input sample is computed based on different + detector algorithms. For consistency, outliers are assigned with + larger anomaly scores. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The training input samples. Sparse matrices are accepted only + if they are supported by the base estimator. + + Returns + ------- + anomaly_scores : numpy array of shape (n_samples,) + The anomaly score of the input samples. + """ check_is_fitted(self, ['decision_scores_', 'threshold_', 'labels_']) # Invert outlier scores. Outliers comes with higher outlier scores return invert_order(self.detector_.decision_function(X)) diff --git a/pyod/models/pca.py b/pyod/models/pca.py index e048a8dc292bfb2b032b6c00a7288b6d2a4a65e3..224faf758813d6ee7e6d1392842a13c88b7eb9c6 100644 --- a/pyod/models/pca.py +++ b/pyod/models/pca.py @@ -204,7 +204,17 @@ class PCA(BaseDetector): # noinspection PyIncorrectDocstring def fit(self, X, y=None): - # Validate inputs X and y (optional) + """Fit detector. y is optional for unsupervised methods. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The input samples. + + y : numpy array of shape (n_samples,), optional (default=None) + The ground truth of the input samples (labels). + """ + # validate inputs X and y (optional) X = check_array(X) self._set_n_classes(y) @@ -259,6 +269,23 @@ class PCA(BaseDetector): return self def decision_function(self, X): + """Predict raw anomaly score of X using the fitted detector. + + The anomaly score of an input sample is computed based on different + detector algorithms. For consistency, outliers are assigned with + larger anomaly scores. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The training input samples. Sparse matrices are accepted only + if they are supported by the base estimator. + + Returns + ------- + anomaly_scores : numpy array of shape (n_samples,) + The anomaly score of the input samples. + """ check_is_fitted(self, ['components_', 'w_components_']) X = check_array(X) @@ -269,16 +296,6 @@ class PCA(BaseDetector): cdist(X, self.selected_components_) / self.selected_w_components_, axis=1).ravel() - # @property - # def components_(self): - # """Principal axes in feature space, representing the directions of - # maximum variance in the data. The components are sorted by - # ``explained_variance_``. - # - # Decorator for scikit-learn PCA attributes. - # """ - # return self.detector_.components_ - @property def explained_variance_(self): """The amount of variance explained by each of the selected components. @@ -319,20 +336,9 @@ class PCA(BaseDetector): """ return self.detector_.mean_ - # @property - # def n_components_(self): - # """The estimated number of components. When n_components is set - # to 'mle' or a number between 0 and 1 (with svd_solver == 'full') this - # number is estimated from input data. Otherwise it equals the parameter - # n_components, or n_features if n_components is None. - # - # Decorator for scikit-learn PCA attributes. - # """ - # return self.detector_.n_components_ - @property def noise_variance_(self): - """ The estimated noise covariance following the Probabilistic PCA model + """The estimated noise covariance following the Probabilistic PCA model from Tipping and Bishop 1999. See "Pattern Recognition and Machine Learning" by C. Bishop, 12.2.1 p. 574 or http://www.miketipping.com/papers/met-mppca.pdf. It is required to diff --git a/pyod/models/so_gaal.py b/pyod/models/so_gaal.py index c8d76837e478f73e62a65db5d97cfd800afeaab6..72699618e6b2fcbaa2623bd8705c6511c2267e5a 100644 --- a/pyod/models/so_gaal.py +++ b/pyod/models/so_gaal.py @@ -8,19 +8,20 @@ Part of the codes are adapted from https://github.com/leibinghe/GAAL-based-outli from __future__ import division from __future__ import print_function -import math from collections import defaultdict import numpy as np -import keras -from keras.layers import Input, Dense -from keras.models import Sequential, Model + +from keras.layers import Input +from keras.models import Model from keras.optimizers import SGD from sklearn.utils import check_array from sklearn.utils.validation import check_is_fitted from .base import BaseDetector +from .gaal_base import create_discriminator +from .gaal_base import create_generator class SO_GAAL(BaseDetector): @@ -46,7 +47,7 @@ class SO_GAAL(BaseDetector): The number of epochs of training. lr_d : float, default = 0.01 - The learn rate of the discrinimator. + The learn rate of the discriminator. lr_g : float, default = 0.0001 The learn rate of the generator. @@ -59,24 +60,22 @@ class SO_GAAL(BaseDetector): Attributes ---------- - decision_scores_: numpy array of shape (n_samples,) + decision_scores_ : numpy array of shape (n_samples,) The outlier scores of the training data. The higher, the more abnormal. Outliers tend to have higher - scores. This value is available once the detector is - fitted. - - threshold_: float + scores. This value is available once the detector is fitted. + + threshold_ : float The threshold is based on ``contamination``. It is the ``n_samples * contamination`` most abnormal samples in ``decision_scores_``. The threshold is calculated for generating binary outlier labels. - - labels_: int, either 0 or 1 + + labels_ : int, either 0 or 1 The binary labels of the training data. 0 stands for inliers and 1 for outliers/anomalies. It is generated by applying ``threshold_`` on ``decision_scores_``. - Examples -------- >>> from pyod.models.so_gaal import SO_GAAL @@ -86,9 +85,8 @@ class SO_GAAL(BaseDetector): >>> contamination = 0.1 >>> n_features = 300 >>> X_train, y_train, X_test, y_test = generate_data( - >>> n_train=n_train, n_test=n_test, n_features=n_features, - >>> contamination=contamination, random_state=42) - >>> + ... n_train=n_train, n_test=n_test, n_features=n_features, + ... contamination=contamination, random_state=42) >>> clf = SO_GAAL() >>> clf.fit(X_train) >>> print(clf.decision_scores_) @@ -103,76 +101,17 @@ class SO_GAAL(BaseDetector): self.decay = decay self.momentum = momentum - def create_generator(self, latent_size): - """Cretes the generator of the GAN for a given latent size. - - Parameters - ---------- - latent_size : int - The size of the latent space of the generator - - Returns - ------- - D : Keras model() object - Returns a model() object. - """ - - gen = Sequential() - gen.add(Dense(latent_size, input_dim=latent_size, activation='relu', - kernel_initializer=keras.initializers.Identity( - gain=1.0))) - gen.add(Dense(latent_size, activation='relu', - kernel_initializer=keras.initializers.Identity( - gain=1.0))) - latent = Input(shape=(latent_size,)) - fake_data = gen(latent) - return Model(latent, fake_data) - - def create_discriminator(self, latent_size, data_size): - """Cretes the discriminator of the GAN for a given latent size. - - Parameters - ---------- - latent_size : int - The size of the latent space of the generator. - - data_size : int - Size of the input data. - - Returns - ------- - D : Keras model() object - Returns a model() object. - """ - - dis = Sequential() - dis.add(Dense(int(math.ceil(math.sqrt(data_size))), - input_dim=latent_size, activation='relu', - kernel_initializer=keras.initializers.VarianceScaling( - scale=1.0, mode='fan_in', distribution='normal', - seed=None))) - dis.add(Dense(1, activation='sigmoid', - kernel_initializer=keras.initializers.VarianceScaling( - scale=1.0, mode='fan_in', distribution='normal', - seed=None))) - data = Input(shape=(latent_size,)) - fake = dis(data) - return Model(data, fake) - def fit(self, X, y=None): - """Fit the model using X as training data. - + """Fit detector. y is optional for unsupervised methods. + Parameters ---------- - X : array, shape (n_samples, n_features) - Training data. - - Returns - ------- - self : object + X : numpy array of shape (n_samples, n_features) + The input samples. + y : numpy array of shape (n_samples,), optional (default=None) + The ground truth of the input samples (labels). """ - X = check_array(X) self._set_n_classes(y) latent_size = X.shape[1] @@ -181,12 +120,12 @@ class SO_GAAL(BaseDetector): epochs = self.stop_epochs * 3 self.train_history = defaultdict(list) - self.discriminator = self.create_discriminator(latent_size, data_size) + self.discriminator = create_discriminator(latent_size, data_size) self.discriminator.compile( optimizer=SGD(lr=self.lr_d, decay=self.decay, momentum=self.momentum), loss='binary_crossentropy') - self.generator = self.create_generator(latent_size) + self.generator = create_generator(latent_size) latent = Input(shape=(latent_size,)) fake = self.generator(latent) self.discriminator.trainable = False @@ -246,6 +185,23 @@ class SO_GAAL(BaseDetector): return self def decision_function(self, X): + """Predict raw anomaly score of X using the fitted detector. + + The anomaly score of an input sample is computed based on different + detector algorithms. For consistency, outliers are assigned with + larger anomaly scores. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The training input samples. Sparse matrices are accepted only + if they are supported by the base estimator. + + Returns + ------- + anomaly_scores : numpy array of shape (n_samples,) + The anomaly score of the input samples. + """ check_is_fitted(self, ['discriminator']) X = check_array(X) pred_scores = self.discriminator.predict(X) diff --git a/pyod/models/sos.py b/pyod/models/sos.py index 389fecb3f5ed0f4c27820014cb393e09c1458162..72a5b76049625d6bf637b57ab092db0271b0217d 100644 --- a/pyod/models/sos.py +++ b/pyod/models/sos.py @@ -20,6 +20,11 @@ from .base import BaseDetector def _get_perplexity(D, beta): """Compute the perplexity and the A-row for a specific value of the precision of a Gaussian distribution. + + Parameters + ---------- + D : array, shape (n_samples, ) + The dissimilarity matrix of the training samples. """ A = np.exp(-D * beta) @@ -97,8 +102,8 @@ class SOS(BaseDetector): >>> n_test = 50 >>> contamination = 0.1 >>> X_train, y_train, X_test, y_test = generate_data( - >>> n_train=n_train, n_test=n_test, - >>> contamination=contamination, random_state=42) + ... n_train=n_train, n_test=n_test, + ... contamination=contamination, random_state=42) >>> >>> clf = SOS() >>> clf.fit(X_train) @@ -247,17 +252,15 @@ class SOS(BaseDetector): return O def fit(self, X, y=None): - """Fit the model using X as training data. - + """Fit detector. y is optional for unsupervised methods. + Parameters ---------- - X : array, shape (n_samples, n_features) - Training data. - - Returns - ------- - self : object + X : numpy array of shape (n_samples, n_features) + The input samples. + y : numpy array of shape (n_samples,), optional (default=None) + The ground truth of the input samples (labels). """ X = check_array(X) self._set_n_classes(y) @@ -271,6 +274,23 @@ class SOS(BaseDetector): return self def decision_function(self, X): + """Predict raw anomaly score of X using the fitted detector. + + The anomaly score of an input sample is computed based on different + detector algorithms. For consistency, outliers are assigned with + larger anomaly scores. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The training input samples. Sparse matrices are accepted only + if they are supported by the base estimator. + + Returns + ------- + anomaly_scores : numpy array of shape (n_samples,) + The anomaly score of the input samples. + """ check_is_fitted(self, ['decision_scores_', 'threshold_', 'labels_']) X = check_array(X) D = self._x2d(X) diff --git a/pyod/models/xgbod.py b/pyod/models/xgbod.py index 6f41356336ef515326ed25e341d31da819875256..a78ccd68a5498afc67e645b917e98830b07a0661 100644 --- a/pyod/models/xgbod.py +++ b/pyod/models/xgbod.py @@ -356,6 +356,21 @@ class XGBOD(BaseDetector): return pred_scores.ravel() def predict(self, X): + """Predict if a particular sample is an outlier or not. + Calling xgboost `predict` function. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The input samples. + + Returns + ------- + outlier_labels : numpy array of shape (n_samples,) + For each observation, tells whether or not + it should be considered as an outlier according to the + fitted model. 0 stands for inliers and 1 for outliers. + """ check_is_fitted(self, ['clf_', 'decision_scores_', 'labels_', '_scalar']) @@ -370,6 +385,23 @@ class XGBOD(BaseDetector): return pred_scores.ravel() def predict_proba(self, X): + """Predict the probability of a sample being outlier. + Calling xgboost `predict_proba` function. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The input samples. + + + Returns + ------- + outlier_labels : numpy array of shape (n_samples,) + For each observation, tells whether or not + it should be considered as an outlier according to the + fitted model. Return the outlier probability, ranging + in [0,1]. + """ return self.decision_function(X) def fit_predict(self, X, y): diff --git a/pyod/test/conftest.py b/pyod/test/conftest.py index 6c337bbb2ee7a527acc7a23a1ac111c40bb1887f..d4ea5eb304aa9be14cb1c65abefd9130f982bb46 100644 --- a/pyod/test/conftest.py +++ b/pyod/test/conftest.py @@ -7,4 +7,4 @@ collect_ignore = [] if sys.version_info[0] == 2: # collect_ignore.append("test_so_gaal.py") # collect_ignore.append("test_mo_gaal.py") - pass \ No newline at end of file + pass diff --git a/pyod/test/test_data.py b/pyod/test/test_data.py new file mode 100644 index 0000000000000000000000000000000000000000..0366af3a1f01237667b00caaa81f898ab37effd7 --- /dev/null +++ b/pyod/test/test_data.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- + +from __future__ import division +from __future__ import print_function + +import os +import sys + +import unittest +from sklearn.utils.testing import assert_equal +# noinspection PyProtectedMember +from sklearn.utils.testing import assert_allclose +from sklearn.utils.testing import assert_less_equal +from sklearn.utils.testing import assert_raises + +import numpy as np + +# temporary solution for relative imports in case pyod is not installed +# if pyod is installed, no need to use the following line +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) + +from utils.data import generate_data +from utils.data import evaluate_print +from utils.data import get_outliers_inliers +from utils.data import check_consistent_shape + + +class TestData(unittest.TestCase): + def setUp(self): + self.n_train = 1000 + self.n_test = 500 + self.contamination = 0.1 + + self.value_lists = [0.1, 0.3, 0.2, -2, 1.5, 0, 1, -1, -0.5, 11] + + def test_data_generate(self): + X_train, y_train, X_test, y_test = \ + generate_data(n_train=self.n_train, + n_test=self.n_test, + contamination=self.contamination) + + assert_equal(y_train.shape[0], X_train.shape[0]) + assert_equal(y_test.shape[0], X_test.shape[0]) + + assert_less_equal(self.n_train - X_train.shape[0], 1) + assert_equal(X_train.shape[1], 2) + + assert_less_equal(self.n_test - X_test.shape[0], 1) + assert_equal(X_test.shape[1], 2) + + out_perc = np.sum(y_train) / self.n_train + assert_allclose(self.contamination, out_perc, atol=0.01) + + out_perc = np.sum(y_test) / self.n_test + assert_allclose(self.contamination, out_perc, atol=0.01) + + def test_data_generate2(self): + X_train, y_train, X_test, y_test = \ + generate_data(n_train=self.n_train, + n_test=self.n_test, + n_features=3, + contamination=self.contamination) + assert_allclose(X_train.shape, (self.n_train, 3)) + assert_allclose(X_test.shape, (self.n_test, 3)) + + def test_data_generate3(self): + X_train, y_train, X_test, y_test = \ + generate_data(n_train=self.n_train, + n_test=self.n_test, + n_features=2, + contamination=self.contamination, + random_state=42) + + X_train2, y_train2, X_test2, y_test2 = \ + generate_data(n_train=self.n_train, + n_test=self.n_test, + n_features=2, + contamination=self.contamination, + random_state=42) + + assert_allclose(X_train, X_train2) + assert_allclose(X_test, X_test2) + assert_allclose(y_train, y_train2) + assert_allclose(y_test, y_test2) + + def test_evaluate_print(self): + X_train, y_train, X_test, y_test = generate_data( + n_train=self.n_train, + n_test=self.n_test, + contamination=self.contamination) + evaluate_print('dummy', y_train, y_train * 0.1) + + def test_get_outliers_inliers(self): + X_train, y_train = generate_data( + n_train=self.n_train, train_only=True, + contamination=self.contamination) + + X_outliers, X_inliers = get_outliers_inliers(X_train, y_train) + + inlier_index = int(self.n_train * (1 - self.contamination)) + + assert_allclose(X_train[0:inlier_index, :], X_inliers) + assert_allclose(X_train[inlier_index:, :], X_outliers) + + def test_check_consistent_shape(self): + X_train, y_train, X_test, y_test = generate_data( + n_train=self.n_train, + n_test=self.n_test, + contamination=self.contamination) + + X_train_n, y_train_n, X_test_n, y_test_n, y_train_pred_n, y_test_pred_n \ + = check_consistent_shape(X_train, y_train, X_test, y_test, + y_train, y_test) + + assert_allclose(X_train_n, X_train) + assert_allclose(y_train_n, y_train) + assert_allclose(X_test_n, X_test) + assert_allclose(y_test_n, y_test) + assert_allclose(y_train_pred_n, y_train) + assert_allclose(y_test_pred_n, y_test) + + # test shape difference + with assert_raises(ValueError): + check_consistent_shape(X_train, y_train, y_train, y_test, + y_train, y_test) + + def tearDown(self): + pass + + if __name__ == '__main__': + unittest.main() diff --git a/pyod/test/test_stat_models.py b/pyod/test/test_stat_models.py index e0c888ad4e0fa9d333c91c1350a0614f97bbdaa1..f747b8d1c1877b874cf3d1d66dd54d28126e8573 100644 --- a/pyod/test/test_stat_models.py +++ b/pyod/test/test_stat_models.py @@ -11,6 +11,8 @@ from sklearn.utils.testing import assert_equal # noinspection PyProtectedMember from sklearn.utils.testing import assert_allclose from sklearn.utils.testing import assert_raises +from sklearn.utils.testing import assert_greater_equal +from sklearn.utils.testing import assert_less_equal import numpy as np @@ -57,14 +59,15 @@ class TestStatModels(unittest.TestCase): assert_allclose(wp, 0.5477226, atol=0.01) def test_pearsonr_mat(self): - # TODO: verify the values - pear_mat = pearsonr_mat(self.mat) assert_equal(pear_mat.shape, (10, 10)) pear_mat = pearsonr_mat(self.mat, self.w_mat) assert_equal(pear_mat.shape, (10, 10)) + assert_greater_equal(np.min(pear_mat), -1) + assert_less_equal(np.max(pear_mat), 1) + def tearDown(self): pass diff --git a/pyod/test/test_utility.py b/pyod/test/test_utility.py index c09f8ba2478e2d8aaeb51720102e1499d3c14f84..fa75ff3d26f9ce2f0d00648afc91290f4cd3cb94 100644 --- a/pyod/test/test_utility.py +++ b/pyod/test/test_utility.py @@ -10,7 +10,6 @@ import unittest from sklearn.utils.testing import assert_equal # noinspection PyProtectedMember from sklearn.utils.testing import assert_allclose -from sklearn.utils.testing import assert_less_equal from sklearn.utils.testing import assert_raises from sklearn.metrics import precision_score from sklearn.utils import check_random_state @@ -21,8 +20,6 @@ import numpy as np # if pyod is installed, no need to use the following line sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) -from utils.data import generate_data -from utils.data import evaluate_print from utils.utility import check_parameter from utils.utility import standardizer from utils.utility import get_label_n @@ -30,97 +27,7 @@ from utils.utility import precision_n_scores from utils.utility import argmaxn from utils.utility import invert_order from utils.utility import check_detector - - -class TestUtils(unittest.TestCase): - def setUp(self): - self.n_train = 1000 - self.n_test = 500 - self.contamination = 0.1 - - self.value_lists = [0.1, 0.3, 0.2, -2, 1.5, 0, 1, -1, -0.5, 11] - - def test_data_generate(self): - X_train, y_train, X_test, y_test = \ - generate_data(n_train=self.n_train, - n_test=self.n_test, - contamination=self.contamination) - - assert_equal(y_train.shape[0], X_train.shape[0]) - assert_equal(y_test.shape[0], X_test.shape[0]) - - assert_less_equal(self.n_train - X_train.shape[0], 1) - assert_equal(X_train.shape[1], 2) - - assert_less_equal(self.n_test - X_test.shape[0], 1) - assert_equal(X_test.shape[1], 2) - - out_perc = np.sum(y_train) / self.n_train - assert_allclose(self.contamination, out_perc, atol=0.01) - - out_perc = np.sum(y_test) / self.n_test - assert_allclose(self.contamination, out_perc, atol=0.01) - - def test_data_generate2(self): - X_train, y_train, X_test, y_test = \ - generate_data(n_train=self.n_train, - n_test=self.n_test, - n_features=3, - contamination=self.contamination) - assert_allclose(X_train.shape, (self.n_train, 3)) - assert_allclose(X_test.shape, (self.n_test, 3)) - - def test_data_generate3(self): - X_train, y_train, X_test, y_test = \ - generate_data(n_train=self.n_train, - n_test=self.n_test, - n_features=2, - contamination=self.contamination, - random_state=42) - - X_train2, y_train2, X_test2, y_test2 = \ - generate_data(n_train=self.n_train, - n_test=self.n_test, - n_features=2, - contamination=self.contamination, - random_state=42) - - assert_allclose(X_train, X_train2) - assert_allclose(X_test, X_test2) - assert_allclose(y_train, y_train2) - assert_allclose(y_test, y_test2) - - def test_argmaxn(self): - ind = argmaxn(self.value_lists, 3) - assert_equal(len(ind), 3) - - ind = argmaxn(self.value_lists, 3) - assert_equal(np.sum(ind), np.sum([4, 6, 9])) - - ind = argmaxn(self.value_lists, 3, order='asc') - assert_equal(np.sum(ind), np.sum([3, 7, 8])) - - with assert_raises(ValueError): - argmaxn(self.value_lists, -1) - with assert_raises(ValueError): - argmaxn(self.value_lists, 20) - - def test_evaluate_print(self): - X_train, y_train, X_test, y_test = generate_data(n_train=self.n_train, - n_test=self.n_test, - contamination=self.contamination) - evaluate_print('dummy', y_train, y_train * 0.1) - - # TODO: remove temporarily for pleasing Travis integration - # def test_visualize(self): - # X_train, y_train, X_test, y_test = generate_data( - # n_train=self.n_train, n_test=self.n_test, - # contamination=self.contamination) - # visualize('dummy', X_train, y_train, X_test, y_test, y_train * 0.1, - # y_test * 0.1, show_figure=False, save_figure=False) - - def tearDown(self): - pass +from utils.utility import score_to_label class TestParameters(unittest.TestCase): @@ -269,6 +176,7 @@ class TestMetrics(unittest.TestCase): self.labels_short_ = [0.1, 0.2, 0.2, 0.8, 0.2, 0.5, 0.7, 0.9, 1] self.manual_labels = [0, 0, 0, 1, 0, 0, 1, 1, 1, 0] self.outliers_fraction = 0.3 + self.value_lists = [0.1, 0.3, 0.2, -2, 1.5, 0, 1, -1, -0.5, 11] def test_precision_n_scores(self): assert_equal(precision_score(self.y, self.manual_labels), @@ -287,6 +195,29 @@ class TestMetrics(unittest.TestCase): with assert_raises(ValueError): get_label_n(self.y, self.labels_short_) + def test_score_to_label(self): + manual_scores = [0.1, 0.4, 0.2, 0.3, 0.5, 0.9, 0.7, 1, 0.8, 0.6] + labels = score_to_label(manual_scores, outliers_fraction=0.1) + assert_allclose(labels, [0, 0, 0, 0, 0, 0, 0, 1, 0, 0]) + + labels = score_to_label(manual_scores, outliers_fraction=0.3) + assert_allclose(labels, [0, 0, 0, 0, 0, 1, 0, 1, 1, 0]) + + def test_argmaxn(self): + ind = argmaxn(self.value_lists, 3) + assert_equal(len(ind), 3) + + ind = argmaxn(self.value_lists, 3) + assert_equal(np.sum(ind), np.sum([4, 6, 9])) + + ind = argmaxn(self.value_lists, 3, order='asc') + assert_equal(np.sum(ind), np.sum([3, 7, 8])) + + with assert_raises(ValueError): + argmaxn(self.value_lists, -1) + with assert_raises(ValueError): + argmaxn(self.value_lists, 20) + def tearDown(self): pass diff --git a/pyod/utils/data.py b/pyod/utils/data.py index e15324a521d94c40b94e6bac797004a4c5daac96..ea64e7fe65045792630b0504a3284bf1b8dd6a89 100644 --- a/pyod/utils/data.py +++ b/pyod/utils/data.py @@ -10,7 +10,9 @@ from __future__ import print_function import numpy as np from sklearn.utils import column_or_1d +from sklearn.utils import check_X_y from sklearn.utils import check_random_state +from sklearn.utils import check_consistent_length from sklearn.metrics import roc_auc_score from .utility import precision_n_scores @@ -20,28 +22,38 @@ MAX_INT = np.iinfo(np.int32).max def _generate_data(n_inliers, n_outliers, n_features, coef, offset, random_state): - """Internal function to generate data samples + """Internal function to generate data samples. - :param n_inliers: The number of inliers. - :type n_inliers: int + Parameters + ---------- + n_inliers : int + The number of inliers. - :param n_outliers: The number of outliers. - :type n_outliers: int + n_outliers : int + The number of outliers. - :param n_features: The number of features. - :type n_features: int + n_features : int + The number of features (dimensions). - :param coef: The coefficient of data generation - :type coef: float in range [0,1)+0.001 + coef : float in range [0,1)+0.001 + The coefficient of data generation. - :param offset: The offset of data generation - :type offset: int + offset : int + Adjust the value range of Gaussian and Uniform. - :param random_state: The random number generator - :type random_state: RandomState instance. + random_state : int, RandomState instance or None, optional (default=None) + If int, random_state is the seed used by the random number generator; + If RandomState instance, random_state is the random number generator; + If None, the random number generator is the RandomState instance used + by `np.random`. - :return: X,y - :rtype: numpy array of shape (n_samples, n_features) and (n_features,) + Returns + ------- + X : numpy array of shape (n_train, n_features) + Data. + + y : numpy array of shape (n_train,) + Ground truth. """ inliers = coef * random_state.randn(n_inliers, n_features) + offset @@ -54,42 +66,81 @@ def _generate_data(n_inliers, n_outliers, n_features, coef, offset, return X, y +def get_outliers_inliers(X, y): + """Internal method to separate inliers from outliers. + + Parameters + ---------- + X : numpy array of shape (n_samples, n_features) + The input samples + + y : list or array of shape (n_samples,) + The ground truth of input samples. + + Returns + ------- + X_outliers : numpy array of shape (n_samples, n_features) + Outliers. + + X_inliers : numpy array of shape (n_samples, n_features) + Inliers. + + """ + X_outliers = X[np.where(y == 1)] + X_inliers = X[np.where(y == 0)] + return X_outliers, X_inliers + + def generate_data(n_train=1000, n_test=500, n_features=2, contamination=0.1, train_only=False, offset=10, random_state=None): """Utility function to generate synthesized data. Normal data is generated by a multivariate Gaussian distribution and outliers are generated by a uniform distribution. - :param n_train: number of training points to generate - :type n_train: int, (default=1000) + Parameters + ---------- + n_train : int, (default=1000) + The number of training points to generate. + + n_test : int, (default=500) + The number of test points to generate. - :param n_test: number of test points to generate - :type n_test: int + n_features : int, optional (default=2) + The number of features (dimensions). - :param contamination: The amount of contamination of the data set, - i.e. the proportion of outliers in the data set. Used when fitting to + contamination : float in (0., 0.5), optional (default=0.1) + The amount of contamination of the data set, i.e. + the proportion of outliers in the data set. Used when fitting to define the threshold on the decision function. - :type contamination: float in (0., 0.5), optional (default=0.1) - :param n_features: The number of features - :type n_features: int, optional (default=2) + train_only : bool, optional (default=False) + If true, generate train data only. - :param train_only: If true, generate train data only - :type train_only: bool, optional(default=False) + offset : int, optional (default=10) + Adjust the value range of Gaussian and Uniform. - :param offset: Adjust the value range of Gaussian and Uniform - :type offset: int, optional (default=10) + random_state : int, RandomState instance or None, optional (default=None) + If int, random_state is the seed used by the random number generator; + If RandomState instance, random_state is the random number generator; + If None, the random number generator is the RandomState instance used + by `np.random`. - :param random_state: If int, random_state is the seed used by the - random number generator; If RandomState instance, random_state is - the random number generator; If None, the random number generator - is the RandomState instance used by `np.random`. - :type random_state: int, RandomState instance or None, - optional (default=None) + Returns + ------- + X_train : numpy array of shape (n_train, n_features) + Training data. + + y_train : numpy array of shape (n_train,) + Training ground truth. + + X_test : numpy array of shape (n_test, n_features) + Test data. + + y_test : numpy array of shape (n_test,) + Test ground truth. - :return: training data(X_train, y_test) and test data (X_test, y_test) - :rtype: tuple, (ndarry, ndarry, ndarry, ndarry) """ + # initialize a random state and seeds for the instance random_state = check_random_state(random_state) offset_ = random_state.randint(low=offset) @@ -114,16 +165,19 @@ def generate_data(n_train=1000, n_test=500, n_features=2, contamination=0.1, def get_color_codes(y): - """ - Internal function to generate color codes for inliers and outliers - Inliers (0): blue - Outlier (1): red + """Internal function to generate color codes for inliers and outliers. + Inliers (0): blue; Outlier (1): red. - :param y: The binary labels of the groud truth, where 0 is inlier - :type y: list, array, numpy array of shape (n_samples,) + Parameters + ---------- + y : list or numpy array of shape (n_samples,) + The ground truth. Binary (0: inliers, 1: outliers). + + Returns + ------- + c : numpy array of shape (n_samples,) + Color codes. - :return: The list of color codes ['r', 'b', ..., 'b'] - :rtype: list """ y = column_or_1d(y) @@ -137,22 +191,88 @@ def get_color_codes(y): return c -def evaluate_print(clf_name, y, y_pred): +def check_consistent_shape(X_train, y_train, X_test, y_test, y_train_pred, + y_test_pred): + """Internal shape to check input data shapes are consistent. + + Parameters + ---------- + X_train : numpy array of shape (n_samples, n_features) + The training samples. + + y_train : list or array of shape (n_samples,) + The ground truth of training samples. + + X_test : numpy array of shape (n_samples, n_features) + The test samples. + + y_test : list or array of shape (n_samples,) + The ground truth of test samples. + + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. + + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. + + Returns + ------- + X_train : numpy array of shape (n_samples, n_features) + The training samples. + + y_train : list or array of shape (n_samples,) + The ground truth of training samples. + + X_test : numpy array of shape (n_samples, n_features) + The test samples. + + y_test : list or array of shape (n_samples,) + The ground truth of test samples. + + y_train_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the training samples. + + y_test_pred : numpy array of shape (n_samples, n_features) + The predicted binary labels of the test samples. """ - Utility function for evaluating and printing the results for examples - Internal use only - :param clf_name: The name of the detector - :type clf_name: str + # check input data shapes are consistent + X_train, y_train = check_X_y(X_train, y_train) + X_test, y_test = check_X_y(X_test, y_test) + + y_test_pred = column_or_1d(y_test_pred) + y_train_pred = column_or_1d(y_train_pred) - :param y: The ground truth - :type y: list or array of shape (n_samples,) + check_consistent_length(y_train, y_train_pred) + check_consistent_length(y_test, y_test_pred) + + if X_train.shape[1] != X_test.shape[1]: + raise ValueError("X_train {0} and X_test {1} have different number " + "of features.".format(X_train.shape, X_test.shape)) + + return X_train, y_train, X_test, y_test, y_train_pred, y_test_pred + + +def evaluate_print(clf_name, y, y_pred): + """Utility function for evaluating and printing the results for examples. + Default metrics include ROC and Precision @ n + + Parameters + ---------- + clf_name : str + The name of the detector. + + y : list or numpy array of shape (n_samples,) + The ground truth. Binary (0: inliers, 1: outliers). + + y_pred : list or numpy array of shape (n_samples,) + The raw outlier scores as returned by a fitted model. - :param y_pred: The predicted outlier scores - :type y: list or array of shape (n_samples,) """ + y = column_or_1d(y) y_pred = column_or_1d(y_pred) + check_consistent_length(y, y_pred) print('{clf_name} ROC:{roc}, precision @ rank n:{prn}'.format( clf_name=clf_name, diff --git a/pyod/utils/stat_models.py b/pyod/utils/stat_models.py index ec6af247c50001cf947add76a67cb0b0153ebfdb..60d7eb0b725d662a76d8661964c985977d249770 100644 --- a/pyod/utils/stat_models.py +++ b/pyod/utils/stat_models.py @@ -12,7 +12,6 @@ from numba import njit from scipy.stats import pearsonr from sklearn.utils.validation import check_array # noinspection PyProtectedMember -from sklearn.utils.testing import assert_allclose from sklearn.utils.validation import check_consistent_length @@ -51,7 +50,7 @@ def pairwise_distances_no_broadcast(X, Y): @njit -def _pairwise_distances_no_broadcast_helper(X, Y): +def _pairwise_distances_no_broadcast_helper(X, Y): # pragma: no cover """Internal function for calculating the distance with numba. Do not use. Parameters @@ -73,24 +72,28 @@ def _pairwise_distances_no_broadcast_helper(X, Y): def wpearsonr(x, y, w=None): - # noinspection PyPep8 """Utility function to calculate the weighted Pearson correlation of two samples. See https://stats.stackexchange.com/questions/221246/such-thing-as-a-weighted-correlation for more information - :param x: Input x - :type x: array, shape (n,) + Parameters + ---------- + x : array, shape (n,) + Input x. - :param y: Input y - :type y: array, shape (n,) + y : array, shape (n,) + Input y. - :param w: Weights - :type w: array, shape (n,) + w : array, shape (n,) + Weights w. + + Returns + ------- + scores : float in range of [-1,1] + Weighted Pearson Correlation between x and y. - :return: Weighted Pearson Correlation between x and y - :rtype: float [-1,1] """ # unweighted version @@ -145,6 +148,22 @@ def wpearsonr(x, y, w=None): def pearsonr_mat(mat, w=None): + """Utility function to calculate pearson matrix (row-wise). + + Parameters + ---------- + mat : numpy array of shape (n_samples, n_features) + Input matrix. + + w : numpy array of shape (n_features,) + Weights. + + Returns + ------- + pear_mat : numpy array of shape (n_samples, n_samples) + Row-wise pearson score matrix. + + """ mat = check_array(mat) n_row = mat.shape[0] n_col = mat.shape[1] diff --git a/pyod/utils/utility.py b/pyod/utils/utility.py index 42f100ffe07f3a7057ce95ce358ffd3f098f60f0..c751aa70ef3feb1a4de6d4d7ab86bf044c571e57 100644 --- a/pyod/utils/utility.py +++ b/pyod/utils/utility.py @@ -13,10 +13,11 @@ import numbers import sklearn from sklearn.metrics import precision_score from sklearn.preprocessing import StandardScaler + from sklearn.utils import column_or_1d from sklearn.utils import check_array from sklearn.utils import check_consistent_length -from sklearn.utils.testing import assert_equal + from scipy.stats import scoreatpercentile from sklearn.utils import check_random_state from sklearn.utils.random import sample_without_replacement @@ -27,43 +28,46 @@ MIN_INT = -1 * MAX_INT def check_parameter(param, low=MIN_INT, high=MAX_INT, param_name='', include_left=False, include_right=False): - """Check if an input parameter is with in the range low and high bounds. + """Check if an input is within the defined range. + + Parameters + ---------- + param : int, float + The input parameter to check. - :param param: The input parameter to check - :type param: int, float + low : int, float + The lower bound of the range. - :param low: The lower bound of the range - :type low: int, float + high : int, float + The higher bound of the range. - :param high: The higher bound of the range - :type high: int, float + param_name : str, optional (default='') + The name of the parameter. - :param param_name: The name of the parameter - :type param_name: str, optional (default='') + include_left : bool, optional (default=False) + Whether includes the lower bound (lower bound <=). - :param include_left: Whether includes the lower bound (lower bound <=) - :type include_left: bool, optional (default=False) + include_right : bool, optional (default=False) + Whether includes the higher bound (<= higher bound). - :param include_right: Whether includes the higher bound (<= higher bound ) - :type include_right: bool, optional (default=False) + Returns + ------- + within_range : bool or raise errors + Whether the parameter is within the range of (low, high) - :return: Whether the parameter is within the range of (low, high) - :rtype: bool or raise errors """ # param, low and high should all be numerical if not isinstance(param, (numbers.Integral, np.integer, np.float)): - raise TypeError( - '{param_name} is set to {param}. ' - 'Not numerical'.format(param=param, - param_name=param_name)) + raise TypeError('{param_name} is set to {param} Not numerical'.format( + param=param, param_name=param_name)) if not isinstance(low, (numbers.Integral, np.integer, np.float)): - raise TypeError( - 'low is set to {low}. ''Not numerical'.format(low=low)) + raise TypeError('low is set to {low}. Not numerical'.format(low=low)) + if not isinstance(high, (numbers.Integral, np.integer, np.float)): - raise TypeError( - 'high is set to {high}. ''Not numerical'.format(high=high)) + raise TypeError('high is set to {high}. Not numerical'.format( + high=high)) # at least one of the bounds should be specified if low is MIN_INT and high is MAX_INT: @@ -126,10 +130,10 @@ def standardizer(X, X_t=None, keep_scalar=False): Parameters ---------- - X : ndarray (n_samples, n_features) + X : numpy array of shape (n_samples, n_features) The training samples - X_t : ndarray (n_samples_new, n_features), optional (default=None) + X_t : numpy array of shape (n_samples_new, n_features), optional (default=None) The data to be converted keep_scalar : bool, optional (default=False) @@ -137,10 +141,10 @@ def standardizer(X, X_t=None, keep_scalar=False): Returns ------- - X_norm : ndarray (n_samples, n_features) + X_norm : numpy array of shape (n_samples, n_features) X after the Z-score normalization - X_t_norm : ndarray (n_samples, n_features) + X_t_norm : numpy array of shape (n_samples, n_features) X_t after the Z-score normalization scalar : sklearn scalar object @@ -169,27 +173,52 @@ def standardizer(X, X_t=None, keep_scalar=False): def score_to_label(pred_scores, outliers_fraction=0.1): - """Turn raw outlier outlier scores to binary labels (0 or 1) + """Turn raw outlier outlier scores to binary labels (0 or 1). + + Parameters + ---------- + pred_scores : list or numpy array of shape (n_samples,) + Raw outlier scores. Outliers are assumed have larger values. - :param pred_scores: raw outlier scores - :param outliers_fraction: percentage of outliers - :return: binary labels (1 stands for outlier) - :rtype: int + outliers_fraction : float in (0,1) + Percentage of outliers. + + Returns + ------- + outlier_labels : numpy array of shape (n_samples,) + For each observation, tells whether or not + it should be considered as an outlier according to the + fitted model. Return the outlier probability, ranging + in [0,1]. """ + # check input values + pred_scores = column_or_1d(pred_scores) + check_parameter(outliers_fraction, 0, 1) + threshold = scoreatpercentile(pred_scores, 100 * (1 - outliers_fraction)) pred_labels = (pred_scores > threshold).astype('int') return pred_labels def precision_n_scores(y, y_pred, n=None): - """Utility function to calculate precision @ rank n - - :param y: ground truth - :param y_pred: predicted outlier scores as returned by fitted model - (not rounded off) - :param n: number of outliers, if not defined, infer using ground truth - :return: precision at rank n score - :rtype: float + """Utility function to calculate precision @ rank n. + + Parameters + ---------- + y : list or numpy array of shape (n_samples,) + The ground truth. Binary (0: inliers, 1: outliers). + + y_pred : list or numpy array of shape (n_samples,) + The raw outlier scores as returned by a fitted model. + + n : int, optional (default=None) + The number of outliers. if not defined, infer using ground truth. + + Returns + ------- + precision_at_rank_n : float + Precision at rank n score. + """ # turn raw prediction decision scores into binary labels @@ -202,95 +231,34 @@ def precision_n_scores(y, y_pred, n=None): return precision_score(y, y_pred) -def generate_bagging_indices(random_state, bootstrap_features, n_features, - min_features, max_features): - """ Randomly draw feature indices. Internal use only. - - Modified from sklearn/ensemble/bagging.py +def get_label_n(y, y_pred, n=None): + """Function to turn raw outlier scores into binary labels by assign 1 + to top n outlier scores. Parameters ---------- - random_state : RandomState - A random number generator instance to define the state of the random permutations generator. - bootstrap_features : bool - Specifies whether to bootstrap indice generation - n_features : int - Specifies the population size when generating indices - min_features : int - Lower limit for number of features to randomly sample - max_features : int - Upper limit for number of features to randomly sample + y : list or numpy array of shape (n_samples,) + The ground truth. Binary (0: inliers, 1: outliers). - Returns - ------- - feature_indices : numpy array, shape (n_samples, ) - Indices for features to bag + y_pred : list or numpy array of shape (n_samples,) + The raw outlier scores as returned by a fitted model. - """ - - # Get valid random state - random_state = check_random_state(random_state) - - # decide number of features to draw - random_n_features = random_state.randint(min_features, max_features) - - # Draw indices - feature_indices = generate_indices(random_state, bootstrap_features, - n_features, random_n_features) - - return feature_indices - - -def generate_indices(random_state, bootstrap, n_population, n_samples): - """ Draw randomly sampled indices. Internal use only. - - See sklearn/ensemble/bagging.py - - Parameters - ---------- - random_state : RandomState - A random number generator instance to define the state of the random permutations generator. - bootstrap : bool - Specifies whether to bootstrap indice generation - n_population : int - Specifies the population size when generating indices - n_samples : int - Specifies number of samples to draw + n : int, optional (default=None) + The number of outliers. if not defined, infer using ground truth. Returns ------- - indices : numpy array, shape (n_samples,) - randomly drawn indices - """ - - # Draw sample indices - if bootstrap: - indices = random_state.randint(0, n_population, n_samples) - else: - indices = sample_without_replacement(n_population, n_samples, - random_state=random_state) - - return indices - - -def get_label_n(y, y_pred, n=None): - """Function to turn raw outlier scores into binary labels by assign 1 - to top n outlier scores. - - Example y: [0,1,1,0,0,0] - y_pred: [0.1, 0.5, 0.3, 0.2, 0.7] - return [0, 1, 0, 0, 1] - - :param y: ground truth - :type y: list or numpy array of shape (n_samples,) + labels : numpy array of shape (n_samples,) + binary labels 0: normal points and 1: outliers - :param y_pred: raw outlier scores - :type y_pred: list or numpy array of shape (n_samples,) - - :param n: number of outliers, if not defined, infer using ground truth - :type n: int + Examples + -------- + >>> from pyod.utils.utility import get_label_n + >>> y = [0, 1, 1, 0, 0, 0] + >>> y_pred = [0.1, 0.5, 0.3, 0.2, 0.7] + >>> get_label_n(y, y_pred) + >>> [0, 1, 0, 0, 1] - :return: binary labels 0: normal points and 1: outliers """ # enforce formats of inputs @@ -313,19 +281,29 @@ def get_label_n(y, y_pred, n=None): def argmaxn(value_list, n, order='desc'): + """Return the index of top n elements in the list + if order is set to 'desc', otherwise return the index of n smallest ones. + + Parameters + ---------- + value_list : list, array, numpy array of shape (n_samples,) + A list containing all values. + + n : int + The number of elements to select. + + order : str, optional (default='desc') + The order to sort {'desc', 'asc'}: + + - 'desc': descending + - 'asc': ascending + + Returns + ------- + index_list : numpy array of shape (n,) + The index of the top n elements. """ - Return the index of top n elements in the list if order is set to 'desc', - otherwise return the index of n smallest elements - - :param value_list: a list containing all values - :type value_list: list, array - :param n: the number of the elements to select - :type n: int - :param order: the order to sort {'desc', 'asc'} - :type order: str, optional (default='desc') - :return: the index of the top n elements - :rtype: list - """ + value_list = column_or_1d(value_list) length = len(value_list) @@ -390,10 +368,94 @@ def _sklearn_version_20(): In sklearn 20.0, LOF is changed. Specifically, _decision_function is replaced by _score_samples - :return: True if sklearn.__version__ is newer than 0.20.0 + Returns + ------- + sklearn_20_flag : bool + True if sklearn.__version__ is newer than 0.20.0 + """ sklearn_version = str(sklearn.__version__) if int(sklearn_version.split(".")[1]) > 19: return True else: return False + + +def generate_bagging_indices(random_state, bootstrap_features, n_features, + min_features, max_features): + """ Randomly draw feature indices. Internal use only. + + Modified from sklearn/ensemble/bagging.py + + Parameters + ---------- + random_state : RandomState + A random number generator instance to define the state of the random + permutations generator. + + bootstrap_features : bool + Specifies whether to bootstrap indice generation + + n_features : int + Specifies the population size when generating indices + + min_features : int + Lower limit for number of features to randomly sample + + max_features : int + Upper limit for number of features to randomly sample + + Returns + ------- + feature_indices : numpy array, shape (n_samples,) + Indices for features to bag + + """ + + # Get valid random state + random_state = check_random_state(random_state) + + # decide number of features to draw + random_n_features = random_state.randint(min_features, max_features) + + # Draw indices + feature_indices = generate_indices(random_state, bootstrap_features, + n_features, random_n_features) + + return feature_indices + + +def generate_indices(random_state, bootstrap, n_population, n_samples): + """ Draw randomly sampled indices. Internal use only. + + See sklearn/ensemble/bagging.py + + Parameters + ---------- + random_state : RandomState + A random number generator instance to define the state of the random + permutations generator. + + bootstrap : bool + Specifies whether to bootstrap indice generation + + n_population : int + Specifies the population size when generating indices + + n_samples : int + Specifies number of samples to draw + + Returns + ------- + indices : numpy array, shape (n_samples,) + randomly drawn indices + """ + + # Draw sample indices + if bootstrap: + indices = random_state.randint(0, n_population, n_samples) + else: + indices = sample_without_replacement(n_population, n_samples, + random_state=random_state) + + return indices diff --git a/pyod/version.py b/pyod/version.py index e247b8285c0dad805449950308dd50dfde4d6eeb..56b81d4ec8f22d79ddc1de0fe58363391ab3758a 100644 --- a/pyod/version.py +++ b/pyod/version.py @@ -20,4 +20,4 @@ # Dev branch marker is: 'X.Y.dev' or 'X.Y.devN' where N is an integer. # 'X.Y.dev0' is the canonical version of 'X.Y.dev' # -__version__ = '0.6.6' # pragma: no cover +__version__ = '0.6.7' # pragma: no cover