├── mlcv ├── __init__.py ├── tests │ ├── __init__.py │ └── test_datasets.py ├── utils │ └── __init__.py ├── datasets │ ├── __init__.py │ ├── fetcher.py │ ├── old_faithful.txt │ ├── banknote_auth_labels.csv │ └── banknote_auth_data.csv ├── templates │ ├── __init__.py │ └── base.py └── visualization │ ├── __init__.py │ ├── config.py │ ├── utils.py │ └── clustering.py ├── examples ├── __init__.py ├── helloWorld.py ├── nearest_neighbors.py └── example_usage.ipynb ├── requirements.txt ├── .travis.yml ├── .gitignore ├── README.rst ├── setup.py └── LICENSE /mlcv/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /mlcv/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /mlcv/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /mlcv/datasets/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /mlcv/templates/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /mlcv/visualization/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | numpy~=1.18.1 2 | scipy~=1.4.1 3 | setuptools~=46.1.3 4 | scikit_learn==0.19.0 5 | requests=2.20.0 6 | matplotlib==2.0.2 7 | six~=1.14.0 8 | -------------------------------------------------------------------------------- /mlcv/visualization/config.py: -------------------------------------------------------------------------------- 1 | import matplotlib.cm as cm 2 | 3 | 4 | MLCV_CMAP = cm.get_cmap('rainbow') 5 | 6 | 7 | def set_cmap(cmap): 8 | global MLCV_CMAP 9 | MLCV_CMAP = cmap 10 | -------------------------------------------------------------------------------- /mlcv/tests/test_datasets.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | from mlcv.datasets import fetcher 4 | 5 | 6 | class TestFetcher: 7 | 8 | def test_load_iris(self): 9 | X, y = fetcher.load('iris') 10 | 11 | assert(len(X) == len(y)) 12 | assert(X.shape == (150, 4)) 13 | -------------------------------------------------------------------------------- /examples/helloWorld.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from matplotlib import pyplot as plt 3 | from mlcv.datasets.fetcher import load_greetings 4 | import os 5 | 6 | def main(): 7 | 8 | # # 1. Read in the data 9 | X, y = load_greetings() 10 | # y is None in this case 11 | 12 | # plot the data as scatter plot 13 | plt.scatter(X[:, 0], X[:, 1]) 14 | plt.show() 15 | 16 | 17 | if __name__ == '__main__': 18 | main() -------------------------------------------------------------------------------- /mlcv/visualization/utils.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import matplotlib.colors as mcolors 3 | 4 | 5 | from .config import MLCV_CMAP 6 | 7 | 8 | ########################################################################### 9 | def proba_to_rgba(proba, return_most_likely=False): 10 | """Convert class probabilities to RGBA colors. 11 | 12 | Parameters 13 | ---------- 14 | proba : array, shape (n_samples, n_classes) 15 | Class probabilities 16 | 17 | Returns 18 | ------- 19 | rgba : array, shape (n_samples, 4) 20 | RGB and alpha equal to the max probability. 21 | 22 | """ 23 | 24 | n_classes = proba.shape[1] 25 | norm = mcolors.Normalize(vmin=0, vmax=n_classes-1) 26 | 27 | most_likely_labels = proba.argmax(axis=1) 28 | sample_range = np.arange(proba.shape[0]) 29 | intensities = proba[sample_range, most_likely_labels] 30 | np.clip(intensities, 0.0, 1.0, intensities) 31 | 32 | rgba = MLCV_CMAP(norm(most_likely_labels)) 33 | rgba[:, -1] = intensities 34 | 35 | if return_most_likely: 36 | return rgba, most_likely_labels 37 | else: 38 | return rgba 39 | 40 | 41 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # make it explicit that we favor the new container-based travis workers 2 | sudo: false 3 | 4 | language: python 5 | 6 | cache: 7 | apt: true 8 | directories: 9 | - $HOME/.cache/pip 10 | - $HOME/.ccache 11 | 12 | dist: trusty 13 | 14 | env: 15 | global: 16 | # Directory where tests are run from 17 | - TEST_DIR=/tmp/test_dir 18 | - MODULE=mlcv 19 | - OMP_NUM_THREADS=4 20 | - OPENBLAS_NUM_THREADS=4 21 | 22 | matrix: 23 | include: 24 | # This environment tests the newest supported Anaconda release (4.4.0) 25 | - env: DISTRIB="conda" PYTHON_VERSION="3.6.1" INSTALL_MKL="false" 26 | NUMPY_VERSION="1.13.3" SCIPY_VERSION="0.19.1" 27 | CYTHON_VERSION="0.25.2" COVERAGE=false SKIP_TESTS="true" 28 | USE_PYTEST="true" 29 | allow_failures: 30 | # allow_failures seems to be keyed on the python version 31 | # We are using this to allow failures for DISTRIB=scipy-dev-wheels 32 | # - python: 3.5 33 | 34 | install: source build_tools/travis/install.sh 35 | script: bash build_tools/travis/test_script.sh 36 | after_success: source build_tools/travis/after_success.sh 37 | notifications: 38 | email: false 39 | webhooks: 40 | on_success: change # options: [always|never|change] default: always 41 | on_failure: always # options: [always|never|change] default: always 42 | on_start: never # options: [always|never|change] default: always 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | local_settings.py 56 | 57 | # Flask stuff: 58 | instance/ 59 | .webassets-cache 60 | 61 | # Scrapy stuff: 62 | .scrapy 63 | 64 | # Sphinx documentation 65 | docs/_build/ 66 | 67 | # PyBuilder 68 | target/ 69 | 70 | # Jupyter Notebook 71 | .ipynb_checkpoints 72 | 73 | # pyenv 74 | .python-version 75 | 76 | # celery beat schedule file 77 | celerybeat-schedule 78 | 79 | # SageMath parsed files 80 | *.sage.py 81 | 82 | # dotenv 83 | .env 84 | 85 | # virtualenv 86 | .venv 87 | venv/ 88 | ENV/ 89 | 90 | # Spyder project settings 91 | .spyderproject 92 | .spyproject 93 | 94 | # PyCharm 95 | .idea 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | .. -*- mode: rst -*- 2 | 3 | |Travis|_ 4 | 5 | .. |Travis| image:: https://api.travis-ci.org/johny-c/mlcv-tutorial.svg?branch=master 6 | .. _Travis: https://travis-ci.org/johny-c/mlcv-tutorial 7 | 8 | mlcv-tutorial 9 | =============== 10 | 11 | Assisting library for the ML4CV tutorial based on scikit-learn. 12 | 13 | It is recommended to use Python 3.6 in a virtual environment and install the 14 | latest stable versions of the dependencies. If not present, 15 | `mlcv-tutorial` will attempt to install them automatically. 16 | 17 | Installation 18 | ------------ 19 | 20 | Dependencies 21 | ~~~~~~~~~~~~ 22 | 23 | mlcv-tutorial requires: 24 | 25 | - numpy (>= 1.13.3) 26 | - scipy (>= 0.19.1) 27 | - scikit-learn (>=0.19.0) 28 | - requests (>=2.14.2) 29 | - matplotlib (>=2.0.2) 30 | 31 | 32 | User installation 33 | ~~~~~~~~~~~~~~~~~ 34 | 35 | 36 | 1. Create a virtual environment. If you use ``pip``:: 37 | 38 | python3 -m venv /path/to/new/virtual/environment_name 39 | 40 | or if you use ``conda``:: 41 | 42 | conda create -n environment_name python=3.6 anaconda 43 | 44 | 2. Enter the virtual environment:: 45 | 46 | source activate environment_name 47 | 48 | 3. Install or upgrade the package:: 49 | 50 | pip install --upgrade git+https://github.com/johny-c/mlcv-tutorial.git 51 | 52 | 4. To exit the virtual environment:: 53 | 54 | source deactivate 55 | 56 | Usage 57 | ~~~~~ 58 | 59 | Enter the virtual environment you created. Upgrade regularly to get the latest 60 | version. Open a python script, import the package and use it in your own work! 61 | 62 | .. code-block:: python 63 | 64 | from mlcv.templates.base import Solution 65 | 66 | class MyEstimator(Solution): 67 | 68 | def __init__(param1=3, param2='gaussian'): 69 | # Store the passed parameters in your estimator instance 70 | self.param1 = param1 71 | self.param2 = param2 72 | 73 | def fit(X, y): 74 | # Train your estimator on the training inputs X and training targets y 75 | return self 76 | 77 | def predict(X): 78 | # Predict targets for the given testing inputs X. 79 | return y_pred 80 | 81 | def score(y_pred, y_true): 82 | # Evaluate your model 83 | return accuracy 84 | 85 | 86 | Have a look at the `examples` directory for a complete use case. -------------------------------------------------------------------------------- /mlcv/datasets/fetcher.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import os 3 | from sklearn import datasets 4 | 5 | DATA_DIR = os.path.split(os.path.realpath(__file__))[0] 6 | DATASETS = ['iris', 'banknote', 'old_faithful', 'greetings'] 7 | 8 | 9 | def load_iris(): 10 | """Load a data set for multi-class classification. 11 | 12 | Returns 13 | ------- 14 | X : array (150, 4) 15 | The data samples. 16 | 17 | y : array (150,) 18 | The class labels. 19 | """ 20 | return datasets.load_iris(return_X_y=True) 21 | 22 | 23 | def load_banknote(): 24 | """Load a data set for binary classification. 25 | 26 | Returns 27 | ------- 28 | X : array (1348, 4) 29 | The data samples. 30 | 31 | y : array (1348,) 32 | The (binary) class labels. 33 | """ 34 | 35 | data_path = os.path.join(DATA_DIR, 'banknote_auth_data.csv') 36 | label_path = os.path.join(DATA_DIR, 'banknote_auth_labels.csv') 37 | 38 | X = np.loadtxt(data_path, delimiter=',') 39 | y = np.loadtxt(label_path, dtype=str) 40 | 41 | return X, y 42 | 43 | 44 | def load_old_faithful(): 45 | """Load a data set for clustering. 46 | 47 | Returns 48 | ------- 49 | X : array (272, 2) 50 | 51 | y : None 52 | 53 | """ 54 | data_path = os.path.join(DATA_DIR, 'old_faithful.txt') 55 | X = np.loadtxt(data_path, skiprows=1, usecols=(1, 2)) 56 | 57 | return X, None 58 | 59 | 60 | def load_greetings(): 61 | """Load a welcoming data set. 62 | 63 | Returns 64 | ------- 65 | X : array (11324, 3) 66 | 67 | """ 68 | 69 | data_path = os.path.join(DATA_DIR, 'greetings.txt') 70 | X = np.loadtxt(data_path, delimiter=',') 71 | 72 | return X, None 73 | 74 | 75 | def load(dataset_name): 76 | """Load a data set. 77 | 78 | Parameters 79 | ---------- 80 | dataset_name : str 81 | Name of the data set to load. 82 | 83 | Returns 84 | ------- 85 | X : array, shape (n_samples, n_features) 86 | The data samples. 87 | 88 | y : array, shape (n_samples,) (optional) 89 | The data targets if there are any. 90 | 91 | """ 92 | 93 | dataset_name = dataset_name.lower() 94 | if dataset_name not in DATASETS: 95 | raise ValueError('Dataset {} unknown.\nSupproted datasets:\n{}' 96 | .format(dataset_name, DATASETS)) 97 | 98 | if dataset_name == 'iris': 99 | return load_iris() 100 | elif dataset_name == 'banknote': 101 | return load_banknote() 102 | elif dataset_name == 'old_faithful': 103 | return load_old_faithful() 104 | elif dataset_name == 'greetings': 105 | return load_greetings() 106 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | # Always prefer setuptools over distutils 4 | from setuptools import setup, find_packages 5 | from setuptools.command.test import test as TestCommand 6 | 7 | # To use a consistent encoding 8 | from codecs import open 9 | from os import path 10 | 11 | 12 | 13 | __version__ = '0.0.1' 14 | 15 | class PyTest(TestCommand): 16 | user_options = [('pytest-args=', 'a', "Arguments to pass to pytest")] 17 | 18 | def initialize_options(self): 19 | TestCommand.initialize_options(self) 20 | self.pytest_args = '' 21 | 22 | def run_tests(self): 23 | import shlex 24 | #import here, cause outside the eggs aren't loaded 25 | import pytest 26 | errno = pytest.main(shlex.split(self.pytest_args)) 27 | sys.exit(errno) 28 | 29 | 30 | if __name__ == '__main__': 31 | here = path.abspath(path.dirname(__file__)) 32 | 33 | # Get the long description from the README file 34 | with open(path.join(here, 'README.rst'), encoding='utf-8') as f: 35 | long_description = f.read() 36 | 37 | 38 | setup( 39 | name='mlcv-tutorial', 40 | version=__version__, 41 | description='Assisting library for the ML4CV tutorial', 42 | long_description=long_description, 43 | url='https://github.com/johny-c/mlcv-tutorial.git', 44 | author='John Chiotellis', 45 | author_email='johnyc.code@gmail.com', 46 | license='GPLv3', 47 | 48 | classifiers=[ 49 | 'Development Status :: 4 - Beta', 50 | 'License :: OSI Approved :: GNU General Public License v3 (GPLv3)', 51 | 'Natural Language :: English', 52 | 'Operating System :: MacOS :: MacOS X', 53 | 'Operating System :: Microsoft :: Windows', 54 | 'Operating System :: POSIX :: Linux', 55 | 'Programming Language :: Python :: 3', 56 | 'Programming Language :: Python :: 3.5', 57 | 'Programming Language :: Python :: 3.6', 58 | 'Topic :: Scientific/Engineering :: Artificial Intelligence'], 59 | 60 | packages=find_packages(exclude=['contrib', 'docs', 'tests']), 61 | package_dir={'mlcv-tutorial': 'mlcv'}, 62 | install_requires=['numpy>=1.13', 63 | 'scipy>=0.19', 64 | 'scikit_learn>=0.19', 65 | 'requests>=2.20', 66 | 'matplotlib>=2.0', 67 | 'six>=1.14' 68 | ], 69 | 70 | cmdclass = {'test': PyTest}, 71 | test_suite='mlcv.tests.test_mlcv', 72 | tests_require=['pytest'], 73 | extras_require={'testing': ['pytest']} 74 | ) 75 | -------------------------------------------------------------------------------- /mlcv/templates/base.py: -------------------------------------------------------------------------------- 1 | import six 2 | from abc import ABCMeta, abstractmethod 3 | from sklearn.base import BaseEstimator 4 | 5 | 6 | class Solution(six.with_metaclass(ABCMeta, BaseEstimator)): 7 | """This is a core class, meant to be subclassed by specific estimators.""" 8 | 9 | @abstractmethod 10 | def __init__(self): 11 | """ 12 | You should pass any algorithm specific parameters to the constructor 13 | of your estimator (your estimator's __init__ method) 14 | """ 15 | pass 16 | 17 | @abstractmethod 18 | def _validate_training_inputs(self, X, y=None): 19 | """Validate X and y. 20 | 21 | Make sure they have the shapes you expect and make sure they are 22 | compatible with the model parameters passed to __init__. 23 | 24 | Parameters 25 | ---------- 26 | X : array, shape (n_samples, n_features) 27 | User supplied training data. 28 | 29 | y : array, shape (n_samples, ?) (optional) 30 | User supplied training targets. 31 | 32 | Returns 33 | ------- 34 | X_validated : array, shape (n_samples, n_features) 35 | Validated training data. 36 | 37 | y_validated : array, shape (n_samples, ?) 38 | Validated training targets. 39 | 40 | Raises 41 | ------ 42 | ValueError : If the inputs or the parameters do not match the expected 43 | format or their values are not compatible. 44 | 45 | """ 46 | pass 47 | 48 | @abstractmethod 49 | def fit(self, X, y=None): 50 | """Fit your model with the training data. 51 | 52 | Parameters 53 | ---------- 54 | X : array, shape (n_samples_train, n_features) 55 | Training inputs. 56 | 57 | y : array, shape (n_samples_train, ?) 58 | Corresponding training targets. 59 | 60 | Returns 61 | ------- 62 | self : Solution 63 | A trained model instance. 64 | 65 | """ 66 | pass 67 | 68 | @abstractmethod 69 | def _validate_testing_inputs(self, X): 70 | """Validate X and make sure it is compatible with the model parameters. 71 | 72 | Parameters 73 | ---------- 74 | X : array, shape (n_samples, n_features) 75 | User supplied testing data. 76 | 77 | Returns 78 | ------- 79 | X_validated : array, shape (n_samples, n_features) 80 | Validated testing data. 81 | Raises 82 | ------ 83 | ValueError : If the inputs or the parameters do not match the expected 84 | format or their values are not compatible. 85 | 86 | """ 87 | pass 88 | 89 | @abstractmethod 90 | def predict(self, X): 91 | """Predict with your trained model on unseen input data. 92 | 93 | Parameters 94 | ---------- 95 | X : array, shape (n_samples_test, n_features) 96 | Testing inputs. 97 | 98 | Returns 99 | ------- 100 | y : array, shape(n_samples_test, ?) 101 | A prediction for each testing input. 102 | 103 | Raises 104 | ------ 105 | NotFittedError : If your model has not been trained before, 106 | you should not be able to predict with it. 107 | 108 | """ 109 | pass 110 | 111 | def predict_proba(self, X): 112 | """Predict target probabilities for each testing input. 113 | 114 | Parameters 115 | ---------- 116 | X : array, shape (n_samples_test, n_features) 117 | Testing inputs. 118 | 119 | Returns 120 | ------- 121 | y : array, shape(n_samples_test, n_target_set) 122 | A probability distribution for each testing input. 123 | 124 | """ 125 | self._validate_testing_inputs(X) 126 | pass 127 | 128 | @abstractmethod 129 | def score(self, y_pred, y_true): 130 | """Return a single number that reflects the quality of your model. 131 | 132 | Parameters 133 | ---------- 134 | y_pred : array, shape(n_samples_test, ?) 135 | Predictions. 136 | 137 | y_true : array, shape(n_samples_test, ?) 138 | Groundtruth targets. 139 | Returns 140 | ------- 141 | score : float 142 | An evaluation score, based on the discrepancy between 143 | predictions and groundtruth. 144 | 145 | """ 146 | pass 147 | 148 | def visualize(self, X, *args, **kwargs): 149 | pass 150 | 151 | def visualize_iteration(self, X, *args, **kwargs): 152 | pass 153 | 154 | def print_progress(self, **kwargs): 155 | pass 156 | 157 | def preprocess_inputs(self, X, y): 158 | """ 159 | 160 | Parameters 161 | ---------- 162 | X : array, shape (n_samples, n_features) 163 | Input data. 164 | 165 | y : array, shape (n_samples, ?) 166 | Input targets. 167 | 168 | Returns 169 | ------- 170 | X : array, shape (n_samples_, n_features_) 171 | Preprocessed input data. 172 | 173 | y : array, shape (n_samples_, ?) 174 | Preprocessed input targets. 175 | 176 | """ 177 | pass 178 | -------------------------------------------------------------------------------- /mlcv/visualization/clustering.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import matplotlib.pyplot as plt 3 | import matplotlib.colors as mcolors 4 | import matplotlib.patches as mpatches 5 | 6 | from .config import MLCV_CMAP 7 | 8 | 9 | ########################################################################### 10 | def scatter_iteration(ax, data, title='', colors='b', marker='o', 11 | pause_time=0.3): 12 | """Scatter points as estimated in a single iteration of an algorithm. 13 | 14 | Parameters 15 | ---------- 16 | ax : matplotlib.axes.Axes instance 17 | The axes to draw in. 18 | 19 | data : array, shape (n_samples, n_features) 20 | The data to scatter plot. 21 | 22 | title : str (optional) 23 | Title of the plot. 24 | 25 | colors : array-like, shape (n_samples,) or str(optional 26 | RGBA color per sample or strings or single string. 27 | 28 | marker : str, (optional) 29 | The representation of the points. 30 | 31 | pause_time : float (optional) 32 | How long to wait so the drawing can be rendered and observed. 33 | 34 | """ 35 | 36 | plt.sca(ax) 37 | plt.scatter(data[:, 0], data[:, 1], c=colors, marker=marker, lw=0, s=50) 38 | plt.title('{}'.format(title), fontweight='bold') 39 | plt.draw() 40 | plt.pause(pause_time) 41 | 42 | 43 | ########################################################################### 44 | def draw_ellipses_iteration(ax, data, covs, title='', colors='b', marker='o', 45 | ellipses_to_remove=None, pause_time=0.3): 46 | """Draw ellipses as estimated in a single iteration of an algorithm. 47 | 48 | Parameters 49 | ---------- 50 | ax : matplotlib.axes.Axes instance 51 | The axes to draw in. 52 | 53 | data : array, shape (n_components, n_features) 54 | The data to scatter plot. 55 | 56 | covs : array, shape (n_components, n_features, n_features) 57 | The covariance matrices of the components 58 | 59 | title : str (optional) 60 | Title of the plot. 61 | 62 | colors : array, shape (n_samples, 4) or str (optional) 63 | RGBA color per sample or single string 64 | 65 | marker : str, (optional) 66 | The representation of the points. 67 | 68 | pause_time : float (optional) 69 | How long to wait so the drawing can be rendered and observed. 70 | 71 | ellipses_to_remove : list 72 | List of ellipses from previous iteration(s) to be cleared. 73 | 74 | Returns 75 | ------- 76 | ellipses : list[matplotlib.patches.Ellipse] 77 | The drawn ellipses objects. 78 | 79 | """ 80 | 81 | if ellipses_to_remove is not None: 82 | [e.remove() for e in ellipses_to_remove] 83 | 84 | ellipses = [] 85 | plt.sca(ax) 86 | plt.scatter(data[:, 0], data[:, 1], c=colors, marker=marker, lw=0, s=50) 87 | n_components, n_features = data.shape 88 | for k in range(n_components): 89 | ellipse = draw_ellipse(ax, data[k, :], covs[k, :, :]) 90 | ellipses.append(ellipse) 91 | 92 | plt.title('{}'.format(title), fontweight='bold') 93 | plt.draw() 94 | plt.pause(pause_time) 95 | return ellipses 96 | 97 | 98 | ########################################################################### 99 | def draw_ellipse(ax, center, cov, facecolor='lightblue', edgecolor='r'): 100 | """ 101 | 102 | Parameters 103 | ---------- 104 | ax : matplotlib.axes.Axes instance 105 | The axes to draw in. 106 | 107 | center : array-like, shape (2,) 108 | Center coordinates of the ellipse. 109 | 110 | cov : array, shape (n_features, n_features) 111 | Covariance matrix associated with this ellipse. 112 | 113 | facecolor : array, shape (n_components, 4) or str (optional) 114 | Face color of the ellipse. 115 | 116 | edgecolor : str (optional) 117 | Perimeter color of the eliipse 118 | 119 | Returns 120 | ------- 121 | ellipse : matplotlib.patches.Ellipse 122 | The drawn ellipse object. 123 | 124 | """ 125 | v, w = np.linalg.eigh(cov) 126 | u = w[0] / np.linalg.norm(w[0]) 127 | angle = np.arctan(u[1] / u[0]) 128 | angle = 180 * angle / np.pi # convert to degrees 129 | # filled Gaussian at 2 standard deviation 130 | ellipse = mpatches.Ellipse(xy=center, width=2 * v[0] ** 0.5, 131 | height=2 * v[1] ** 0.5, angle=180 + angle, 132 | facecolor=facecolor, edgecolor=edgecolor, 133 | linewidth=2, zorder=2) 134 | ellipse.set_clip_box(ax.bbox) 135 | ellipse.set_alpha(0.5) 136 | ax.add_artist(ellipse) 137 | return ellipse 138 | 139 | 140 | ############################################################################ 141 | def init_clustering_plot(n_components=2): 142 | """Initialize a figure to show the consecutive estimations of a clustering. 143 | 144 | Parameters 145 | ---------- 146 | n_components : int 147 | Number of components to show. 148 | 149 | Returns 150 | ------- 151 | ax1 : matplotlib.axes.Axes instance 152 | First axis, will show the data points. 153 | 154 | ax2 : matplotlib.axes.Axes instance 155 | Seconds axis, will show the log-likelihood. 156 | 157 | component_colors : array, shape (n_components, 4) 158 | RGBA colors of the components. 159 | """ 160 | 161 | norm = mcolors.Normalize(vmin=0, vmax=n_components - 1) 162 | # component_colors = np.array([MLCV_CMAP(float(a + 1) / n_components) 163 | # for a in range(n_components)]) 164 | component_colors = MLCV_CMAP(norm(np.arange(n_components))) 165 | 166 | fig = plt.figure() 167 | ax1 = fig.add_subplot(1, 2, 1) 168 | plt.xlabel('Dim 1') 169 | plt.ylabel('Dim 2') 170 | plt.title('Expectation Maximization') 171 | ax2 = fig.add_subplot(1, 2, 2) 172 | plt.xlabel('Iteration') 173 | plt.ylabel('Log-likelihood') 174 | plt.title('Log-likelihood Maximization', fontweight='bold') 175 | 176 | return ax1, ax2, component_colors 177 | -------------------------------------------------------------------------------- /mlcv/datasets/old_faithful.txt: -------------------------------------------------------------------------------- 1 | N eruptions waiting 2 | 1 3.600 79 3 | 2 1.800 54 4 | 3 3.333 74 5 | 4 2.283 62 6 | 5 4.533 85 7 | 6 2.883 55 8 | 7 4.700 88 9 | 8 3.600 85 10 | 9 1.950 51 11 | 10 4.350 85 12 | 11 1.833 54 13 | 12 3.917 84 14 | 13 4.200 78 15 | 14 1.750 47 16 | 15 4.700 83 17 | 16 2.167 52 18 | 17 1.750 62 19 | 18 4.800 84 20 | 19 1.600 52 21 | 20 4.250 79 22 | 21 1.800 51 23 | 22 1.750 47 24 | 23 3.450 78 25 | 24 3.067 69 26 | 25 4.533 74 27 | 26 3.600 83 28 | 27 1.967 55 29 | 28 4.083 76 30 | 29 3.850 78 31 | 30 4.433 79 32 | 31 4.300 73 33 | 32 4.467 77 34 | 33 3.367 66 35 | 34 4.033 80 36 | 35 3.833 74 37 | 36 2.017 52 38 | 37 1.867 48 39 | 38 4.833 80 40 | 39 1.833 59 41 | 40 4.783 90 42 | 41 4.350 80 43 | 42 1.883 58 44 | 43 4.567 84 45 | 44 1.750 58 46 | 45 4.533 73 47 | 46 3.317 83 48 | 47 3.833 64 49 | 48 2.100 53 50 | 49 4.633 82 51 | 50 2.000 59 52 | 51 4.800 75 53 | 52 4.716 90 54 | 53 1.833 54 55 | 54 4.833 80 56 | 55 1.733 54 57 | 56 4.883 83 58 | 57 3.717 71 59 | 58 1.667 64 60 | 59 4.567 77 61 | 60 4.317 81 62 | 61 2.233 59 63 | 62 4.500 84 64 | 63 1.750 48 65 | 64 4.800 82 66 | 65 1.817 60 67 | 66 4.400 92 68 | 67 4.167 78 69 | 68 4.700 78 70 | 69 2.067 65 71 | 70 4.700 73 72 | 71 4.033 82 73 | 72 1.967 56 74 | 73 4.500 79 75 | 74 4.000 71 76 | 75 1.983 62 77 | 76 5.067 76 78 | 77 2.017 60 79 | 78 4.567 78 80 | 79 3.883 76 81 | 80 3.600 83 82 | 81 4.133 75 83 | 82 4.333 82 84 | 83 4.100 70 85 | 84 2.633 65 86 | 85 4.067 73 87 | 86 4.933 88 88 | 87 3.950 76 89 | 88 4.517 80 90 | 89 2.167 48 91 | 90 4.000 86 92 | 91 2.200 60 93 | 92 4.333 90 94 | 93 1.867 50 95 | 94 4.817 78 96 | 95 1.833 63 97 | 96 4.300 72 98 | 97 4.667 84 99 | 98 3.750 75 100 | 99 1.867 51 101 | 100 4.900 82 102 | 101 2.483 62 103 | 102 4.367 88 104 | 103 2.100 49 105 | 104 4.500 83 106 | 105 4.050 81 107 | 106 1.867 47 108 | 107 4.700 84 109 | 108 1.783 52 110 | 109 4.850 86 111 | 110 3.683 81 112 | 111 4.733 75 113 | 112 2.300 59 114 | 113 4.900 89 115 | 114 4.417 79 116 | 115 1.700 59 117 | 116 4.633 81 118 | 117 2.317 50 119 | 118 4.600 85 120 | 119 1.817 59 121 | 120 4.417 87 122 | 121 2.617 53 123 | 122 4.067 69 124 | 123 4.250 77 125 | 124 1.967 56 126 | 125 4.600 88 127 | 126 3.767 81 128 | 127 1.917 45 129 | 128 4.500 82 130 | 129 2.267 55 131 | 130 4.650 90 132 | 131 1.867 45 133 | 132 4.167 83 134 | 133 2.800 56 135 | 134 4.333 89 136 | 135 1.833 46 137 | 136 4.383 82 138 | 137 1.883 51 139 | 138 4.933 86 140 | 139 2.033 53 141 | 140 3.733 79 142 | 141 4.233 81 143 | 142 2.233 60 144 | 143 4.533 82 145 | 144 4.817 77 146 | 145 4.333 76 147 | 146 1.983 59 148 | 147 4.633 80 149 | 148 2.017 49 150 | 149 5.100 96 151 | 150 1.800 53 152 | 151 5.033 77 153 | 152 4.000 77 154 | 153 2.400 65 155 | 154 4.600 81 156 | 155 3.567 71 157 | 156 4.000 70 158 | 157 4.500 81 159 | 158 4.083 93 160 | 159 1.800 53 161 | 160 3.967 89 162 | 161 2.200 45 163 | 162 4.150 86 164 | 163 2.000 58 165 | 164 3.833 78 166 | 165 3.500 66 167 | 166 4.583 76 168 | 167 2.367 63 169 | 168 5.000 88 170 | 169 1.933 52 171 | 170 4.617 93 172 | 171 1.917 49 173 | 172 2.083 57 174 | 173 4.583 77 175 | 174 3.333 68 176 | 175 4.167 81 177 | 176 4.333 81 178 | 177 4.500 73 179 | 178 2.417 50 180 | 179 4.000 85 181 | 180 4.167 74 182 | 181 1.883 55 183 | 182 4.583 77 184 | 183 4.250 83 185 | 184 3.767 83 186 | 185 2.033 51 187 | 186 4.433 78 188 | 187 4.083 84 189 | 188 1.833 46 190 | 189 4.417 83 191 | 190 2.183 55 192 | 191 4.800 81 193 | 192 1.833 57 194 | 193 4.800 76 195 | 194 4.100 84 196 | 195 3.966 77 197 | 196 4.233 81 198 | 197 3.500 87 199 | 198 4.366 77 200 | 199 2.250 51 201 | 200 4.667 78 202 | 201 2.100 60 203 | 202 4.350 82 204 | 203 4.133 91 205 | 204 1.867 53 206 | 205 4.600 78 207 | 206 1.783 46 208 | 207 4.367 77 209 | 208 3.850 84 210 | 209 1.933 49 211 | 210 4.500 83 212 | 211 2.383 71 213 | 212 4.700 80 214 | 213 1.867 49 215 | 214 3.833 75 216 | 215 3.417 64 217 | 216 4.233 76 218 | 217 2.400 53 219 | 218 4.800 94 220 | 219 2.000 55 221 | 220 4.150 76 222 | 221 1.867 50 223 | 222 4.267 82 224 | 223 1.750 54 225 | 224 4.483 75 226 | 225 4.000 78 227 | 226 4.117 79 228 | 227 4.083 78 229 | 228 4.267 78 230 | 229 3.917 70 231 | 230 4.550 79 232 | 231 4.083 70 233 | 232 2.417 54 234 | 233 4.183 86 235 | 234 2.217 50 236 | 235 4.450 90 237 | 236 1.883 54 238 | 237 1.850 54 239 | 238 4.283 77 240 | 239 3.950 79 241 | 240 2.333 64 242 | 241 4.150 75 243 | 242 2.350 47 244 | 243 4.933 86 245 | 244 2.900 63 246 | 245 4.583 85 247 | 246 3.833 82 248 | 247 2.083 57 249 | 248 4.367 82 250 | 249 2.133 67 251 | 250 4.350 74 252 | 251 2.200 54 253 | 252 4.450 83 254 | 253 3.567 73 255 | 254 4.500 73 256 | 255 4.150 88 257 | 256 3.817 80 258 | 257 3.917 71 259 | 258 4.450 83 260 | 259 2.000 56 261 | 260 4.283 79 262 | 261 4.767 78 263 | 262 4.533 84 264 | 263 1.850 58 265 | 264 4.250 83 266 | 265 1.983 43 267 | 266 2.250 60 268 | 267 4.750 75 269 | 268 4.117 81 270 | 269 2.150 46 271 | 270 4.417 90 272 | 271 1.817 46 273 | 272 4.467 74 -------------------------------------------------------------------------------- /mlcv/datasets/banknote_auth_labels.csv: -------------------------------------------------------------------------------- 1 | 1 2 | 1 3 | 1 4 | 1 5 | 1 6 | 1 7 | 1 8 | 1 9 | 1 10 | 1 11 | 1 12 | 1 13 | 1 14 | 1 15 | 1 16 | 1 17 | 1 18 | 1 19 | 1 20 | 1 21 | 1 22 | 1 23 | 1 24 | 1 25 | 1 26 | 1 27 | 1 28 | 1 29 | 1 30 | 1 31 | 1 32 | 1 33 | 1 34 | 1 35 | 1 36 | 1 37 | 1 38 | 1 39 | 1 40 | 1 41 | 1 42 | 1 43 | 1 44 | 1 45 | 1 46 | 1 47 | 1 48 | 1 49 | 1 50 | 1 51 | 1 52 | 1 53 | 1 54 | 1 55 | 1 56 | 1 57 | 1 58 | 1 59 | 1 60 | 1 61 | 1 62 | 0 63 | 1 64 | 1 65 | 1 66 | 1 67 | 1 68 | 1 69 | 1 70 | 1 71 | 1 72 | 1 73 | 1 74 | 1 75 | 1 76 | 1 77 | 1 78 | 1 79 | 1 80 | 1 81 | 1 82 | 1 83 | 1 84 | 1 85 | 1 86 | 1 87 | 1 88 | 1 89 | 1 90 | 1 91 | 1 92 | 1 93 | 1 94 | 1 95 | 1 96 | 1 97 | 1 98 | 1 99 | 1 100 | 1 101 | 1 102 | 1 103 | 1 104 | 1 105 | 1 106 | 1 107 | 1 108 | 1 109 | 1 110 | 1 111 | 1 112 | 1 113 | 1 114 | 1 115 | 1 116 | 1 117 | 1 118 | 1 119 | 1 120 | 1 121 | 1 122 | 1 123 | 1 124 | 1 125 | 1 126 | 1 127 | 1 128 | 1 129 | 1 130 | 1 131 | 1 132 | 1 133 | 1 134 | 1 135 | 1 136 | 1 137 | 1 138 | 1 139 | 1 140 | 1 141 | 1 142 | 1 143 | 1 144 | 1 145 | 1 146 | 1 147 | 1 148 | 1 149 | 1 150 | 1 151 | 1 152 | 1 153 | 1 154 | 1 155 | 1 156 | 1 157 | 1 158 | 1 159 | 1 160 | 1 161 | 1 162 | 1 163 | 1 164 | 1 165 | 1 166 | 1 167 | 1 168 | 1 169 | 1 170 | 1 171 | 1 172 | 1 173 | 1 174 | 1 175 | 1 176 | 1 177 | 1 178 | 1 179 | 0 180 | 1 181 | 1 182 | 1 183 | 1 184 | 0 185 | 1 186 | 1 187 | 0 188 | 1 189 | 1 190 | 0 191 | 1 192 | 1 193 | 1 194 | 1 195 | 0 196 | 1 197 | 1 198 | 1 199 | 1 200 | 1 201 | 1 202 | 1 203 | 1 204 | 1 205 | 1 206 | 1 207 | 1 208 | 1 209 | 1 210 | 1 211 | 1 212 | 1 213 | 1 214 | 1 215 | 1 216 | 0 217 | 1 218 | 0 219 | 1 220 | 1 221 | 1 222 | 1 223 | 0 224 | 1 225 | 1 226 | 1 227 | 0 228 | 1 229 | 1 230 | 1 231 | 1 232 | 1 233 | 1 234 | 0 235 | 1 236 | 1 237 | 1 238 | 1 239 | 1 240 | 0 241 | 0 242 | 0 243 | 1 244 | 1 245 | 0 246 | 1 247 | 1 248 | 1 249 | 1 250 | 1 251 | 1 252 | 1 253 | 1 254 | 1 255 | 1 256 | 1 257 | 1 258 | 0 259 | 1 260 | 1 261 | 0 262 | 1 263 | 1 264 | 1 265 | 0 266 | 1 267 | 1 268 | 1 269 | 0 270 | 1 271 | 1 272 | 1 273 | 1 274 | 1 275 | 1 276 | 1 277 | 1 278 | 1 279 | 1 280 | 1 281 | 1 282 | 1 283 | 1 284 | 0 285 | 1 286 | 0 287 | 1 288 | 1 289 | 1 290 | 1 291 | 1 292 | 1 293 | 1 294 | 1 295 | 1 296 | 1 297 | 1 298 | 1 299 | 1 300 | 1 301 | 1 302 | 0 303 | 1 304 | 1 305 | 1 306 | 0 307 | 1 308 | 1 309 | 0 310 | 1 311 | 1 312 | 1 313 | 0 314 | 1 315 | 1 316 | 1 317 | 1 318 | 1 319 | 0 320 | 1 321 | 1 322 | 1 323 | 1 324 | 0 325 | 1 326 | 1 327 | 1 328 | 0 329 | 1 330 | 1 331 | 1 332 | 1 333 | 1 334 | 1 335 | 0 336 | 1 337 | 1 338 | 1 339 | 0 340 | 1 341 | 1 342 | 0 343 | 1 344 | 1 345 | 0 346 | 1 347 | 1 348 | 1 349 | 0 350 | 1 351 | 1 352 | 1 353 | 1 354 | 1 355 | 1 356 | 1 357 | 1 358 | 1 359 | 0 360 | 1 361 | 1 362 | 1 363 | 1 364 | 1 365 | 1 366 | 1 367 | 1 368 | 1 369 | 1 370 | 1 371 | 0 372 | 1 373 | 1 374 | 1 375 | 1 376 | 1 377 | 0 378 | 1 379 | 1 380 | 1 381 | 1 382 | 1 383 | 1 384 | 1 385 | 1 386 | 0 387 | 1 388 | 1 389 | 0 390 | 0 391 | 1 392 | 1 393 | 1 394 | 1 395 | 0 396 | 1 397 | 1 398 | 1 399 | 1 400 | 1 401 | 0 402 | 1 403 | 0 404 | 1 405 | 1 406 | 1 407 | 1 408 | 1 409 | 1 410 | 1 411 | 0 412 | 1 413 | 1 414 | 0 415 | 1 416 | 0 417 | 1 418 | 1 419 | 0 420 | 0 421 | 1 422 | 0 423 | 1 424 | 1 425 | 1 426 | 1 427 | 1 428 | 0 429 | 1 430 | 0 431 | 0 432 | 1 433 | 1 434 | 1 435 | 1 436 | 1 437 | 0 438 | 1 439 | 0 440 | 0 441 | 0 442 | 1 443 | 0 444 | 1 445 | 1 446 | 1 447 | 1 448 | 1 449 | 1 450 | 1 451 | 1 452 | 0 453 | 1 454 | 1 455 | 1 456 | 1 457 | 1 458 | 1 459 | 1 460 | 0 461 | 1 462 | 1 463 | 0 464 | 1 465 | 1 466 | 1 467 | 0 468 | 1 469 | 1 470 | 1 471 | 1 472 | 1 473 | 1 474 | 1 475 | 1 476 | 1 477 | 1 478 | 1 479 | 1 480 | 1 481 | 1 482 | 1 483 | 1 484 | 1 485 | 1 486 | 1 487 | 0 488 | 0 489 | 0 490 | 1 491 | 1 492 | 1 493 | 1 494 | 1 495 | 1 496 | 1 497 | 1 498 | 1 499 | 1 500 | 1 501 | 1 502 | 1 503 | 0 504 | 1 505 | 1 506 | 1 507 | 0 508 | 1 509 | 1 510 | 1 511 | 0 512 | 1 513 | 1 514 | 1 515 | 1 516 | 1 517 | 1 518 | 1 519 | 1 520 | 1 521 | 1 522 | 1 523 | 1 524 | 0 525 | 1 526 | 1 527 | 1 528 | 1 529 | 1 530 | 1 531 | 1 532 | 1 533 | 1 534 | 1 535 | 1 536 | 0 537 | 1 538 | 1 539 | 1 540 | 1 541 | 1 542 | 1 543 | 0 544 | 1 545 | 0 546 | 0 547 | 1 548 | 1 549 | 1 550 | 0 551 | 0 552 | 1 553 | 1 554 | 1 555 | 0 556 | 1 557 | 1 558 | 0 559 | 1 560 | 1 561 | 0 562 | 0 563 | 1 564 | 1 565 | 0 566 | 1 567 | 1 568 | 0 569 | 1 570 | 1 571 | 0 572 | 1 573 | 0 574 | 1 575 | 0 576 | 0 577 | 0 578 | 0 579 | 1 580 | 0 581 | 0 582 | 0 583 | 0 584 | 1 585 | 0 586 | 1 587 | 1 588 | 1 589 | 0 590 | 0 591 | 0 592 | 1 593 | 1 594 | 0 595 | 0 596 | 1 597 | 0 598 | 1 599 | 1 600 | 1 601 | 0 602 | 1 603 | 0 604 | 1 605 | 1 606 | 0 607 | 0 608 | 0 609 | 0 610 | 1 611 | 1 612 | 1 613 | 1 614 | 1 615 | 0 616 | 1 617 | 1 618 | 0 619 | 1 620 | 0 621 | 1 622 | 1 623 | 0 624 | 0 625 | 1 626 | 0 627 | 1 628 | 0 629 | 0 630 | 1 631 | 1 632 | 1 633 | 1 634 | 1 635 | 1 636 | 0 637 | 0 638 | 1 639 | 1 640 | 1 641 | 1 642 | 1 643 | 0 644 | 1 645 | 0 646 | 1 647 | 1 648 | 0 649 | 0 650 | 0 651 | 0 652 | 0 653 | 1 654 | 0 655 | 1 656 | 1 657 | 0 658 | 0 659 | 0 660 | 0 661 | 1 662 | 0 663 | 1 664 | 1 665 | 0 666 | 0 667 | 0 668 | 1 669 | 1 670 | 0 671 | 0 672 | 1 673 | 1 674 | 1 675 | 0 676 | 0 677 | 1 678 | 0 679 | 1 680 | 0 681 | 0 682 | 1 683 | 1 684 | 1 685 | 0 686 | 0 687 | 0 688 | 0 689 | 0 690 | 0 691 | 0 692 | 1 693 | 1 694 | 1 695 | 1 696 | 1 697 | 1 698 | 1 699 | 0 700 | 0 701 | 1 702 | 0 703 | 0 704 | 0 705 | 1 706 | 1 707 | 0 708 | 1 709 | 1 710 | 0 711 | 0 712 | 1 713 | 0 714 | 1 715 | 0 716 | 1 717 | 1 718 | 0 719 | 1 720 | 0 721 | 1 722 | 0 723 | 0 724 | 0 725 | 0 726 | 0 727 | 0 728 | 0 729 | 1 730 | 0 731 | 1 732 | 1 733 | 0 734 | 0 735 | 0 736 | 0 737 | 0 738 | 0 739 | 0 740 | 0 741 | 0 742 | 1 743 | 1 744 | 0 745 | 0 746 | 1 747 | 1 748 | 0 749 | 0 750 | 0 751 | 0 752 | 0 753 | 0 754 | 0 755 | 0 756 | 0 757 | 0 758 | 1 759 | 0 760 | 1 761 | 0 762 | 1 763 | 0 764 | 0 765 | 0 766 | 1 767 | 0 768 | 0 769 | 0 770 | 1 771 | 0 772 | 1 773 | 0 774 | 0 775 | 0 776 | 0 777 | 0 778 | 0 779 | 0 780 | 0 781 | 0 782 | 0 783 | 0 784 | 0 785 | 0 786 | 1 787 | 1 788 | 0 789 | 0 790 | 1 791 | 0 792 | 1 793 | 0 794 | 0 795 | 1 796 | 1 797 | 1 798 | 0 799 | 0 800 | 0 801 | 1 802 | 0 803 | 0 804 | 0 805 | 0 806 | 1 807 | 0 808 | 0 809 | 0 810 | 1 811 | 0 812 | 1 813 | 1 814 | 0 815 | 0 816 | 0 817 | 0 818 | 0 819 | 1 820 | 0 821 | 1 822 | 0 823 | 0 824 | 0 825 | 0 826 | 1 827 | 1 828 | 0 829 | 0 830 | 0 831 | 0 832 | 0 833 | 0 834 | 1 835 | 1 836 | 0 837 | 0 838 | 0 839 | 0 840 | 1 841 | 0 842 | 1 843 | 0 844 | 0 845 | 0 846 | 0 847 | 0 848 | 1 849 | 0 850 | 0 851 | 0 852 | 1 853 | 0 854 | 0 855 | 0 856 | 0 857 | 1 858 | 0 859 | 1 860 | 0 861 | 0 862 | 0 863 | 0 864 | 0 865 | 0 866 | 1 867 | 0 868 | 0 869 | 0 870 | 0 871 | 0 872 | 0 873 | 0 874 | 0 875 | 0 876 | 0 877 | 0 878 | 0 879 | 0 880 | 0 881 | 0 882 | 0 883 | 0 884 | 0 885 | 0 886 | 0 887 | 0 888 | 0 889 | 0 890 | 0 891 | 0 892 | 0 893 | 0 894 | 0 895 | 0 896 | 0 897 | 0 898 | 0 899 | 0 900 | 1 901 | 0 902 | 1 903 | 0 904 | 0 905 | 0 906 | 0 907 | 0 908 | 0 909 | 0 910 | 0 911 | 0 912 | 0 913 | 0 914 | 0 915 | 0 916 | 0 917 | 0 918 | 0 919 | 0 920 | 0 921 | 0 922 | 1 923 | 0 924 | 0 925 | 0 926 | 0 927 | 1 928 | 0 929 | 0 930 | 0 931 | 0 932 | 0 933 | 0 934 | 0 935 | 0 936 | 0 937 | 0 938 | 0 939 | 0 940 | 0 941 | 0 942 | 0 943 | 0 944 | 1 945 | 0 946 | 0 947 | 0 948 | 0 949 | 0 950 | 0 951 | 0 952 | 0 953 | 0 954 | 0 955 | 0 956 | 0 957 | 0 958 | 0 959 | 0 960 | 0 961 | 0 962 | 0 963 | 0 964 | 0 965 | 0 966 | 0 967 | 0 968 | 0 969 | 0 970 | 0 971 | 0 972 | 0 973 | 0 974 | 0 975 | 0 976 | 0 977 | 0 978 | 0 979 | 0 980 | 0 981 | 0 982 | 0 983 | 0 984 | 0 985 | 0 986 | 0 987 | 0 988 | 0 989 | 0 990 | 0 991 | 0 992 | 0 993 | 0 994 | 0 995 | 0 996 | 0 997 | 0 998 | 0 999 | 0 1000 | 0 1001 | 0 1002 | 0 1003 | 0 1004 | 0 1005 | 0 1006 | 0 1007 | 0 1008 | 0 1009 | 0 1010 | 0 1011 | 0 1012 | 0 1013 | 0 1014 | 0 1015 | 0 1016 | 0 1017 | 0 1018 | 0 1019 | 0 1020 | 0 1021 | 0 1022 | 0 1023 | 0 1024 | 0 1025 | 0 1026 | 0 1027 | 0 1028 | 0 1029 | 0 1030 | 0 1031 | 0 1032 | 0 1033 | 0 1034 | 0 1035 | 0 1036 | 0 1037 | 0 1038 | 0 1039 | 0 1040 | 0 1041 | 0 1042 | 0 1043 | 0 1044 | 0 1045 | 0 1046 | 0 1047 | 0 1048 | 0 1049 | 0 1050 | 0 1051 | 0 1052 | 0 1053 | 0 1054 | 0 1055 | 0 1056 | 0 1057 | 0 1058 | 0 1059 | 0 1060 | 0 1061 | 0 1062 | 0 1063 | 0 1064 | 0 1065 | 0 1066 | 0 1067 | 0 1068 | 0 1069 | 0 1070 | 0 1071 | 0 1072 | 0 1073 | 0 1074 | 0 1075 | 0 1076 | 0 1077 | 0 1078 | 0 1079 | 0 1080 | 0 1081 | 0 1082 | 0 1083 | 0 1084 | 0 1085 | 0 1086 | 0 1087 | 0 1088 | 0 1089 | 0 1090 | 0 1091 | 0 1092 | 0 1093 | 0 1094 | 0 1095 | 0 1096 | 0 1097 | 0 1098 | 0 1099 | 0 1100 | 0 1101 | 0 1102 | 0 1103 | 0 1104 | 0 1105 | 0 1106 | 0 1107 | 0 1108 | 0 1109 | 0 1110 | 0 1111 | 0 1112 | 0 1113 | 0 1114 | 0 1115 | 0 1116 | 0 1117 | 0 1118 | 0 1119 | 0 1120 | 0 1121 | 0 1122 | 0 1123 | 0 1124 | 0 1125 | 0 1126 | 0 1127 | 0 1128 | 0 1129 | 0 1130 | 0 1131 | 0 1132 | 0 1133 | 0 1134 | 0 1135 | 0 1136 | 0 1137 | 0 1138 | 0 1139 | 0 1140 | 0 1141 | 0 1142 | 0 1143 | 0 1144 | 0 1145 | 0 1146 | 0 1147 | 0 1148 | 0 1149 | 0 1150 | 0 1151 | 0 1152 | 0 1153 | 0 1154 | 0 1155 | 0 1156 | 0 1157 | 0 1158 | 0 1159 | 0 1160 | 0 1161 | 0 1162 | 0 1163 | 0 1164 | 0 1165 | 0 1166 | 0 1167 | 0 1168 | 0 1169 | 0 1170 | 0 1171 | 0 1172 | 0 1173 | 0 1174 | 0 1175 | 0 1176 | 0 1177 | 0 1178 | 0 1179 | 0 1180 | 0 1181 | 0 1182 | 0 1183 | 0 1184 | 0 1185 | 0 1186 | 0 1187 | 0 1188 | 0 1189 | 0 1190 | 0 1191 | 0 1192 | 0 1193 | 0 1194 | 0 1195 | 0 1196 | 0 1197 | 0 1198 | 0 1199 | 0 1200 | 0 1201 | 0 1202 | 0 1203 | 0 1204 | 0 1205 | 0 1206 | 0 1207 | 0 1208 | 0 1209 | 0 1210 | 0 1211 | 0 1212 | 0 1213 | 0 1214 | 0 1215 | 0 1216 | 0 1217 | 0 1218 | 0 1219 | 0 1220 | 0 1221 | 0 1222 | 0 1223 | 0 1224 | 0 1225 | 0 1226 | 0 1227 | 0 1228 | 0 1229 | 0 1230 | 0 1231 | 0 1232 | 0 1233 | 0 1234 | 0 1235 | 0 1236 | 0 1237 | 0 1238 | 0 1239 | 0 1240 | 0 1241 | 0 1242 | 0 1243 | 0 1244 | 0 1245 | 0 1246 | 0 1247 | 0 1248 | 0 1249 | 0 1250 | 0 1251 | 0 1252 | 0 1253 | 0 1254 | 0 1255 | 0 1256 | 0 1257 | 0 1258 | 0 1259 | 0 1260 | 0 1261 | 0 1262 | 0 1263 | 0 1264 | 0 1265 | 0 1266 | 0 1267 | 0 1268 | 0 1269 | 0 1270 | 0 1271 | 0 1272 | 0 1273 | 0 1274 | 0 1275 | 0 1276 | 0 1277 | 0 1278 | 0 1279 | 0 1280 | 0 1281 | 0 1282 | 0 1283 | 0 1284 | 0 1285 | 0 1286 | 0 1287 | 0 1288 | 0 1289 | 0 1290 | 0 1291 | 0 1292 | 0 1293 | 0 1294 | 0 1295 | 0 1296 | 0 1297 | 0 1298 | 0 1299 | 0 1300 | 0 1301 | 0 1302 | 0 1303 | 0 1304 | 0 1305 | 0 1306 | 0 1307 | 0 1308 | 0 1309 | 0 1310 | 0 1311 | 0 1312 | 0 1313 | 0 1314 | 0 1315 | 0 1316 | 0 1317 | 0 1318 | 0 1319 | 0 1320 | 0 1321 | 0 1322 | 0 1323 | 0 1324 | 0 1325 | 0 1326 | 0 1327 | 0 1328 | 0 1329 | 0 1330 | 0 1331 | 0 1332 | 0 1333 | 0 1334 | 0 1335 | 0 1336 | 0 1337 | 0 1338 | 0 1339 | 0 1340 | 0 1341 | 0 1342 | 0 1343 | 0 1344 | 0 1345 | 0 1346 | 0 1347 | 0 1348 | 0 1349 | -------------------------------------------------------------------------------- /examples/nearest_neighbors.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import scipy.stats 3 | from matplotlib import pyplot as plt 4 | 5 | from sklearn.utils.validation import check_array, check_consistent_length 6 | from sklearn.utils.validation import check_is_fitted 7 | from sklearn.preprocessing import LabelEncoder, LabelBinarizer 8 | 9 | from mlcv.templates.base import Solution 10 | from mlcv.visualization.utils import proba_to_rgba 11 | 12 | 13 | class KNNClassifier(Solution): 14 | """K nearest neighbors classifier. 15 | 16 | Parameters 17 | ---------- 18 | k : int, optional (default=1) 19 | The number of neighbors to consider. 20 | 21 | metric : str, optional (default='euclidean') 22 | The metric to use for distances computation. 23 | 24 | """ 25 | 26 | def __init__(self, k=1, metric='euclidean'): 27 | super(KNNClassifier, self).__init__() 28 | self.k = k 29 | self.metric = metric 30 | 31 | def _validate_training_inputs(self, X, y=None): 32 | """Validate the parameters passed in __init__ and make sure they are 33 | consistent with X and y. 34 | 35 | Parameters 36 | ---------- 37 | X : array, shape (n_samples, n_features) 38 | There should be at least k + 1 samples. 39 | 40 | y : array, shape (n_samples, ?) 41 | There should be at least 2 distinct classes 42 | 43 | Raises 44 | ------ 45 | ValueError : If the inputs or the parameters do not match the expected 46 | format or their values are not compatible. 47 | 48 | """ 49 | 50 | check_consistent_length(X, y) 51 | 52 | # Check the number of neighbors is a positive integer 53 | if self.k < 1: 54 | raise ValueError("Number of neighbors must be at least 1.") 55 | 56 | n_samples, n_features = X.shape 57 | if n_samples < self.k + 1: 58 | raise ValueError("Only {} samples given, cannot fit {} nearest " 59 | "neighbors.".format(n_samples, self.k)) 60 | 61 | n_classes = len(np.unique(y)) 62 | if n_classes < 2: 63 | raise ValueError("Only {} classes, cannot fit {} nearest " 64 | "neighbors.".format(n_classes, self.k)) 65 | 66 | if self.metric != 'euclidean': 67 | raise ValueError("Currently only euclidean metric is supported.") 68 | 69 | def fit(self, X, y=None): 70 | """ 71 | 72 | Parameters 73 | ---------- 74 | X : array, shape (n_samples_train, n_features) 75 | Training inputs. 76 | 77 | y : array, shape (n_samples_train,) 78 | Corresponding training targets. 79 | 80 | Returns 81 | ------- 82 | solution : Solution 83 | A trained model. 84 | 85 | """ 86 | self._validate_training_inputs(X, y) 87 | 88 | # Actually nearest neighbors does not learn anything. 89 | # It just memorizes the whole training set. 90 | self.X_ = X 91 | 92 | # Store a label encoder with the mapping y -> [0, n_classes) 93 | self.label_encoder_ = LabelEncoder() 94 | 95 | # Store the encoded labels 96 | self.y_ = self.label_encoder_.fit_transform(y) 97 | 98 | # Store a label binarizer to use if predicting class probabilities 99 | self.label_binarizer_ = LabelBinarizer() 100 | 101 | # Fit the label binarizer with the encoded labels 102 | self.label_binarizer_.fit(self.y_) 103 | 104 | return self 105 | 106 | def _validate_testing_inputs(self, X): 107 | """Make sure the testing inputs are compatible. 108 | 109 | Parameters 110 | ---------- 111 | X : array, shape (n_samples, n_features) 112 | The number of features should be the same as in the training set. 113 | 114 | Raises 115 | ------ 116 | ValueError : If the inputs or the parameters do not match the expected 117 | format or their values are not compatible. 118 | 119 | """ 120 | 121 | # Make sure the model has been trained first 122 | check_is_fitted(self, attributes=['X_', 'y_']) 123 | 124 | # Make sure the testing inputs are in a valid format 125 | check_array(X) 126 | 127 | n_features_train = self.X_.shape[1] 128 | n_features_test = X.shape[1] 129 | if n_features_test != n_features_train: 130 | raise ValueError("The testing set has {} features, while the " 131 | "training set has {} features." 132 | .format(n_features_test, n_features_train)) 133 | 134 | def predict(self, X): 135 | """ 136 | 137 | Parameters 138 | ---------- 139 | X : array, shape (n_samples_test, n_features) 140 | Testing inputs. 141 | 142 | Returns 143 | ------- 144 | y : array, shape(n_samples_test,) 145 | A prediction for each testing input. 146 | 147 | """ 148 | 149 | self._validate_testing_inputs(X) 150 | 151 | # Find the nearest neighbors in the training set 152 | idx_nn = _find_nearest_neighbors(X, self.X_, self.k, 153 | return_distance=False) 154 | 155 | # Find the (encoded) labels of the nearest neighbors 156 | y_nn = self.y_[idx_nn] 157 | 158 | # For each test sample, find the most frequent label amongst neighbors 159 | y, n_votes = scipy.stats.mode(y_nn, axis=1) 160 | 161 | # Inverse transform the predicted labels 162 | y = self.label_encoder_.inverse_transform(y) 163 | 164 | return y.ravel() 165 | 166 | def predict_proba(self, X): 167 | """Estimate the class probabilities for each input in X. 168 | 169 | Parameters 170 | ---------- 171 | X : array, shape (n_samples_test, n_features) 172 | Testing inputs. 173 | 174 | Returns 175 | ------- 176 | proba : array, shape(n_samples_test, n_classes) 177 | Class probabilities for each testing input. 178 | 179 | """ 180 | 181 | self._validate_testing_inputs(X) 182 | 183 | # Find the nearest neighbors in the training set 184 | idx_nn, dist_nn = _find_nearest_neighbors(X, self.X_, self.k, 185 | return_distance=True, 186 | squared=False) 187 | 188 | # Probabilities can be obtained by using inverse distances as scores 189 | scores = np.exp(-dist_nn) 190 | 191 | # Convert scores to valid probabilities (softmax) 192 | p_neighbors = scores / scores.sum(axis=1)[:, None] 193 | 194 | # Find the (encoded) labels of the nearest neighbors 195 | y_nn = self.y_[idx_nn] 196 | 197 | # For each row in y_nn sum the one-hot encoded labels 198 | n_samples = X.shape[0] 199 | n_classes = len(self.label_encoder_.classes_) 200 | 201 | proba = np.zeros((n_samples, n_classes)) 202 | for i, (y_row, p_row) in enumerate(zip(y_nn, p_neighbors)): 203 | one_hot_labels = self.label_binarizer_.transform(y_row) 204 | proba[i] = (one_hot_labels * p_row[:, None]).sum(axis=0) 205 | 206 | # Make sure the rows still sum up to 1.0 (numerical errors) 207 | proba = proba / proba.sum(axis=1)[:, None] 208 | 209 | return proba 210 | 211 | def score(self, y_pred, y_true): 212 | """Classification accuracy is the ratio of correct predictions. 213 | 214 | Parameters 215 | ---------- 216 | y_pred : array, shape (n_samples, ) 217 | Predicted labels. 218 | 219 | y_true : array, shape (n_samples, ) 220 | Groundtrith labels. 221 | 222 | Returns 223 | ------- 224 | score : The true positives rate. 225 | 226 | """ 227 | check_consistent_length(y_pred, y_true) 228 | 229 | return np.equal(y_pred.ravel(), y_true.ravel()).sum() / y_pred.size 230 | 231 | def visualize(self, X, proba=None, **kwargs): 232 | """Scatter plot with color intensity proportional to class probability. 233 | 234 | Parameters 235 | ---------- 236 | X : array, shape (n_samples, n_features) 237 | Data samples. 238 | 239 | proba : array, shape (n_samples, n_classes) 240 | Class probabilities for each sample. 241 | 242 | **kwargs : keyword arguments 243 | Other Parameters. 244 | 245 | """ 246 | self._validate_testing_inputs(X) 247 | 248 | # We only plot the first two dimensions 249 | X = X[:, :2] 250 | 251 | n_classes = proba.shape[1] 252 | 253 | # Get rgba colors with tuned intensity (alpha) 254 | rgba, y_pred = proba_to_rgba(proba, return_most_likely=True) 255 | 256 | # Scatter the points with color 257 | class_names = self.label_encoder_.classes_ 258 | 259 | class_handles = [] 260 | for i in range(n_classes): 261 | class_mask = y_pred == i 262 | X_class = X[class_mask] 263 | ch = plt.scatter(X_class[:, 0], X_class[:, 1], c=rgba[class_mask]) 264 | class_handles.append(ch) 265 | 266 | plt.xlabel('dim 1') 267 | plt.ylabel('dim 2') 268 | plt.title('KNN classification') 269 | plt.legend(class_handles, class_names, scatterpoints=1, 270 | loc='upper right', ncol=1, fontsize=8) 271 | 272 | 273 | def _find_nearest_neighbors(X, Y, k, return_distance=True, squared=False): 274 | """Find the nearest neighbors in Y of each element in X. 275 | 276 | Parameters 277 | ---------- 278 | X : array, shape (n_samples_a, n_features) 279 | The reference set. 280 | 281 | Y : array, shape (n_samples_b, n_features) 282 | The query set. 283 | 284 | k : int 285 | The number of neighbors to find. 286 | 287 | return_distance : bool 288 | Whether to return the distances or not. 289 | 290 | squared : bool 291 | Whether to return the squared distances or the true distances. 292 | 293 | Returns 294 | ------- 295 | idx_nn : array, shape (n_samples_a, k) 296 | The indices of the nearest neighbors in Y. 297 | 298 | distances : array, shape (n_samples_a, k) 299 | The distances to the nearerst neighbors in Y. 300 | 301 | """ 302 | 303 | # Compute (squared) euclidean distances using the binomial formula: 304 | # ||x - y||^2 = ||x||^2 + ||y||^2 - 2*x^T*y 305 | X_norms_sq = np.sum(np.square(X), axis=1) 306 | Y_norms_sq = np.sum(np.square(Y), axis=1) 307 | X_times_Y = np.dot(X, Y.T) 308 | 309 | # Use numpy's broadcasting 310 | distances = X_norms_sq[:, None] - 2*X_times_Y + Y_norms_sq[None, :] 311 | 312 | # Numerical issues could allow negative distances 313 | np.maximum(distances, 0, out=distances) 314 | 315 | # distances has shape (n_samples_a, n_samples_b) 316 | # -> We only need the k smallest distances per row 317 | # -> We need to sort the rows 318 | # -> Actually we only need to sort the smallest k elements per row 319 | # -> It's more efficient to partition the k elements and sort only them 320 | idx = np.argpartition(distances, kth=k-1) 321 | 322 | # idx are indices referring to the query set [0, n_samples_b) 323 | # idx has shape (n_samples_a, n_samples_b) 324 | # Drop all columns after the k-th column 325 | idx = idx[:, :k] 326 | 327 | # Keep the k smallest distances per row 328 | sample_range = np.arange(len(idx))[:, None] 329 | distances = distances[sample_range, idx] 330 | 331 | # Now sort each row 332 | ind = np.argsort(distances) 333 | 334 | # ind refers to the position in distances namely it is in [0, k) 335 | # ind has shape (n_samples_a, k) 336 | # We can now sort the indices referring to the query set 337 | idx = idx[sample_range, ind] 338 | 339 | # If we are to return the distances we should sort them too. 340 | if return_distance: 341 | distances = distances[sample_range, ind] 342 | if squared: 343 | return idx, distances 344 | else: 345 | return idx, np.sqrt(distances) 346 | else: 347 | return idx 348 | -------------------------------------------------------------------------------- /examples/example_usage.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "# First write up / program your algorithm using the library tools\n", 12 | "# See examples/nearest_neighbors.py for a complete example (a k-nearest neighbors classifier)" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": 2, 18 | "metadata": { 19 | "collapsed": true 20 | }, 21 | "outputs": [], 22 | "source": [ 23 | "# # To make use of your estimator, follow the following pipeline:\n", 24 | "# # 1. Read in a data set that is appropriate for your estimator's task\n", 25 | "from mlcv.datasets import fetcher\n", 26 | "\n", 27 | "# In this case we implemented a classification algorithm, \n", 28 | "# so we use a data set with categorical targets (classes)\n", 29 | "X, y = fetcher.load('iris')" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 3, 35 | "metadata": {}, 36 | "outputs": [ 37 | { 38 | "data": { 39 | "text/plain": [ 40 | "array([[ 5.1, 3.5, 1.4, 0.2],\n", 41 | " [ 4.9, 3. , 1.4, 0.2],\n", 42 | " [ 4.7, 3.2, 1.3, 0.2],\n", 43 | " [ 4.6, 3.1, 1.5, 0.2],\n", 44 | " [ 5. , 3.6, 1.4, 0.2]])" 45 | ] 46 | }, 47 | "execution_count": 3, 48 | "metadata": {}, 49 | "output_type": "execute_result" 50 | } 51 | ], 52 | "source": [ 53 | "# X are our data points and y are the targets (class labels)\n", 54 | "# Let's see how the first 5 points look like\n", 55 | "X[:5]" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": 4, 61 | "metadata": {}, 62 | "outputs": [ 63 | { 64 | "data": { 65 | "text/plain": [ 66 | "array([0, 0, 0, 0, 0])" 67 | ] 68 | }, 69 | "execution_count": 4, 70 | "metadata": {}, 71 | "output_type": "execute_result" 72 | } 73 | ], 74 | "source": [ 75 | "# And the first 5 labels\n", 76 | "y[:5]" 77 | ] 78 | }, 79 | { 80 | "cell_type": "code", 81 | "execution_count": 5, 82 | "metadata": { 83 | "collapsed": true 84 | }, 85 | "outputs": [], 86 | "source": [ 87 | "# It is a good idea to shuffle our data, so that our estimator does not just memorize the order of the targets\n", 88 | "# This would not happen for this particular algorithm (k-nearest neighbors), \n", 89 | "# but could happen for many other algorithms. " 90 | ] 91 | }, 92 | { 93 | "cell_type": "code", 94 | "execution_count": 6, 95 | "metadata": { 96 | "collapsed": true 97 | }, 98 | "outputs": [], 99 | "source": [ 100 | "from sklearn.utils import shuffle\n", 101 | "\n", 102 | "# Now it is a good time to specify a seed for all operations that rely on random numbers.\n", 103 | "# You can use the same seed to reproduce the same random numbers (to repeat your experiments).\n", 104 | "seed = 42\n", 105 | "X, y = shuffle(X, y, random_state=seed)" 106 | ] 107 | }, 108 | { 109 | "cell_type": "code", 110 | "execution_count": 7, 111 | "metadata": {}, 112 | "outputs": [ 113 | { 114 | "data": { 115 | "text/plain": [ 116 | "array([1, 0, 2, 1, 1])" 117 | ] 118 | }, 119 | "execution_count": 7, 120 | "metadata": {}, 121 | "output_type": "execute_result" 122 | } 123 | ], 124 | "source": [ 125 | "# Let's check the first 5 labels now\n", 126 | "y[:5]" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": 8, 132 | "metadata": {}, 133 | "outputs": [ 134 | { 135 | "name": "stderr", 136 | "output_type": "stream", 137 | "text": [ 138 | "/work/chiotell/projects/scikit-learn/sklearn/model_selection/_split.py:2026: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n", 139 | " FutureWarning)\n" 140 | ] 141 | } 142 | ], 143 | "source": [ 144 | "# # 2. Train-Test split\n", 145 | "# Now split your data in a training set (to fit your model) and a testing set (to evaluate your model).\n", 146 | "from sklearn.model_selection import train_test_split\n", 147 | "\n", 148 | "# Here we use 70% of the data as training data and the rest for testing.\n", 149 | "# Look up what `stratify` does. Is it important?\n", 150 | "X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, train_size=0.7, random_state=seed)" 151 | ] 152 | }, 153 | { 154 | "cell_type": "code", 155 | "execution_count": 9, 156 | "metadata": { 157 | "collapsed": true 158 | }, 159 | "outputs": [], 160 | "source": [ 161 | "# # 3. Data pre-processing\n", 162 | "# You should consider what kind of pre-processing might be useful or crucial **for your estimator**.\n", 163 | "# For instance, you might want to make your data have zero mean (mean centering).\n", 164 | "# Or in a binary classification problem, you might want to make your targets be either -1 or 1.\n", 165 | "# Note that whatever pre-processing you perform on your training set, \n", 166 | "# the exact same pre-processing must be applied to your testing set too." 167 | ] 168 | }, 169 | { 170 | "cell_type": "code", 171 | "execution_count": 10, 172 | "metadata": {}, 173 | "outputs": [ 174 | { 175 | "name": "stdout", 176 | "output_type": "stream", 177 | "text": [ 178 | "KNNClassifier(k=3, metric='euclidean')\n" 179 | ] 180 | } 181 | ], 182 | "source": [ 183 | "# # 4. Instantiate your model with the necessary parameters\n", 184 | "\n", 185 | "# Here you should import your own file(s) with your implementation(s).\n", 186 | "from nearest_neighbors import KNNClassifier\n", 187 | "\n", 188 | "# Pass any parameters you choose to your model's constructor\n", 189 | "knn = KNNClassifier(k=3)\n", 190 | "\n", 191 | "# See the model parameters (some might be set by default)\n", 192 | "print(knn)" 193 | ] 194 | }, 195 | { 196 | "cell_type": "code", 197 | "execution_count": 11, 198 | "metadata": {}, 199 | "outputs": [ 200 | { 201 | "data": { 202 | "text/plain": [ 203 | "KNNClassifier(k=3, metric='euclidean')" 204 | ] 205 | }, 206 | "execution_count": 11, 207 | "metadata": {}, 208 | "output_type": "execute_result" 209 | } 210 | ], 211 | "source": [ 212 | "# # 5. Train your model (This is where the \"learning\" takes place.)\n", 213 | "knn.fit(X_train, y_train)" 214 | ] 215 | }, 216 | { 217 | "cell_type": "code", 218 | "execution_count": 12, 219 | "metadata": {}, 220 | "outputs": [ 221 | { 222 | "name": "stdout", 223 | "output_type": "stream", 224 | "text": [ 225 | "3-nearest neighbors test accuracy: 97.78%.\n" 226 | ] 227 | } 228 | ], 229 | "source": [ 230 | "# # 6. Evaluate your model on the testing set\n", 231 | "# Predict with the trained model\n", 232 | "y_pred = knn.predict(X_test)\n", 233 | "\n", 234 | "# Compute a score based on the discrepancies between your model's predictions and the groundtruth.\n", 235 | "test_acc = knn.score(y_pred, y_test)\n", 236 | "print('3-nearest neighbors test accuracy: {:5.2f}%.'.format(test_acc*100))" 237 | ] 238 | }, 239 | { 240 | "cell_type": "code", 241 | "execution_count": 13, 242 | "metadata": {}, 243 | "outputs": [ 244 | { 245 | "data": { 246 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEWCAYAAAB1xKBvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VPW5+PHPk8lkJYBA2Jeg4IIKCBFRQUVRcdde2+Ku\nVSneemu9bb313l9bRW211y52UYrYq1brrtVqUXEFVJCwb2oFQXbCEkIWklme3x/nAMNkJpmQOTOT\n5Hm/XvPKzPd855wnBzLPnO/5LqKqGGOMMU3JSncAxhhjWgdLGMYYYxJiCcMYY0xCLGEYY4xJiCUM\nY4wxCbGEYYwxJiGWMIxpgoioiAzyaN9XicjbEa9PFZF/iUiViFwqIjNE5DoPjjtVRH6a7P2ats0S\nhsk4IrJWRMZHvJ4oIrtE5HQRKXE/wP8Z9Z6nROQu9/kZbp2Ho+rMEZHrU/E7JEpVn1bVcyKKpgB/\nVNUOqvp3VT1PVZ9oyTFE5HoRmRN13Mmqek9L9mvaH0sYJqO5367/BFygqh9GbDpJRE5p5K3VwDUi\nUuJheF4YAKxIdxDGxGIJw2QsEfku8GvgXFX9OGrzr4D7Gnl7BfA48PMEj+UTkf8WkdUiskdEFohI\nvxj1LhCRRSJSKSLr913VuNvy3CudHSJSISLzRaSHu+16EVnj7vsrEbkqonyO+3w1cDjwD7dJKldE\nPhCRmyKOcbOIrHL3s1JERrjlP4mIfaWIXOaWHwNMBU5291nhlj8uIvdG7fdLEdkpIq+JSO+IbSoi\nk92msgoR+ZOISCLn1bQtljBMproFp3nmLFUti7H9YeDIyKarGO4D/k1EjkrgeP8JXAGcD3QEvgPU\nxKhXDVwLdAYuAG4RkUvdbdcBnYB+QFdgMlArIoXA74HzVLUIOAVYHL1jVT0C+Bq4yG2SqovcLiLf\nBO5yj98RuBjY4W5eDYx1j3838JSI9FLVVW4cn7j77Bx9XBE5E/gl8C2gF7AOeDaq2oXAicBQt965\nMc6NaeMsYZhMdTYwF1gWZ3stTkK4N852VHULzrfrKQkc7ybg/6nq5+pYoqo7oiup6gequkxVw6q6\nFHgGON3dHMBJFINUNaSqC1S10t0WBo4TkXxV3ayqh9LsdBPwK1Wd78b4paquc+N6QVU3uXE9B/wL\nGJXgfq8C/qKqC90kdSfOFUlJRJ37VbVCVb8G3geGH0L8ppWzhGEy1S3AkcD0Rpo/pgM9ROSiRvbz\nAHCuiAxr4nj9cL6lN0pEThKR90WkXER243x77+Zu/ivwFvCsiGwSkV+JiF9Vq4Fvu3U3i8gbInJ0\nU8dqTowicq2ILHabjCqA4yLiakpvnKsKAFS1CufKpU9EnS0Rz2uADs0J3LQNljBMptoKnIXTzPJw\nrAqqWo/T/HIPEDOpuFcJv3PrNGY9cEQCcf0NeA3op6qdcK5gxD1WQFXvVtUhOM1OF+I0H6Gqb6nq\n2ThNPp8BjyZwrIRiFJEB7v5uBbq6zU7LOXBOmpqSehPOzfZ9+yvEuVLaeAgxmjbMEobJWKq6CSdp\nTBCR38ap9lcgD5jQyK5+g/MBfkwjdaYD94jIYHEMFZGuMeoVATtVda+IjAKu3LdBRMaJyPEi4gMq\ncZqowiLSQ0QucT+I64AqnCaq5poO/EhERroxDnKTRSFOUih347gB5wpjn61AXxHJibPfZ4AbRGS4\niOQCvwDmqeraQ4jRtGGWMExGc9vMzwQuF5FfxtgeAn4GdGlkH5U4vari1sFJKs8Db+N82D8G5Meo\n9+/AFBHZ4x73+YhtPYEX3fevAj7ESWhZODfVNwE7ce553NJILPF+jxdw7tv8DdgD/B3ooqorcXqT\nfYKTHI4HPop463s4XXW3iMj2GPt9B/gp8BKwGecqZmJz4zNtn9gCSsYYYxJhVxjGGGMSYgnDGGNM\nQixhGGOMSYglDGOMMQnJTncAydStWzctKSlJdxjGGNNqLFiwYLuqFidSt00ljJKSEsrKYk07ZIwx\nJhYRWdd0LYc1SRljjEmI5wnDnTZ6kYi8HmPbVSKyVESWicjHkfP9iLOIzjJ3fhy7bDDGmDRLRZPU\nbTijXjvG2PYVcLqq7hKR84BpwEkR28epaoORqcYY09oEAgE2bNjA3r170xpHr1696Ny5wSz3CfE0\nYYhIX5w1A+7DmRrhIFGL4swF+noZjzHGpMuGDRsoKiqipKSEdK0/VVtby8aNGw85YXjdJPU74A4S\nm2jtRmBGxGsF3nFXPpvkRXDGGJMqe/fupWvXrmlLFgB5eXkEAoFDfr9nVxgiciGwTVUXiMgZTdQd\nh5MwxkQUj1HVjSLSHZgpIp+p6qwY750ETALo379/0uI3xphkS/fKti09vpdXGKcCF4vIWpzlHs8U\nkaeiK4nIUJxpmy+JXOFMVTe6P7cBrxBn9TBVnaaqpapaWlycUFdikwFUYflzMG0k/KYvvHId7Poq\n3VEZkxmCdc7fSEvcfvvtjB07lttuuy05QeFhwlDVO1W1r6qW4EyV/J6qXh1ZR0T6Ay8D16jqFxHl\nhSJStO85cA7OgjCmjZj9C3jtRti8EPZshGVPO8lj9/p0R2ZM+nzxBvz+CPhFAdzfGd7/OYRDzd/P\nwoULqaqqYvbs2dTX1zN//vykxJfycRgiMllEJrsvf4azstfDUd1newBzRGQJ8Cnwhqq+mepYjTfq\n9sDs+yBQfaBMQ1BfBR/9Kn1xGZNO62bDi9+CXWtAw1BfCZ88CDPvaP6+5s6dy9lnnw3A+PHj+eST\nT5ISY0pGeqvqB8AH7vOpEeU34SxsH11/DdDUGsymldr+Gfj8EKw9uDwcgHUfpCUkY9Lug7sgUHNw\nWaAGyh6BcVMgpzDxfVVUVHD44YcD0KlTJ1asWJGUGG2kt0m5ot4Qqo+9rXNJSkMxJmPs+Dx2eZYP\nqrY0b1+dOnWisrISgMrKykPuRtsglqTsxZhm6NgHBp4JvtyDy/0FcOpP0hOTMenWYxgQoxOTqvM3\n0xwnn3wy7777LgDvvPMOo0ePbnmAWMIwafJvz8KRFzlJw18ABd3g4unQ/9R0R2ZMeoybAv6oVeT9\nhXDqHZCd17x9jRgxgry8PMaOHYvP52PUqJidTJutTc1Wa1qP3CL41guwtwJqd0Gn/s6ltzHtVe+R\ncPXb8PYPYesSKCiGMXdC6eSm3xvLQw89lNwAsYRh0iyvs/MwxjhX2DfNTXcU8VmTlDHGmIRYwjDG\nGJMQSxjGGGMSYgnDGGNMQixhGGNMhgkSQjn02Qc3bdq0v2ttMBhMWlzWS8oYYzLEF2zlLVZSQQ1+\nshnNQE5jMFmxRvQ1okuXLrz77rtcdtllSY3PEoYxxmSAdezkJRYScNebqyfIJ6yhniDnMKRZ+8rL\nyyMvr5mj/RJgTVLGGJMBPuSL/clinwAhylhHPclrVmoJSxjGGJMBdlAds1wQqqhLcTSxWcIwxpgM\n0IOiuNs6kvzmpUNhCcMYYzLAGRyFn4MnVPPj41SOIJvmTbQWCAQYP348S5Ys4dxzz2XevHlJidFu\neps2r3IjrHjeWbDpyAuhx9B0R2RMQ73pxFWMYiar2EolBeRwKoMopX+z9+X3+3nnnXeSHqPnCUNE\nfEAZsFFVL4zaJsBDwPlADXC9qi50t01wt/mA6ap6v9exmrZn+bPw6necJS/DQZh1L4ycBOf+FqR5\nPRWN8Vx/unAjmTvHfyqapG4DVsXZdh4w2H1MAh6B/UnmT+72IcAVItK8fmWm3dtb4SSLYC2E6px1\nw4O1sPBR+HpOuqMzpvXxNGGISF/gAmB6nCqXAE+qYy7QWUR6AaOAL1V1jarWA8+6dY1J2JdvQlaM\na+hALSx7OvXxGNPaeX2F8TvgDojqXHxAH2B9xOsNblm88gZEZJKIlIlIWXl5ecsjNm1HI01OYt09\njGk2z/5sRORCYJuqLvDqGACqOk1VS1W1tLi42MtDmVZm0LnOfYto/nw4/srUx2NMa+fl96xTgYtF\nZC1Ok9KZIvJUVJ2NQL+I133dsnjlxiQsrzNc+gRk5zuPLL/zs3Qy9B+T7uiMaURdHeihTz44b948\nTjnlFMaMGcPtt9+etLA8Sxiqeqeq9lXVEmAi8J6qXh1V7TXgWnGMBnar6mZgPjBYRAaKSI77/te8\nitW0Xcd+E76/GsY/AOPugZvnwzm/TndUxsTxxhtwxBFQUACdO8PPfw6hULN3M2DAAN577z3mzJnD\ntm3bWLZsWVLCS/k4DBGZDKCqU4F/4nSp/RKnW+0N7ragiNwKvIXTrfYvqroi1bGatqGoF5z0H+mO\nwpgmzJ4N3/oW1NQ4rysr4cEHoaoKft28bzk9e/bc/9zv9+PzNW/gXzwpSRiq+gHwgft8akS5At+L\n855/4iQUY4xp++6660Cy2KemBh55BKZMgcLCZu9y6dKllJeXM2RIckYlWF8RY4zJBJ9/Hrvc54Mt\nW5q9u507d3Lrrbfy2GOPtTCwAyxhGGNMJhg2LPb0A6rQJ+aogriCwSBXX301Dz744EHNUy1lCcMY\nYzLBlCmQn39wWWEh3HEHNHMxpBdeeIH58+dzxx13cMYZZ/DJJ58kJUSbfNAYYzLByJHw9tvwwx/C\nkiVQXAx33gmTJzd7V1dccQVXXHFF0kO0hGGMMZni1FNh7tx0RxGXNUkZY4xJiCUMY4xJEW3B6O1M\nOL4lDGOMSYG8vDx27NiR1qSxd+9e/H7/Ib/f7mEYY0wK9O3blw0bNpDuWbV79ep1yO+1hGGMMSng\n9/sZOHBgusNoEWuSaofCQVj7AWxdnu5IjDGHRBXWroVNm1J6WLvCaGfm3A/v/Y+zxjVAbie4YRb0\nGJreuIwxCfr0U7jySidZhMNw7LHw/PPOLLcesyuMdmT1THj3zgPJAqBuNzw6yvl/Z4zJcOXlcNZZ\nsHo11NY662YsXgxjx0Ig4PnhLWG0IzPviF0eqoPF/5faWIwxh+DJJyEYtYxkOOxMgT5jhueHt4TR\njlRtjr9tR5yJMo0xGWTtWti7t2F5IAAbNnh+eEsY7Ujf0fG3HX1Z6uIwxhyiMWOgQ4eG5VlZMLqR\nP/Ak8SxhiEieiHwqIktEZIWI3B2jzo9FZLH7WC4iIRHp4m5bKyLL3G1lXsXZnpz/R5AYC291PQr6\nnZz6eIwxzXTZZVBScvDstQUFMG4cjBjh+eG9vMKoA85U1WHAcGCCu273fqr6v6o6XFWHA3cCH6rq\nzogq49ztpR7G2W507Av/vgJ6joCsbPDlwfHXwL9b91pjWoecHPj4Y/jRj5xeUcccA/feC6+8kpLD\ne9at1l1+tcp96XcfjY2JvwJ4xqt4jKPbUfDdBemOwhhzyIqK4J57nEeKeXoPQ0R8IrIY2AbMVNV5\nceoVABOAlyKKFXhHRBaIyKRGjjFJRMpEpCzdQ+6NMaYt8zRhqGrIbW7qC4wSkePiVL0I+CiqOWqM\n+97zgO+JyGlxjjFNVUtVtbS4uDip8RtjjDkgJb2kVLUCeB/nKiKWiUQ1R6nqRvfnNuAVYJSXMZrk\nWjcb/jwS7vHDgz3g4/89eMCgMab18bKXVLGIdHaf5wNnA5/FqNcJOB14NaKsUESK9j0HzgHs1mwr\nsWkBPD0Btix05q2q3gYf3AXv3JnuyIwxLeHlFUYv4H0RWQrMx7mH8bqITBaRyEVqLwPeVtXqiLIe\nwBwRWQJ8Cryhqm96GKtJog/vhkDtwWWBGvj0D1BfHfs9xpjM52UvqaXACTHKp0a9fhx4PKpsDTDM\nq9iMt7YuJWZ/uKxsqFwP3Y5OeUjGmCSwkd4m6YqPjV0eDjpjQYwxrZMlDJN0Z/wc/AUHl/kLoHQy\n5MSY1cAY0zpYwjBJ12cUTHzNvdIQyDsMxvwEznkw3ZEZY1rCFlAynjj8LGfKEVUQSXc0xphksCsM\n4ylLFsa0HZYwjDHGJMQSRhJUl8NbP4Q/HAmPnQwrnneaYowxpi2xexgtVLsT/jwcqrdDuB52/gte\n/Y4zFuHMe9MdnTHGJI9dYbTQ/IedpBGuP1AWqIZPfg01O9IXlzHGJJsljBZa/TYEYyyx68uFzQtT\nH48xxnjFEkYLdS4BiXEWwwEo6p3ycIwxxjOWMFpo9A8gO+/gsiw/dDsGuseZIsMYY1ojSxgt1GsE\nXPoE5Hdxpr3w5UG/k+Gqf6Y7MmOMSS7rJZUEQy6Hoy+F7Z9D/mHWFGWMaZssYSRJVrY1QRlj2jZr\nkjLGGJMQu8JoZ8JBWPWy88g7DEbe7NyHibRnMyz4M2xbDn1OghE3OvdojDHtm2cJQ0TygFlArnuc\nF1X151F1zsBZy/srt+hlVZ3ibpsAPAT4gOmqer9XsbYX4SD89RzY+KkzuFCyYOmTMP5/YdS/O3W2\nLIHHT4NgHYTq4F//hI9/BTeXQecB6Y3fGJNeXjZJ1QFnquowYDgwQURGx6g3W1WHu499ycIH/Ak4\nDxgCXCEiQzyMtV1Y8cKBZAGgYWet7Zk/hL0VTtk/JkFdpZMsAIK1zkj2t3+UnpiNMZnDs4Shjir3\npd99JDol3yjgS1Vdo6r1wLPAJR6E2a6sfPFAsojky4G1Hzoj1jcvaLhdw/DlDO/jM8ZkNk9veouI\nT0QWA9uAmao6L0a1U0RkqYjMEJF9/Yz6AOsj6mxwy2IdY5KIlIlIWXl5eVLjb2tyOwJx1qfIKXR6\nemX5Ym/353sWljGmlfA0YahqSFWHA32BUSJyXFSVhUB/VR0K/AH4+yEcY5qqlqpqaXFxccuDbsNG\n3hz7g9+XAyVnOAnjmH9zXkfKzoMTbkpJiMaYDJaSbrWqWgG8D0yIKq/c12ylqv8E/CLSDdgI9Iuo\n2tctMy3Q7xQ4/S4nAeQUQU5HyO8KV73pJAuACx6GHsPBX+jUyc53kskZd6UxcGNMRvCyl1QxEFDV\nChHJB84GHoiq0xPYqqoqIqNwEtgOoAIYLCIDcRLFROBKr2JtT079MQy/Hta+7zRRDTwLfP4D2/M6\nw01znXsZO/4FPYbagERjjMPLcRi9gCfcHk9ZwPOq+rqITAZQ1anA5cAtIhIEaoGJqqpAUERuBd7C\n6Vb7F1Vd4WGs7UphMRz7rfjbRaB3qfMwxph9RNvQWqKlpaVaVlaW7jCMMabVEJEFqprQ10Mb6Z0k\nW5bAV+86I6KP+YbbI6mZKjfAZ68C6kxm2LFv8/dRVwmrXoHaHTDwTOg5vPn7CAWcAXs73Sapw8fH\nXvPDGNO+WMJoIVV49QZY+YIzkjrLDzO+70xv3n9M4vspmwpv3c7+bq8zfwxn//rACOxErP8YnpoA\nKATrwZcNR18Glz2Z+Af+nk3w2KlOwgnuhexcOOxwuH4W5HVKPBZjTNtj3xtbaNXL7oC4GgjVOwPj\n6vfAs5c5CSQRFeucZBHc64ysDtY6z2f+EHZ91fT7AcIhePZS59j1Vc4a44Ea+OzvTnyJ+sfNzpVO\n/R5n1cD6Ktj+Gbx7Z+L7MMa0TZYwWmjRY7FHT4fqYMPcxPax6mXnSiVaOAyrXkpsH5vmx15bPFAN\nC6cnto9QwFmjXKMSXagelj+T2D6MMW2XJYwW0lDschHnW3/C+4jV90AT30c45Bwz3rbEAok/d4uG\nE9yHMabNsoTRQkOvdQa5NSDOUq2JOPrS2PcYsrKdbYnoMwokxrQe/kIYfl1i+/DlQMlpDWPJ8jsj\nwI0x7ZsljBY6bqLTG2lf0vDlgb8ALn+u4RQb8XQZBKf/zBlVLT6QbOf52P+Bbkcltg+f3zmmv8AZ\nyQ1OTCWnw/HNGPJ40XQo6Hbg98npAJ36wdm/Snwfxpi2ycZhJIEqrPsQVs90PmyPvwI69Gz+fspX\nuTeo1VknvPgQJnSv2urcb6gud7rDlpwRv6kqnvpqp9fX9s+dbrnHXJZ48jPGtC7NGYfRaMIQkaNx\nZomdFzFVOSIyQVXfbHGkSWYD94wxpnmakzDiNkmJyPdxVsP7D2C5iESuR/GLloVojDGmtWls4N7N\nwEhVrRKREuBFESlR1YeIu6qCMaYlNByifP57BCsr6Hby2eR06Jy+YDZtgqVLoaQEjj46fXGYjNFY\nwsiKmHp8rbv+9osiMgBLGMYk3c5VZWRPuIBOu/agIhAMsfb3Uyi58Y7UBhIOwy23wJNPQm4uBAJQ\nWgqvvQadbLh/e9ZYL6mtIrJ/JiI3eVwIdAOO9zowY9qTcChIzvgJdFhfTu6eWvIqa8ipqaPP939G\n+cIPUxvMH/8ITz0Fe/fC7t1QUwNz58JNtopWe9dYwrgW2BJZoKpBVb0WOM3TqIxpZ7bNfgP/nhqy\nojqh+PYGqHnk96kN5qGHnCQRqb4e/vEPqI4xrYFpN+I2Sanqhka2feRNOMa0T8FdO5xmqChZ4TC+\n8u2pDaayMv626moojDVS1bQHNnDPmAxw2JhzyK4LNCivL8wjfOklMd7hoXPOAV+MaQP69IHi4tTG\nYjKKZwlDRPJE5FMRWSIiK0Tk7hh1rhKRpSKyTEQ+FpFhEdvWuuWLRcQGV5g2rbC4Lxt+9h/UF+Tu\nn8+rviCX3UcPoPcVk1MbzC9+AZ07Oze8wUkeBQXw6KPNHwVq2pSE18MQkY6R9VV1ZxNvqQPOdLvl\n+oE5IjJDVSPncP0KOF1Vd4nIecA04KSI7eNUNcXX48akR8l//5rNJ48l+PAfyd5ZQf23vkGf624j\nO7cgtYEMGAArVzo3v2fNgqOOgttvt661pumEISLfBe4G9nJgMlMFDm/sfe7a3PtGh/vdh0bV+Tji\n5VzgENaYM6bt6DXuUhiX4IyTXureHaZMSXcUJsMk0iT1I+A4VS1R1YHuo9FksY+I+ERkMbANmKmq\n8xqpfiMwI+K1Au+IyAIRmdTIMSaJSJmIlJWXlycSljHGmEOQSMJYDdQ0WSsGVQ2p6nCcK4dRInJc\nrHoiMg4nYfxXRPEY973nAd8TkZhdeVV1mqqWqmppsd2QM6bVCRKikr2EsEVXMl0i9zDuBD4WkXk4\n9yUAUNXvJ3oQVa0QkfeBCcDyyG0iMhSYDpynqjsi3rPR/blNRF4BRgGzEj2mMSazhVHe5TPKWIei\n+MjidI5kNAPTHZqJI5ErjD8D7+HcY1gQ8WiUiBSLSGf3eT5wNvBZVJ3+wMvANar6RUR5oYgU7XsO\nnENUojHGtG4f8DllrCNAiCBh6gjyPp+zhLhDwEyaJXKF4VfV/zyEffcCnhARH05iel5VXxeRyQCq\nOhX4GdAVeFic7npBd5rdHsArblk28LdMnE7dGHNowiifspYAB68fHCDEbP7FMOv/kpESSRgz3JvO\n/+DgJqlGu9Wq6lLghBjlUyOe3wQ0mKBGVdcAw6LLjTFtw76rilj2HPiYMRkmkYRxhfvzzoiyJrvV\nGmNMPDn4KCSXPextsK0HHdMQkUlEkwlDVe0OlDEmqQThHI7hNZYQiLjS8JPF2dgAwUwVN2GIyJmq\n+p6IfCPWdlV92buwjDFt3bH0Jhc/H/IFu6ihB0WcydH0IY2LRplGNXaFcTpO76iLYmxTnN5Nxhhz\nyAZRzCBs/FRr0dj05j93f96QunCMMcZkqsaapBrtSquqv0l+OMYYYzJVY01SRe7Po4ATgdfc1xcB\nn3oZlDHGmMzTWJPU3QAiMgsYoap73Nd3AW+kJDpjjDEZI5GpQXoA9RGv690yY4wx7UgiA/eeBD51\nJwAEuBR43LOIjDHGZKREBu7dJyIzgLFu0Q2qusjbsIwxxmSahJZoVdWFwEKPYzHGGJPBErmHYYwx\nxljCMMYYkxhLGMYYYxJiCcMYY0xCLGFkiHAQFkyD6Sc5j7KpEAqkO6r0ChDiY1Yzjdn8Hx+znI0o\nmvwDbdsG//VfMGwYnHcevPtu8o/RytSs/Zxtt1xN5dDBlP/bBHbPn9Ww0htvwPjxcMIJ8POfw65d\nqQ8UYONGuO02GDoULrkEPvooPXGowt/+BmPHwsiR8OtfQ21temLxiKh68AcIiEgeMAvIxemN9eK+\nCQ0j6gjwEHA+UANc7/bIQkQmuNt8wHRVvb+pY5aWlmpZWVlSf49UUIVnLoS1H0CgxinzF0D/sXDV\nDHBWqm1fQoR5jI/YTtX+ldn8+BhKHy7g+OQdaNs254Nm1y6od8enFhTAgw/CLbck7zitSNUXy8g5\n8WR8NXvxBUOERQjl51D53ON0vXCiU+kXv4D77oMa9z9sbi707AlLlkCnTqkL9uuvnYS1Zw8E3G9Y\nBQXw6KNw5ZWpiwPg5pvhmWegutp5nZ8PQ4bAJ5+A35/aWJpBRBa4S2M3ycsrjDrgTFUdBgwHJojI\n6Kg65wGD3cck4BEAdx3wP7nbhwBXiMgQD2NNq/UfwdoPDyQLcJ5/PQfWxfhi1x6sZDM7qD5oGc8A\nIZawgZ1UJ+9ADz54cLIA50Pwjjva3LfDRO2980dkV9XgCzrrbWep4q+pI/+W21ANO+frnnsOJAuA\nujon+U6dGmevHrnrLti9+0CyACeu738fgsHUxfHFF/D00weSBTj/fz77DF5uOytBeJYw1FHlvvS7\nj+jLmUuAJ926c4HOItILGAV8qaprVLUeeNat2yatmwXBhitVEqhpvwljNeUECDUoF4T1JLHp4803\nD04W+2RlwYoVyTtOK1L04Tyywg1bHnLKd1G3bRMsWAA5OQ3fWFvrNFOl0rvvQqjh/xP27oW1a1MX\nx5w5zv+ZaNXV8PbbqYvDY57ewxARn4gsBrYBM1V1XlSVPsD6iNcb3LJ45bGOMUlEykSkrLy8PHnB\np1BhD8jOa1juz4fC7qmPJxN0JI8sGrbFCVBAjA+rQ9W7d+zy+noobp8L+9R3OyxmuSD4Ox4G3bvH\n/vYuAv36eRxdlO5x/kCCQejSJbVxxEoYOTnQJ+ZHV6vkacJQ1ZCqDgf6AqNE5DgPjjFNVUtVtbS4\nlf6BD7kcxNewXHxw3LdTH08mOIH+MRNGDtkcQbfkHeiHP3TavCP5/XDiiTBgQPKO04rU/uj7BAoO\n/gYTzMthx7cvwJdfCMcfD4MGgS/qP21+vtMUlEp33AGFhQeX5ebChAmpTRjnnuv8/tE3HLOz4Tvf\nSV0cHktJLylVrQDeByZEbdoIRH4l6euWxStvk/I6wbUzoagP5HRwHkW94Zq3Ia+dLm98GAV8k5Hk\n4ycHH34Wze9wAAAXu0lEQVR8dKGQaxlNVjL/2559NjzwgPOh07Gj80c/enSbanduruIbb2PXbTcS\nzMuhvmMhwbwcKiacRpdHnnAqiMCMGc7N5vx857wVFcHDD8NJJ6U22G9+E+6880AceXlwxhnw5JOp\njcPvhw8+cBJpQYFzPrp2hZdegpKS1MbiIS97SRUDAVWtEJF84G3gAVV9PaLOBcCtOL2kTgJ+r6qj\nRCQb+AI4CydRzAeuVNVGG5Vbay+pfVRh2zLnZ4/jQazTM2HCbGUP2WTRjQ5IjKuOpKipgeXLnaaF\nNvQH3hKB3Tup+XwZOX0HkN+7JHal1ath506np1lubkrjO8iePbBqldPE2Ldv+uJQdW5019Y65yQ7\noen60qo5vaS8TBhDgSdwusVmAc+r6hQRmQygqlPdbrV/xLnyqMGZCbfMff/5wO/c9/9FVe9r6pit\nPWEYY0yqZUTCSAdLGMYY0zzNSRiZf73ksfoqWPoUbJgHxUPghBugIIn3VM2hU5Q1bGcVW8jBx1D6\n0pOOaYmlkr0s4mt2U8sAunIsvcgmRk8Fj4UJ8zlb+ZJyCsjhBPrRhcKm39jerV0Ljz0GmzbBOefA\nN76R0YPpMlW7vsLYsxkeLYW9uyFQDdn54MuB73wE3Y/1MFDTJEV5iUX8i20ECCGAjyzO4mhOYmBK\nY1nHTv7Gp4RRQoTx46MTedzIqeSSug+dEGGeZC5bqCRAiCyELITLGM4x9EpZHK3OjBlw+eVOV9v6\neujQAY46CmbPdm6Wt3OZMtI74838MVRtc5IFQLAW6irhtRvTG5dxBu7tSxbgjPgMEuZdPqOaupTF\noSivsIgAIULuqPMAIXZRy0esTlkcAItZvz9ZAIRRgoR5laUEYwxyNDhJ4uqrnU4N+wZoVlXBypXw\nyCPpja0VatcJ44vXQaPHHylsKoNA+5wVImOsYkvMkd5ZCKtJ3QDNXdRQS8NZIEOEWcHmlMUBsJxN\ncUa/w0YqUhpLq7FkycHThuxTW+vM+2SapV0nDF+cAcOSBVmpb542EfyN3B9obFuyZeOLO0Nuqu9h\nxPu9FU3L/ZRWIS8PwuHY26w5qtnadcIYfkPDKTmy/DD4gvjJxKTGMPqSHee/5yBSN19KR/IopqjB\n6A8/Pkrpn7I4AEYyIGbSyMVPb1I4Q2xrMmQI9OrVcAR2YWG7nY24Jdp1wjjjLugzGvyFziOnA3Q9\nEi5+NN2RmV504gyOxEcWOfj2j/b+NqUpvcIAuJwRFJG3P4ZsshhMd0aS2qlDjqQ7J9CPbLLwu+ck\nHz9XcKJ3AxpbOxF47TVnXrCiIidR5OU5U59PnJju6Fqddt1Lap9NZbBlCXQZBANOa5/rT2SqKvay\nmu348TGIYnLS1BM87Hbx3cNe+tCZ7hSlJQ5w7qusYwf55DCIYnzt+3tfYgIBeOstZwr2sWNh8OB0\nR5QxbOCeMcaYhFi3WmOMMUnX7kd6m9ZNUdayg+1U0Y0OlNA1c9vzVZ31ppcudZpEzjor9hoKTZkx\nA/76V+jRA3760wbTeIcJs5rtVFBDbzrTm06Ze05Mq2IJw7RaewnwBJ+wixrCKFkInSngek4mL4Uj\nsBNSVQXjxzur+IVCziymvXo5K7Uluo5LOAzHHefMyrrPQw85U3lffTUAu6nlcT6mlgBhFEHoy2Fc\nQal1vTUtZk1SptV6kxVsp4p6QgQJU0+IHVTxFhm4tOr//A8sXuwkjtpaZzruNWtg0qTE9/GTnxyc\nLMC5arnuuv0r4L3CIiqp239OAoRYz04+Zk0SfxnTXlnCMK3WSjYTihpUF0JTPgI7IX/9K9RFTWkS\nDMLrr8ceiRzLX/4SuzwchieeoJYAG6hoMNAwSJhFB614bMyhsYRhWq1wnBHY8crTKtYa2OBcIcQb\niRwt1Mh8UbW1hAnHvVOxbx4sY1rCEoZptY6guMHNXEE4ggxc2/3iixuuviYCp5yS+Ep1l14af9v1\n11NILl3p0GCTD2GIzWZrksCzhCEi/UTkfRFZKSIrROS2GHV+LCKL3cdyEQmJSBd321oRWeZus8EV\npoHzOY4C/PtHfvvxUYCf88jAuekffBB69nSm1gZn3ecuXWD69MT38ac/QecYi7z/9Kf793spw8gl\ne/+0Kjn46EQBp3NkS38DYzxdorUX0EtVF4pIEbAAuFRVV8apfxFwu6qe6b5eC5Sq6vZEj2kD99qf\neoIsYyNbqaQHHTmOPuRmaue/mhp47jkoK4NjjoFrroFOzZwDKhiEe++Fl15yelfddx+cfPLBh6Ge\npWxgJ9X0owvH0NN6SJm4MnKkt4i8CvxRVWfG2f434H1VfdR9vRZLGMYY46mMG+ktIiXACcC8ONsL\ngAnASxHFCrwjIgtEJG7fQxGZJCJlIlJWXp66dRKMMaa98TxhiEgHnETwA1WtjFPtIuAjVd0ZUTZG\nVYcD5wHfE5HTYr1RVaepaqmqlhYnOgDKtBohwqxnF1vYHXddiqYoyhZ2s55d1lvImBbwtLFXRPw4\nyeJpVX25kaoTgYOWv1LVje7PbSLyCjAKmOVVrCbzfM5W/s5iFOdDv5AcJnJis2aK3cYenmU+1dQj\nbp+qSxnGUfT0LG5j2iove0kJ8BiwSlV/00i9TsDpwKsRZYXujXJEpBA4B1juVawm8+ykmpdYSB1B\n6gkSIEQFtfyVuQlfJYQI8yRzqaCWACHqCVJHkJdYxE6qPf4NjGl7vGySOhW4Bjgzouvs+SIyWUQm\nR9S7DHhbVSP/gnsAc0RkCfAp8IaqvulhrCbDLGJ9zAF4AUKsIbF+EKspJxhjDewwaiOfjTkEnjVJ\nqeocaHqKTFV9HHg8qmwNMMyTwEyrUMXemAlDcbqNJqKWQMy7HmGUKva2LEBj2iEb6W0y0iC6kxNj\n7ICi9KdLjHc01J8uMW+U+/FxRArXBTemrbCEYTLS0fSkGx3wR/wX9ePjBPpxGAUJ7eMwCjiBfget\nAe4ni2I6cIzd9Dam2TJ0SKxp73xkcT0ns5CvWc4m/GRTSn+ObuYH/QSOpYSulPE1AYIcR29G0N/W\nwTbmEFjCMBkrGx+jGMgoBh7yPgThGHpxjE2+Z0yL2dcsY4wxCbGEYUwy7d3bcKEkY9oIa5IyJhk2\nboTf/AbmzYOsLBg3Dn7wAzjssHRHZkzSWMIwpqVqauDWW2HHDmfNC1V4911Ytw4eewx8NrW4aRus\nScqYlpo9G8rLnWSRleUkiN69YfVqWLIk3dEZkzSWMIxpqY0bnauKWLZuTW0sxnjIEoYxLTV4sLM+\nd2TSUHUeJSVpC8uYZLOEYUxLjR4NRx7pXGnU1kJ1NWzY4CydevTR6Y7OmKSxhGFMS/n98NBDcO21\nzj2M/Hy45RZn7W1pcv5NY1qNlK3pnQptfU3v+vp63nvvPbZu3UpRURHjxo3jMOu2aYxpgYxb09u0\nTCAQ4O6776Z///7ce++9vPPOOzz22GMMHDiQm266CVvL3BiTCjYOI8MFAgG+8Y1vEAwGee+99xgy\nZMj+bVu3buX+++/nlFNOYfbs2fTsaTOwGmO841nCEJF+wJM4q+cpME1VH4qqcwbO0qxfuUUvq+oU\nd9sE4CHAB0xX1fu9ijWTPfDAA9TX1/P666+zzV/Nk8xlC7spIo/TexzJb3/7Wzp27MgNN9zAjBkz\n0h1uUlVRx/t8zmdsIZssRtCfMQxquzPNhkLw6qvw3HOwZw+cdRZcfz107ZruyIwBPLyHISK9gF6q\nutBdn3sBcKmqroyocwbwI1W9MOq9PuAL4GxgAzAfuCLyvbG0tXsYgUCAAQMG8NZbb9H1+P48wScE\nIpYc9eNjPEcztK4X/fv3Z9asWRx11FFpjDh56gnyMB9SRd3+lfeyyaKErlzJqDRH55EHHoAXX4SO\nHZ0b6bt2Qa9e8NRT0KFDuqMzbVRG3MNQ1c2qutB9vgdYBfRJ8O2jgC9VdY2q1gPPApd4E2nmmjVr\nFv369eP444/nPT47KFmAs771+3yOP9fP1VdfzbPPPpumSJNvKRupJXDQMq1BwqxjB1uoTGNkHtmy\nBV55xRktXlQEeXlOsti8Gd56K93RGQOk6Ka3iJQAJwDzYmw+RUSWisgMETnWLesDrI+os4HEk02b\nsW3bNkrcgV/xPiSDhKmmnpKSkjZ183s9uxokSIewhd0pj8dzX33lTCkSPe+U32/Ti5iM4XnCEJEO\nwEvAD1Q1+lNvIdBfVYcCfwD+fgj7nyQiZSJS1pY+MAE6duzI9u3bAehEftx6+fjZvn07RUVFqQrN\nc90ojHmvQoDOCS7R2qp07+7cw4huIg4GYeChLyBlTDJ5mjBExI+TLJ5W1Zejt6tqpapWuc//CfhF\npBuwEegXUbWvW9aAqk5T1VJVLS0uLk7675BOp59+OosWLWLDhg2czuCD1qYG5x5GKQPICgtPP/00\nF198cZoiTb4TYiyjmoXQkTwG0CVNUXno8MPhxBOdJqhg0EkcO3Y4gwAvvLDp9xuTAp4lDBER4DFg\nlar+Jk6dnm49RGSUG88OnJvcg0VkoIjkABOB17yKNVN16NCBq666invuuYcj6cH5HEcBOfjIcpNF\nf8ZzDE8//TRFRUWMHj063SEnTQdyuY7RdKeILIQshMPpxnWcjNAGR0+LwC9/CRdfDDt3Ovc0Bg+G\nqVOhjX0RMq2Xl72kxgCzgWVA2C3+b6A/gKpOFZFbgVuAIFAL/Keqfuy+/3zgdzjdav+iqvc1dcy2\n1ksKoKKigjFjxjBhwgSmTJlCfkE+NdSThx9CylNPPcWPf/xjZs6cybBhw9IdridqCeBDyGkvw4bq\n6iAQsJ5RJiWa00vKpgZpBXbs2MHNN9/Mhx9+yMSJEzn88MPZsWMHzzzzDN26dWP69OltNlkYY7zV\nnITRTr6ytW5du3bl5ZdfZu3atTz33HNs3LiRDh068Pzzz3PiiSemOzxjTDthCaMV6VrSk5H/dTHr\n2ElXCunH4ekOqUXWs5O5fMUe9jKI7pxICfn40x2WMSYOSxitRAU1TGMO9QQJo2yiglVs4ZuMYBDd\n0x1esy1iPW+ynIB7e2sLlSzga77LWArISXN0xphY2uikPG3P+3xOXcTIZ8UZ6f06y1Ba132oICHe\nYsX+ZOGUhamhjrmsSWNkxpjGWMJoJdawPWZaqKGeKupSHk9LbKMKYnSNDaF8wbbUB2SMSYgljFYi\nL07bvgK5raxlMR8/4Yiri0iF1hxlTMayhNFKjGZgg5HePoQj6dHqxiccRgE96EhW1FWGHx+jW/mN\nfGPaMksYrcQI+jOCfmSTRS7ZZJNFf7pwMcenO7RD8m1G0oMi/Pj2/z6nMYjBrfAGvjHtRev6atqO\nCcK5HMtYBrOVSjpTwGGteBK+DuRxM2MpZw/V1NOLjuRal1pjMpoljFamgBwG0i3dYSRNMUXYTEnG\ntA7WJGWMMSYhdoWRgIq1sOSvUFcBg86HgWc6k4tmokpqWcpGqqnnCLpxBMVtc3ZXY0zKWcJowooX\n4O/XgYYgVA9lf4bDx8O3XwbJsOuzf7GNF1lIGCVEmEV8TR8O40pOjLkYkTHGNId9ijSivhpevR6C\ntU6yAAhUw5p3YNUraQ2tgRBhXmYRAUKE3DEO9YTYwC6WxV57yhhjmsUSRiPWfQhZMa7BAtWw7KnU\nx9OYjVTEnCIkQIglbEhDRMaYtsYSRiOyGunl6ctNXRyJiB4EFynb/pmNMUlgnySNKDk99n0KfyGc\n8J3Ux9OY3nTGH+OWlB8fI5xFDo0xpkW8XNO7n4i8LyIrRWSFiNwWo85VIrJURJaJyMciMixi21q3\nfLGIpGUZPV8OTHwVcjo4j+w85zFyEhx+djoiii8LYSKl5JJNDj6yySKbLI6jN0fTM93hGWPaAC/X\n9O4F9FLVhSJSBCwALlXVlRF1TgFWqeouETkPuEtVT3K3rQVKVXV7osf0aonWuj3w+atQV+kkiq6D\nk36IpAkQ4nO2Uks9JXSlmKJ0h2SMyWAZsUSrqm4GNrvP94jIKqAPsDKizscRb5kL9PUqnpbILYKh\nV6c7isT48XEcvdMdhjGmDUrJPQwRKQFOAOY1Uu1GYEbEawXeEZEFIjKpkX1PEpEyESkrLy9PRrjG\nGGNi8Hzgnoh0AF4CfqCqlXHqjMNJGGMiiseo6kYR6Q7MFJHPVHVW9HtVdRowDZwmqaT/AsYYYwCP\nrzBExI+TLJ5W1Zfj1BkKTAcuUdUd+8pVdaP7cxvwCjDKy1iNMcY0zsteUgI8hnNT+zdx6vQHXgau\nUdUvIsoL3RvliEghcA6w3KtYjTHGNM3LJqlTgWuAZSKy2C37b3AGBajqVOBnQFfgYSe/EHTv1vcA\nXnHLsoG/qeqbHsZqjDGmCV72kpoDjU+Tqqo3ATfFKF8DDGv4DmOMMeliI72NMcYkxBKGMcaYhHg2\n0jsdRKQcWOfhIboBCY88TzOL1RsWqzcsVu80Fe8AVU1opeQ2lTC8JiJliQ6hTzeL1RsWqzcsVu8k\nM15rkjLGGJMQSxjGGGMSYgmjeaalO4BmsFi9YbF6w2L1TtLitXsYxhhjEmJXGMYYYxJiCcMYY0xC\nLGHEISI+EVkkIq/H2HaGiOx2l49dLCI/S0eMbiyNLmUrjt+LyJfucrgj0hGnG0tTsWbSee0sIi+K\nyGciskpETo7anknntalYM+K8ishRETEsFpFKEflBVJ2MOK8JxpoR59WN5XZ3KezlIvKMiORFbU/K\nefV8PYxW7DZgFdAxzvbZqnphCuNpzLhGlrI9DxjsPk4CHnF/pktjsULmnNeHgDdV9XIRyQEKorZn\n0nltKlbIgPOqqp8Dw8H5QgZsxFm6IFJGnNcEY4UMOK8i0gf4PjBEVWtF5HlgIvB4RLWknFe7wohB\nRPoCF+Cs09HaXQI8qY65QGdx1ls3cYhIJ+A0nOn5UdV6Va2IqpYR5zXBWDPRWcBqVY2emSEjzmuU\neLFmkmwgX0Sycb4wbIranpTzagkjtt8BdwDhRuqc4l7azRCRY1MUVyxNLWXbB1gf8XqDW5YOiSy7\nmwnndSBQDvyf2yw5XZx1WSJlynlNJFbIjPMaaSLwTIzyTDmvkeLFChlwXt3F5h4EvgY2A7tV9e2o\nakk5r5YwoojIhcA2VV3QSLWFQH9VHQr8Afh7SoKLbYyqDse55PyeiJyWxlia0lSsmXJes4ERwCOq\negJQDfwkTbE0JZFYM+W8AuA2m10MvJDOOBLRRKwZcV5F5DCcK4iBQG+gUESu9uJYljAaOhW4WETW\nAs8CZ4rIU5EVVLVSVavc5/8E/CLSLeWRktBSthuBfhGv+7plKddUrBl0XjcAG1R1nvv6RZwP5UiZ\ncl6bjDWDzus+5wELVXVrjG2Zcl73iRtrBp3X8cBXqlquqgGcVUxPiaqTlPNqCSOKqt6pqn1VtQTn\nUvQ9VT0oW4tITxFnOUARGYVzHnc02JnHJLGlbF8DrnV7SYzGuVzdnOJQE4o1U86rqm4B1ovIUW7R\nWcDKqGoZcV4TiTVTzmuEK4jfxJMR5zVC3Fgz6Lx+DYwWkQI3nrNwOuxESsp5tV5SCRKRybB/adnL\ngVtEJAjUAhM1PUPmYy5lGxXrP4HzgS+BGuCGNMSZaKyZcl4B/gN42m2SWAPckKHnFZqONWPOq/tl\n4WzguxFlGXleE4g1I86rqs4TkRdxmsiCwCJgmhfn1aYGMcYYkxBrkjLGGJMQSxjGGGMSYgnDGGNM\nQixhGGOMSYglDGOMMQmxhGFMC4jIXSLyI/f5FBEZ34J9/UVEtolI9FgaYzKCJQxjkkRVf6aq77Rg\nF48DE5IUjjFJZwnDmGYSkf8RkS9EZA5wVET54yJyuft8rYj8Uty1P0RkhIi8JSKr9w2oiqaqs4Cd\nqfktjGk+G+ltTDOIyEicKWOG4/z9LATiTVT5taoOF5Hf4lw9nArk4UyJMtX7aI1JLksYxjTPWOAV\nVa0BEJHXGqm7b9syoIOq7gH2iEidiHRuJetWGLOfNUkZ450692c44vm+1/ZlzbQ6ljCMaZ5ZwKUi\nku/OvntRugMyJlUsYRjTDKq6EHgOWALMAOYna98i8gzwCXCUiGwQkRuTtW9jksFmqzXGGJMQu8Iw\nxhiTEEsYxhhjEmIJwxhjTEIsYRhjjEmIJQxjjDEJsYRhjDEmIZYwjDHGJOT/AwleQpOLKdm4AAAA\nAElFTkSuQmCC\n", 247 | "text/plain": [ 248 | "" 249 | ] 250 | }, 251 | "metadata": {}, 252 | "output_type": "display_data" 253 | } 254 | ], 255 | "source": [ 256 | "# # 7. Possibly visualize something your model learned\n", 257 | "from matplotlib import pyplot as plt\n", 258 | "\n", 259 | "# Here we visualize the testing set. \n", 260 | "# Each testing sample gets colored according to its highest predicted class probability\n", 261 | "knn.visualize(X_test, proba=knn.predict_proba(X_test))\n", 262 | "\n", 263 | "# We may also want to see which points where misclassified\n", 264 | "mask_misclassified = y_pred != y_test\n", 265 | "X_misclassified = X_test[mask_misclassified]\n", 266 | "plt.scatter(X_misclassified[:, 0], X_misclassified[:, 1], s=120, facecolors='none', edgecolors='k')\n", 267 | "\n", 268 | "plt.show()" 269 | ] 270 | }, 271 | { 272 | "cell_type": "code", 273 | "execution_count": null, 274 | "metadata": { 275 | "collapsed": true 276 | }, 277 | "outputs": [], 278 | "source": [] 279 | } 280 | ], 281 | "metadata": { 282 | "kernelspec": { 283 | "display_name": "Python [default]", 284 | "language": "python", 285 | "name": "python3" 286 | }, 287 | "language_info": { 288 | "codemirror_mode": { 289 | "name": "ipython", 290 | "version": 3 291 | }, 292 | "file_extension": ".py", 293 | "mimetype": "text/x-python", 294 | "name": "python", 295 | "nbconvert_exporter": "python", 296 | "pygments_lexer": "ipython3", 297 | "version": "3.6.1" 298 | } 299 | }, 300 | "nbformat": 4, 301 | "nbformat_minor": 2 302 | } 303 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | {one line to give the program's name and a brief idea of what it does.} 635 | Copyright (C) {year} {name of author} 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | {project} Copyright (C) {year} {fullname} 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /mlcv/datasets/banknote_auth_data.csv: -------------------------------------------------------------------------------- 1 | -7.0421,9.2,0.25933,-4.6832 2 | -7.0364,9.2931,0.16594,-4.5396 3 | -6.9599,8.9931,0.2182,-4.572 4 | -6.7526,8.8172,-0.061983,-3.725 5 | -6.7387,6.9879,0.67833,-7.5887 6 | -6.651,6.7934,0.68604,-7.5887 7 | -6.5773,6.8017,0.85483,-7.5344 8 | -6.5235,9.6014,-0.25392,-6.9642 9 | -6.5084,8.7696,0.23191,-3.937 10 | -6.4247,9.5311,0.022844,-6.8517 11 | -6.3979,6.4479,1.0836,-6.6176 12 | -6.3679,8.0102,0.4247,-3.2207 13 | -6.3364,9.2848,0.014275,-6.7844 14 | -6.2815,6.6651,0.52581,-7.0107 15 | -6.2003,8.6806,0.0091344,-3.703 16 | -6.1632,8.7096,-0.21621,-3.6345 17 | -6.1536,7.9295,0.61663,-3.2646 18 | -6.0598,9.2952,-0.43642,-6.3694 19 | -5.9034,6.5679,0.67661,-6.6797 20 | -5.8818,7.6584,0.5558,-2.9155 21 | -5.873,9.1752,-0.27448,-6.0422 22 | -5.637,8.1261,0.13081,-5.0142 23 | -5.525,6.3258,0.89768,-6.6241 24 | -5.4901,9.1048,-0.38758,-5.9763 25 | -5.4808,8.1819,0.27818,-5.0323 26 | -5.4414,7.2363,0.10938,-7.5642 27 | -5.3857,9.1214,-0.41929,-5.9181 28 | -5.3012,7.3915,0.029699,-7.3987 29 | -5.2943,-5.1463,10.333,-1.1181 30 | -5.2406,6.6258,-0.19908,-6.8607 31 | -5.2049,7.259,0.070827,-7.3004 32 | -5.1661,8.0433,0.044265,-4.4983 33 | -5.1216,-5.3118,10.385,-1.0612 34 | -5.119,6.6486,-0.049987,-6.5206 35 | -5.0676,-5.1877,10.427,-0.86725 36 | -5.0477,-5.8023,11.244,-0.3901 37 | -5.0301,7.5032,-0.13396,-7.5034 38 | -4.9462,3.5716,0.82742,-1.4957 39 | -4.9447,3.3005,1.063,-1.444 40 | -4.8861,7.0542,-0.17252,-6.959 41 | -4.8554,-5.9037,10.982,-0.82199 42 | -4.8426,-4.9932,10.405,-0.53104 43 | -4.8392,6.6755,-0.24278,-6.5775 44 | -4.7462,3.1205,1.075,-1.2966 45 | -4.7331,-6.1789,11.388,-1.0741 46 | -4.6765,-5.6636,10.969,-0.33449 47 | -4.6338,-12.751,16.717,-3.2168 48 | -4.577,3.4515,0.66719,-0.94742 49 | -4.5531,-12.585,15.442,-1.4983 50 | -4.5046,-5.8126,10.887,-0.52846 51 | -4.4996,3.4288,0.56265,-1.1672 52 | -4.4861,-13.289,17.309,-3.2194 53 | -4.4779,7.3708,-0.31218,-6.7754 54 | -4.4775,-13.03,17.083,-3.0345 55 | -4.4018,-12.937,15.656,-1.6806 56 | -4.3967,4.9601,-0.64892,-5.4719 57 | -4.3876,-7.7267,11.966,-1.4543 58 | -4.3773,-5.5167,10.939,-0.4082 59 | -4.3667,6.0692,0.57208,-5.4668 60 | -4.2932,3.3419,0.77258,-0.99785 61 | -4.2887,-7.8633,11.839,-1.8978 62 | -4.2859,8.5234,3.1392,-0.91639 63 | -4.244,-13.063,17.112,-2.8017 64 | -4.2333,4.9166,-0.49212,-5.3207 65 | -4.2249,6.2699,0.15822,-5.5457 66 | -4.211,-12.474,14.97,-1.3884 67 | -4.2091,4.7283,-0.49126,-5.2159 68 | -4.1958,-8.1819,12.129,-1.6017 69 | -4.1479,7.1225,-0.083404,-6.4172 70 | -4.1429,2.7749,0.68261,-0.71984 71 | -4.1409,3.4619,-0.47841,-3.8879 72 | -4.1244,3.7909,-0.6532,-4.1802 73 | -4.0786,2.9239,0.87026,-0.65389 74 | -4.0679,2.4955,0.79571,-1.1039 75 | -4.0218,-8.304,12.555,-1.5099 76 | -4.0214,-12.801,15.62,-0.95647 77 | -4.0173,-8.3123,12.455,-1.4375 78 | -4.0025,-13.498,17.677,-3.3202 79 | -3.9934,5.8333,0.54723,-4.9379 80 | -3.9933,2.6218,0.62863,-1.1595 81 | -3.9698,3.6812,-0.60008,-4.0133 82 | -3.9594,4.0289,-0.35845,-3.8957 83 | -3.9411,-12.879,13.06,-3.3125 84 | -3.9297,-6.0816,10.096,-1.0147 85 | -3.9204,4.0723,-0.23678,-2.1151 86 | -3.9172,2.6652,0.78886,-0.7819 87 | -3.8953,4.0392,-0.3019,-2.1836 88 | -3.8952,3.8157,-0.31304,-3.8194 89 | -3.8894,-7.8322,9.8208,0.47498 90 | -3.8858,-12.846,12.796,-3.1353 91 | -3.8826,4.898,-0.92311,-5.0801 92 | -3.8552,3.5219,-0.38415,-3.8608 93 | -3.8483,-12.805,15.682,-1.281 94 | -3.8203,-13.055,16.958,-2.3052 95 | -3.8167,5.1401,-0.65063,-5.4306 96 | -3.8073,-8.0971,10.177,0.65084 97 | -3.8053,2.4273,0.6809,-1.0871 98 | -3.793,-12.71,12.796,-2.825 99 | -3.7747,2.5162,0.83341,-0.30993 100 | -3.7573,-8.2916,10.303,0.38059 101 | -3.7503,-13.459,17.593,-2.7771 102 | -3.73,-12.972,12.982,-2.684 103 | -3.7244,1.9037,-0.035421,-2.5095 104 | -3.7181,-8.5089,12.363,-0.95518 105 | -3.6961,-13.678,17.579,-2.6181 106 | -3.6817,3.2239,-0.69347,-3.4004 107 | -3.6227,3.9958,-0.35845,-3.9047 108 | -3.6085,3.3253,-0.51954,-3.5737 109 | -3.6053,-5.974,10.092,-0.82846 110 | -3.6012,-6.5389,10.523,-0.48967 111 | -3.5985,-13.659,17.605,-2.4927 112 | -3.5933,0.22968,0.7126,-0.3332 113 | -3.5916,-6.2285,10.239,-1.1543 114 | -3.5895,-6.572,10.525,-0.16381 115 | -3.5801,-12.931,13.178,-2.5677 116 | -3.5798,0.45937,2.3457,-0.45734 117 | -3.5741,3.944,-0.07912,-2.1203 118 | -3.5713,-12.492,14.888,-0.47027 119 | -3.5681,-8.213,10.083,0.96765 120 | -3.5637,-8.3827,12.393,-1.2823 121 | -3.551,1.8955,0.1865,-2.4409 122 | -3.5359,0.30417,0.6569,-0.2957 123 | -3.518,2.8763,0.1548,-1.2086 124 | -3.506,-12.567,15.161,-0.75216 125 | -3.4917,-12.174,14.369,-0.61639 126 | -3.4605,2.6901,0.16165,-1.0224 127 | -3.4083,4.8587,-0.76888,-4.8668 128 | -3.3924,3.3564,-0.72004,-3.5233 129 | -3.3884,-8.215,10.332,0.98187 130 | -3.3863,-12.989,13.055,-2.7202 131 | -3.38,-0.7077,2.5325,0.71808 132 | -3.3793,-13.773,17.927,-2.0323 133 | -3.3604,-0.32696,2.1324,0.6017 134 | -3.3582,-7.2404,11.442,-0.57113 135 | -3.3553,0.35591,2.6473,-0.37846 136 | -3.3458,-0.50491,2.6328,0.53705 137 | -3.3203,-0.02691,2.9618,-0.44958 138 | -3.3125,0.10139,0.55323,-0.2957 139 | -3.2854,4.0372,-0.45356,-1.8228 140 | -3.2778,1.8023,0.1805,-2.3931 141 | -3.2692,-12.741,15.557,-0.14182 142 | -3.2305,-7.2135,11.643,-0.94613 143 | -3.2238,2.7935,0.32274,-0.86078 144 | -3.2051,-0.14279,0.97565,0.045675 145 | -3.1875,-7.5756,11.868,-0.57889 146 | -3.1423,-13.037,15.677,-0.66165 147 | -3.1366,0.42212,2.6225,-0.064238 148 | -3.1273,-7.1121,11.39,-0.083634 149 | -3.1158,-8.6289,10.44,0.97153 150 | -3.1128,-6.841,10.74,-1.0172 151 | -3.0986,-10.46,8.9717,-2.3427 152 | -3.0866,-6.6362,10.54,-0.89182 153 | -3.0799,0.60836,2.7039,-0.23751 154 | -3.0731,-0.53181,2.3877,0.77627 155 | -3.0265,-0.062088,0.68604,-0.055186 156 | -3.0201,-0.67253,2.7056,0.85774 157 | -3.0193,1.7775,0.73745,-0.45346 158 | -3.0061,-12.238,11.955,-2.1603 159 | -3,-9.1566,9.5766,-0.73018 160 | -2.9915,-6.6258,8.6521,1.8198 161 | -2.9883,0.31245,0.45041,0.068951 162 | -2.9821,4.1986,-0.5898,-3.9642 163 | -2.9786,2.3445,0.52667,-0.40173 164 | -2.9672,-13.287,13.473,-2.6271 165 | -2.9662,-10.326,8.784,-2.1138 166 | -2.9498,-8.273,10.265,1.1629 167 | -2.9146,4.0537,-0.45699,-4.0327 168 | -2.9138,-9.4711,9.7668,-0.60216 169 | -2.9098,-10.071,8.4156,-1.9948 170 | -2.902,-7.6563,11.832,-0.84268 171 | -2.899,-0.60424,2.6045,1.3776 172 | -2.8957,-12.021,11.915,-2.7552 173 | -2.8833,1.7713,0.68946,-0.4638 174 | -2.8829,3.8964,-0.1888,-1.1672 175 | -2.8619,4.5193,-0.58123,-4.2629 176 | -2.8391,-6.63,10.485,-0.42113 177 | -2.8267,-9.0407,9.0694,-0.98233 178 | -2.799,1.9679,-0.42357,-2.1125 179 | -2.7914,1.7734,6.7756,-0.39915 180 | -2.7908,-5.7133,5.953,0.45946 181 | -2.7769,-5.6967,5.9179,0.37671 182 | -2.7723,3.2777,-0.9351,-3.1457 183 | -2.7611,-10.51,9.0239,-1.9547 184 | -2.7419,11.404,2.5394,-5.5793 185 | -2.7338,0.45523,2.4391,0.21766 186 | -2.7264,3.9213,-0.49212,-3.6371 187 | -2.7143,11.454,2.1092,-3.9629 188 | -2.7083,-6.8266,7.5339,0.59007 189 | -2.7028,1.6327,0.83598,-0.091393 190 | -2.6989,12.198,0.67661,-8.5482 191 | -2.6864,-0.097265,0.61663,0.061192 192 | -2.6685,-10.452,9.1139,-1.7323 193 | -2.6649,-12.813,12.669,-1.9082 194 | -2.659,-1.6058,1.3647,0.16464 195 | -2.6479,10.137,-1.331,-5.4707 196 | -2.6406,-4.4159,5.983,-0.13924 197 | -2.6286,0.18002,1.7956,0.97282 198 | -2.62,-6.8555,6.2169,-0.62285 199 | -2.5961,-9.349,9.7942,-0.28018 200 | -2.5919,-1.0553,3.8949,0.77757 201 | -2.5912,-0.10554,1.2798,1.0414 202 | -2.5899,-0.3911,0.93452,0.42972 203 | -2.588,3.8654,-0.3336,-1.2797 204 | -2.5754,-5.6574,6.103,0.65214 205 | -2.5724,-0.95602,2.7073,-0.16639 206 | -2.5701,-6.8452,8.9999,2.1353 207 | -2.5665,-6.8824,7.5416,0.70774 208 | -2.565,-5.7899,6.0122,0.046968 209 | -2.564,-1.7051,1.5026,0.32757 210 | -2.5526,-7.3625,6.9255,-0.66811 211 | -2.5463,3.1101,-0.83228,-3.0358 212 | -2.5419,-0.65804,2.6842,1.1952 213 | -2.5373,-6.959,8.8054,1.5289 214 | -2.5346,-0.77392,3.3602,0.00171 215 | -2.5084,-0.22763,1.488,1.2069 216 | -2.4953,11.147,1.9353,-3.4638 217 | -2.4941,3.5447,-1.3721,-2.8483 218 | -2.484,12.161,2.8204,-3.7418 219 | -2.4835,-7.4494,6.8964,-0.64484 220 | -2.4824,-7.3046,6.839,-0.59053 221 | -2.4725,-0.40145,1.4855,1.1189 222 | -2.4621,2.7645,-0.62578,-2.8573 223 | -2.4604,12.73,0.91738,-7.6418 224 | -2.4561,-4.5566,6.4534,-0.056479 225 | -2.456,-0.24418,1.4041,-0.45863 226 | -2.4554,-9.0407,8.862,-0.86983 227 | -2.4473,12.625,0.73573,-7.6612 228 | -2.4458,1.6285,-0.88541,-1.4802 229 | -2.4365,3.6026,-1.4166,-2.8948 230 | -2.4349,-9.2497,8.9922,-0.50001 231 | -2.4198,-0.24418,0.70146,0.41809 232 | -2.4115,-9.1359,9.3444,-0.65259 233 | -2.41,3.7433,-0.40215,-1.2953 234 | -2.3983,12.606,2.9464,-5.7888 235 | -2.3898,-0.78427,3.0141,0.76205 236 | -2.3797,-1.4402,1.1273,0.16076 237 | -2.3675,-0.43663,1.692,-0.43018 238 | -2.3629,-0.10554,1.9336,1.1358 239 | -2.3518,-4.8359,6.6479,-0.060358 240 | -2.343,12.952,3.3285,-5.9426 241 | -2.341,12.378,0.70403,-7.5836 242 | -2.3361,11.96,3.0835,-5.4435 243 | -2.3299,-9.9532,8.4756,-1.8733 244 | -2.3277,1.4381,-0.82114,-1.2862 245 | -2.3242,11.518,1.8231,-5.375 246 | -2.3221,-9.3304,9.233,-0.79871 247 | -2.3211,3.166,-1.0002,-2.7151 248 | -2.3147,3.6668,-0.6969,-1.2474 249 | -2.3142,-0.68494,1.9833,-0.44829 250 | -2.3142,2.0838,-0.46813,-1.6767 251 | -2.2987,-5.227,5.63,0.91722 252 | -2.2918,-7.257,7.9597,0.9211 253 | -2.286,-5.4484,5.8039,0.88231 254 | -2.2811,-0.85669,2.7185,0.044382 255 | -2.2804,-0.30626,1.3347,1.3763 256 | -2.2677,3.2964,-2.2563,-2.4642 257 | -2.2625,-0.099335,2.8127,0.48662 258 | -2.2623,12.118,0.28846,-7.7581 259 | -2.2617,-4.7428,6.3489,0.11162 260 | -2.258,-9.3263,9.3727,-0.85949 261 | -2.2527,11.532,2.5899,-3.2737 262 | -2.2501,3.3129,-0.88369,-2.8974 263 | -2.2482,3.0915,-2.3969,-2.6711 264 | -2.234,-7.0314,7.4936,0.61334 265 | -2.2261,12.54,2.9438,-3.5258 266 | -2.2214,-0.23798,0.56008,0.05602 267 | -2.2183,-1.254,2.9986,0.36378 268 | -2.2173,1.4671,-0.72689,-1.1724 269 | -2.2153,11.963,0.078538,-7.7853 270 | -2.2083,-9.1069,8.9991,-0.28406 271 | -2.1979,-2.1252,1.7151,0.45171 272 | -2.1802,3.3791,-1.2256,-2.6621 273 | -2.1786,-6.4479,6.0344,-0.20777 274 | -2.1674,0.12415,-1.0465,-0.86208 275 | -2.1668,1.5933,0.045122,-1.678 276 | -2.1652,3.0211,-2.4132,-2.4241 277 | -2.1405,-0.16762,1.321,-0.20906 278 | -2.1333,1.5685,-0.084261,-1.7453 279 | -2.1241,-6.8969,5.5992,-0.47156 280 | -2.1234,1.1815,-0.55552,-0.81165 281 | -2.121,-0.05588,1.949,1.353 282 | -2.1059,1.1815,-0.53324,-0.82716 283 | -2.0962,-7.1059,6.6188,-0.33708 284 | -2.0897,10.826,2.3603,-3.4198 285 | -2.0891,-0.48422,1.704,1.7435 286 | -2.0759,10.822,2.6439,-4.837 287 | -2.0754,1.2767,-0.64206,-1.2642 288 | -2.0662,0.16967,-1.0054,-0.82975 289 | -2.0659,1.0512,-0.46298,-1.0974 290 | -2.0631,-1.5147,1.219,0.44524 291 | -2.0545,-10.868,9.4926,-1.4116 292 | -2.0529,3.8385,-0.79544,-1.2138 293 | -2.0441,1.2271,0.18564,-1.091 294 | -2.0336,-1.4092,1.1582,0.36507 295 | -2.0285,3.8468,-0.63435,-1.175 296 | -2.0149,3.6874,-1.9385,-3.8918 297 | -2.0066,-6.719,9.0162,0.099985 298 | -2.0046,-0.49457,1.333,1.6543 299 | -2.0042,-9.3676,9.3333,-0.10303 300 | -1.9983,-6.6072,4.8254,-0.41984 301 | -1.9966,-9.5001,9.682,-0.12889 302 | -1.9922,11.654,2.6542,-5.2107 303 | -1.9881,0.99945,-0.28562,-0.70044 304 | -1.979,3.2301,-1.3575,-2.5819 305 | -1.9725,2.8825,-2.3086,-2.3724 306 | -1.9667,11.805,-0.40472,-7.8719 307 | -1.9555,0.20692,1.2473,-0.3707 308 | -1.9551,-6.9756,5.5383,-0.12889 309 | -1.9458,11.222,1.9079,-3.4405 310 | -1.9423,0.3766,-1.2898,-0.82458 311 | -1.9409,-8.6848,9.155,0.94049 312 | -1.9389,1.5706,0.045979,-1.122 313 | -1.9177,11.689,2.5454,-3.2763 314 | -1.9116,-6.1603,5.606,0.48533 315 | -1.8974,3.5074,-1.7842,-3.8491 316 | -1.8969,-6.7893,5.2761,-0.32544 317 | -1.8782,-6.5865,4.8486,-0.021566 318 | -1.8629,-0.84841,2.5377,0.097399 319 | -1.8584,7.886,-1.6643,-1.8384 320 | -1.8554,-9.6035,7.7764,-0.97716 321 | -1.8483,0.31038,0.77344,1.4189 322 | -1.8448,1.254,0.27218,-1.0728 323 | -1.8439,-8.6475,7.6796,-0.66682 324 | -1.8411,10.831,2.769,-3.0901 325 | -1.8391,-9.0883,9.2416,-0.10432 326 | -1.8387,-6.301,5.6506,0.19567 327 | -1.8356,-6.7562,5.0585,-0.55044 328 | -1.8348,11.033,3.1863,-4.8888 329 | -1.8343,-6.5907,5.6429,0.54998 330 | -1.8219,-6.8824,5.4681,0.057313 331 | -1.8215,2.7521,-0.72261,-2.353 332 | -1.8187,-9.0366,9.0162,-0.12243 333 | -1.8076,-8.8131,8.7086,-0.21682 334 | -1.8046,-6.8141,6.7019,1.1681 335 | -1.803,11.882,2.0458,-5.2728 336 | -1.7976,-6.7686,6.6753,0.89912 337 | -1.7886,-6.3486,5.6154,0.42584 338 | -1.786,-8.1157,7.0858,-1.2112 339 | -1.7781,0.8546,7.1303,0.027572 340 | -1.7713,-10.767,10.218,-1.0043 341 | -1.7697,3.4329,-1.2144,-2.3789 342 | -1.7599,11.921,2.6756,-3.3241 343 | -1.7589,-6.4624,8.4773,0.31981 344 | -1.7582,2.7397,-2.5323,-2.234 345 | -1.7559,11.946,3.0946,-4.8978 346 | -1.7549,-0.080711,-0.75774,-0.3707 347 | -1.749,-6.332,6.0987,0.14266 348 | -1.7479,-5.823,5.8699,1.212 349 | -1.7344,2.0175,7.7618,0.93532 350 | -1.7322,-9.2828,7.719,-1.7168 351 | -1.7279,-6.841,8.9494,0.68058 352 | -1.7263,-6.0237,5.2419,0.29524 353 | -1.7104,-4.778,6.2109,0.3974 354 | -1.7101,-8.7903,7.9735,-0.45475 355 | -1.7064,3.3088,-2.2829,-2.1978 356 | -1.7063,2.7956,-2.378,-2.3491 357 | -1.7015,-0.010356,-0.99337,-0.53104 358 | -1.6988,-7.1163,5.7902,0.16723 359 | -1.6952,1.0657,8.8294,0.94955 360 | -1.6936,2.7852,-2.1835,-1.9276 361 | -1.682,-6.8121,7.1398,1.3323 362 | -1.6706,-2.09,1.584,0.71162 363 | -1.6677,-7.1535,7.8929,0.96765 364 | -1.6662,-0.30005,1.4238,0.024986 365 | -1.6641,-1.3678,1.997,0.52283 366 | -1.6637,3.2881,-2.2701,-2.2224 367 | -1.6514,-8.4985,9.1122,1.2379 368 | -1.6386,3.3584,-1.7302,-3.5646 369 | -1.6244,-6.3444,4.6575,0.16981 370 | -1.6176,1.0926,-0.35502,-0.59958 371 | -1.6162,0.80908,8.1628,0.60817 372 | -1.6029,-0.38903,1.62,1.9103 373 | -1.6001,-9.5828,9.4044,0.081882 374 | -1.5951,-6.572,4.7689,-0.94354 375 | -1.5877,-6.6072,5.8022,0.31593 376 | -1.5851,-2.1562,1.7082,0.9017 377 | -1.5768,10.843,2.5462,-2.9362 378 | -1.5732,1.0636,-0.71232,-0.8388 379 | -1.5681,-7.2446,6.5537,-0.1276 380 | -1.5621,-2.2121,4.2591,0.27972 381 | -1.5572,-9.8808,8.1088,-1.0806 382 | -1.5449,-10.15,9.6152,-1.2332 383 | -1.5322,-5.0966,6.6779,0.17498 384 | -1.5252,-6.2534,5.3524,0.59912 385 | -1.5228,-6.4789,5.7568,0.87325 386 | -1.5222,10.841,2.7827,-4.0974 387 | -1.522,-6.6383,5.7491,-0.10691 388 | -1.5078,-7.3191,7.8981,1.2289 389 | -1.5075,1.9224,7.1466,0.89136 390 | -1.5055,0.070346,6.8681,-0.50648 391 | -1.4904,-2.2183,1.6054,0.89394 392 | -1.48,-10.524,9.9176,-0.5026 393 | -1.4781,0.14277,-1.1622,-0.48579 394 | -1.4628,-1.5706,2.4357,0.49826 395 | -1.4572,9.1214,1.7425,-5.1241 396 | -1.4454,-8.4385,8.8483,0.96894 397 | -1.4446,2.1438,-0.47241,-1.6677 398 | -1.4427,3.2922,-1.9702,-3.4392 399 | -1.4377,-1.432,2.1144,0.42067 400 | -1.4375,-1.8624,4.026,0.55127 401 | -1.4275,11.88,0.41613,-6.9978 402 | -1.4233,-0.98912,2.3586,0.39481 403 | -1.4217,11.654,-0.057699,-7.1025 404 | -1.4174,-2.2535,1.518,0.61981 405 | -1.4106,-7.108,5.6454,0.31335 406 | -1.4094,-2.1252,-0.10397,-0.19225 407 | -1.3995,-1.9162,2.5154,0.59912 408 | -1.3971,3.3191,-1.3927,-1.9948 409 | -1.3968,-9.6698,9.4652,-0.34872 410 | -1.3946,2.3134,-0.44499,-1.4905 411 | -1.3931,1.5664,7.5382,0.78403 412 | -1.3907,-1.3781,2.3055,-0.021566 413 | -1.3887,-4.8773,6.4774,0.34179 414 | -1.3885,12.503,0.69118,-7.5487 415 | -1.366,0.18416,0.90539,1.5806 416 | -1.3612,10.694,1.7022,-2.9026 417 | -1.3414,-2.0776,2.8093,0.60688 418 | -1.3414,-1.9162,-0.15538,-0.11984 419 | -1.3389,1.552,7.0806,1.031 420 | -1.3274,9.498,2.4408,-5.2689 421 | -1.3066,0.25244,0.7623,1.7758 422 | -1.3,10.268,-2.953,-5.8638 423 | -1.2943,2.6735,-0.84085,-2.0323 424 | -1.2846,3.2715,-1.7671,-3.2608 425 | -1.2792,2.1376,-0.47584,-1.3974 426 | -1.2786,-2.4087,4.5735,0.47627 427 | -1.2667,2.8183,-2.426,-1.8862 428 | -1.2576,1.5892,7.0078,0.42455 429 | -1.2568,-1.4733,2.8718,0.44653 430 | -1.2537,10.88,1.931,-4.3237 431 | -1.2528,10.204,2.1787,-5.6038 432 | -1.2424,-1.7175,-0.52553,-0.21036 433 | -1.239,-6.541,4.8151,-0.033204 434 | -1.2369,-1.6906,2.518,0.51636 435 | -1.2244,1.7485,-1.4801,-1.4181 436 | -1.1859,-1.2519,2.2635,0.77239 437 | -1.1804,11.509,0.15565,-6.8194 438 | -1.1667,-1.4237,2.9241,0.66119 439 | -1.1497,1.2954,7.701,0.62627 440 | -1.1391,1.8127,6.9144,0.70127 441 | -1.1313,1.9037,7.5339,1.022 442 | -1.1306,1.8458,-1.3575,-1.3806 443 | -1.1193,10.727,2.0938,-5.6504 444 | -1.1188,3.3357,-1.3455,-1.9573 445 | -1.1022,-5.8395,4.5641,0.68705 446 | -1.1005,-7.2508,6.0139,0.36895 447 | -1.0941,2.3072,-2.5237,-1.4453 448 | -1.0833,-0.31247,1.2815,0.41291 449 | -1.0802,2.1996,-2.5862,-1.2759 450 | -1.0744,-6.3113,5.355,0.80472 451 | -1.0555,0.79459,-1.6968,-0.46768 452 | -1.0401,9.3987,0.85998,-5.3336 453 | -1.0292,-6.3879,5.5255,0.79955 454 | -1.0116,-0.19038,-0.90597,0.003003 455 | -1.0112,2.9984,-1.1664,-1.6185 456 | -1.005,0.084831,-0.2462,0.45688 457 | -0.9854,-6.661,5.8245,0.5461 458 | -0.98193,2.7956,-1.2341,-1.5668 459 | -0.97325,-6.4168,5.6026,1.0323 460 | -0.96511,9.4111,1.7305,-4.8629 461 | -0.9607,2.6963,-3.1226,-1.3121 462 | -0.95923,-6.7128,4.9857,0.32886 463 | -0.95923,0.091039,6.2204,-1.4828 464 | -0.95403,1.9824,-2.3163,-1.1957 465 | -0.94255,0.039307,-0.24192,0.31593 466 | -0.93587,-5.1008,4.5367,1.3866 467 | -0.91718,9.9884,1.1804,-5.2263 468 | -0.91318,-2.0113,-0.19565,0.066365 469 | -0.90784,-7.9026,6.7807,0.34179 470 | -0.89809,-4.4862,2.2009,0.50731 471 | -0.89569,3.0025,-3.6067,-3.4457 472 | -0.89542,2.0279,-2.3652,-1.2746 473 | -0.89409,3.1991,-1.8219,-2.9452 474 | -0.88728,2.808,-3.1432,-1.2035 475 | -0.87874,-2.2121,-0.051701,0.099985 476 | -0.87834,3.257,-3.6778,-3.2944 477 | -0.8734,-0.033118,-0.20165,0.55774 478 | -0.8734,1.6533,-2.1964,-0.78061 479 | -0.86339,1.9348,-2.3729,-1.0897 480 | -0.8471,3.1329,-3.0112,-2.9388 481 | -0.83535,0.80494,-1.6411,-0.19225 482 | -0.83121,0.039307,0.05369,-0.23105 483 | -0.82601,2.9611,-1.2864,-1.4647 484 | -0.82053,0.65181,-0.48869,-0.52716 485 | -0.8172,3.3812,-3.6684,-3.456 486 | -0.81479,-5.7381,4.3919,0.3211 487 | -0.7869,9.5663,-3.7867,-7.5034 488 | -0.78689,9.5663,-3.7867,-7.5034 489 | -0.78289,11.36,-0.37644,-7.0495 490 | -0.77995,3.2322,-3.282,-3.1004 491 | -0.77848,3.4019,-3.4859,-3.5569 492 | -0.77688,0.13036,-0.031137,-0.35389 493 | -0.77461,-1.8768,2.4023,1.1319 494 | -0.77288,-7.4473,6.492,0.36119 495 | -0.76794,3.4598,-3.4405,-3.4276 496 | -0.75793,2.5349,-3.0464,-1.2629 497 | -0.74324,-0.32902,-0.42785,0.23317 498 | -0.7351,1.7361,-1.4938,-1.1582 499 | -0.72068,-6.7583,5.8408,0.62369 500 | -0.71868,-5.7154,3.8298,1.0233 501 | -0.71494,-4.4448,2.2241,0.49826 502 | -0.70867,-5.5602,4.0483,0.903 503 | -0.7056,8.7241,2.2215,-4.5965 504 | -0.70346,2.957,-3.5947,-3.1457 505 | -0.69879,-3.3771,4.1211,1.5043 506 | -0.69745,-1.7672,-0.34474,-0.12372 507 | -0.69572,8.6165,1.8419,-4.3289 508 | -0.69078,-0.50077,-0.35417,0.47498 509 | -0.66008,-3.226,3.8058,1.1836 510 | -0.65767,-2.8018,3.7115,0.99739 511 | -0.64472,-4.6062,8.347,-2.7099 512 | -0.64326,2.4748,-2.9452,-1.0276 513 | -0.63298,-5.1277,4.5624,1.4797 514 | -0.62684,-6.301,4.7843,1.106 515 | -0.62043,0.5587,-0.38587,-0.66423 516 | -0.61442,-0.091058,-0.31818,0.50214 517 | -0.60975,-4.002,1.8471,0.6017 518 | -0.60254,1.7237,-2.1501,-0.77027 519 | -0.59587,2.4811,-2.8673,-0.89828 520 | -0.56877,1.4174,-1.4252,-1.1246 521 | -0.55648,3.2136,-3.3085,-2.7965 522 | -0.55355,-7.9233,6.7156,0.74394 523 | -0.55008,2.8659,-1.6488,-2.4319 524 | -0.53966,7.3273,0.46583,-1.4543 525 | -0.539,-5.167,3.4399,0.052141 526 | -0.53072,-0.097265,-0.21793,1.0426 527 | -0.52645,-0.24832,-0.45613,0.41938 528 | -0.51003,-0.23591,0.020273,0.76334 529 | -0.50816,2.868,-1.8108,-2.2612 530 | -0.49948,1.7734,-2.2469,-0.68104 531 | -0.49281,3.0605,-1.8356,-2.834 532 | -0.49241,0.89392,-1.6283,-0.56854 533 | -0.49081,2.8452,-3.6436,-3.1004 534 | -0.47465,-4.3496,1.9901,0.7517 535 | -0.46651,2.3383,-2.9812,-1.0431 536 | -0.45062,-1.3678,7.0858,-0.40303 537 | -0.4294,-0.14693,0.044265,-0.15605 538 | -0.41965,2.9094,-1.7859,-2.2069 539 | -0.41645,0.32487,-0.33617,-0.36036 540 | -0.40951,-0.15521,0.060545,-0.088807 541 | -0.40857,3.0977,-2.9607,-2.6892 542 | -0.40804,0.54214,-0.52725,0.6586 543 | -0.39816,5.9781,1.3912,-1.1621 544 | -0.39416,-0.020702,-0.066267,-0.44699 545 | -0.38388,-1.0471,8.0514,0.49567 546 | -0.38214,8.3909,2.1624,-3.7405 547 | -0.37013,-5.554,4.7749,1.547 548 | -0.36506,2.8928,-3.6461,-3.0603 549 | -0.36372,3.0439,-3.4816,-2.7836 550 | -0.36279,8.2895,-1.9213,-3.3332 551 | -0.36038,4.1158,3.1143,-0.37199 552 | -0.36025,-4.449,2.1067,0.94308 553 | -0.3489,3.1929,-3.4054,-3.1832 554 | -0.3481,-0.38696,-0.47841,0.62627 555 | -0.33729,-0.64976,7.6659,0.72326 556 | -0.30432,2.6528,-2.7756,-0.65647 557 | -0.29858,2.4769,-2.9512,-0.66165 558 | -0.2951,9.0489,-0.52725,-2.0789 559 | -0.28696,3.1784,-3.5767,-3.1896 560 | -0.28015,3.0729,-3.3857,-2.9155 561 | -0.27802,8.1881,-3.1338,-2.5276 562 | -0.278,8.1881,-3.1338,-2.5276 563 | -0.27068,3.2674,-3.5562,-3.0888 564 | -0.26654,-0.64562,-0.42014,0.89136 565 | -0.24811,-0.17797,4.9068,0.15429 566 | -0.24745,1.9368,-2.4697,-0.80518 567 | -0.24037,-1.7837,2.135,1.2418 568 | -0.2361,9.3221,2.1307,-4.3793 569 | -0.23356,3.2405,-3.0669,-2.7784 570 | -0.21888,-2.2038,-0.0954,0.56421 571 | -0.21661,8.0329,1.8848,-3.8853 572 | -0.21394,-0.68287,0.096532,1.1965 573 | -0.2062,9.2207,-3.7044,-6.8103 574 | -0.17296,-1.1816,1.3818,0.7336 575 | -0.16735,7.6274,1.2061,-3.6241 576 | -0.16682,5.8974,0.49839,-0.70044 577 | -0.16108,-6.4624,8.3573,-1.5216 578 | -0.13144,-1.7775,8.3316,0.35214 579 | -0.1269,-1.1505,-0.95138,0.57843 580 | -0.12624,10.322,-3.7121,-6.1185 581 | -0.12196,8.8068,0.94566,-4.2267 582 | -0.11996,6.8741,0.91995,-0.6694 583 | -0.11783,-1.5789,8.03,-0.028031 584 | -0.11716,0.60422,-0.38587,-0.059065 585 | -0.10648,-0.76771,7.7575,0.64179 586 | -0.10234,1.8189,-2.2169,-0.56725 587 | -0.092194,0.39315,-0.32846,-0.13794 588 | -0.071503,3.7412,-4.5415,-4.2526 589 | -0.062025,6.1975,1.099,-1.131 590 | -0.048008,-1.6037,8.4756,0.75558 591 | -0.048008,-0.56078,7.7215,0.453 592 | -0.036127,1.525,-1.4089,-0.76121 593 | -0.025314,-0.17383,-0.11339,1.2198 594 | -0.023579,7.1742,0.78457,-0.75734 595 | -0.016103,9.7484,0.15394,-1.6134 596 | -0.014902,-1.0243,-0.94024,0.64955 597 | -0.0068919,9.2931,-0.41243,-1.9638 598 | -0.0012852,0.13863,-0.19651,0.0081754 599 | 0.0031201,-4.0061,1.7956,0.91722 600 | 0.0040545,0.62905,-0.64121,0.75817 601 | 0.0071249,8.3661,0.50781,-3.8155 602 | 0.0096613,3.5612,-4.407,-4.4103 603 | 0.01727,8.693,1.3989,-3.9668 604 | 0.025013,3.3998,-4.4327,-4.2655 605 | 0.030219,-1.0512,1.4024,0.77369 606 | 0.040498,8.5234,1.4461,-3.9306 607 | 0.045304,6.7334,1.0708,-0.9332 608 | 0.049175,6.1437,1.7828,-0.72113 609 | 0.051979,7.0521,-2.0541,-3.1508 610 | 0.062525,2.9301,-3.5467,-2.6737 611 | 0.066129,2.4914,-2.9401,-0.62156 612 | 0.11032,1.9741,-3.3668,-0.65259 613 | 0.11592,3.2219,-3.4302,-2.8457 614 | 0.11686,3.735,-4.4379,-4.3741 615 | 0.11739,6.2761,-1.5495,-2.4746 616 | 0.11806,0.39108,-0.98223,0.42843 617 | 0.12126,0.22347,-0.47327,0.97024 618 | 0.12326,8.9848,-0.9351,-2.4332 619 | 0.14329,-1.0885,1.0039,0.48791 620 | 0.14783,7.946,1.0742,-3.3409 621 | 0.15423,0.11794,-1.6823,0.59524 622 | 0.16358,-3.3584,1.3749,1.3569 623 | 0.17346,7.8695,0.26876,-3.7883 624 | 0.1848,6.5079,2.0133,-0.87242 625 | 0.18868,0.70148,-0.51182,0.0055892 626 | 0.19081,9.1297,-3.725,-5.8224 627 | 0.20216,1.9182,-3.2828,-0.61768 628 | 0.20977,-0.46146,7.7267,0.90946 629 | 0.21084,9.4359,-0.094543,-1.859 630 | 0.21431,-0.69529,0.87711,0.29653 631 | 0.22432,-0.52147,-0.40386,1.2017 632 | 0.2346,-4.5152,2.1195,1.4448 633 | 0.23874,2.0879,-3.3522,-0.66553 634 | 0.24261,0.57318,-1.9402,0.44007 635 | 0.24394,1.4733,-1.4192,-0.58535 636 | 0.24835,7.6439,0.9885,-0.87371 637 | 0.25035,9.3262,-3.6873,-6.2543 638 | 0.25943,5.0097,-5.0394,-6.3862 639 | 0.26517,2.4066,-2.8416,-0.59958 640 | 0.26637,0.73252,-0.67891,0.03533 641 | 0.26877,4.987,-5.1508,-6.3913 642 | 0.27331,4.8773,-4.9194,-5.8198 643 | 0.27451,9.2186,-3.2863,-4.8448 644 | 0.2952,4.8856,-5.149,-6.2323 645 | 0.29961,7.1328,-0.31475,-1.1828 646 | 0.30081,0.17381,-1.7542,0.48921 647 | 0.31803,-0.99326,1.0947,0.88619 648 | 0.3223,-0.89808,8.0883,0.69222 649 | 0.32444,10.067,-1.1982,-4.1284 650 | 0.3292,-4.4552,4.5718,-0.9888 651 | 0.32924,-4.4552,4.5718,-0.9888 652 | 0.33111,4.5731,2.057,-0.18967 653 | 0.33325,3.3108,-4.5081,-4.012 654 | 0.33565,6.8369,0.69718,-0.55691 655 | 0.3434,0.12415,-0.28733,0.14654 656 | 0.37637,-0.82358,0.78543,0.74524 657 | 0.3798,0.7098,0.7572,-0.4444 658 | 0.37984,0.70975,0.75716,-0.44441 659 | 0.38251,6.8121,1.8128,-0.61251 660 | 0.38478,6.5989,-0.3336,-0.56466 661 | 0.39012,-0.14279,-0.031994,0.35084 662 | 0.39559,6.8866,1.0588,-0.67587 663 | 0.40614,1.3492,-1.4501,-0.55949 664 | 0.4283,-0.94981,-1.0731,0.3211 665 | 0.4339,5.5395,2.033,-0.40432 666 | 0.44125,2.9487,4.3225,0.7155 667 | 0.46901,-0.63321,7.3848,0.36507 668 | 0.47368,3.3605,-4.5064,-4.0431 669 | 0.48797,3.5674,-4.3882,-3.8116 670 | 0.49571,10.224,-1.097,-4.0159 671 | 0.49665,5.527,1.7785,-0.47156 672 | 0.50225,0.65388,-1.1793,0.39998 673 | 0.50813,0.47799,-1.9804,0.57714 674 | 0.518,0.25865,-0.84085,0.96118 675 | 0.51947,-3.2633,3.0895,-0.98492 676 | 0.5195,-3.2633,3.0895,-0.9849 677 | 0.52374,3.644,-4.0746,-1.9909 678 | 0.52855,0.96427,4.0243,-1.0483 679 | 0.53936,3.8944,-4.8166,-4.3418 680 | 0.5415,6.0319,1.6825,-0.46122 681 | 0.54777,10.375,-1.5435,-4.1633 682 | 0.55298,-3.4619,1.7048,1.1008 683 | 0.55939,-0.3104,0.18307,0.44653 684 | 0.56232,1.0015,-2.2726,-0.0060486 685 | 0.56953,7.6294,1.5754,-3.2233 686 | 0.5706,-0.024841,1.2421,-0.56208 687 | 0.5706,-0.0248,1.2421,-0.5621 688 | 0.5734,9.1938,-0.9094,-1.872 689 | 0.57461,10.111,-1.6917,-4.3922 690 | 0.58836,10.773,-1.3884,-4.3276 691 | 0.58982,7.4266,1.2353,-2.9595 692 | 0.59823,3.5012,-3.9795,-1.7841 693 | 0.6005,0.99945,-2.2126,0.097399 694 | 0.6005,1.9327,-3.2888,-0.32415 695 | 0.60731,3.9544,-4.772,-4.4853 696 | 0.61652,3.8944,-4.7275,-4.3948 697 | 0.6212,3.6771,-4.0771,-2.0711 698 | 0.63655,5.2022,-5.2159,-6.1211 699 | 0.64215,3.1287,4.2933,0.64696 700 | 0.64295,7.1018,0.3493,-0.41337 701 | 0.64376,3.764,-4.4738,-4.0483 702 | 0.65497,5.1815,1.0673,-0.42113 703 | 0.66018,10.388,-1.4029,-3.9151 704 | 0.66191,9.6594,-0.28819,-1.6638 705 | 0.66365,-0.045533,-0.18794,0.23447 706 | 0.67886,4.1199,-4.569,-4.1414 707 | 0.68087,2.3259,4.9085,0.54998 708 | 0.6818,4.8504,-5.2133,-6.1043 709 | 0.7049,0.17174,-1.7859,0.36119 710 | 0.7057,-5.4981,8.3368,-2.8715 711 | 0.72252,-0.053811,5.6703,-1.3509 712 | 0.7376,4.8525,-4.7986,-5.6659 713 | 0.74054,0.36625,2.1992,0.48403 714 | 0.74067,1.7299,-3.1963,-0.1457 715 | 0.74307,11.17,-1.3824,-4.0728 716 | 0.74428,-3.7723,1.6131,1.5754 717 | 0.74521,3.6357,-4.4044,-4.1414 718 | 0.74841,7.2756,1.1504,-0.5388 719 | 0.75108,1.9161,-3.1098,-0.20518 720 | 0.75736,3.0294,2.9164,-0.068117 721 | 0.75896,0.29176,-1.6506,0.83834 722 | 0.76163,5.8209,1.1959,-0.64613 723 | 0.77124,9.0862,-1.2281,-1.4996 724 | 0.77445,9.0552,-2.4089,-1.3884 725 | 0.77765,5.9781,1.1941,-0.3526 726 | 0.77805,6.6424,-1.1425,-1.0573 727 | 0.80355,2.8473,4.3439,0.6017 728 | 0.81356,9.1566,-2.1492,-4.1814 729 | 0.81583,4.84,-5.2613,-6.0823 730 | 0.83292,7.5404,0.65005,-0.92544 731 | 0.83625,1.1071,-2.4706,-0.062945 732 | 0.84546,3.4826,-3.6307,-1.3961 733 | 0.85574,0.0082678,6.6042,-0.53104 734 | 0.86202,2.6963,4.2908,0.54739 735 | 0.86736,5.5643,1.6765,-0.16769 736 | 0.86816,10.243,-1.4912,-4.0082 737 | 0.87256,9.2931,-0.7843,-2.1978 738 | 0.87603,6.8141,0.84198,-0.17156 739 | 0.88298,0.66009,6.0096,-0.43277 740 | 0.88444,6.5906,0.55837,-0.44182 741 | 0.88872,5.3449,2.045,-0.19355 742 | 0.88992,2.2638,-3.1046,-0.11855 743 | 0.89512,4.7738,-4.8431,-5.5909 744 | 0.89566,7.7763,-2.7473,-1.9353 745 | 0.89606,10.547,-1.4175,-4.0327 746 | 0.90407,3.3708,-4.4987,-3.6965 747 | 0.91315,3.3377,-4.0557,-1.6741 748 | 0.92703,9.4318,-0.66263,-1.6728 749 | 0.9297,-3.7971,4.6429,-0.2957 750 | 0.93584,8.8855,-1.6831,-1.6599 751 | 0.93611,8.6413,-1.6351,-1.3043 752 | 0.94225,5.8561,1.8762,-0.32544 753 | 0.94732,-0.57113,7.1903,-0.67587 754 | 0.95626,2.4728,4.4578,0.21636 755 | 0.96414,5.616,2.2138,-0.12501 756 | 0.96441,5.8395,2.3235,0.066365 757 | 0.96574,8.393,-1.361,-1.4659 758 | 0.96708,3.8426,-4.9314,-4.1323 759 | 0.96788,7.1907,1.2798,-2.4565 760 | 0.98296,3.4226,-3.9692,-1.7116 761 | 1.0009,7.7846,-0.28219,-2.6608 762 | 1.0117,0.9022,-2.3506,0.42714 763 | 1.0135,8.4551,-1.672,-2.0815 764 | 1.0182,9.109,-0.62064,-1.7129 765 | 1.0191,2.33,4.9334,0.82929 766 | 1.0194,1.1029,-2.3,0.59395 767 | 1.0235,6.901,-2.0062,-2.7125 768 | 1.0284,9.767,-1.3687,-1.7853 769 | 1.04,-6.9321,8.2888,-1.2991 770 | 1.0552,1.1857,-2.6411,0.11033 771 | 1.0607,2.4542,2.5188,-0.17027 772 | 1.0637,3.6957,-4.1594,-1.9379 773 | 1.0652,8.3682,-1.4004,-1.6509 774 | 1.0987,0.6394,5.989,-0.58277 775 | 1.105,7.4432,0.41099,-3.0332 776 | 1.1166,8.6496,-0.96252,-1.8112 777 | 1.1315,7.9212,1.093,-2.8444 778 | 1.1317,3.9647,3.3979,0.84351 779 | 1.143,0.83391,5.4552,-0.56984 780 | 1.1432,-3.7413,5.5777,-0.63578 781 | 1.1472,3.5985,1.9387,-0.43406 782 | 1.1518,1.3864,5.2727,-0.43536 783 | 1.1558,6.4003,1.5506,0.6961 784 | 1.1588,8.9331,-2.0807,-1.1272 785 | 1.162,10.293,-1.2821,-4.0392 786 | 1.164,3.913,-4.5544,-3.8672 787 | 1.1644,3.8095,-4.9408,-4.0909 788 | 1.1676,9.1566,-2.0867,-0.80647 789 | 1.1811,8.3847,-2.0567,-0.90345 790 | 1.208,4.0744,-4.7635,-2.6129 791 | 1.2138,8.7986,-2.1672,-0.74182 792 | 1.2198,2.0982,-3.1954,0.12843 793 | 1.2247,8.7779,-2.2135,-0.80647 794 | 1.2262,0.89599,5.7568,-0.11596 795 | 1.2279,4.0309,-4.6435,-3.9125 796 | 1.2309,3.8923,-4.8277,-4.0069 797 | 1.2572,4.8731,-5.2861,-5.8741 798 | 1.2616,4.4303,-1.3335,-1.7517 799 | 1.2706,8.035,-0.19651,-2.1888 800 | 1.2746,8.8172,-1.5323,-1.7957 801 | 1.296,4.2855,-4.8457,-2.9013 802 | 1.2999,2.5762,2.0107,-0.18967 803 | 1.3049,-0.15521,6.4911,-0.75346 804 | 1.3087,4.9228,2.0013,0.22024 805 | 1.3114,4.5462,2.2935,0.22541 806 | 1.3183,1.9017,-3.3111,0.065071 807 | 1.3234,3.2964,0.2362,-0.11984 808 | 1.3264,1.0326,5.6566,-0.41337 809 | 1.3349,6.1189,0.46497,0.49826 810 | 1.3403,4.1323,-4.7018,-2.5987 811 | 1.3419,-4.4221,8.09,-1.7349 812 | 1.3451,0.23589,-1.8785,1.3258 813 | 1.3518,1.0595,-2.3437,0.39998 814 | 1.3562,3.2136,4.3465,0.78662 815 | 1.3566,4.2358,2.1341,0.3211 816 | 1.3638,-4.7759,8.4182,-1.8836 817 | 1.3754,8.8793,-1.9136,-0.53751 818 | 1.4276,8.3847,-2.0995,-1.9677 819 | 1.4378,0.66837,-2.0267,1.0271 820 | 1.4479,-4.8794,8.3428,-2.1086 821 | 1.4501,3.6067,-4.0557,-1.5966 822 | 1.4507,8.7903,-2.2324,-0.65259 823 | 1.4578,-0.08485,4.1785,0.59136 824 | 1.4806,7.6377,-2.7876,-1.0341 825 | 1.4884,3.6274,3.308,0.48921 826 | 1.4896,3.4288,-4.0309,-1.4259 827 | 1.5077,1.9596,-3.0584,-0.12243 828 | 1.5099,0.039307,6.2332,-0.30346 829 | 1.518,5.6946,0.094818,-0.026738 830 | 1.5268,-5.5871,8.6564,-1.722 831 | 1.5356,9.1772,-2.2718,-0.73535 832 | 1.5456,8.5482,0.4187,-2.1784 833 | 1.5478,9.1814,-1.6326,-1.7375 834 | 1.5514,3.8013,-4.9143,-3.7483 835 | 1.5631,0.89599,-1.9702,0.65472 836 | 1.5673,7.9274,-0.056842,-2.1694 837 | 1.5691,6.3465,-0.1828,-2.4099 838 | 1.5701,7.9129,0.29018,-2.1953 839 | 1.5799,-4.7076,7.9186,-1.5487 840 | 1.581,0.86909,-2.3138,0.82412 841 | 1.5902,2.2948,3.2403,0.18404 842 | 1.5904,2.2121,-3.1183,-0.11725 843 | 1.594,4.7055,1.3758,0.081882 844 | 1.602,6.1251,0.52924,0.47886 845 | 1.6032,-4.7863,8.5193,-2.1203 846 | 1.6349,3.286,2.8753,0.087054 847 | 1.6406,3.5488,1.3964,-0.36424 848 | 1.6408,4.2503,-4.9023,-2.6621 849 | 1.6426,3.0149,0.22849,-0.147 850 | 1.645,7.8612,-0.87598,-3.5569 851 | 1.6472,0.48213,4.7449,1.225 852 | 1.6799,4.2068,-4.5398,-2.3931 853 | 1.6849,8.7489,-1.2641,-1.3858 854 | 1.6988,2.9094,2.9044,0.11033 855 | 1.7257,-4.4697,8.2219,-1.8073 856 | 1.7317,-0.34765,4.1905,-0.99138 857 | 1.7331,3.9544,-4.7412,-2.5017 858 | 1.742,-4.809,8.2142,-2.0659 859 | 1.7425,3.6833,-4.0129,-1.7207 860 | 1.7452,4.8028,2.0878,0.62627 861 | 1.7496,-0.1759,5.1827,1.2922 862 | 1.762,4.3682,2.1384,0.75429 863 | 1.7747,-6.4334,8.15,-0.89828 864 | 1.7748,-0.76978,5.5854,1.3039 865 | 1.7819,6.9176,-1.2744,-1.5759 866 | 1.7875,4.78,-5.1362,-3.2362 867 | 1.7939,-1.1174,1.5454,-0.26079 868 | 1.8114,7.6067,-0.9788,-2.4668 869 | 1.8205,6.7562,0.0099913,0.39481 870 | 1.8216,-6.4748,8.0514,-0.41855 871 | 1.8238,-6.7748,8.3873,-0.54139 872 | 1.8314,6.3672,-0.036278,0.049554 873 | 1.8373,6.1292,0.84027,0.55257 874 | 1.8384,6.063,0.54723,0.51248 875 | 1.8533,6.1458,1.0176,-2.0401 876 | 1.8592,3.2074,-0.15966,-0.26208 877 | 1.8664,7.7763,-0.23849,-2.9634 878 | 1.8799,2.4707,2.4931,0.37671 879 | 1.8967,-2.5163,2.8093,-0.79742 880 | 1.8993,7.6625,0.15394,-3.1108 881 | 1.8994,0.97462,4.2265,0.81377 882 | 1.9105,8.871,-2.3386,-0.75604 883 | 1.9157,6.0816,0.23705,-2.0116 884 | 1.9265,7.7557,-0.16823,-3.0771 885 | 1.9321,6.0423,0.26019,-2.053 886 | 1.934,-9.2828e-06,4.816,-0.33967 887 | 1.9358,8.1654,-0.023425,-2.2586 888 | 1.941,0.46351,4.6472,1.0879 889 | 1.9429,6.3961,0.092248,0.58102 890 | 1.9476,-4.7738,8.527,-1.8668 891 | 1.9572,-5.1153,8.6127,-1.4297 892 | 1.9647,6.9383,0.57722,0.66377 893 | 1.9818,9.2621,-3.521,-1.872 894 | 2.0007,1.8644,2.6491,0.47369 895 | 2.0051,-6.8638,8.132,-0.2401 896 | 2.0139,6.1416,0.37929,0.56938 897 | 2.0153,0.43661,4.5864,-0.3151 898 | 2.0153,1.8479,3.1375,0.42843 899 | 2.0165,-0.25246,5.1707,1.0763 900 | 2.0177,1.7982,-2.9581,0.2099 901 | 2.0193,0.82356,4.6369,1.4202 902 | 2.031,1.852,-3.0121,0.003003 903 | 2.0421,1.2436,4.2171,0.90429 904 | 2.0466,2.03,2.1761,-0.083634 905 | 2.0597,-0.99326,5.2119,-0.29312 906 | 2.0843,6.6258,0.48382,-2.2134 907 | 2.0911,0.94358,4.5512,1.234 908 | 2.0922,-6.81,8.4636,-0.60216 909 | 2.093,8.3061,0.022844,-3.2724 910 | 2.0962,2.4769,1.9379,-0.040962 911 | 2.1059,7.6046,-0.47755,-1.8461 912 | 2.108,6.7955,-0.1708,0.4905 913 | 2.1265,6.8783,0.44784,-2.2224 914 | 2.1274,5.1939,-1.7971,-1.1763 915 | 2.1319,-2.0403,2.5574,-0.061652 916 | 2.1464,6.0795,-0.5778,-2.2302 917 | 2.1526,-6.1665,8.0831,-0.34355 918 | 2.1616,-6.8804,8.1517,-0.081048 919 | 2.1721,-0.73874,5.4672,-0.72371 920 | 2.1752,-0.8091,5.1022,-0.67975 921 | 2.1881,2.7356,1.3278,-0.1832 922 | 2.1943,4.5503,-4.976,-2.7254 923 | 2.1948,1.3781,1.1582,0.85774 924 | 2.2034,5.9947,0.53009,0.84998 925 | 2.2091,7.4556,-1.3284,-3.3021 926 | 2.2123,-5.8395,7.7687,-0.85302 927 | 2.2279,4.0951,-4.8037,-2.1112 928 | 2.229,9.6325,-3.1123,-2.7164 929 | 2.2429,-4.1427,5.2333,-0.40173 930 | 2.2504,3.5757,0.35273,0.2836 931 | 2.2517,-5.1422,4.2916,-1.2487 932 | 2.2526,9.9636,-3.1749,-2.9944 933 | 2.2546,8.0992,-0.24877,-3.2698 934 | 2.2596,-0.033118,4.7355,-0.2776 935 | 2.2634,-4.4862,3.6558,-0.61251 936 | 2.2893,3.733,0.6312,-0.39786 937 | 2.2928,9.0386,-3.2417,-1.2991 938 | 2.3066,3.5364,0.57551,0.41938 939 | 2.3136,10.665,-3.5288,-4.7672 940 | 2.3164,-2.628,3.1529,-0.08622 941 | 2.3678,-6.839,8.4207,-0.44829 942 | 2.3718,7.4908,0.015989,-1.7414 943 | 2.3729,10.473,-3.0087,-3.2013 944 | 2.3917,4.5565,-4.9888,-2.8987 945 | 2.3925,9.798,-3.0361,-2.8224 946 | 2.3952,9.5083,-3.1783,-3.0086 947 | 2.3969,0.23589,4.8477,1.437 948 | 2.4008,9.3593,-3.3565,-3.3526 949 | 2.4012,1.6223,3.0312,0.71679 950 | 2.4196,6.4665,-0.75688,0.228 951 | 2.4226,-4.5752,5.947,0.21507 952 | 2.4235,9.5332,-3.0789,-2.7746 953 | 2.4287,9.3821,-3.2477,-1.4543 954 | 2.4391,6.4417,-0.80743,-0.69139 955 | 2.4486,-6.3175,7.9632,0.20602 956 | 2.4527,2.9653,0.20021,-0.056479 957 | 2.4673,1.3926,1.7125,0.41421 958 | 2.483,6.6155,-0.79287,-0.90863 959 | 2.486,-0.99533,5.3404,-0.15475 960 | 2.5068,1.1588,3.9249,0.12585 961 | 2.5089,6.841,-0.029423,0.44912 962 | 2.5227,2.2369,2.7236,0.79438 963 | 2.5328,7.528,-0.41929,-2.6478 964 | 2.5331,2.9135,-0.822,-0.12243 965 | 2.5367,2.599,2.0938,0.20085 966 | 2.549,6.1499,-1.1605,-1.2371 967 | 2.5503,-4.9518,6.3729,-0.41596 968 | 2.5559,3.3605,2.0321,0.26809 969 | 2.5581,2.6218,1.8513,0.40257 970 | 2.5605,9.2683,-3.5913,-1.356 971 | 2.5635,6.7769,-0.61979,0.38576 972 | 2.565,8.633,-2.9941,-1.3082 973 | 2.5678,3.5136,0.61406,-0.40691 974 | 2.5698,-4.4076,5.9856,0.078002 975 | 2.5817,9.7546,-3.1749,-2.9957 976 | 2.5989,3.5178,0.7623,0.81119 977 | 2.6104,8.0081,-0.23592,-1.7608 978 | 2.614,8.0081,-3.7258,-1.3069 979 | 2.6213,5.7919,0.065686,-1.5759 980 | 2.6415,7.586,-0.28562,-1.6677 981 | 2.6463,-4.8152,6.3549,0.003003 982 | 2.6562,10.704,-3.3085,-4.0767 983 | 2.6606,3.1681,1.9619,0.18662 984 | 2.6648,10.754,-3.3994,-4.1685 985 | 2.6682,10.216,-3.4414,-4.0069 986 | 2.6718,5.6574,0.72974,-1.4892 987 | 2.6719,3.0646,0.37158,0.58619 988 | 2.6799,3.1349,0.34073,0.58489 989 | 2.6881,6.0195,-0.46641,-0.69268 990 | 2.6917,10.816,-3.3,-4.2888 991 | 2.6946,6.7976,-0.40301,0.44912 992 | 2.7161,-4.2006,4.1914,0.16981 993 | 2.7206,9.0821,-3.3111,-0.96811 994 | 2.7213,7.05,-0.58808,0.41809 995 | 2.7296,2.8701,0.51124,0.5099 996 | 2.7365,-5.0325,6.6608,-0.57889 997 | 2.7391,7.4018,0.071684,-2.5302 998 | 2.7659,0.66216,4.1494,-0.28406 999 | 2.7744,6.8576,-1.0671,0.075416 1000 | 2.7831,10.98,-3.557,-4.4039 1001 | 2.7961,2.121,1.8385,0.38317 1002 | 2.8033,9.0862,-3.3668,-1.0224 1003 | 2.805,0.57732,1.3424,1.2133 1004 | 2.8084,11.305,-3.3394,-4.4194 1005 | 2.8209,7.3108,-0.81857,-1.8784 1006 | 2.8232,10.851,-3.1466,-3.9784 1007 | 2.8237,2.8597,0.19678,0.57196 1008 | 2.8261,9.4007,-3.3034,-1.0509 1009 | 2.8297,6.3485,-0.73546,-0.58665 1010 | 2.8521,9.171,-3.6461,-1.2047 1011 | 2.8523,9.0096,-3.761,-3.3371 1012 | 2.8561,6.9176,-0.79372,0.48403 1013 | 2.8672,10.001,-3.2049,-3.1095 1014 | 2.877,-4.0599,3.6259,-0.32544 1015 | 2.888,0.44696,4.5907,-0.24398 1016 | 2.8969,0.70768,2.29,1.8663 1017 | 2.9163,10.831,-3.3437,-4.122 1018 | 2.9233,6.0464,-0.11168,-0.58665 1019 | 2.9421,7.4101,-0.97709,-0.88406 1020 | 2.9499,2.2493,1.3458,-0.037083 1021 | 2.9543,1.076,0.64577,0.89394 1022 | 2.9571,-4.5938,5.9068,0.57196 1023 | 2.9695,5.6222,0.27561,-1.1556 1024 | 2.9719,6.8369,-0.2702,0.71291 1025 | 2.9736,8.7944,-3.6359,-1.3754 1026 | 2.9742,8.96,-2.9024,-1.0379 1027 | 2.9856,7.2673,-0.409,-2.2431 1028 | 2.994,7.2011,-1.2153,0.3211 1029 | 3.0009,5.8126,-2.2306,-0.66553 1030 | 3.0242,-3.3378,2.5865,-0.54785 1031 | 3.0329,2.2948,2.1135,0.35084 1032 | 3.0333,-2.5928,2.3183,0.303 1033 | 3.0632,-3.3315,5.1305,0.8267 1034 | 3.0672,-4.4117,3.8238,-0.81682 1035 | 3.0864,-2.5845,2.2309,0.30947 1036 | 3.0934,-2.9177,2.2232,0.22283 1037 | 3.0948,8.7324,-2.9007,-0.96682 1038 | 3.106,9.5414,-4.2536,-4.003 1039 | 3.1088,3.1122,0.80857,0.4336 1040 | 3.1219,-3.137,1.9259,-0.37458 1041 | 3.1377,-4.1096,4.5701,0.98963 1042 | 3.1452,5.825,-0.51439,-1.4944 1043 | 3.1541,-5.1711,6.5991,0.57455 1044 | 3.1557,2.8908,0.59693,0.79825 1045 | 3.1836,7.2321,-1.0713,-2.5909 1046 | 3.1887,-3.4143,2.7742,-0.2026 1047 | 3.1896,5.7526,-0.18537,-0.30087 1048 | 3.2032,5.7588,-0.75345,-0.61251 1049 | 3.2051,8.6889,-2.9033,-0.7819 1050 | 3.2294,7.7391,-0.37816,-2.5405 1051 | 3.2303,7.8384,-3.5348,-1.2151 1052 | 3.2351,9.647,-3.2074,-2.5948 1053 | 3.2403,-3.7082,5.2804,0.41291 1054 | 3.2414,0.40971,1.4015,1.1952 1055 | 3.2422,6.2265,0.12224,-1.4466 1056 | 3.245,6.63,-0.63435,0.86937 1057 | 3.2585,-4.4614,3.8024,-0.15087 1058 | 3.2692,3.4184,0.20706,-0.066824 1059 | 3.2697,-4.3414,3.6884,-0.29829 1060 | 3.2704,6.9321,-1.0456,0.23447 1061 | 3.2718,1.7837,2.1161,0.61334 1062 | 3.3004,7.0811,-1.3258,0.22283 1063 | 3.3299,0.91254,1.5806,0.39352 1064 | 3.3397,-4.6145,3.9823,-0.23751 1065 | 3.3577,-4.3062,6.0241,0.18274 1066 | 3.3583,10.357,-3.7301,-3.6991 1067 | 3.359,9.8022,-3.8209,-3.7133 1068 | 3.3669,-5.1856,3.6935,-1.1427 1069 | 3.3756,-4.0951,4.367,1.0698 1070 | 3.3848,3.2674,0.90967,0.25128 1071 | 3.3951,1.1484,2.1401,2.0862 1072 | 3.404,8.7261,-2.9915,-0.57242 1073 | 3.4092,5.4049,-2.5228,-0.89958 1074 | 3.4246,-0.14693,0.80342,0.29136 1075 | 3.4312,6.2637,-1.9513,-0.36165 1076 | 3.4359,0.66216,2.1041,1.8922 1077 | 3.4465,2.9508,1.0271,0.5461 1078 | 3.4566,9.5228,-4.0112,-3.5944 1079 | 3.4591,11.112,-4.2039,-5.0931 1080 | 3.4626,-4.449,3.5427,0.15429 1081 | 3.4642,10.688,-3.4071,-4.109 1082 | 3.4647,-3.9172,3.9746,0.36119 1083 | 3.4663,1.1112,1.7425,1.3388 1084 | 3.4667,-4.0724,4.2882,1.5418 1085 | 3.4669,6.87,-1.0568,-0.73147 1086 | 3.4769,-0.15314,2.53,2.4495 1087 | 3.4776,8.811,-3.1886,-0.92285 1088 | 3.4805,9.7008,-3.7541,-3.4379 1089 | 3.482,-4.1634,3.5008,-0.078462 1090 | 3.4893,6.69,-1.2042,-0.38751 1091 | 3.4916,8.5709,-3.0326,-0.59182 1092 | 3.4985,3.1639,0.22677,-0.1651 1093 | 3.5127,2.9073,1.0579,0.40774 1094 | 3.5152,6.8224,-0.67377,-0.46898 1095 | 3.5156,10.189,-4.2759,-4.978 1096 | 3.5189,6.332,-1.7791,-0.020273 1097 | 3.5251,0.7201,1.6928,0.64438 1098 | 3.5257,1.2829,1.9276,1.7991 1099 | 3.5288,0.71596,1.9507,1.9375 1100 | 3.534,9.3614,-3.6316,-1.2461 1101 | 3.5358,6.7086,-0.81857,0.47886 1102 | 3.5438,1.2395,1.997,2.1547 1103 | 3.5458,9.3718,-4.0351,-3.9564 1104 | 3.5499,8.6165,-3.2794,-1.2009 1105 | 3.5594,1.3078,1.291,1.6556 1106 | 3.5761,9.7753,-3.9795,-3.4638 1107 | 3.577,2.4004,1.8908,0.73231 1108 | 3.5829,1.4423,1.0219,1.4008 1109 | 3.583,-3.7971,3.4391,-0.12501 1110 | 3.5862,-3.0957,2.8093,0.24481 1111 | 3.5912,3.0129,0.72888,0.56421 1112 | 3.5982,7.1307,-1.3035,0.21248 1113 | 3.6077,6.8576,-1.1622,0.28231 1114 | 3.6181,-3.7454,2.8273,-0.71208 1115 | 3.6216,8.6661,-2.8073,-0.44699 1116 | 3.6244,1.4609,1.3501,1.9284 1117 | 3.6277,0.9829,0.68861,0.63403 1118 | 3.6289,0.81322,1.6277,0.77627 1119 | 3.6575,7.2797,-2.2692,-1.144 1120 | 3.6582,5.6864,-1.7157,-0.23751 1121 | 3.6667,4.302,0.55923,0.33791 1122 | 3.6702,2.9942,0.85141,0.30688 1123 | 3.6894,9.887,-4.0788,-4.3664 1124 | 3.6922,-3.9585,4.3439,1.3517 1125 | 3.6941,-3.9482,4.2625,1.1577 1126 | 3.7022,6.9942,-1.8511,-0.12889 1127 | 3.7321,-3.884,3.3577,-0.0060486 1128 | 3.7352,9.5911,-3.9032,-3.3487 1129 | 3.744,0.79459,0.95851,1.0077 1130 | 3.7522,-3.6978,3.9943,1.3051 1131 | 3.757,-5.4236,3.8255,-1.2526 1132 | 3.7635,2.7811,0.66119,0.34179 1133 | 3.7731,7.2073,-1.6814,-0.94742 1134 | 3.7758,7.1783,-1.5195,0.40128 1135 | 3.7767,9.7794,-3.9075,-3.5323 1136 | 3.7791,2.5762,1.3098,0.5655 1137 | 3.7798,-3.3109,2.6491,0.066365 1138 | 3.7818,-2.8846,2.2558,-0.15734 1139 | 3.7831,10.053,-3.8869,-3.7366 1140 | 3.7935,7.9853,-2.5477,-1.872 1141 | 3.7982,10.423,-4.1602,-4.9728 1142 | 3.8023,-3.8696,4.044,0.95343 1143 | 3.8027,0.81529,2.1041,1.0245 1144 | 3.8117,10.146,-4.0463,-4.5629 1145 | 3.8197,8.9951,-4.383,-4.0327 1146 | 3.82,10.928,-4.0112,-5.0284 1147 | 3.8213,0.23175,2.0133,2.0564 1148 | 3.8244,-3.1081,2.4537,0.52024 1149 | 3.8384,6.1851,-2.0439,-0.033204 1150 | 3.8417,10.021,-4.2699,-4.9159 1151 | 3.8481,10.154,-3.8561,-4.2228 1152 | 3.8496,9.7939,-4.1508,-4.4582 1153 | 3.8584,0.78425,1.1033,1.7008 1154 | 3.8644,3.7061,0.70403,0.35214 1155 | 3.866,-2.6383,1.9242,0.10645 1156 | 3.8832,6.4023,-2.432,-0.98363 1157 | 3.884,10.028,-3.9298,-4.0819 1158 | 3.8846,-3.0336,2.5334,0.20214 1159 | 3.8905,-2.1521,2.6302,1.1047 1160 | 3.8962,-4.7904,3.3954,-0.53751 1161 | 3.8969,7.4163,-1.8245,0.14007 1162 | 3.8999,1.734,1.6011,0.96765 1163 | 3.9102,6.065,-2.4534,-0.68234 1164 | 3.9121,2.9735,0.92852,0.60558 1165 | 3.9166,10.249,-4.0926,-4.4659 1166 | 3.9232,-3.2467,3.4579,0.83705 1167 | 3.9262,6.0299,-2.0156,-0.065531 1168 | 3.9292,-2.9156,2.2129,0.30817 1169 | 3.9294,1.4112,1.8076,0.89782 1170 | 3.931,1.8541,-0.023425,1.2314 1171 | 3.9362,10.162,-3.8235,-4.0172 1172 | 3.9364,10.588,-3.725,-4.3133 1173 | 3.9382,0.9291,0.78543,0.6767 1174 | 3.9414,-3.2902,3.1674,1.0866 1175 | 3.9433,2.5017,1.5215,0.903 1176 | 3.946,6.8514,-1.5443,-0.5582 1177 | 3.9479,-3.7723,2.883,0.019813 1178 | 3.9529,-2.3548,2.3792,0.48274 1179 | 3.966,3.9213,0.70574,0.33662 1180 | 3.9663,10.168,-4.1131,-4.6056 1181 | 3.9719,1.0367,0.75973,1.0013 1182 | 3.9771,11.151,-3.9272,-4.3444 1183 | 3.9772,0.33521,2.2566,2.1625 1184 | 3.9899,-2.7066,2.3946,0.86291 1185 | 3.9922,-4.4676,3.7304,-0.1095 1186 | 3.9994,0.90427,1.1693,1.6892 1187 | 4.0026,-3.5943,3.5573,0.26809 1188 | 4.0047,0.45937,1.3621,1.6181 1189 | 4.0102,10.657,-4.1388,-5.0646 1190 | 4.0127,10.148,-3.9366,-4.0728 1191 | 4.0215,-2.7004,2.4957,0.36636 1192 | 4.0215,-2.1914,2.4648,1.1409 1193 | 4.0296,2.6756,0.80685,0.71679 1194 | 4.0329,0.23175,0.89082,1.1823 1195 | 4.0405,0.51524,1.0279,1.106 1196 | 4.0422,-4.391,4.7466,1.137 1197 | 4.0446,11.174,-4.3582,-4.7401 1198 | 4.052,-0.16555,0.45383,0.51248 1199 | 4.0524,5.6802,-1.9693,0.026279 1200 | 4.0552,-2.4583,2.2806,1.0323 1201 | 4.0552,0.40143,1.4563,0.65343 1202 | 4.0632,3.584,0.72545,0.39481 1203 | 4.068,-2.9363,2.1992,0.50084 1204 | 4.0713,10.402,-4.1722,-4.7582 1205 | 4.0715,7.6398,-2.0824,-1.1698 1206 | 4.0932,5.4132,-1.8219,0.23576 1207 | 4.0948,-2.9674,2.3689,0.75429 1208 | 4.0962,10.189,-3.9323,-4.1827 1209 | 4.0972,0.46972,1.6671,0.91593 1210 | 4.1038,-4.8069,3.3491,-0.49225 1211 | 4.1195,10.926,-3.8929,-4.1802 1212 | 4.1197,-2.7956,2.0707,0.67412 1213 | 4.1349,6.1189,-2.4294,-0.19613 1214 | 4.1373,0.49248,1.093,1.8276 1215 | 4.1425,-3.6792,3.8281,1.6297 1216 | 4.1454,7.257,-1.9153,-0.86078 1217 | 4.1529,-3.9358,2.8633,-0.017686 1218 | 4.1542,7.2756,-2.4766,-1.2099 1219 | 4.1605,11.22,-3.6136,-4.0819 1220 | 4.1654,-3.4495,3.643,1.0879 1221 | 4.1665,-0.4449,0.23448,0.27843 1222 | 4.1711,8.722,-3.0224,-0.59699 1223 | 4.1736,3.3336,-1.4244,0.60429 1224 | 4.1757,10.261,-3.8552,-4.3056 1225 | 4.1927,-3.2674,2.5839,0.21766 1226 | 4.1962,0.74493,0.83256,0.753 1227 | 4.2027,0.22761,0.96108,0.97282 1228 | 4.2134,-2.806,2.0116,0.67412 1229 | 4.2164,9.4607,-4.9288,-5.2366 1230 | 4.2188,6.8162,-1.2804,0.76076 1231 | 4.223,1.1319,0.72202,0.96118 1232 | 4.2406,-2.4852,1.608,0.7155 1233 | 4.2458,1.1981,0.66633,0.94696 1234 | 4.2475,1.4816,-0.48355,0.95343 1235 | 4.2478,7.6956,-2.7696,-1.0767 1236 | 4.2586,11.296,-4.0943,-4.3457 1237 | 4.2756,-2.6528,2.1375,0.94437 1238 | 4.2772,2.4955,0.48554,0.36119 1239 | 4.2899,9.1814,-4.6067,-4.3263 1240 | 4.2969,7.617,-2.3874,-0.96164 1241 | 4.3064,8.2068,-2.7824,-1.4336 1242 | 4.3239,-4.8835,3.4356,-0.5776 1243 | 4.3365,-3.584,3.6884,0.74912 1244 | 4.3398,-5.3036,3.8803,-0.70432 1245 | 4.3435,3.3295,0.83598,0.64955 1246 | 4.3483,11.108,-4.0857,-4.2539 1247 | 4.3634,0.46351,1.4281,2.0202 1248 | 4.364,-3.1039,2.3757,0.78532 1249 | 4.3684,9.6718,-3.9606,-3.1625 1250 | 4.3846,-4.8794,3.3662,-0.029324 1251 | 4.3848,-3.0729,3.0423,1.2741 1252 | 4.3937,0.35798,2.0416,1.2004 1253 | 4.4069,10.907,-4.5775,-4.4271 1254 | 4.4072,-0.070365,2.0416,1.1319 1255 | 4.4295,-2.3507,1.7048,0.90946 1256 | 4.4338,9.887,-4.6795,-3.7483 1257 | 4.4549,2.4976,1.0313,0.96894 1258 | 4.4682,2.2907,0.95766,0.83058 1259 | 4.5447,8.2274,-2.4166,-1.5875 1260 | 4.5459,8.1674,-2.4586,-1.4621 1261 | 4.5597,-2.4211,2.6413,1.6168 1262 | 4.5645,-3.6275,2.8684,0.27714 1263 | 4.5679,3.1929,-2.1055,0.29653 1264 | 4.5691,-4.4552,3.1769,0.0042961 1265 | 4.5707,7.2094,-3.2794,-1.4944 1266 | 4.6014,5.6264,-2.1235,0.19309 1267 | 4.6054,-4.0765,2.7587,0.31981 1268 | 4.616,10.179,-4.2185,-4.4245 1269 | 4.6352,-3.0087,2.6773,1.212 1270 | 4.6361,-2.6611,2.8358,1.1991 1271 | 4.6439,-3.3729,2.5976,0.55257 1272 | 4.6464,10.533,-4.5852,-4.206 1273 | 4.6499,7.6336,-1.9427,-0.37458 1274 | 4.65,-4.8297,3.4553,-0.25174 1275 | 4.6562,7.6398,-2.4243,-1.2384 1276 | 4.6689,1.3098,0.055404,1.909 1277 | 4.6765,-3.3895,3.4896,1.4771 1278 | 4.7072,8.2957,-2.5605,-1.4905 1279 | 4.7114,2.0755,-0.2702,1.2379 1280 | 4.7181,10.015,-3.9486,-3.8582 1281 | 4.7285,2.1065,-0.28305,1.5625 1282 | 4.7432,2.1086,0.1368,1.6543 1283 | 4.7926,1.7071,-0.051701,1.4926 1284 | 4.7965,6.9859,-1.9967,-0.35001 1285 | 4.8077,2.2327,-0.26334,1.5534 1286 | 4.8265,0.80287,1.6371,1.1875 1287 | 4.8272,3.0687,0.68604,0.80731 1288 | 4.8278,7.7598,-2.4491,-1.2216 1289 | 4.8368,10.013,-4.3239,-4.3276 1290 | 4.8451,8.1116,-2.9512,-1.4724 1291 | 4.8851,1.5995,-0.00029081,1.6401 1292 | 4.8906,-3.3584,3.4202,1.0905 1293 | 4.9249,0.68906,0.77344,1.2095 1294 | 4.9264,5.496,-2.4774,-0.50648 1295 | 4.9294,0.27727,0.20792,0.33662 1296 | 4.9342,2.4107,-0.17594,1.6245 1297 | 4.9362,7.6046,-2.3429,-0.85302 1298 | 4.9852,8.3516,-2.5425,-1.2823 1299 | 4.988,7.2052,-3.2846,-1.1608 1300 | 4.9923,7.8653,-2.3515,-0.71984 1301 | 5.0185,8.5978,-2.9375,-1.281 1302 | 5.0214,8.0764,-3.0515,-1.7155 1303 | 5.0297,-4.9704,3.5025,-0.23751 1304 | 5.032,8.2026,-2.6256,-1.0341 1305 | 5.0429,-0.52974,0.50439,1.106 1306 | 5.0452,3.8964,-1.4304,0.86291 1307 | 5.0617,-0.35799,0.44698,0.99868 1308 | 5.0691,0.21313,0.20278,1.2095 1309 | 5.086,3.2798,-1.2701,1.1189 1310 | 5.1129,-0.49871,0.62863,1.1189 1311 | 5.1213,8.5565,-3.3917,-1.5474 1312 | 5.1302,8.6703,-2.8913,-1.5086 1313 | 5.1321,-0.031048,0.32616,1.1151 1314 | 5.1731,3.9606,-1.983,0.40774 1315 | 5.1776,8.2316,-3.2511,-1.5694 1316 | 5.2012,0.32694,0.17965,1.1797 1317 | 5.2032,3.5116,-1.2538,1.0129 1318 | 5.2418,10.539,-4.1174,-4.2797 1319 | 5.2423,11.027,-4.353,-4.1013 1320 | 5.262,3.9834,-1.5572,1.0103 1321 | 5.2756,0.13863,0.12138,1.1435 1322 | 5.2868,3.257,-1.3721,1.1668 1323 | 5.3063,5.2684,-2.8904,-0.52716 1324 | 5.3586,3.7557,-1.7345,1.0789 1325 | 5.3915,9.9946,-3.8081,-3.3642 1326 | 5.4021,3.1039,-1.1536,1.5651 1327 | 5.4188,10.146,-4.084,-3.6991 1328 | 5.438,9.4669,-4.9417,-3.9202 1329 | 5.4944,1.5478,0.041694,1.9284 1330 | 5.504,10.367,-4.413,-4.0211 1331 | 5.591,10.464,-4.3839,-4.3379 1332 | 5.6084,10.301,-4.8003,-4.3534 1333 | 5.6272,10.086,-4.2931,-3.8142 1334 | 5.681,7.795,-2.6848,-0.92544 1335 | 5.7227,5.8312,-2.4097,-0.24527 1336 | 5.7353,5.2808,-2.2598,0.075416 1337 | 5.7403,-0.44284,0.38015,1.3763 1338 | 5.7456,10.181,-4.7857,-4.3366 1339 | 5.7823,5.5788,-2.4089,-0.056479 1340 | 5.7867,7.8902,-2.6196,-0.48708 1341 | 5.807,5.0097,-2.2384,0.43878 1342 | 5.8519,5.3905,-2.4037,-0.061652 1343 | 5.8782,5.9409,-2.8544,-0.60863 1344 | 5.8862,5.8747,-2.8167,-0.30087 1345 | 5.9374,6.1664,-2.5905,-0.36553 1346 | 6.0919,2.9673,-1.3267,1.4551 1347 | 6.5633,9.8187,-4.4113,-3.2258 1348 | 6.8248,5.2187,-2.5425,0.5461 1349 | --------------------------------------------------------------------------------