├── babel.config.js ├── precision_recall_accuracy.png ├── .editorconfig ├── vue.config.js ├── .eslintrc.js ├── .gitignore ├── TODO.md ├── src ├── main.js ├── levels.js ├── App.vue ├── predictions.js ├── components │ ├── ConfusionTable.vue │ ├── ConfusedTile.vue │ ├── Chart.vue │ ├── ConfusionTableVisually.vue │ └── QuantityVisually.vue ├── datasets.js ├── metrics.js ├── All.vue └── Level.vue ├── LICENSE ├── package.json ├── README.md ├── notebooks └── sklearn_classifier_comparison.ipynb └── assets └── datasets └── all.json /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /precision_recall_accuracy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stared/which-ml-are-you/HEAD/precision_recall_accuracy.png -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{js,jsx,ts,tsx,vue}] 2 | indent_style = space 3 | indent_size = 2 4 | trim_trailing_whitespace = true 5 | insert_final_newline = true 6 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | lintOnSave: true, 3 | runtimeCompiler: true, 4 | baseUrl: process.env.NODE_ENV === 'production' 5 | ? '/which-ml-are-you/' 6 | : '/' 7 | }; 8 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: [ 3 | 'eslint:recommended', 4 | 'plugin:vue/recommended' 5 | ], 6 | rules: { 7 | // override/add rules settings here, such as: 8 | // 'vue/no-unused-vars': 'error' 9 | // "semi": ["error", "always"], 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw* 22 | -------------------------------------------------------------------------------- /TODO.md: -------------------------------------------------------------------------------- 1 | # TODO 2 | 3 | ## TODO 4 | 5 | - [x] Dataset scale 6 | - [ ] Mouseover etc 7 | - [ ] Modularize predicted classes 8 | - [ ] Train and validation 9 | - [ ] More datasets (Iris) 10 | - [ ] Compare to algorithms 11 | - [ ] Level progression (now level selection is fine-ish) 12 | 13 | ## Recently accomplished 14 | 15 | - [x] Data loading 16 | - [x] Graphical false positive and negative 17 | 18 | ## Also consider 19 | 20 | - [ ] Maybe "Confusion Matrix Metrics" is worth a post on its own 21 | - [ ] Dropdown with https://mikerodham.github.io/vue-dropdowns/ 22 | - [ ] Algorithms inside JS 23 | - [ ] Also a variant with ROC and AP curves 24 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import All from './All.vue' 4 | import Level from './Level.vue' 5 | import VueRouter from 'vue-router' 6 | 7 | Vue.config.productionTip = false 8 | 9 | Vue.use(VueRouter); 10 | 11 | const router = new VueRouter({ 12 | routes: [ 13 | { path: '/', component: All }, 14 | { path: '/lvl/:id', component: Level, props: true }, 15 | { 16 | path: '*', 17 | component: { 18 | render (h) { return h('div', '404. Not Found.') } 19 | } 20 | } 21 | ] 22 | }); 23 | 24 | new Vue({ 25 | router, 26 | render: h => h(App) 27 | }).$mount('#app'); 28 | -------------------------------------------------------------------------------- /src/levels.js: -------------------------------------------------------------------------------- 1 | // directly or through datasets.js 2 | // for now quick&dirty 3 | 4 | import { 5 | fixedDatasets, 6 | fixedDatasetsTest 7 | } from './datasets.js' 8 | 9 | export const levels = [{ 10 | // linear 11 | train: fixedDatasets[2], 12 | validation: fixedDatasetsTest[2] 13 | }, 14 | { 15 | // moons 16 | train: fixedDatasets[0], 17 | validation: fixedDatasetsTest[0] 18 | }, 19 | { 20 | // circle 21 | train: fixedDatasets[1], 22 | validation: fixedDatasetsTest[1] 23 | }, 24 | { 25 | // xor 26 | train: fixedDatasets[4], 27 | validation: fixedDatasetsTest[4] 28 | }, 29 | { 30 | // spirals 31 | train: fixedDatasets[3], 32 | validation: fixedDatasetsTest[3] 33 | }, 34 | ]; 35 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 17 | 18 | 52 | -------------------------------------------------------------------------------- /src/predictions.js: -------------------------------------------------------------------------------- 1 | import {predictions} from '../assets/predictions/all.json' 2 | 3 | function closeEnough(v, w) { 4 | return Math.abs(v - w) < 0.05; 5 | } 6 | 7 | function findPrediction(tile, preds) { 8 | for (let i = 0; i < preds.length; ++i) { 9 | if (closeEnough(tile.x, preds[i].x) && closeEnough(tile.y, preds[i].y)) 10 | return +(preds[i].v > 0.5); 11 | } 12 | return 0; 13 | } 14 | 15 | export function datasetHasPredictions(datasetName) { 16 | return predictions[datasetName] !== undefined; 17 | } 18 | 19 | export function getPredictions(tiles, dataset, classifier) { 20 | //// silent error messages are dangerous 21 | // if (predictions[dataset] === undefined) { 22 | // console.log("No dataset"); 23 | // return; 24 | // } 25 | // if (predictions[dataset][classifier] === undefined) { 26 | // console.log("No classifier"); 27 | // return; 28 | // } 29 | const selectedPredictions = predictions[dataset][classifier]; 30 | tiles.forEach((d) => d.v = findPrediction(d, selectedPredictions)); 31 | } 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Piotr Migdał, Katarzyna Kańska 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "which-ml", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "d3-axis": "^1.0.12", 12 | "d3-scale": "^2.1.2", 13 | "d3-selection": "^1.4.0", 14 | "vue": "^2.5.21", 15 | "vue-router": "^3.0.2" 16 | }, 17 | "devDependencies": { 18 | "@vue/cli-plugin-babel": "^3.2.0", 19 | "@vue/cli-plugin-eslint": "^3.3.0", 20 | "@vue/cli-service": "^4.1.2", 21 | "@vue/eslint-config-standard": "^4.0.0", 22 | "babel-eslint": "^10.0.1", 23 | "eslint": "^5.8.0", 24 | "eslint-plugin-vue": "^5.0.0", 25 | "vue-template-compiler": "^2.5.21", 26 | "webpack": "^4.32.2" 27 | }, 28 | "eslintConfig": { 29 | "root": true, 30 | "env": { 31 | "node": true 32 | }, 33 | "extends": [ 34 | "plugin:vue/essential", 35 | "eslint:recommended", 36 | "@vue/standard" 37 | ], 38 | "rules": {}, 39 | "parserOptions": { 40 | "parser": "babel-eslint" 41 | } 42 | }, 43 | "postcss": { 44 | "plugins": { 45 | "autoprefixer": {} 46 | } 47 | }, 48 | "browserslist": [ 49 | "> 1%", 50 | "last 2 versions", 51 | "not ie <= 8" 52 | ] 53 | } 54 | -------------------------------------------------------------------------------- /src/components/ConfusionTable.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 50 | 51 | 61 | -------------------------------------------------------------------------------- /src/datasets.js: -------------------------------------------------------------------------------- 1 | import {scaleLinear} from "d3-scale"; 2 | import {datasets} from '../assets/datasets/all.json' 3 | 4 | const k = 10; 5 | 6 | function range(size, startAt = 0) { 7 | return [...Array(size).keys()].map(i => i + startAt); 8 | } 9 | 10 | const scaleX = scaleLinear() 11 | .domain([0, k]) 12 | .range([-1, 1]); 13 | 14 | const scaleY = scaleLinear() 15 | .domain([0, k]) 16 | .range([-1, 1]); 17 | 18 | export const tiles = range(k * k) 19 | .map((i) => { 20 | return { 21 | x: scaleX(i % k), 22 | y: scaleY(Math.floor(i / k)), 23 | dx: scaleX(1) - scaleX(0), 24 | dy: scaleY(1) - scaleY(0), 25 | v: 0 // Math.random() 26 | }; 27 | }); 28 | 29 | const generateSin = (n, wavenumber) => { 30 | return range(n) 31 | .map(() => { 32 | const x = 2 * Math.random() - 1; 33 | const y = 2 * Math.random() - 1; 34 | 35 | return { 36 | x: x, 37 | y: y, 38 | v: +(y < Math.sin(wavenumber * x)) 39 | }; 40 | }); 41 | } 42 | 43 | const generateCircle = (n, radius) => { 44 | const rSq = Math.pow(radius, 2); 45 | return range(n) 46 | .map(() => { 47 | const x = 2 * Math.random() - 1; 48 | const y = 2 * Math.random() - 1; 49 | 50 | return { 51 | x: x, 52 | y: y, 53 | v: +(Math.pow(x, 2) + Math.pow(y, 2) < rSq) 54 | }; 55 | }); 56 | } 57 | 58 | export const generatedDatasets = [ 59 | {name: "Sin4", points: generateSin(50, 4)}, 60 | {name: "Sin4 Test", points: generateSin(50, 4)}, 61 | {name: "Circle", points: generateCircle(50, 0.5)}, 62 | {name: "Circle Test", points: generateCircle(50, 0.5)}, 63 | {name: "Empty", points: []}, 64 | ]; 65 | 66 | const normalize = (data, ranges) => { 67 | 68 | const scaleX = scaleLinear() 69 | .domain([ranges.xmin, ranges.xmax]) 70 | .range([-1, 1]); 71 | 72 | const scaleY = scaleLinear() 73 | .domain([ranges.ymin, ranges.ymax]) 74 | .range([-1, 1]); 75 | 76 | return data.map((d) => ({ 77 | x: scaleX(d.x), 78 | y: scaleY(d.y), 79 | v: d.v 80 | })); 81 | }; 82 | 83 | export const fixedDatasets = datasets.map( 84 | (dataset) => ({ 85 | name: dataset.name, 86 | points: normalize(dataset.data.train, dataset) 87 | }) 88 | ); 89 | 90 | export const fixedDatasetsTest = datasets.map( 91 | (dataset) => ({ 92 | name: dataset.name + " Test", 93 | points: normalize(dataset.data.test, dataset) 94 | }) 95 | ); 96 | 97 | export const allDatasets = generatedDatasets 98 | .concat(fixedDatasets) 99 | .concat(fixedDatasetsTest); 100 | -------------------------------------------------------------------------------- /src/components/ConfusedTile.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 112 | 113 | 127 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Which Machine Learning algorithm are you? 2 | 3 | A project by [Piotr Migdał](https://p.migdal.pl/) and Katarzyna Kańska. Work in progress. We learn Vue, so any feedback and code is appreciated. 4 | 5 | ![Precision, recall and accuracy - visually](precision_recall_accuracy.png) 6 | 7 | Inspirations: 8 | 9 | * [Teaching Machine Learning](https://speakerdeck.com/pmigdal/teaching-machine-learning) and my general approach to teaching via exploration, see also: 10 | - [Quantum Game with Photons](http://quantumgame.io/) 11 | - [Quantum mechanics for high-school students](http://p.migdal.pl/2016/08/15/quantum-mechanics-for-high-school-students.html) 12 | - [Starting deep learning hands-on: image classification on CIFAR-10 ](https://deepsense.ai/deep-learning-hands-on-image-classification/) 13 | - [In Browser AI](https://inbrowser.ai) 14 | - The collaborative list of [Interactive Machine Learning, Deep Learning and Statistics websites](https://p.migdal.pl/interactive-machine-learning-list/) 15 | * [Classifier comparison - scikit](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) 16 | * Your Draw It series from The New York Times: 17 | - [You Draw It: What Got Better or Worse During Obama’s Presidency](https://www.nytimes.com/interactive/2017/01/15/us/politics/you-draw-obama-legacy.html) 18 | - [You Draw It: How Family Income Predicts Children’s College Chances](https://www.nytimes.com/interactive/2015/05/28/upshot/you-draw-it-how-family-income-affects-childrens-college-chances.html) 19 | - [You Draw It: Just How Bad Is the Drug Overdose Epidemic?](https://www.nytimes.com/interactive/2017/04/14/upshot/drug-overdose-epidemic-you-draw-it.html) 20 | * [TensorFlow playground](https://playground.tensorflow.org/) 21 | * [Precision and recall - Wikipedia](https://en.wikipedia.org/wiki/Precision_and_recall) 22 | * [This beautiful diagram](https://en.wikipedia.org/wiki/F1_score#/media/File:Precisionrecall.svg) less - 23 | [that diagram](https://en.wikipedia.org/wiki/Binary_classification#/media/File:Binary-classification-labeled.svg) 24 | 25 | ## How to run it 26 | 27 | It's a [Vue.js](https://vuejs.org/) project, so... 28 | 29 | ### Project setup 30 | ``` 31 | npm install 32 | ``` 33 | 34 | #### Compiles and hot-reloads for development 35 | ``` 36 | npm run serve 37 | ``` 38 | 39 | #### Compiles and minifies for production 40 | ``` 41 | npm run build 42 | ``` 43 | 44 | #### Run your tests 45 | ``` 46 | npm run test 47 | ``` 48 | 49 | #### Lints and fixes files 50 | ``` 51 | npm run lint 52 | ``` 53 | 54 | #### Deploy to GitHub pages 55 | 56 | First, install [push-dir](https://www.npmjs.com/package/push-dir). Then: 57 | 58 | ``` 59 | npm run build; push-dir --dir=dist --branch=gh-pages --cleanup 60 | ``` 61 | 62 | See [Deploy Vue to GitHub pages-the easy way!](https://medium.com/@codetheorist/vue-up-your-github-pages-the-right-way-955486220418). You need to set relative paths in `vue.config.js`. 63 | 64 | #### Customize configuration 65 | See [Configuration Reference](https://cli.vuejs.org/config/). 66 | -------------------------------------------------------------------------------- /src/components/Chart.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 126 | 127 | 145 | -------------------------------------------------------------------------------- /src/components/ConfusionTableVisually.vue: -------------------------------------------------------------------------------- 1 | 63 | 64 | 129 | 130 | 162 | -------------------------------------------------------------------------------- /src/components/QuantityVisually.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 136 | 137 | 155 | -------------------------------------------------------------------------------- /src/metrics.js: -------------------------------------------------------------------------------- 1 | function isPointInsideTile(point, tile) { 2 | return tile.x <= point.x && point.x < tile.x + tile.dx 3 | && tile.y <= point.y && point.y < tile.y + tile.dy; 4 | } 5 | 6 | export function computeMetrics(points, tiles) { 7 | const confusionMatrix = [[0, 0], [0, 0]]; 8 | points.forEach((point) => { 9 | tiles.forEach((tile) => { 10 | if (isPointInsideTile(point, tile)) { 11 | confusionMatrix[tile.v][point.v] += 1; 12 | } 13 | }); 14 | }); 15 | return { 16 | truePositives: confusionMatrix[1][1], 17 | falsePositives: confusionMatrix[1][0], 18 | falseNegatives: confusionMatrix[0][1], 19 | trueNegatives: confusionMatrix[0][0], 20 | } 21 | } 22 | 23 | export function splitByMetrics(points, tiles) { 24 | const confusionMatrixPoints = [[[], []], [[], []]]; 25 | points.forEach((point) => { 26 | tiles.forEach((tile) => { 27 | if (isPointInsideTile(point, tile)) { 28 | confusionMatrixPoints[tile.v][point.v].push(point); 29 | } 30 | }); 31 | }); 32 | return { 33 | truePositives: confusionMatrixPoints[1][1], 34 | falsePositives: confusionMatrixPoints[1][0], 35 | falseNegatives: confusionMatrixPoints[0][1], 36 | trueNegatives: confusionMatrixPoints[0][0], 37 | } 38 | } 39 | 40 | export const metrics2acronym = { 41 | truePositive: "TP", 42 | falsePositives: "FP", 43 | falseNegatives: "FN", 44 | trueNegatives: "TN", 45 | }; 46 | 47 | export const confusionMatrixMetrics = [ 48 | // { 49 | // name: "Condition positive", 50 | // synonyms: ["(P)"], 51 | // wiki: "", 52 | // numerator: ["truePositives", "falseNegatives"], 53 | // denominator: [1] 54 | // }, 55 | // { 56 | // name: "Condition negative", 57 | // synonyms: ["(N)"], 58 | // wiki: "", 59 | // numerator: ["falsePositives", "trueNegatives"], 60 | // denominator: [1] 61 | // }, 62 | { 63 | name: "Precision", 64 | synonyms: ["Positive Predictive Value (PPV)"], 65 | wiki: "https://en.wikipedia.org/wiki/Precision_and_recall", 66 | numerator: ["truePositives"], 67 | denominator: ["truePositives", "falsePositives"] 68 | }, 69 | { 70 | name: "Recall", 71 | synonyms: ["Sensitivity", "Hit rate", "True Positive Rate (TPR)"], 72 | wiki: "https://en.wikipedia.org/wiki/Precision_and_recall", 73 | numerator: ["truePositives"], 74 | denominator: ["truePositives", "falseNegatives"] 75 | }, 76 | { 77 | name: "Specificity", 78 | synonyms: ["Selectivity", "True Negative Rate (TNR)"], 79 | wiki: "https://en.wikipedia.org/wiki/Sensitivity_and_specificity", 80 | numerator: ["trueNegatives"], 81 | denominator: ["falsePositives", "trueNegatives"] 82 | }, 83 | { 84 | name: "Negative Predictive Value", 85 | synonyms: ["(NPV)"], 86 | wiki: "https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values", 87 | numerator: ["trueNegatives"], 88 | denominator: ["falseNegatives", "trueNegatives"] 89 | }, 90 | { 91 | name: "False Negative Rate", 92 | synonyms: ["(FNR)", "Miss Rate"], 93 | wiki: "https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values", 94 | numerator: ["falseNegatives"], 95 | denominator: ["truePositives", "falseNegatives"] 96 | }, 97 | { 98 | name: "False Positive Rate", 99 | synonyms: ["(FPR)", "Fall-out"], 100 | wiki: null, 101 | numerator: ["falsePositives"], 102 | denominator: ["falsePositives", "trueNegatives"] 103 | }, 104 | { 105 | name: "False Discovery Rate", 106 | synonyms: ["(FDR)"], 107 | wiki: "https://en.wikipedia.org/wiki/False_discovery_rate", 108 | numerator: ["falsePositives"], 109 | denominator: ["truePositives", "falsePositives"] 110 | }, 111 | { 112 | name: "False Omission Rate", 113 | synonyms: ["(FOR)"], 114 | wiki: "https://en.wikipedia.org/wiki/Positive_and_negative_predictive_values", 115 | numerator: ["falseNegatives"], 116 | denominator: ["falseNegatives", "trueNegatives"] 117 | }, 118 | { 119 | name: "Accuracy", 120 | synonyms: ["(ACC)"], 121 | wiki: "https://en.wikipedia.org/wiki/Accuracy_and_precision", 122 | numerator: ["truePositives", "trueNegatives"], 123 | denominator: ["truePositives", "falsePositives", "falseNegatives", "trueNegatives"] 124 | }, 125 | { 126 | name: "F1 score", 127 | synonyms: [], 128 | wiki: "https://en.wikipedia.org/wiki/F1_score", 129 | numerator: ["truePositives", "truePositives"], 130 | denominator: ["truePositives", "truePositives", "falsePositives", "falseNegatives"] 131 | }, 132 | ]; 133 | -------------------------------------------------------------------------------- /src/All.vue: -------------------------------------------------------------------------------- 1 | 79 | 80 | 145 | 146 | 156 | -------------------------------------------------------------------------------- /src/Level.vue: -------------------------------------------------------------------------------- 1 | 112 | 113 | 195 | 196 | 218 | -------------------------------------------------------------------------------- /notebooks/sklearn_classifier_comparison.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import numpy as np\n", 10 | "import matplotlib.pyplot as plt\n", 11 | "from matplotlib.colors import ListedColormap\n", 12 | "from sklearn.model_selection import train_test_split\n", 13 | "from sklearn.preprocessing import StandardScaler\n", 14 | "from sklearn.datasets import make_moons, make_circles, make_classification\n", 15 | "from sklearn.neural_network import MLPClassifier\n", 16 | "from sklearn.neighbors import KNeighborsClassifier\n", 17 | "from sklearn.svm import SVC\n", 18 | "from sklearn.gaussian_process import GaussianProcessClassifier\n", 19 | "from sklearn.gaussian_process.kernels import RBF\n", 20 | "from sklearn.tree import DecisionTreeClassifier\n", 21 | "from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier\n", 22 | "from sklearn.naive_bayes import GaussianNB\n", 23 | "from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": null, 29 | "metadata": {}, 30 | "outputs": [], 31 | "source": [ 32 | "h = .02 # step size in the mesh\n", 33 | "\n", 34 | "clf_names = [\"Nearest Neighbors\", \"Linear SVM\", \"RBF SVM\", \"Gaussian Process\",\n", 35 | " \"Decision Tree\", \"Random Forest\", \"Neural Net\", \"AdaBoost\",\n", 36 | " \"Naive Bayes\", \"QDA\"]\n", 37 | "\n", 38 | "classifiers = [\n", 39 | " KNeighborsClassifier(3),\n", 40 | " SVC(kernel=\"linear\", C=0.025, probability=True),\n", 41 | " SVC(gamma=2, C=1, probability=True),\n", 42 | " GaussianProcessClassifier(1.0 * RBF(1.0)),\n", 43 | " DecisionTreeClassifier(max_depth=5),\n", 44 | " RandomForestClassifier(max_depth=5, n_estimators=10, max_features=1),\n", 45 | " MLPClassifier(alpha=1, max_iter=500),\n", 46 | " AdaBoostClassifier(),\n", 47 | " GaussianNB(),\n", 48 | " QuadraticDiscriminantAnalysis()]" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": null, 54 | "metadata": {}, 55 | "outputs": [], 56 | "source": [ 57 | "def twospirals(n_points, noise=.5):\n", 58 | " \"\"\"\n", 59 | " Returns the two spirals dataset.\n", 60 | " https://glowingpython.blogspot.com/2017/04/solving-two-spirals-problem-with-keras.html\n", 61 | " \"\"\"\n", 62 | " n = np.sqrt(np.random.rand(n_points,1)) * 780 * (2*np.pi)/360\n", 63 | " d1x = -np.cos(n)*n + np.random.rand(n_points,1) * noise\n", 64 | " d1y = np.sin(n)*n + np.random.rand(n_points,1) * noise\n", 65 | " return (np.vstack((np.hstack((d1x,d1y)),np.hstack((-d1x,-d1y)))), \n", 66 | " np.hstack((np.zeros(n_points),np.ones(n_points))))" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": null, 72 | "metadata": {}, 73 | "outputs": [], 74 | "source": [ 75 | "n_points = 100\n", 76 | "\n", 77 | "X, y = make_classification(n_samples=n_points, n_features=2, n_redundant=0, n_informative=2,\n", 78 | " random_state=1, n_clusters_per_class=1)\n", 79 | "rng = np.random.RandomState(42)\n", 80 | "X += 2 * rng.uniform(size=X.shape)\n", 81 | "linearly_separable = (X, y)\n", 82 | "\n", 83 | "rng = np.random.RandomState(0)\n", 84 | "X = rng.randn(n_points, 2)\n", 85 | "y = np.logical_xor(X[:, 0] > 0, X[:, 1] > 0)\n", 86 | "X += rng.uniform(size=X.shape)\n", 87 | "xor = (X, y.astype(int))\n", 88 | "\n", 89 | "X, y = twospirals(n_points)\n", 90 | "X += 2 *rng.uniform(size=X.shape)\n", 91 | "spirals = (X, y)\n", 92 | "\n", 93 | "datasets = [make_moons(n_samples=n_points, noise=0.3, random_state=0),\n", 94 | " make_circles(n_samples=n_points, noise=0.2, factor=0.5, random_state=1),\n", 95 | " linearly_separable,\n", 96 | " spirals,\n", 97 | " xor\n", 98 | " ]" 99 | ] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "execution_count": null, 104 | "metadata": {}, 105 | "outputs": [], 106 | "source": [ 107 | "import json\n", 108 | "\n", 109 | "def get_dataset_dicts(X, y):\n", 110 | " return [{'x': x1, 'y': x2, 'v': c}\n", 111 | " for x1, x2, c in zip(X[:, 0].tolist(), X[:, 1].tolist(), y.reshape(-1).tolist())]\n", 112 | "\n", 113 | "def get_dataset(X_train, X_test, y_train, y_test, name, kwargs):\n", 114 | " return { \n", 115 | " 'name': name,\n", 116 | " 'data': {\n", 117 | " 'train': get_dataset_dicts(X_train, y_train),\n", 118 | " 'test': get_dataset_dicts(X_test, y_test),\n", 119 | " },\n", 120 | " **kwargs\n", 121 | " }\n", 122 | "\n", 123 | "def save_dataset(X_train, X_test, y_train, y_test, name, kwargs):\n", 124 | " with open('dataset-{}.json'.format(name), 'w') as f:\n", 125 | " json.dump(\n", 126 | " get_dataset(X_train, X_test, y_train, y_test, name, kwargs),\n", 127 | " f, indent=2\n", 128 | " )\n", 129 | "\n", 130 | "def save_json(filename, data):\n", 131 | " with open('{}.json'.format(filename), 'w') as f:\n", 132 | " json.dump(data, f, indent=2)\n" 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": null, 138 | "metadata": {}, 139 | "outputs": [], 140 | "source": [ 141 | "def scale_dataset(X):\n", 142 | " # scale to [-1, 1]\n", 143 | " for i in range(X.shape[1]):\n", 144 | " X[:, i] = 2. * (X[:, i] - X[:, i].min()) / (X[:, i].max() - X[:, i].min()) - 1.\n", 145 | " return X" 146 | ] 147 | }, 148 | { 149 | "cell_type": "code", 150 | "execution_count": null, 151 | "metadata": { 152 | "scrolled": false 153 | }, 154 | "outputs": [], 155 | "source": [ 156 | "ds_names = ['moons', 'circles', 'linear', 'spirals', 'xor']\n", 157 | "\n", 158 | "Zs = []\n", 159 | "\n", 160 | "figure = plt.figure(figsize=(27, 9))\n", 161 | "i = 1\n", 162 | "\n", 163 | "predictions = {}\n", 164 | "scaled_datasets = []\n", 165 | "\n", 166 | "# iterate over datasets\n", 167 | "for ds_cnt, ds in enumerate(datasets):\n", 168 | " # preprocess dataset, split into training and test part\n", 169 | " X, y = ds\n", 170 | " X = StandardScaler().fit_transform(X)\n", 171 | " X = scale_dataset(X)\n", 172 | " \n", 173 | " X_train, X_test, y_train, y_test = \\\n", 174 | " train_test_split(X, y, test_size=.4, random_state=42)\n", 175 | "\n", 176 | " x_min, x_max = X[:, 0].min(), X[:, 0].max()\n", 177 | " y_min, y_max = X[:, 1].min(), X[:, 1].max()\n", 178 | "\n", 179 | " xx, yy = np.meshgrid(np.arange(-1, 1, 0.2),\n", 180 | " np.arange(-1, 1, 0.2))\n", 181 | " \n", 182 | " scaled_datasets.append(get_dataset(\n", 183 | " X_train, X_test, y_train, y_test, ds_names[ds_cnt],\n", 184 | " {'xmin': x_min, 'xmax': x_max, 'ymin': y_min, 'ymax': y_max}\n", 185 | " ))\n", 186 | "\n", 187 | " # just plot the dataset first\n", 188 | " cm = plt.cm.RdBu\n", 189 | " cm_bright = ListedColormap(['#FF0000', '#0000FF'])\n", 190 | " ax = plt.subplot(len(datasets), len(classifiers) + 1, i)\n", 191 | " if ds_cnt == 0:\n", 192 | " ax.set_title(\"Input data\")\n", 193 | " # Plot the training points\n", 194 | " ax.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm_bright,\n", 195 | " edgecolors='k')\n", 196 | " # Plot the testing points\n", 197 | " ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm_bright, alpha=0.6,\n", 198 | " edgecolors='k')\n", 199 | " ax.set_xlim(xx.min(), xx.max())\n", 200 | " ax.set_ylim(yy.min(), yy.max())\n", 201 | " ax.set_xticks(())\n", 202 | " ax.set_yticks(())\n", 203 | " i += 1\n", 204 | "\n", 205 | " Zs.append({})\n", 206 | " \n", 207 | " predictions[ds_names[ds_cnt]] = {}\n", 208 | " # iterate over classifiers\n", 209 | " for name, clf in zip(clf_names, classifiers):\n", 210 | " ax = plt.subplot(len(datasets), len(classifiers) + 1, i)\n", 211 | " clf.fit(X_train, y_train)\n", 212 | " score = clf.score(X_test, y_test)\n", 213 | "\n", 214 | " # Plot the decision boundary. For that, we will assign a color to each\n", 215 | " # point in the mesh [x_min, x_max]x[y_min, y_max].\n", 216 | "# Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])\n", 217 | " Z = clf.predict_proba(np.c_[(xx + 0.1).ravel(), (yy + 0.1).ravel()])[:, 1]\n", 218 | " \n", 219 | " predictions[ds_names[ds_cnt]][name] = get_dataset_dicts(np.c_[xx.ravel(), yy.ravel()], Z)\n", 220 | "\n", 221 | " # Put the result into a color plot\n", 222 | " Z = Z.reshape(xx.shape)\n", 223 | " ax.contourf(xx, yy, Z, cmap=cm, alpha=.8)\n", 224 | "\n", 225 | " Zs[ds_cnt][name] = Z\n", 226 | " \n", 227 | " # Plot the training points\n", 228 | " ax.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm_bright,\n", 229 | " edgecolors='k')\n", 230 | " # Plot the testing points\n", 231 | " ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm_bright,\n", 232 | " edgecolors='k', alpha=0.6)\n", 233 | "\n", 234 | " ax.set_xlim(xx.min(), xx.max())\n", 235 | " ax.set_ylim(yy.min(), yy.max())\n", 236 | " ax.set_xticks(())\n", 237 | " ax.set_yticks(())\n", 238 | " if ds_cnt == 0:\n", 239 | " ax.set_title(name)\n", 240 | " ax.text(xx.max() - .3, yy.min() + .3, ('%.2f' % score).lstrip('0'),\n", 241 | " size=15, horizontalalignment='right')\n", 242 | " i += 1\n", 243 | "\n", 244 | "save_json('datasets', {'datasets': scaled_datasets})\n", 245 | "save_json('predictions', {'predictions': predictions})\n", 246 | "\n", 247 | "plt.tight_layout()\n", 248 | "plt.show()" 249 | ] 250 | }, 251 | { 252 | "cell_type": "code", 253 | "execution_count": null, 254 | "metadata": {}, 255 | "outputs": [], 256 | "source": [ 257 | "def compare(pred1, pred2):\n", 258 | " return np.sum(pred1 == pred2) / (pred1.shape[0] * pred2.shape[1])" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "execution_count": null, 264 | "metadata": {}, 265 | "outputs": [], 266 | "source": [ 267 | "import itertools\n", 268 | "import pandas as pd\n", 269 | "\n", 270 | "preds = Zs[0]\n", 271 | "comparisons = pd.Series()\n", 272 | "for clf1, clf2 in itertools.combinations(preds.keys(), 2):\n", 273 | " comparisons['{} vs {}'.format(clf1, clf2)] = compare(preds[clf1], preds[clf2])\n", 274 | "\n", 275 | "comparisons.sort_values()" 276 | ] 277 | } 278 | ], 279 | "metadata": { 280 | "kernelspec": { 281 | "display_name": "Python 3", 282 | "language": "python", 283 | "name": "python3" 284 | }, 285 | "language_info": { 286 | "codemirror_mode": { 287 | "name": "ipython", 288 | "version": 3 289 | }, 290 | "file_extension": ".py", 291 | "mimetype": "text/x-python", 292 | "name": "python", 293 | "nbconvert_exporter": "python", 294 | "pygments_lexer": "ipython3", 295 | "version": "3.5.2" 296 | } 297 | }, 298 | "nbformat": 4, 299 | "nbformat_minor": 2 300 | } 301 | -------------------------------------------------------------------------------- /assets/datasets/all.json: -------------------------------------------------------------------------------- 1 | { 2 | "datasets": [ 3 | { 4 | "name": "moons", 5 | "ymax": 1.0, 6 | "xmax": 1.0, 7 | "data": { 8 | "test": [ 9 | { 10 | "y": 0.18203365694264995, 11 | "x": -0.7467869182808023, 12 | "v": 0 13 | }, 14 | { 15 | "y": 0.3149195542151335, 16 | "x": -0.5399640452323211, 17 | "v": 0 18 | }, 19 | { 20 | "y": 0.44603418539086004, 21 | "x": -0.10610658469210454, 22 | "v": 0 23 | }, 24 | { 25 | "y": 0.8567872358712652, 26 | "x": 0.28565477884220103, 27 | "v": 0 28 | }, 29 | { 30 | "y": 0.08415853387682559, 31 | "x": 0.34009928391027366, 32 | "v": 0 33 | }, 34 | { 35 | "y": -0.6855681940141051, 36 | "x": 0.33965299725433695, 37 | "v": 1 38 | }, 39 | { 40 | "y": 0.3718192769057296, 41 | "x": 0.144619827768681, 42 | "v": 0 43 | }, 44 | { 45 | "y": 0.7495222111702746, 46 | "x": -0.3252471714467493, 47 | "v": 0 48 | }, 49 | { 50 | "y": 0.2654598716160219, 51 | "x": -0.4058810181608262, 52 | "v": 1 53 | }, 54 | { 55 | "y": 0.5513796248761913, 56 | "x": -0.22848874047899692, 57 | "v": 0 58 | }, 59 | { 60 | "y": 0.3916716081720226, 61 | "x": -0.382048589048094, 62 | "v": 0 63 | }, 64 | { 65 | "y": -0.3174176063478842, 66 | "x": 0.024350351319345265, 67 | "v": 1 68 | }, 69 | { 70 | "y": -0.11109607555523304, 71 | "x": 0.9094818928805339, 72 | "v": 1 73 | }, 74 | { 75 | "y": -0.45473179927959595, 76 | "x": -0.006836574070031798, 77 | "v": 1 78 | }, 79 | { 80 | "y": -0.5314886544513642, 81 | "x": 0.7064066890073282, 82 | "v": 1 83 | }, 84 | { 85 | "y": -0.6192818590487851, 86 | "x": 0.22749938035101458, 87 | "v": 1 88 | }, 89 | { 90 | "y": 0.650105606718915, 91 | "x": -0.04845057751545345, 92 | "v": 0 93 | }, 94 | { 95 | "y": 0.14642184444110584, 96 | "x": 0.7473425434008769, 97 | "v": 1 98 | }, 99 | { 100 | "y": -0.7780808749743393, 101 | "x": 0.6106854660824437, 102 | "v": 1 103 | }, 104 | { 105 | "y": -1.0, 106 | "x": 0.35699041138818455, 107 | "v": 1 108 | }, 109 | { 110 | "y": -0.0822576318404803, 111 | "x": -0.1349037128920757, 112 | "v": 1 113 | }, 114 | { 115 | "y": -0.36059263426771837, 116 | "x": 0.7151739601509444, 117 | "v": 1 118 | }, 119 | { 120 | "y": 0.03407713898727471, 121 | "x": 0.09967026548504809, 122 | "v": 0 123 | }, 124 | { 125 | "y": -0.1699127953013806, 126 | "x": -0.7472224962725507, 127 | "v": 0 128 | }, 129 | { 130 | "y": -0.7423497603984497, 131 | "x": 0.9992791706044903, 132 | "v": 1 133 | }, 134 | { 135 | "y": 0.6531809026754263, 136 | "x": -0.4559983257939967, 137 | "v": 0 138 | }, 139 | { 140 | "y": -0.24026251665359488, 141 | "x": 0.6220717518632173, 142 | "v": 0 143 | }, 144 | { 145 | "y": -0.7061047105486429, 146 | "x": -0.1216115527274132, 147 | "v": 1 148 | }, 149 | { 150 | "y": 0.07101999390861025, 151 | "x": 0.7339467809000297, 152 | "v": 1 153 | }, 154 | { 155 | "y": -0.15002920447016055, 156 | "x": -0.750737879744835, 157 | "v": 0 158 | }, 159 | { 160 | "y": -0.4427426910609883, 161 | "x": 0.8983239415794657, 162 | "v": 1 163 | }, 164 | { 165 | "y": 0.3534032427173648, 166 | "x": -0.45732700740213916, 167 | "v": 0 168 | }, 169 | { 170 | "y": -0.12319293902061923, 171 | "x": -0.23229383551935034, 172 | "v": 1 173 | }, 174 | { 175 | "y": -0.0733435210413319, 176 | "x": 0.8505286210881646, 177 | "v": 1 178 | }, 179 | { 180 | "y": -0.826238016638043, 181 | "x": 0.540179395314232, 182 | "v": 1 183 | }, 184 | { 185 | "y": 0.3021818549858577, 186 | "x": 0.960847364607095, 187 | "v": 1 188 | }, 189 | { 190 | "y": 0.5318972074507864, 191 | "x": -0.331200276818989, 192 | "v": 0 193 | }, 194 | { 195 | "y": -0.4882012068614048, 196 | "x": 0.37912384328198745, 197 | "v": 1 198 | }, 199 | { 200 | "y": 0.5630098915951198, 201 | "x": -0.3455897754823647, 202 | "v": 0 203 | }, 204 | { 205 | "y": 0.7401885549816465, 206 | "x": -0.07439762026617247, 207 | "v": 0 208 | } 209 | ], 210 | "train": [ 211 | { 212 | "y": -0.08769790588507353, 213 | "x": 0.1960746997985361, 214 | "v": 0 215 | }, 216 | { 217 | "y": 0.22885863625992364, 218 | "x": -0.20726648786698287, 219 | "v": 1 220 | }, 221 | { 222 | "y": -0.7832280953702959, 223 | "x": 0.2975759472267465, 224 | "v": 1 225 | }, 226 | { 227 | "y": 0.2451456344840659, 228 | "x": 0.7246078799774833, 229 | "v": 1 230 | }, 231 | { 232 | "y": -0.22320596526434755, 233 | "x": 1.0, 234 | "v": 1 235 | }, 236 | { 237 | "y": 0.2184411800846604, 238 | "x": 0.4182796643653839, 239 | "v": 0 240 | }, 241 | { 242 | "y": 0.6034372381703901, 243 | "x": -0.5675571522361844, 244 | "v": 0 245 | }, 246 | { 247 | "y": -0.4993568655575653, 248 | "x": -0.6732046905124902, 249 | "v": 0 250 | }, 251 | { 252 | "y": -0.28054138368641024, 253 | "x": -0.12815030658782067, 254 | "v": 1 255 | }, 256 | { 257 | "y": 0.7131700061222863, 258 | "x": 0.45371526371057946, 259 | "v": 0 260 | }, 261 | { 262 | "y": -0.30490913025510513, 263 | "x": -0.6225860485883774, 264 | "v": 0 265 | }, 266 | { 267 | "y": -0.23426209527835806, 268 | "x": -0.27805575144854255, 269 | "v": 1 270 | }, 271 | { 272 | "y": 0.4261699932893601, 273 | "x": -0.07264734574679865, 274 | "v": 0 275 | }, 276 | { 277 | "y": -0.05746730075750495, 278 | "x": -0.39198648237215006, 279 | "v": 1 280 | }, 281 | { 282 | "y": 0.09570077306646207, 283 | "x": -0.2632420908261017, 284 | "v": 1 285 | }, 286 | { 287 | "y": -0.5486138040682412, 288 | "x": 0.11836375655084308, 289 | "v": 1 290 | }, 291 | { 292 | "y": 0.05318507323131327, 293 | "x": 0.07900690616618666, 294 | "v": 0 295 | }, 296 | { 297 | "y": -0.8191744661258299, 298 | "x": 0.16167256214644277, 299 | "v": 1 300 | }, 301 | { 302 | "y": 0.561842236814093, 303 | "x": -0.17561297123799113, 304 | "v": 0 305 | }, 306 | { 307 | "y": -0.2956114523660409, 308 | "x": 0.043547632868617514, 309 | "v": 1 310 | }, 311 | { 312 | "y": 0.5483286782147145, 313 | "x": 0.055319904015971755, 314 | "v": 0 315 | }, 316 | { 317 | "y": -0.06438985093399774, 318 | "x": -0.9876094326982007, 319 | "v": 0 320 | }, 321 | { 322 | "y": 0.014256815744143614, 323 | "x": -0.06300242235127307, 324 | "v": 0 325 | }, 326 | { 327 | "y": -0.10081170840419262, 328 | "x": -0.8577945886164199, 329 | "v": 0 330 | }, 331 | { 332 | "y": -0.21104117331755567, 333 | "x": 0.5560637211059911, 334 | "v": 1 335 | }, 336 | { 337 | "y": -0.6887124654653292, 338 | "x": 0.6598826015328343, 339 | "v": 1 340 | }, 341 | { 342 | "y": 1.0, 343 | "x": 0.1402164222596758, 344 | "v": 0 345 | }, 346 | { 347 | "y": 0.2366274897743066, 348 | "x": 0.1788693041022682, 349 | "v": 0 350 | }, 351 | { 352 | "y": 0.5559243441860351, 353 | "x": -0.45928202032453214, 354 | "v": 0 355 | }, 356 | { 357 | "y": -0.5275839067912776, 358 | "x": 0.2979986761420117, 359 | "v": 1 360 | }, 361 | { 362 | "y": -0.5822479071108679, 363 | "x": 0.4892939085162431, 364 | "v": 1 365 | }, 366 | { 367 | "y": -0.5075877861704834, 368 | "x": 0.12017850740253877, 369 | "v": 1 370 | }, 371 | { 372 | "y": 0.8084619159387316, 373 | "x": -0.11891229401501924, 374 | "v": 0 375 | }, 376 | { 377 | "y": -0.08145146474389175, 378 | "x": -0.8320822091873373, 379 | "v": 0 380 | }, 381 | { 382 | "y": 0.11889373002079529, 383 | "x": -1.0, 384 | "v": 0 385 | }, 386 | { 387 | "y": -0.01265318802371318, 388 | "x": -0.37320768365279255, 389 | "v": 0 390 | }, 391 | { 392 | "y": -0.7260147319165852, 393 | "x": -0.043470723959933566, 394 | "v": 1 395 | }, 396 | { 397 | "y": -0.21412579525290676, 398 | "x": 0.8192137554710017, 399 | "v": 1 400 | }, 401 | { 402 | "y": 0.25334232985908467, 403 | "x": 0.42226677615225827, 404 | "v": 0 405 | }, 406 | { 407 | "y": 0.2252527110914906, 408 | "x": -0.30771490113217426, 409 | "v": 1 410 | }, 411 | { 412 | "y": -0.4968194324657558, 413 | "x": -0.17378021130619814, 414 | "v": 1 415 | }, 416 | { 417 | "y": -0.5556206043726439, 418 | "x": -0.7771816515639702, 419 | "v": 0 420 | }, 421 | { 422 | "y": -0.016046311048048878, 423 | "x": -0.1429905119827608, 424 | "v": 1 425 | }, 426 | { 427 | "y": -0.286292879413374, 428 | "x": 0.6011652566139822, 429 | "v": 1 430 | }, 431 | { 432 | "y": -0.2410971190494796, 433 | "x": 0.9621278478050874, 434 | "v": 1 435 | }, 436 | { 437 | "y": 0.13738139124860904, 438 | "x": 0.16578696193845643, 439 | "v": 0 440 | }, 441 | { 442 | "y": -0.35530961452829357, 443 | "x": 0.018361631822839897, 444 | "v": 1 445 | }, 446 | { 447 | "y": -0.26373254748264163, 448 | "x": 0.25775459638455267, 449 | "v": 0 450 | }, 451 | { 452 | "y": -0.5576182523689304, 453 | "x": 0.156417901815878, 454 | "v": 1 455 | }, 456 | { 457 | "y": 0.010370193739056344, 458 | "x": 0.17259196522558073, 459 | "v": 0 460 | }, 461 | { 462 | "y": 0.2786561191938224, 463 | "x": -0.716116749723787, 464 | "v": 0 465 | }, 466 | { 467 | "y": 0.1494591899051727, 468 | "x": 0.9796572716974716, 469 | "v": 1 470 | }, 471 | { 472 | "y": -0.25779653641204614, 473 | "x": -0.13382190451969433, 474 | "v": 1 475 | }, 476 | { 477 | "y": -0.36432920563789406, 478 | "x": 0.49064754541778144, 479 | "v": 1 480 | }, 481 | { 482 | "y": 0.2984639290784825, 483 | "x": -0.5877128231021447, 484 | "v": 0 485 | }, 486 | { 487 | "y": 0.3730245225359392, 488 | "x": 0.11719353203122451, 489 | "v": 0 490 | }, 491 | { 492 | "y": 0.4874352128297261, 493 | "x": -0.7894411407588914, 494 | "v": 0 495 | }, 496 | { 497 | "y": 0.21393860440139623, 498 | "x": 0.02049933472347165, 499 | "v": 0 500 | }, 501 | { 502 | "y": 0.3972514518083643, 503 | "x": -0.0741322206452405, 504 | "v": 0 505 | }, 506 | { 507 | "y": -0.3857844934256619, 508 | "x": -0.4645355059387076, 509 | "v": 1 510 | } 511 | ] 512 | }, 513 | "xmin": -1.0, 514 | "ymin": -1.0 515 | }, 516 | { 517 | "name": "circles", 518 | "ymax": 1.0, 519 | "xmax": 1.0, 520 | "data": { 521 | "test": [ 522 | { 523 | "y": 0.5403836844595509, 524 | "x": -0.6132823860176677, 525 | "v": 0 526 | }, 527 | { 528 | "y": 0.6375367114402002, 529 | "x": 0.9376354923452317, 530 | "v": 0 531 | }, 532 | { 533 | "y": 0.5066727423589326, 534 | "x": 0.21513376911703697, 535 | "v": 1 536 | }, 537 | { 538 | "y": -0.531833864185502, 539 | "x": 0.3638867382673152, 540 | "v": 0 541 | }, 542 | { 543 | "y": -0.2579492234959787, 544 | "x": -0.5015168361366582, 545 | "v": 1 546 | }, 547 | { 548 | "y": -0.4971612681527905, 549 | "x": -0.5303129428831174, 550 | "v": 0 551 | }, 552 | { 553 | "y": -0.17278752499367023, 554 | "x": 0.41675200690620584, 555 | "v": 1 556 | }, 557 | { 558 | "y": -0.43298951926570284, 559 | "x": -1.0, 560 | "v": 0 561 | }, 562 | { 563 | "y": -0.35943108596671736, 564 | "x": 0.2053596034246432, 565 | "v": 1 566 | }, 567 | { 568 | "y": 0.01468221226465971, 569 | "x": -0.3376910890590803, 570 | "v": 1 571 | }, 572 | { 573 | "y": -0.19466648717433155, 574 | "x": -0.4189246042221504, 575 | "v": 1 576 | }, 577 | { 578 | "y": 0.7027794526567359, 579 | "x": -0.09826893337543519, 580 | "v": 1 581 | }, 582 | { 583 | "y": 0.4203403019293033, 584 | "x": -0.048722299956734605, 585 | "v": 1 586 | }, 587 | { 588 | "y": -0.22500403357895826, 589 | "x": 0.18085492617531962, 590 | "v": 1 591 | }, 592 | { 593 | "y": 0.12783364144546638, 594 | "x": 1.0, 595 | "v": 0 596 | }, 597 | { 598 | "y": -0.06675596293716235, 599 | "x": 0.6229935772835602, 600 | "v": 1 601 | }, 602 | { 603 | "y": 0.7052259288237466, 604 | "x": -0.12332172998264512, 605 | "v": 0 606 | }, 607 | { 608 | "y": 0.24749898151863547, 609 | "x": -0.04757552468436976, 610 | "v": 1 611 | }, 612 | { 613 | "y": 0.5059017871666012, 614 | "x": 0.45762546375376867, 615 | "v": 1 616 | }, 617 | { 618 | "y": -0.03727397294022694, 619 | "x": 0.7124508582824132, 620 | "v": 1 621 | }, 622 | { 623 | "y": 0.05695987170693462, 624 | "x": 0.8422504560528261, 625 | "v": 0 626 | }, 627 | { 628 | "y": 0.4879975054114105, 629 | "x": -0.29865914203803445, 630 | "v": 1 631 | }, 632 | { 633 | "y": -0.3293193733063081, 634 | "x": 0.15860386083373457, 635 | "v": 1 636 | }, 637 | { 638 | "y": 0.10257360315279196, 639 | "x": -0.32577094575955035, 640 | "v": 1 641 | }, 642 | { 643 | "y": -0.4449646890403097, 644 | "x": 0.012641300809132172, 645 | "v": 1 646 | }, 647 | { 648 | "y": -0.5903541203542177, 649 | "x": -0.2836639258028232, 650 | "v": 0 651 | }, 652 | { 653 | "y": -0.25496624027318293, 654 | "x": -0.034225135187936684, 655 | "v": 1 656 | }, 657 | { 658 | "y": 0.8279134048580199, 659 | "x": 0.11256607260524065, 660 | "v": 0 661 | }, 662 | { 663 | "y": 0.44212136407842717, 664 | "x": -0.13594103980403927, 665 | "v": 1 666 | }, 667 | { 668 | "y": 0.29093738107590905, 669 | "x": 0.14880867911922402, 670 | "v": 1 671 | }, 672 | { 673 | "y": -0.6430726603075007, 674 | "x": 0.13906551263671707, 675 | "v": 0 676 | }, 677 | { 678 | "y": -0.33557906770513024, 679 | "x": 0.05908827408257622, 680 | "v": 1 681 | }, 682 | { 683 | "y": 0.34684261773679936, 684 | "x": 0.4596862912123303, 685 | "v": 1 686 | }, 687 | { 688 | "y": -0.5092864333644349, 689 | "x": 0.45114004940301977, 690 | "v": 0 691 | }, 692 | { 693 | "y": 0.043141527624218856, 694 | "x": -0.3965513442071654, 695 | "v": 1 696 | }, 697 | { 698 | "y": 0.6797564407003907, 699 | "x": -0.40561780284157856, 700 | "v": 0 701 | }, 702 | { 703 | "y": 0.8882700726616524, 704 | "x": 0.46187244795628835, 705 | "v": 0 706 | }, 707 | { 708 | "y": -0.37220245421931986, 709 | "x": 0.22039754121643473, 710 | "v": 1 711 | }, 712 | { 713 | "y": -0.7614915654593014, 714 | "x": 0.29082532913190406, 715 | "v": 0 716 | }, 717 | { 718 | "y": -0.5292546539474857, 719 | "x": -0.9495391722296136, 720 | "v": 0 721 | } 722 | ], 723 | "train": [ 724 | { 725 | "y": 0.16542174156218836, 726 | "x": 0.16288071432421058, 727 | "v": 1 728 | }, 729 | { 730 | "y": -0.11079264758373386, 731 | "x": 0.12350893487548764, 732 | "v": 1 733 | }, 734 | { 735 | "y": -0.021906441119081133, 736 | "x": -0.4020057701098224, 737 | "v": 1 738 | }, 739 | { 740 | "y": -0.09887698607368756, 741 | "x": -0.419021604076676, 742 | "v": 1 743 | }, 744 | { 745 | "y": -0.26356380281712655, 746 | "x": -0.8297086631402935, 747 | "v": 0 748 | }, 749 | { 750 | "y": 1.0, 751 | "x": 0.13726842551397045, 752 | "v": 0 753 | }, 754 | { 755 | "y": -0.29192756771923134, 756 | "x": -0.8163198653204005, 757 | "v": 0 758 | }, 759 | { 760 | "y": -0.8101266711259147, 761 | "x": -0.32593765380400375, 762 | "v": 0 763 | }, 764 | { 765 | "y": 0.3288186984031183, 766 | "x": -0.5275683879698037, 767 | "v": 1 768 | }, 769 | { 770 | "y": 0.0718243190512502, 771 | "x": 0.6084835877352521, 772 | "v": 1 773 | }, 774 | { 775 | "y": 0.504769000831605, 776 | "x": -0.6393888133440686, 777 | "v": 0 778 | }, 779 | { 780 | "y": 0.03754192677091184, 781 | "x": -0.5457146937382863, 782 | "v": 1 783 | }, 784 | { 785 | "y": -0.2766614022823225, 786 | "x": 0.6796831428022931, 787 | "v": 0 788 | }, 789 | { 790 | "y": 0.27816777324973385, 791 | "x": -0.94297664211098, 792 | "v": 0 793 | }, 794 | { 795 | "y": 0.43709190240781925, 796 | "x": -0.23356200455894638, 797 | "v": 1 798 | }, 799 | { 800 | "y": -0.2748375079238744, 801 | "x": -0.21702528035957402, 802 | "v": 1 803 | }, 804 | { 805 | "y": -0.5143070472637425, 806 | "x": -0.3978466691762005, 807 | "v": 0 808 | }, 809 | { 810 | "y": -0.17253507983404281, 811 | "x": 0.5075633520405338, 812 | "v": 0 813 | }, 814 | { 815 | "y": -0.2395720590744187, 816 | "x": 0.7874413649583221, 817 | "v": 0 818 | }, 819 | { 820 | "y": 0.2053746424507159, 821 | "x": -0.3063877279037168, 822 | "v": 1 823 | }, 824 | { 825 | "y": 0.46365742193664006, 826 | "x": -0.5340415651915008, 827 | "v": 0 828 | }, 829 | { 830 | "y": -0.5943977202176328, 831 | "x": -0.34013756750254653, 832 | "v": 0 833 | }, 834 | { 835 | "y": 0.4199686522350774, 836 | "x": 0.36364234707752674, 837 | "v": 1 838 | }, 839 | { 840 | "y": 0.4866444013619158, 841 | "x": 0.03250494056913045, 842 | "v": 0 843 | }, 844 | { 845 | "y": -0.26306456247821797, 846 | "x": 0.5955842585054683, 847 | "v": 0 848 | }, 849 | { 850 | "y": 0.18140465797115968, 851 | "x": 0.3013299399264018, 852 | "v": 1 853 | }, 854 | { 855 | "y": -0.492583167878035, 856 | "x": 0.7813011352610295, 857 | "v": 0 858 | }, 859 | { 860 | "y": 0.07298018906668169, 861 | "x": 0.9324233430463458, 862 | "v": 0 863 | }, 864 | { 865 | "y": 0.5193875511722605, 866 | "x": -0.20418030788506525, 867 | "v": 1 868 | }, 869 | { 870 | "y": -0.21607825456781493, 871 | "x": -0.571566883761238, 872 | "v": 1 873 | }, 874 | { 875 | "y": 0.6341854386254351, 876 | "x": -0.20656180936923096, 877 | "v": 0 878 | }, 879 | { 880 | "y": 0.26615587813271957, 881 | "x": 0.35234463354748735, 882 | "v": 1 883 | }, 884 | { 885 | "y": 0.3514974012716676, 886 | "x": 0.8062176012855446, 887 | "v": 0 888 | }, 889 | { 890 | "y": 0.030290543455488983, 891 | "x": -0.6688474698937925, 892 | "v": 0 893 | }, 894 | { 895 | "y": 0.9474752957261223, 896 | "x": 0.4204219237301867, 897 | "v": 0 898 | }, 899 | { 900 | "y": -0.6007852910984247, 901 | "x": 0.2070765907814136, 902 | "v": 1 903 | }, 904 | { 905 | "y": 0.024341299291716023, 906 | "x": 0.26598414390028746, 907 | "v": 1 908 | }, 909 | { 910 | "y": -0.007878897650123617, 911 | "x": 0.07395936747034315, 912 | "v": 1 913 | }, 914 | { 915 | "y": 0.6315142539321215, 916 | "x": 0.75949040842416, 917 | "v": 0 918 | }, 919 | { 920 | "y": 0.06005727456573173, 921 | "x": -0.3972700150213333, 922 | "v": 1 923 | }, 924 | { 925 | "y": -0.6218187971156002, 926 | "x": 0.6549376633867348, 927 | "v": 0 928 | }, 929 | { 930 | "y": 0.7463176407477159, 931 | "x": -0.915461949970223, 932 | "v": 0 933 | }, 934 | { 935 | "y": 0.3327456663081194, 936 | "x": -0.050722980013891195, 937 | "v": 1 938 | }, 939 | { 940 | "y": -0.6039759639815836, 941 | "x": -0.048352193733344984, 942 | "v": 0 943 | }, 944 | { 945 | "y": -0.312967481278021, 946 | "x": -0.017634687876469823, 947 | "v": 1 948 | }, 949 | { 950 | "y": 0.4988341926836728, 951 | "x": -0.9995130698308856, 952 | "v": 0 953 | }, 954 | { 955 | "y": 0.2038858068567908, 956 | "x": -0.6870445689612957, 957 | "v": 1 958 | }, 959 | { 960 | "y": -1.0, 961 | "x": -0.3493858676251024, 962 | "v": 0 963 | }, 964 | { 965 | "y": 0.31639347136509266, 966 | "x": -0.03665233846209204, 967 | "v": 1 968 | }, 969 | { 970 | "y": 0.5730176591472997, 971 | "x": 0.6329021434729203, 972 | "v": 0 973 | }, 974 | { 975 | "y": 0.7613598176004177, 976 | "x": -0.33786673008289314, 977 | "v": 0 978 | }, 979 | { 980 | "y": 0.780991658476436, 981 | "x": 0.7498708984519262, 982 | "v": 0 983 | }, 984 | { 985 | "y": 0.11320355765239931, 986 | "x": -0.6838127636900164, 987 | "v": 0 988 | }, 989 | { 990 | "y": 0.7438848815568837, 991 | "x": 0.19772671001693087, 992 | "v": 0 993 | }, 994 | { 995 | "y": 0.267446651438493, 996 | "x": 0.5838086623063465, 997 | "v": 0 998 | }, 999 | { 1000 | "y": -0.4564310592363031, 1001 | "x": -0.7188895261044642, 1002 | "v": 0 1003 | }, 1004 | { 1005 | "y": 0.6287364358623466, 1006 | "x": -0.7884888600005919, 1007 | "v": 0 1008 | }, 1009 | { 1010 | "y": -0.047949817690357555, 1011 | "x": 0.48514800823260695, 1012 | "v": 1 1013 | }, 1014 | { 1015 | "y": 0.2765270448824073, 1016 | "x": -0.0647586486235231, 1017 | "v": 1 1018 | }, 1019 | { 1020 | "y": 0.42757459248883456, 1021 | "x": 0.22992675490103842, 1022 | "v": 1 1023 | } 1024 | ] 1025 | }, 1026 | "xmin": -1.0, 1027 | "ymin": -1.0 1028 | }, 1029 | { 1030 | "name": "linear", 1031 | "ymax": 1.0, 1032 | "xmax": 1.0, 1033 | "data": { 1034 | "test": [ 1035 | { 1036 | "y": -0.5856666395154911, 1037 | "x": -0.6740892309787953, 1038 | "v": 1 1039 | }, 1040 | { 1041 | "y": 0.5560873483392517, 1042 | "x": -0.35658989983135136, 1043 | "v": 1 1044 | }, 1045 | { 1046 | "y": -0.2808094845160938, 1047 | "x": 1.0, 1048 | "v": 0 1049 | }, 1050 | { 1051 | "y": 0.26684010304848527, 1052 | "x": 0.2325520026098471, 1053 | "v": 0 1054 | }, 1055 | { 1056 | "y": -0.3525127053324588, 1057 | "x": 0.20257638213125495, 1058 | "v": 1 1059 | }, 1060 | { 1061 | "y": -0.5291200762555519, 1062 | "x": 0.34539405497471387, 1063 | "v": 0 1064 | }, 1065 | { 1066 | "y": 0.13172047059182468, 1067 | "x": -0.7033489316537, 1068 | "v": 1 1069 | }, 1070 | { 1071 | "y": 0.17083603474445863, 1072 | "x": 0.46505139767461934, 1073 | "v": 0 1074 | }, 1075 | { 1076 | "y": -0.6293370278329914, 1077 | "x": 0.7077397178642977, 1078 | "v": 0 1079 | }, 1080 | { 1081 | "y": 0.5068960684789747, 1082 | "x": -0.45654484242299853, 1083 | "v": 1 1084 | }, 1085 | { 1086 | "y": -0.2078348265574793, 1087 | "x": -0.35852308362522645, 1088 | "v": 1 1089 | }, 1090 | { 1091 | "y": -0.5100046460607786, 1092 | "x": -0.4361506756623936, 1093 | "v": 1 1094 | }, 1095 | { 1096 | "y": -0.21743046599953464, 1097 | "x": -0.29169382080017847, 1098 | "v": 1 1099 | }, 1100 | { 1101 | "y": 0.26485084078136345, 1102 | "x": 0.18979286948002838, 1103 | "v": 0 1104 | }, 1105 | { 1106 | "y": -0.37561720808841714, 1107 | "x": 0.47364246485560013, 1108 | "v": 0 1109 | }, 1110 | { 1111 | "y": 0.3162528293334612, 1112 | "x": -0.1997085658069203, 1113 | "v": 1 1114 | }, 1115 | { 1116 | "y": 0.24988230947363466, 1117 | "x": 0.10204676287273107, 1118 | "v": 0 1119 | }, 1120 | { 1121 | "y": -0.39581605375949713, 1122 | "x": 0.23359075179688382, 1123 | "v": 1 1124 | }, 1125 | { 1126 | "y": 0.2979074886859152, 1127 | "x": 0.4513666802448668, 1128 | "v": 0 1129 | }, 1130 | { 1131 | "y": -0.17320068370051922, 1132 | "x": -0.16349225930608746, 1133 | "v": 1 1134 | }, 1135 | { 1136 | "y": 0.11788475397019282, 1137 | "x": 0.49493463368705637, 1138 | "v": 0 1139 | }, 1140 | { 1141 | "y": -0.3697320157865355, 1142 | "x": -0.13844423985052923, 1143 | "v": 1 1144 | }, 1145 | { 1146 | "y": 1.0, 1147 | "x": 0.8997563040303127, 1148 | "v": 0 1149 | }, 1150 | { 1151 | "y": -0.34482306221870507, 1152 | "x": 0.4022459819393729, 1153 | "v": 0 1154 | }, 1155 | { 1156 | "y": 0.8151053878763244, 1157 | "x": -0.262962156438288, 1158 | "v": 1 1159 | }, 1160 | { 1161 | "y": -0.5329933162724283, 1162 | "x": 0.5992493559635637, 1163 | "v": 0 1164 | }, 1165 | { 1166 | "y": 0.0847972994419608, 1167 | "x": -0.21871032827543346, 1168 | "v": 1 1169 | }, 1170 | { 1171 | "y": 0.3199208451740889, 1172 | "x": -0.13856104166374272, 1173 | "v": 1 1174 | }, 1175 | { 1176 | "y": 0.17394026583570987, 1177 | "x": -0.16729916213446416, 1178 | "v": 1 1179 | }, 1180 | { 1181 | "y": -0.4488445104387231, 1182 | "x": 0.3353696966933266, 1183 | "v": 0 1184 | }, 1185 | { 1186 | "y": -0.24638389864546717, 1187 | "x": 0.282353056254544, 1188 | "v": 0 1189 | }, 1190 | { 1191 | "y": 0.050103925167934715, 1192 | "x": -0.19244024727350262, 1193 | "v": 1 1194 | }, 1195 | { 1196 | "y": -0.6603123543416121, 1197 | "x": -0.23724756290938864, 1198 | "v": 1 1199 | }, 1200 | { 1201 | "y": -0.2597452968549887, 1202 | "x": 0.22770932349851503, 1203 | "v": 0 1204 | }, 1205 | { 1206 | "y": 0.19849505687137703, 1207 | "x": 0.8868524054345055, 1208 | "v": 0 1209 | }, 1210 | { 1211 | "y": 0.8437902304391183, 1212 | "x": -0.5799205562315739, 1213 | "v": 1 1214 | }, 1215 | { 1216 | "y": -0.2568882901045161, 1217 | "x": 0.1276887513409699, 1218 | "v": 0 1219 | }, 1220 | { 1221 | "y": -0.39772975641398944, 1222 | "x": -0.7651933785528647, 1223 | "v": 1 1224 | }, 1225 | { 1226 | "y": -0.6923761243093639, 1227 | "x": -0.0979313321885591, 1228 | "v": 1 1229 | }, 1230 | { 1231 | "y": 0.7566406490496551, 1232 | "x": -0.6886657596072179, 1233 | "v": 1 1234 | } 1235 | ], 1236 | "train": [ 1237 | { 1238 | "y": -0.46825557832006304, 1239 | "x": -0.9185115528493866, 1240 | "v": 1 1241 | }, 1242 | { 1243 | "y": 0.5389284133720096, 1244 | "x": 0.2286634905551843, 1245 | "v": 0 1246 | }, 1247 | { 1248 | "y": -0.513937268398567, 1249 | "x": -0.6893917780887511, 1250 | "v": 1 1251 | }, 1252 | { 1253 | "y": 0.5580168981096085, 1254 | "x": 0.07760181445723235, 1255 | "v": 0 1256 | }, 1257 | { 1258 | "y": 0.46666147920820067, 1259 | "x": 0.6316067051397438, 1260 | "v": 0 1261 | }, 1262 | { 1263 | "y": -0.3009360817821596, 1264 | "x": -0.0646303169155854, 1265 | "v": 1 1266 | }, 1267 | { 1268 | "y": -0.20823230399073045, 1269 | "x": 0.4814079698555338, 1270 | "v": 0 1271 | }, 1272 | { 1273 | "y": 0.1689330492375667, 1274 | "x": -0.009153651768864957, 1275 | "v": 1 1276 | }, 1277 | { 1278 | "y": -0.16675320473457578, 1279 | "x": -0.690846604035692, 1280 | "v": 1 1281 | }, 1282 | { 1283 | "y": -0.3708694000721422, 1284 | "x": 0.2353345472616737, 1285 | "v": 0 1286 | }, 1287 | { 1288 | "y": 0.23984211402081446, 1289 | "x": 0.6727821394050828, 1290 | "v": 0 1291 | }, 1292 | { 1293 | "y": 0.5526862168033768, 1294 | "x": -0.7859656983667554, 1295 | "v": 1 1296 | }, 1297 | { 1298 | "y": 0.3584057896491972, 1299 | "x": 0.035006852294821034, 1300 | "v": 1 1301 | }, 1302 | { 1303 | "y": -0.4725760098877294, 1304 | "x": 0.874940393147948, 1305 | "v": 0 1306 | }, 1307 | { 1308 | "y": -0.36293864458603486, 1309 | "x": 0.26842754813186387, 1310 | "v": 0 1311 | }, 1312 | { 1313 | "y": -0.005418063544495255, 1314 | "x": -0.5618400704948607, 1315 | "v": 1 1316 | }, 1317 | { 1318 | "y": -0.22542821987973571, 1319 | "x": 0.745874880207926, 1320 | "v": 0 1321 | }, 1322 | { 1323 | "y": -0.11072021935905096, 1324 | "x": 0.018399055787384322, 1325 | "v": 0 1326 | }, 1327 | { 1328 | "y": 0.6430170552466761, 1329 | "x": 0.04418093999451256, 1330 | "v": 0 1331 | }, 1332 | { 1333 | "y": -1.0, 1334 | "x": -0.18116274794981402, 1335 | "v": 1 1336 | }, 1337 | { 1338 | "y": 0.21566892216742417, 1339 | "x": 0.8559406345671818, 1340 | "v": 0 1341 | }, 1342 | { 1343 | "y": 0.5867206945305434, 1344 | "x": 0.2044529523509504, 1345 | "v": 1 1346 | }, 1347 | { 1348 | "y": -0.30809804047370937, 1349 | "x": -0.8562643681152375, 1350 | "v": 1 1351 | }, 1352 | { 1353 | "y": 0.16902276443678765, 1354 | "x": 0.6945652061106609, 1355 | "v": 0 1356 | }, 1357 | { 1358 | "y": 0.07261077998964227, 1359 | "x": -0.6807166883349034, 1360 | "v": 1 1361 | }, 1362 | { 1363 | "y": -0.4415739888360839, 1364 | "x": 0.8906420997518454, 1365 | "v": 0 1366 | }, 1367 | { 1368 | "y": 0.01301769858740709, 1369 | "x": -0.047361876337120856, 1370 | "v": 1 1371 | }, 1372 | { 1373 | "y": 0.24970842441839092, 1374 | "x": 0.6462990869884366, 1375 | "v": 0 1376 | }, 1377 | { 1378 | "y": -0.06678863622175268, 1379 | "x": 0.4154615645478361, 1380 | "v": 0 1381 | }, 1382 | { 1383 | "y": -0.4088668289074945, 1384 | "x": -0.5474345297638952, 1385 | "v": 1 1386 | }, 1387 | { 1388 | "y": 0.21556841084129674, 1389 | "x": -0.6208382619109318, 1390 | "v": 1 1391 | }, 1392 | { 1393 | "y": -0.5641211962482133, 1394 | "x": -0.5760158121075392, 1395 | "v": 1 1396 | }, 1397 | { 1398 | "y": -0.3781600092292523, 1399 | "x": -0.0362515097099414, 1400 | "v": 1 1401 | }, 1402 | { 1403 | "y": -0.2739086913765867, 1404 | "x": 0.5549003448712817, 1405 | "v": 0 1406 | }, 1407 | { 1408 | "y": 0.1683717094460888, 1409 | "x": 0.6664408674542985, 1410 | "v": 0 1411 | }, 1412 | { 1413 | "y": 0.778101743041282, 1414 | "x": 0.6654523418713256, 1415 | "v": 0 1416 | }, 1417 | { 1418 | "y": -0.25064520374420984, 1419 | "x": -0.16531124538337705, 1420 | "v": 1 1421 | }, 1422 | { 1423 | "y": 0.030493759360761263, 1424 | "x": -0.5092229982446141, 1425 | "v": 1 1426 | }, 1427 | { 1428 | "y": -0.16373379405650157, 1429 | "x": -0.6204572662333447, 1430 | "v": 1 1431 | }, 1432 | { 1433 | "y": -0.009817250301605185, 1434 | "x": -0.18953347506578, 1435 | "v": 1 1436 | }, 1437 | { 1438 | "y": 0.5603859870094392, 1439 | "x": 0.886754035451822, 1440 | "v": 0 1441 | }, 1442 | { 1443 | "y": -0.018568476961765112, 1444 | "x": -1.0, 1445 | "v": 1 1446 | }, 1447 | { 1448 | "y": 0.9803479101568939, 1449 | "x": 0.729226972443392, 1450 | "v": 0 1451 | }, 1452 | { 1453 | "y": -0.2726030168818955, 1454 | "x": -0.6544884384916364, 1455 | "v": 1 1456 | }, 1457 | { 1458 | "y": 0.07523033844940996, 1459 | "x": 0.6834984905357009, 1460 | "v": 0 1461 | }, 1462 | { 1463 | "y": -0.2905125623249374, 1464 | "x": 0.060250749205171594, 1465 | "v": 1 1466 | }, 1467 | { 1468 | "y": 0.898338351702701, 1469 | "x": 0.2764008120111423, 1470 | "v": 0 1471 | }, 1472 | { 1473 | "y": -0.3903033221937855, 1474 | "x": 0.22154288010979717, 1475 | "v": 0 1476 | }, 1477 | { 1478 | "y": 0.14751663761883882, 1479 | "x": 0.3791140720121098, 1480 | "v": 0 1481 | }, 1482 | { 1483 | "y": -0.2306910325898931, 1484 | "x": -0.03934660957464253, 1485 | "v": 1 1486 | }, 1487 | { 1488 | "y": 0.4465075772746412, 1489 | "x": -0.052208893988872074, 1490 | "v": 1 1491 | }, 1492 | { 1493 | "y": -0.4351449189507207, 1494 | "x": -0.6491628758328065, 1495 | "v": 1 1496 | }, 1497 | { 1498 | "y": -0.30896041569659716, 1499 | "x": 0.3814189306853588, 1500 | "v": 0 1501 | }, 1502 | { 1503 | "y": 0.5923357685911079, 1504 | "x": 0.18359049888083678, 1505 | "v": 0 1506 | }, 1507 | { 1508 | "y": 0.09594382898391896, 1509 | "x": -0.7025478858548615, 1510 | "v": 1 1511 | }, 1512 | { 1513 | "y": 0.6310736380413882, 1514 | "x": 0.81557315721523, 1515 | "v": 0 1516 | }, 1517 | { 1518 | "y": -0.5105028392837385, 1519 | "x": 0.4582576905279854, 1520 | "v": 0 1521 | }, 1522 | { 1523 | "y": -0.4734284366808167, 1524 | "x": 0.5917499881122796, 1525 | "v": 0 1526 | }, 1527 | { 1528 | "y": -0.05653560374728417, 1529 | "x": 0.35637313083396327, 1530 | "v": 0 1531 | }, 1532 | { 1533 | "y": -0.20742735621213548, 1534 | "x": 0.4757652242794501, 1535 | "v": 0 1536 | } 1537 | ] 1538 | }, 1539 | "xmin": -1.0, 1540 | "ymin": -1.0 1541 | }, 1542 | { 1543 | "name": "spirals", 1544 | "ymax": 1.0, 1545 | "xmax": 1.0, 1546 | "data": { 1547 | "test": [ 1548 | { 1549 | "y": -0.9381761549183779, 1550 | "x": -0.3645072533384244, 1551 | "v": 0.0 1552 | }, 1553 | { 1554 | "y": 0.15440810583108244, 1555 | "x": -0.41773035413264215, 1556 | "v": 0.0 1557 | }, 1558 | { 1559 | "y": 0.7037962558934738, 1560 | "x": -0.14294030546172887, 1561 | "v": 0.0 1562 | }, 1563 | { 1564 | "y": 0.20640338831267968, 1565 | "x": -0.6708771599599904, 1566 | "v": 1.0 1567 | }, 1568 | { 1569 | "y": -0.7536289969889819, 1570 | "x": -0.04354701737242117, 1571 | "v": 1.0 1572 | }, 1573 | { 1574 | "y": -0.23323670440330269, 1575 | "x": 0.5333048390529125, 1576 | "v": 1.0 1577 | }, 1578 | { 1579 | "y": -0.36924332814396876, 1580 | "x": 0.06456683659364071, 1581 | "v": 0.0 1582 | }, 1583 | { 1584 | "y": 0.3382726596207488, 1585 | "x": 0.7883130124442712, 1586 | "v": 1.0 1587 | }, 1588 | { 1589 | "y": -0.24995778173551364, 1590 | "x": 0.5083943323003544, 1591 | "v": 1.0 1592 | }, 1593 | { 1594 | "y": -0.9927955921105986, 1595 | "x": -0.10015987087897615, 1596 | "v": 0.0 1597 | }, 1598 | { 1599 | "y": -0.8511664698582142, 1600 | "x": 0.21440489127551166, 1601 | "v": 0.0 1602 | }, 1603 | { 1604 | "y": 0.21757079072411956, 1605 | "x": -0.16377598604850085, 1606 | "v": 1.0 1607 | }, 1608 | { 1609 | "y": 0.8528664735144551, 1610 | "x": -0.051195222860153766, 1611 | "v": 1.0 1612 | }, 1613 | { 1614 | "y": 0.3288069189163305, 1615 | "x": -0.9899170903386487, 1616 | "v": 0.0 1617 | }, 1618 | { 1619 | "y": -0.7484315782699279, 1620 | "x": -0.3233826459403909, 1621 | "v": 1.0 1622 | }, 1623 | { 1624 | "y": -0.21852943868228647, 1625 | "x": -0.7150724718400654, 1626 | "v": 1.0 1627 | }, 1628 | { 1629 | "y": -0.21043531302741436, 1630 | "x": 0.7930107839622904, 1631 | "v": 0.0 1632 | }, 1633 | { 1634 | "y": 0.8408223566658686, 1635 | "x": -0.26700070184973235, 1636 | "v": 1.0 1637 | }, 1638 | { 1639 | "y": -0.2563500844614952, 1640 | "x": 0.14854981022323033, 1641 | "v": 0.0 1642 | }, 1643 | { 1644 | "y": 0.3195625279265881, 1645 | "x": -0.9823204595885965, 1646 | "v": 0.0 1647 | }, 1648 | { 1649 | "y": -0.1727246981951689, 1650 | "x": -0.7680530102227002, 1651 | "v": 1.0 1652 | }, 1653 | { 1654 | "y": -0.05937811877193788, 1655 | "x": -0.9902175335631703, 1656 | "v": 0.0 1657 | }, 1658 | { 1659 | "y": -0.07947470658104405, 1660 | "x": -0.23909959297243943, 1661 | "v": 1.0 1662 | }, 1663 | { 1664 | "y": -0.2088128013836531, 1665 | "x": -0.4412416656407384, 1666 | "v": 0.0 1667 | }, 1668 | { 1669 | "y": -0.8671053147473553, 1670 | "x": -0.05142435685228319, 1671 | "v": 0.0 1672 | }, 1673 | { 1674 | "y": 0.5587730673082925, 1675 | "x": -0.3533135028003008, 1676 | "v": 0.0 1677 | }, 1678 | { 1679 | "y": -0.4830605127145674, 1680 | "x": 0.6659463908564474, 1681 | "v": 0.0 1682 | }, 1683 | { 1684 | "y": -0.9758397653357329, 1685 | "x": -0.10019830619716885, 1686 | "v": 0.0 1687 | }, 1688 | { 1689 | "y": -0.6390232807163607, 1690 | "x": 0.7123834359204266, 1691 | "v": 1.0 1692 | }, 1693 | { 1694 | "y": 0.18636685770340544, 1695 | "x": 0.8328010483288049, 1696 | "v": 1.0 1697 | }, 1698 | { 1699 | "y": 0.16768854653739051, 1700 | "x": -0.9001003548048193, 1701 | "v": 0.0 1702 | }, 1703 | { 1704 | "y": 0.2575380876697184, 1705 | "x": -0.9247856904462827, 1706 | "v": 0.0 1707 | }, 1708 | { 1709 | "y": 0.7810772348942066, 1710 | "x": 0.18241719258147104, 1711 | "v": 0.0 1712 | }, 1713 | { 1714 | "y": -0.9364169370673063, 1715 | "x": 0.1588005607602847, 1716 | "v": 0.0 1717 | }, 1718 | { 1719 | "y": -0.2138866417509927, 1720 | "x": -0.14355969768489807, 1721 | "v": 1.0 1722 | }, 1723 | { 1724 | "y": -0.43859783447562395, 1725 | "x": 0.9246482479633209, 1726 | "v": 1.0 1727 | }, 1728 | { 1729 | "y": -0.7683497643402076, 1730 | "x": -0.022170265260476607, 1731 | "v": 1.0 1732 | }, 1733 | { 1734 | "y": 0.11804176284595602, 1735 | "x": -0.2856528720143674, 1736 | "v": 1.0 1737 | }, 1738 | { 1739 | "y": 0.830101017135227, 1740 | "x": -0.16747056808874394, 1741 | "v": 1.0 1742 | }, 1743 | { 1744 | "y": 0.6515140663389387, 1745 | "x": 0.1796216828042556, 1746 | "v": 0.0 1747 | }, 1748 | { 1749 | "y": 0.08510992111456561, 1750 | "x": 0.2580788917758523, 1751 | "v": 0.0 1752 | }, 1753 | { 1754 | "y": 0.06758683696348156, 1755 | "x": -0.35019812027904884, 1756 | "v": 1.0 1757 | }, 1758 | { 1759 | "y": -0.8920512890432577, 1760 | "x": 0.30506031992969973, 1761 | "v": 0.0 1762 | }, 1763 | { 1764 | "y": -0.000793826857473312, 1765 | "x": 0.7625729012795106, 1766 | "v": 0.0 1767 | }, 1768 | { 1769 | "y": 0.8158650829212006, 1770 | "x": 0.25380229471576743, 1771 | "v": 1.0 1772 | }, 1773 | { 1774 | "y": 0.8527523933157044, 1775 | "x": 0.37541073163616345, 1776 | "v": 1.0 1777 | }, 1778 | { 1779 | "y": -0.25678550446532766, 1780 | "x": 0.6786554043141892, 1781 | "v": 0.0 1782 | }, 1783 | { 1784 | "y": 0.25064798474709593, 1785 | "x": -0.46552413123166436, 1786 | "v": 0.0 1787 | }, 1788 | { 1789 | "y": 0.30063142278145594, 1790 | "x": 0.048323470382090505, 1791 | "v": 1.0 1792 | }, 1793 | { 1794 | "y": 0.6178453184389379, 1795 | "x": 0.24840930874719813, 1796 | "v": 0.0 1797 | }, 1798 | { 1799 | "y": -0.3268048089112475, 1800 | "x": 0.9129368645060827, 1801 | "v": 1.0 1802 | }, 1803 | { 1804 | "y": -0.19272099259254827, 1805 | "x": -0.6580136701422259, 1806 | "v": 1.0 1807 | }, 1808 | { 1809 | "y": -0.9336904439699079, 1810 | "x": 0.27840146146139055, 1811 | "v": 0.0 1812 | }, 1813 | { 1814 | "y": 0.3095530933343129, 1815 | "x": 0.19573335860391738, 1816 | "v": 1.0 1817 | }, 1818 | { 1819 | "y": -0.32115169151521117, 1820 | "x": 0.4311841906478884, 1821 | "v": 1.0 1822 | }, 1823 | { 1824 | "y": 0.20878672093508022, 1825 | "x": 0.6963263494293885, 1826 | "v": 0.0 1827 | }, 1828 | { 1829 | "y": 0.15858543160713534, 1830 | "x": -0.8074216242611822, 1831 | "v": 1.0 1832 | }, 1833 | { 1834 | "y": 0.6468018943627034, 1835 | "x": 0.08625817930221147, 1836 | "v": 0.0 1837 | }, 1838 | { 1839 | "y": 0.5573900351981618, 1840 | "x": -0.6008072023115232, 1841 | "v": 1.0 1842 | }, 1843 | { 1844 | "y": -0.20979998308868197, 1845 | "x": -0.9215597371514461, 1846 | "v": 0.0 1847 | }, 1848 | { 1849 | "y": 0.30149509957731935, 1850 | "x": -0.12657474826070547, 1851 | "v": 1.0 1852 | }, 1853 | { 1854 | "y": -0.10874059511247325, 1855 | "x": 0.21138964979483976, 1856 | "v": 0.0 1857 | }, 1858 | { 1859 | "y": -0.4149948146880734, 1860 | "x": -0.2056769385517231, 1861 | "v": 0.0 1862 | }, 1863 | { 1864 | "y": 0.5131715489712276, 1865 | "x": -0.9073555763787389, 1866 | "v": 0.0 1867 | }, 1868 | { 1869 | "y": 0.7108001593455695, 1870 | "x": -0.025486480945283163, 1871 | "v": 0.0 1872 | }, 1873 | { 1874 | "y": -0.3700427303363537, 1875 | "x": 0.38716903319537144, 1876 | "v": 1.0 1877 | }, 1878 | { 1879 | "y": -0.3632262174096097, 1880 | "x": -0.19884512279777966, 1881 | "v": 0.0 1882 | }, 1883 | { 1884 | "y": 0.6913913806244867, 1885 | "x": -0.36604488024115656, 1886 | "v": 1.0 1887 | }, 1888 | { 1889 | "y": -0.022933193624558812, 1890 | "x": 0.7475530687365846, 1891 | "v": 0.0 1892 | }, 1893 | { 1894 | "y": -0.2097549979072556, 1895 | "x": -0.176649977643913, 1896 | "v": 1.0 1897 | }, 1898 | { 1899 | "y": -0.22368280939061203, 1900 | "x": -0.8926668570128801, 1901 | "v": 0.0 1902 | }, 1903 | { 1904 | "y": 0.7912947767885881, 1905 | "x": -0.36859394544503943, 1906 | "v": 1.0 1907 | }, 1908 | { 1909 | "y": -0.12291951316375582, 1910 | "x": -0.03863904024757425, 1911 | "v": 1.0 1912 | }, 1913 | { 1914 | "y": 0.7347624248904601, 1915 | "x": 0.056648270897975195, 1916 | "v": 0.0 1917 | }, 1918 | { 1919 | "y": -0.3387422174878346, 1920 | "x": 0.9115697341355293, 1921 | "v": 1.0 1922 | }, 1923 | { 1924 | "y": 0.8965594685092808, 1925 | "x": 0.2600474972309932, 1926 | "v": 1.0 1927 | }, 1928 | { 1929 | "y": -0.3427517832857918, 1930 | "x": -0.33150809446390417, 1931 | "v": 0.0 1932 | }, 1933 | { 1934 | "y": 0.8964993383303019, 1935 | "x": 0.2839741382195864, 1936 | "v": 1.0 1937 | }, 1938 | { 1939 | "y": -0.1050257843529594, 1940 | "x": -0.7325465513355283, 1941 | "v": 1.0 1942 | }, 1943 | { 1944 | "y": -0.4173320585231317, 1945 | "x": -0.6339960717924373, 1946 | "v": 1.0 1947 | } 1948 | ], 1949 | "train": [ 1950 | { 1951 | "y": 0.6375151853733731, 1952 | "x": -0.8911414601640716, 1953 | "v": 0.0 1954 | }, 1955 | { 1956 | "y": 0.2029620186577712, 1957 | "x": 0.7295322948458731, 1958 | "v": 0.0 1959 | }, 1960 | { 1961 | "y": 0.6210067412363163, 1962 | "x": 0.11952718897978643, 1963 | "v": 0.0 1964 | }, 1965 | { 1966 | "y": -0.5370792901453572, 1967 | "x": 0.3397345735953685, 1968 | "v": 1.0 1969 | }, 1970 | { 1971 | "y": 0.34072168508340583, 1972 | "x": 0.043673655235207054, 1973 | "v": 1.0 1974 | }, 1975 | { 1976 | "y": 0.5206027672285256, 1977 | "x": -0.2754300221181648, 1978 | "v": 0.0 1979 | }, 1980 | { 1981 | "y": 0.712786656871504, 1982 | "x": -0.5158443554206502, 1983 | "v": 1.0 1984 | }, 1985 | { 1986 | "y": 0.14309855975144736, 1987 | "x": 0.08003103138549306, 1988 | "v": 0.0 1989 | }, 1990 | { 1991 | "y": 0.08742231482798779, 1992 | "x": -0.7900916108532243, 1993 | "v": 1.0 1994 | }, 1995 | { 1996 | "y": -0.7141716313190032, 1997 | "x": 0.38499838340831616, 1998 | "v": 0.0 1999 | }, 2000 | { 2001 | "y": -0.8618435705891676, 2002 | "x": -0.33829031564223977, 2003 | "v": 0.0 2004 | }, 2005 | { 2006 | "y": -0.6424191662452727, 2007 | "x": -0.22531248828162131, 2008 | "v": 1.0 2009 | }, 2010 | { 2011 | "y": 0.3966212942330114, 2012 | "x": -0.14517618799141574, 2013 | "v": 1.0 2014 | }, 2015 | { 2016 | "y": -0.9725487683560066, 2017 | "x": -0.10070776857420205, 2018 | "v": 0.0 2019 | }, 2020 | { 2021 | "y": 0.3320746816020457, 2022 | "x": 0.5299384870194395, 2023 | "v": 0.0 2024 | }, 2025 | { 2026 | "y": -0.5966151458428096, 2027 | "x": -0.4533363686634928, 2028 | "v": 1.0 2029 | }, 2030 | { 2031 | "y": 0.8910519270060322, 2032 | "x": 0.29053715921735224, 2033 | "v": 1.0 2034 | }, 2035 | { 2036 | "y": -0.3094358032150786, 2037 | "x": -0.20368520046183225, 2038 | "v": 0.0 2039 | }, 2040 | { 2041 | "y": -0.7840300803714528, 2042 | "x": 0.42158295146076563, 2043 | "v": 0.0 2044 | }, 2045 | { 2046 | "y": -0.6481598084741063, 2047 | "x": -0.17991958542870556, 2048 | "v": 1.0 2049 | }, 2050 | { 2051 | "y": 0.35959297406298063, 2052 | "x": -0.931140167423526, 2053 | "v": 0.0 2054 | }, 2055 | { 2056 | "y": -0.09612843141691163, 2057 | "x": -1.0, 2058 | "v": 0.0 2059 | }, 2060 | { 2061 | "y": 0.30511637746436615, 2062 | "x": 0.1141678760328928, 2063 | "v": 1.0 2064 | }, 2065 | { 2066 | "y": 0.947824325457234, 2067 | "x": 0.14749326892633818, 2068 | "v": 1.0 2069 | }, 2070 | { 2071 | "y": -0.09533938273762976, 2072 | "x": 0.9398215165876145, 2073 | "v": 1.0 2074 | }, 2075 | { 2076 | "y": -0.6697487972741989, 2077 | "x": 0.018361915703604348, 2078 | "v": 1.0 2079 | }, 2080 | { 2081 | "y": -0.3269054978491265, 2082 | "x": -0.8133499406485103, 2083 | "v": 0.0 2084 | }, 2085 | { 2086 | "y": 0.08730851782235227, 2087 | "x": 0.05674073997211093, 2088 | "v": 0.0 2089 | }, 2090 | { 2091 | "y": -0.5027555106135584, 2092 | "x": 0.7587963232074311, 2093 | "v": 1.0 2094 | }, 2095 | { 2096 | "y": -0.7004437186299578, 2097 | "x": -0.1304749448203355, 2098 | "v": 1.0 2099 | }, 2100 | { 2101 | "y": 0.8597922792471306, 2102 | "x": -0.1925208354634682, 2103 | "v": 1.0 2104 | }, 2105 | { 2106 | "y": 0.24048360191954798, 2107 | "x": 0.736212335894131, 2108 | "v": 0.0 2109 | }, 2110 | { 2111 | "y": -0.7046161544659355, 2112 | "x": 0.0069323145927839835, 2113 | "v": 1.0 2114 | }, 2115 | { 2116 | "y": 0.7725250793593621, 2117 | "x": -0.4506042720365201, 2118 | "v": 1.0 2119 | }, 2120 | { 2121 | "y": -0.27334668877326973, 2122 | "x": -0.869297541573562, 2123 | "v": 0.0 2124 | }, 2125 | { 2126 | "y": -0.7284200411551818, 2127 | "x": -0.44775103060557786, 2128 | "v": 1.0 2129 | }, 2130 | { 2131 | "y": -1.0, 2132 | "x": 0.04336347847323996, 2133 | "v": 0.0 2134 | }, 2135 | { 2136 | "y": 0.7471230795915991, 2137 | "x": 0.04444159489577082, 2138 | "v": 0.0 2139 | }, 2140 | { 2141 | "y": 0.8496126352677713, 2142 | "x": 0.23677361254283902, 2143 | "v": 1.0 2144 | }, 2145 | { 2146 | "y": 0.720778073784641, 2147 | "x": -0.01516536777352584, 2148 | "v": 0.0 2149 | }, 2150 | { 2151 | "y": -0.15631180471350714, 2152 | "x": 0.750765848656451, 2153 | "v": 0.0 2154 | }, 2155 | { 2156 | "y": -0.18706929113484005, 2157 | "x": 0.4829734210339607, 2158 | "v": 1.0 2159 | }, 2160 | { 2161 | "y": -0.6635753635563213, 2162 | "x": -0.08665950816573043, 2163 | "v": 1.0 2164 | }, 2165 | { 2166 | "y": 0.06629314911300765, 2167 | "x": -0.7276194240252384, 2168 | "v": 1.0 2169 | }, 2170 | { 2171 | "y": 0.6755589385023804, 2172 | "x": -0.8402098927797325, 2173 | "v": 0.0 2174 | }, 2175 | { 2176 | "y": 0.7157416381468669, 2177 | "x": 0.3556024940797724, 2178 | "v": 0.0 2179 | }, 2180 | { 2181 | "y": 0.5645537847979258, 2182 | "x": -0.6937422687845283, 2183 | "v": 1.0 2184 | }, 2185 | { 2186 | "y": -0.05027177445497555, 2187 | "x": 0.5147235810513884, 2188 | "v": 1.0 2189 | }, 2190 | { 2191 | "y": 0.34030204903396055, 2192 | "x": -0.4829397801272829, 2193 | "v": 0.0 2194 | }, 2195 | { 2196 | "y": -0.8746023542834169, 2197 | "x": -0.3307673832549023, 2198 | "v": 0.0 2199 | }, 2200 | { 2201 | "y": -0.17192833430475618, 2202 | "x": 1.0, 2203 | "v": 1.0 2204 | }, 2205 | { 2206 | "y": 0.04051909142557997, 2207 | "x": -0.4830360757666041, 2208 | "v": 0.0 2209 | }, 2210 | { 2211 | "y": 0.5914213533918027, 2212 | "x": 0.4918926817375626, 2213 | "v": 0.0 2214 | }, 2215 | { 2216 | "y": -0.24402801183797507, 2217 | "x": -0.6271552158821299, 2218 | "v": 1.0 2219 | }, 2220 | { 2221 | "y": -0.47708583852435815, 2222 | "x": 0.014064928034535962, 2223 | "v": 0.0 2224 | }, 2225 | { 2226 | "y": 0.8392696217142561, 2227 | "x": -0.3743755688481458, 2228 | "v": 1.0 2229 | }, 2230 | { 2231 | "y": 0.737261392803986, 2232 | "x": -0.7597011621545623, 2233 | "v": 0.0 2234 | }, 2235 | { 2236 | "y": 0.8949679431715774, 2237 | "x": -0.21944693300452278, 2238 | "v": 1.0 2239 | }, 2240 | { 2241 | "y": -0.6360604388804073, 2242 | "x": 0.4838881976983007, 2243 | "v": 0.0 2244 | }, 2245 | { 2246 | "y": 1.0, 2247 | "x": -0.01482433984089837, 2248 | "v": 1.0 2249 | }, 2250 | { 2251 | "y": 0.9274526739671565, 2252 | "x": -0.09663598621879554, 2253 | "v": 1.0 2254 | }, 2255 | { 2256 | "y": -0.4243250964170435, 2257 | "x": 0.8454344153833162, 2258 | "v": 1.0 2259 | }, 2260 | { 2261 | "y": -0.6601623096751723, 2262 | "x": 0.271620331867348, 2263 | "v": 1.0 2264 | }, 2265 | { 2266 | "y": -0.02820050742832725, 2267 | "x": -0.9931907300388365, 2268 | "v": 0.0 2269 | }, 2270 | { 2271 | "y": -0.8513365823655568, 2272 | "x": 0.09344675000148528, 2273 | "v": 0.0 2274 | }, 2275 | { 2276 | "y": 0.2077737694462547, 2277 | "x": -0.9371713479126278, 2278 | "v": 0.0 2279 | }, 2280 | { 2281 | "y": 0.4551138370727097, 2282 | "x": -0.38623703694945666, 2283 | "v": 0.0 2284 | }, 2285 | { 2286 | "y": 0.2846328224860031, 2287 | "x": 0.8044663530312972, 2288 | "v": 1.0 2289 | }, 2290 | { 2291 | "y": -0.3384344162113253, 2292 | "x": -0.02812438134723172, 2293 | "v": 0.0 2294 | }, 2295 | { 2296 | "y": -0.4154203516380246, 2297 | "x": 0.7218146276332922, 2298 | "v": 0.0 2299 | }, 2300 | { 2301 | "y": -0.6756947835022598, 2302 | "x": -0.2325519920403566, 2303 | "v": 1.0 2304 | }, 2305 | { 2306 | "y": -0.40643625897434343, 2307 | "x": 0.4338890102541295, 2308 | "v": 1.0 2309 | }, 2310 | { 2311 | "y": -0.8575671518398214, 2312 | "x": 0.3461555178037614, 2313 | "v": 0.0 2314 | }, 2315 | { 2316 | "y": 0.24160648908651927, 2317 | "x": -0.39227672668976954, 2318 | "v": 0.0 2319 | }, 2320 | { 2321 | "y": -0.8762939768398799, 2322 | "x": -0.399709279680291, 2323 | "v": 0.0 2324 | }, 2325 | { 2326 | "y": -0.840746250458836, 2327 | "x": -0.3738049966907637, 2328 | "v": 0.0 2329 | }, 2330 | { 2331 | "y": -0.14997795167727523, 2332 | "x": 0.8334910477057746, 2333 | "v": 1.0 2334 | }, 2335 | { 2336 | "y": 0.4351693068906266, 2337 | "x": 0.225531987629922, 2338 | "v": 1.0 2339 | }, 2340 | { 2341 | "y": 0.27076383979144736, 2342 | "x": -0.3905909025620973, 2343 | "v": 0.0 2344 | }, 2345 | { 2346 | "y": -0.6732865499044629, 2347 | "x": 0.589466981731328, 2348 | "v": 0.0 2349 | }, 2350 | { 2351 | "y": 0.9438533315977191, 2352 | "x": -0.12117808025305887, 2353 | "v": 1.0 2354 | }, 2355 | { 2356 | "y": -0.06386517826666571, 2357 | "x": 0.9459171598906158, 2358 | "v": 1.0 2359 | }, 2360 | { 2361 | "y": 0.8963536291326477, 2362 | "x": 0.11616480028942666, 2363 | "v": 1.0 2364 | }, 2365 | { 2366 | "y": 0.5438924213976604, 2367 | "x": -0.7186467826743612, 2368 | "v": 1.0 2369 | }, 2370 | { 2371 | "y": -0.9720238996187466, 2372 | "x": -0.29198513194572717, 2373 | "v": 0.0 2374 | }, 2375 | { 2376 | "y": 0.2801454691310523, 2377 | "x": 0.6831294951960218, 2378 | "v": 0.0 2379 | }, 2380 | { 2381 | "y": -0.48315245825871556, 2382 | "x": 0.3991013896720017, 2383 | "v": 1.0 2384 | }, 2385 | { 2386 | "y": 0.23322677535589031, 2387 | "x": 0.09926439514119223, 2388 | "v": 0.0 2389 | }, 2390 | { 2391 | "y": 0.2491566200908888, 2392 | "x": 0.9553641655468923, 2393 | "v": 1.0 2394 | }, 2395 | { 2396 | "y": -0.29515080344304123, 2397 | "x": 0.7785732550854336, 2398 | "v": 0.0 2399 | }, 2400 | { 2401 | "y": 0.05691094658539608, 2402 | "x": 0.2084579272666267, 2403 | "v": 0.0 2404 | }, 2405 | { 2406 | "y": 0.7667029550931805, 2407 | "x": 0.3143665910685831, 2408 | "v": 0.0 2409 | }, 2410 | { 2411 | "y": -0.39349012316313037, 2412 | "x": -0.8719462054525882, 2413 | "v": 0.0 2414 | }, 2415 | { 2416 | "y": -0.15104059862536934, 2417 | "x": 0.6900980497762512, 2418 | "v": 0.0 2419 | }, 2420 | { 2421 | "y": -0.44269601535252134, 2422 | "x": 0.36255045287392673, 2423 | "v": 1.0 2424 | }, 2425 | { 2426 | "y": 0.45091098730926027, 2427 | "x": -0.040551188964784046, 2428 | "v": 1.0 2429 | }, 2430 | { 2431 | "y": 0.21682547985846057, 2432 | "x": -0.7582373060644344, 2433 | "v": 1.0 2434 | }, 2435 | { 2436 | "y": -0.2163640853582618, 2437 | "x": 0.2589444427775702, 2438 | "v": 0.0 2439 | }, 2440 | { 2441 | "y": 0.05540858511633684, 2442 | "x": -0.8070265966333229, 2443 | "v": 1.0 2444 | }, 2445 | { 2446 | "y": 0.19718142561319296, 2447 | "x": 0.39429666633932126, 2448 | "v": 1.0 2449 | }, 2450 | { 2451 | "y": -0.3718001799195303, 2452 | "x": 0.07441100124282318, 2453 | "v": 0.0 2454 | }, 2455 | { 2456 | "y": -0.821005767533188, 2457 | "x": 0.30660829939821865, 2458 | "v": 0.0 2459 | }, 2460 | { 2461 | "y": -0.0928129317568479, 2462 | "x": 0.907820937673224, 2463 | "v": 1.0 2464 | }, 2465 | { 2466 | "y": -0.6038850899839645, 2467 | "x": 0.12206673598443207, 2468 | "v": 1.0 2469 | }, 2470 | { 2471 | "y": 0.1345567104941654, 2472 | "x": 0.9402131915318817, 2473 | "v": 1.0 2474 | }, 2475 | { 2476 | "y": -0.8299779888607526, 2477 | "x": 0.6806782353535688, 2478 | "v": 1.0 2479 | }, 2480 | { 2481 | "y": -0.8958690185925019, 2482 | "x": -0.5191157913254879, 2483 | "v": 0.0 2484 | }, 2485 | { 2486 | "y": -0.02453788790998357, 2487 | "x": 0.9869527530519959, 2488 | "v": 1.0 2489 | }, 2490 | { 2491 | "y": 0.5483298225328546, 2492 | "x": -0.34024710383291035, 2493 | "v": 0.0 2494 | }, 2495 | { 2496 | "y": 0.16054600583376177, 2497 | "x": -0.4970729680110847, 2498 | "v": 0.0 2499 | }, 2500 | { 2501 | "y": 0.30505986622091674, 2502 | "x": 0.7992815089601413, 2503 | "v": 1.0 2504 | }, 2505 | { 2506 | "y": 0.808049597029197, 2507 | "x": 0.44100529505358677, 2508 | "v": 1.0 2509 | }, 2510 | { 2511 | "y": 0.6928727657273677, 2512 | "x": 0.11981584870896933, 2513 | "v": 0.0 2514 | }, 2515 | { 2516 | "y": -0.7061626485178578, 2517 | "x": -0.2505573161658614, 2518 | "v": 1.0 2519 | }, 2520 | { 2521 | "y": 0.12730958409717474, 2522 | "x": -0.9771531582097368, 2523 | "v": 0.0 2524 | }, 2525 | { 2526 | "y": 0.3586945848907839, 2527 | "x": 0.16401827140795944, 2528 | "v": 1.0 2529 | }, 2530 | { 2531 | "y": 0.4036260674859631, 2532 | "x": -0.9246746590077899, 2533 | "v": 0.0 2534 | }, 2535 | { 2536 | "y": -0.4294577900532207, 2537 | "x": 0.02951155594562782, 2538 | "v": 0.0 2539 | }, 2540 | { 2541 | "y": -0.09106175360217872, 2542 | "x": -0.31704761087562405, 2543 | "v": 1.0 2544 | }, 2545 | { 2546 | "y": -0.6509245314645375, 2547 | "x": 0.7894106180024929, 2548 | "v": 1.0 2549 | } 2550 | ] 2551 | }, 2552 | "xmin": -1.0, 2553 | "ymin": -1.0 2554 | }, 2555 | { 2556 | "name": "xor", 2557 | "ymax": 1.0, 2558 | "xmax": 1.0, 2559 | "data": { 2560 | "test": [ 2561 | { 2562 | "y": -0.6569188086426635, 2563 | "x": -0.3509222118619961, 2564 | "v": 0 2565 | }, 2566 | { 2567 | "y": -0.32418769416401405, 2568 | "x": -0.0058718422088559485, 2569 | "v": 0 2570 | }, 2571 | { 2572 | "y": 0.07280237666173339, 2573 | "x": -0.8138891175799908, 2574 | "v": 1 2575 | }, 2576 | { 2577 | "y": 0.7495747155703263, 2578 | "x": -0.12813622467450447, 2579 | "v": 1 2580 | }, 2581 | { 2582 | "y": 0.3929402370596491, 2583 | "x": -0.43011432197520916, 2584 | "v": 1 2585 | }, 2586 | { 2587 | "y": -0.011789275766130425, 2588 | "x": -0.22230995209107873, 2589 | "v": 1 2590 | }, 2591 | { 2592 | "y": -0.35379308661009157, 2593 | "x": -0.27402412407705967, 2594 | "v": 0 2595 | }, 2596 | { 2597 | "y": 0.9086940603090274, 2598 | "x": -0.3596930243362779, 2599 | "v": 1 2600 | }, 2601 | { 2602 | "y": 0.46536292443707805, 2603 | "x": -1.0, 2604 | "v": 1 2605 | }, 2606 | { 2607 | "y": 0.10221595991939503, 2608 | "x": 0.9327913632870652, 2609 | "v": 0 2610 | }, 2611 | { 2612 | "y": 0.42137787264311033, 2613 | "x": 0.5235008777427814, 2614 | "v": 0 2615 | }, 2616 | { 2617 | "y": -0.03894587268917893, 2618 | "x": -0.12242968412445654, 2619 | "v": 0 2620 | }, 2621 | { 2622 | "y": 0.4841686996127976, 2623 | "x": -0.21865258985976954, 2624 | "v": 1 2625 | }, 2626 | { 2627 | "y": 0.20070266472241705, 2628 | "x": -0.7694629034014948, 2629 | "v": 1 2630 | }, 2631 | { 2632 | "y": -0.6159056615630694, 2633 | "x": -0.05403710768168035, 2634 | "v": 0 2635 | }, 2636 | { 2637 | "y": 0.2346382509794671, 2638 | "x": -0.12641268918658732, 2639 | "v": 1 2640 | }, 2641 | { 2642 | "y": -0.37146795507554564, 2643 | "x": -0.5038045105578246, 2644 | "v": 0 2645 | }, 2646 | { 2647 | "y": -0.37750640399119273, 2648 | "x": -0.21326598778871542, 2649 | "v": 0 2650 | }, 2651 | { 2652 | "y": -0.8249599909494059, 2653 | "x": 1.0, 2654 | "v": 1 2655 | }, 2656 | { 2657 | "y": -0.8917443736258762, 2658 | "x": -0.42633105035289975, 2659 | "v": 0 2660 | }, 2661 | { 2662 | "y": 0.49498615887263164, 2663 | "x": 0.9517572620040842, 2664 | "v": 0 2665 | }, 2666 | { 2667 | "y": -0.3140225303918336, 2668 | "x": -0.3195917628329227, 2669 | "v": 0 2670 | }, 2671 | { 2672 | "y": -0.6478878677234826, 2673 | "x": -0.09262415239953836, 2674 | "v": 0 2675 | }, 2676 | { 2677 | "y": 0.6446739146873315, 2678 | "x": 0.6093599127137279, 2679 | "v": 0 2680 | }, 2681 | { 2682 | "y": -0.5186698386076087, 2683 | "x": 0.11177595141531427, 2684 | "v": 1 2685 | }, 2686 | { 2687 | "y": 0.2436023324858534, 2688 | "x": 0.0705979040038125, 2689 | "v": 0 2690 | }, 2691 | { 2692 | "y": 0.31140469226906387, 2693 | "x": -0.440772039221347, 2694 | "v": 1 2695 | }, 2696 | { 2697 | "y": -0.2751792169515149, 2698 | "x": -0.09366451581099966, 2699 | "v": 0 2700 | }, 2701 | { 2702 | "y": -0.22251124370886277, 2703 | "x": 0.3209450706312671, 2704 | "v": 1 2705 | }, 2706 | { 2707 | "y": 0.6226311434315503, 2708 | "x": 0.8316602773257704, 2709 | "v": 0 2710 | }, 2711 | { 2712 | "y": -0.152249810045461, 2713 | "x": 0.2806184881732856, 2714 | "v": 1 2715 | }, 2716 | { 2717 | "y": 0.3300668379163605, 2718 | "x": 0.12649196022207265, 2719 | "v": 0 2720 | }, 2721 | { 2722 | "y": 0.06519791669952313, 2723 | "x": 0.5079021042019298, 2724 | "v": 0 2725 | }, 2726 | { 2727 | "y": 0.039432164529151104, 2728 | "x": 0.10644951892421473, 2729 | "v": 0 2730 | }, 2731 | { 2732 | "y": -0.02452026586457945, 2733 | "x": -0.5630986703394687, 2734 | "v": 1 2735 | }, 2736 | { 2737 | "y": 0.6444129959946847, 2738 | "x": -0.11415218124774584, 2739 | "v": 0 2740 | }, 2741 | { 2742 | "y": -0.0005401190911514808, 2743 | "x": -0.45493764269000403, 2744 | "v": 1 2745 | }, 2746 | { 2747 | "y": 0.20885590797854636, 2748 | "x": -0.2592681504762643, 2749 | "v": 1 2750 | }, 2751 | { 2752 | "y": 0.022513776821801557, 2753 | "x": 0.22039318287159548, 2754 | "v": 0 2755 | }, 2756 | { 2757 | "y": -1.0, 2758 | "x": -0.41651134767341214, 2759 | "v": 0 2760 | } 2761 | ], 2762 | "train": [ 2763 | { 2764 | "y": 0.032048781117076874, 2765 | "x": -0.03244645249643896, 2766 | "v": 0 2767 | }, 2768 | { 2769 | "y": 0.12623424002402683, 2770 | "x": -0.29377809017673995, 2771 | "v": 1 2772 | }, 2773 | { 2774 | "y": 0.36424954071271753, 2775 | "x": 0.12451837136866017, 2776 | "v": 0 2777 | }, 2778 | { 2779 | "y": 0.31068797207180854, 2780 | "x": -0.33530182421774835, 2781 | "v": 1 2782 | }, 2783 | { 2784 | "y": 0.026435998015335693, 2785 | "x": -0.17928870614491788, 2786 | "v": 1 2787 | }, 2788 | { 2789 | "y": 0.04466886583899177, 2790 | "x": -0.3209976107329402, 2791 | "v": 0 2792 | }, 2793 | { 2794 | "y": 0.2697914499287364, 2795 | "x": 0.5992018344832646, 2796 | "v": 0 2797 | }, 2798 | { 2799 | "y": -0.025543512455270645, 2800 | "x": -0.271265457197045, 2801 | "v": 1 2802 | }, 2803 | { 2804 | "y": -0.013467613613871277, 2805 | "x": -0.09365072409769015, 2806 | "v": 0 2807 | }, 2808 | { 2809 | "y": -0.21562286894875526, 2810 | "x": -0.03723470220603209, 2811 | "v": 1 2812 | }, 2813 | { 2814 | "y": -0.2678914539687459, 2815 | "x": -0.8165838740951948, 2816 | "v": 0 2817 | }, 2818 | { 2819 | "y": 0.0767883262329867, 2820 | "x": 0.4729394138490046, 2821 | "v": 1 2822 | }, 2823 | { 2824 | "y": -0.048200198332509214, 2825 | "x": -0.003467290786834165, 2826 | "v": 1 2827 | }, 2828 | { 2829 | "y": -0.11236311316772996, 2830 | "x": -0.238929638675907, 2831 | "v": 0 2832 | }, 2833 | { 2834 | "y": 0.12475215393746586, 2835 | "x": 0.5169194250573603, 2836 | "v": 1 2837 | }, 2838 | { 2839 | "y": -0.5579508576227235, 2840 | "x": 0.3597592369048235, 2841 | "v": 1 2842 | }, 2843 | { 2844 | "y": 0.23514741775789538, 2845 | "x": 0.5222215897595477, 2846 | "v": 0 2847 | }, 2848 | { 2849 | "y": 0.04770560087230402, 2850 | "x": 0.41797823761676245, 2851 | "v": 0 2852 | }, 2853 | { 2854 | "y": -0.39260548370648896, 2855 | "x": 0.34843108298245307, 2856 | "v": 1 2857 | }, 2858 | { 2859 | "y": -0.06630805103772475, 2860 | "x": -0.15940773763968996, 2861 | "v": 1 2862 | }, 2863 | { 2864 | "y": 0.7738714992202522, 2865 | "x": -0.2678275077328863, 2866 | "v": 1 2867 | }, 2868 | { 2869 | "y": 0.407552342805652, 2870 | "x": 0.9856025551913172, 2871 | "v": 0 2872 | }, 2873 | { 2874 | "y": 0.6181805136079139, 2875 | "x": 0.8999945976707882, 2876 | "v": 0 2877 | }, 2878 | { 2879 | "y": -0.24340442007347296, 2880 | "x": 0.6220278050927961, 2881 | "v": 1 2882 | }, 2883 | { 2884 | "y": -0.3687345900886415, 2885 | "x": 0.745620410111653, 2886 | "v": 1 2887 | }, 2888 | { 2889 | "y": 0.4643047076780482, 2890 | "x": -0.3574535448639691, 2891 | "v": 1 2892 | }, 2893 | { 2894 | "y": 0.2411540233587035, 2895 | "x": 0.1543813451290046, 2896 | "v": 0 2897 | }, 2898 | { 2899 | "y": 0.12758718325992646, 2900 | "x": 0.05295057767502809, 2901 | "v": 1 2902 | }, 2903 | { 2904 | "y": 0.5764896456601734, 2905 | "x": 0.27999661244985585, 2906 | "v": 0 2907 | }, 2908 | { 2909 | "y": -0.22718182862073044, 2910 | "x": 0.12064097127670226, 2911 | "v": 1 2912 | }, 2913 | { 2914 | "y": -0.3836978479076282, 2915 | "x": -0.6232449764023615, 2916 | "v": 0 2917 | }, 2918 | { 2919 | "y": -0.7806578049249315, 2920 | "x": 0.14717579020096605, 2921 | "v": 1 2922 | }, 2923 | { 2924 | "y": -0.1962522982471352, 2925 | "x": 0.29301544627780385, 2926 | "v": 1 2927 | }, 2928 | { 2929 | "y": 0.8736009508390536, 2930 | "x": 0.02666548348974862, 2931 | "v": 0 2932 | }, 2933 | { 2934 | "y": 0.260677231366917, 2935 | "x": 0.5156564612360217, 2936 | "v": 0 2937 | }, 2938 | { 2939 | "y": 0.4265150148099839, 2940 | "x": 0.0025905733802802366, 2941 | "v": 1 2942 | }, 2943 | { 2944 | "y": 0.5603262351991198, 2945 | "x": 0.026476544649661093, 2946 | "v": 1 2947 | }, 2948 | { 2949 | "y": -0.24219360525702838, 2950 | "x": -0.10384002640910939, 2951 | "v": 1 2952 | }, 2953 | { 2954 | "y": 0.9002167570337263, 2955 | "x": -0.16928339957654537, 2956 | "v": 1 2957 | }, 2958 | { 2959 | "y": 0.6189771933179962, 2960 | "x": 0.38581817693535325, 2961 | "v": 0 2962 | }, 2963 | { 2964 | "y": 1.0, 2965 | "x": -0.04030256107724828, 2966 | "v": 1 2967 | }, 2968 | { 2969 | "y": -0.032533136390324624, 2970 | "x": 0.7047126090904781, 2971 | "v": 0 2972 | }, 2973 | { 2974 | "y": -0.19335859285002743, 2975 | "x": -0.009710669413329542, 2976 | "v": 1 2977 | }, 2978 | { 2979 | "y": -0.11407118297909113, 2980 | "x": -0.28952277486060696, 2981 | "v": 0 2982 | }, 2983 | { 2984 | "y": 0.8188092240994642, 2985 | "x": 0.3064430388235999, 2986 | "v": 0 2987 | }, 2988 | { 2989 | "y": 0.8446003665783803, 2990 | "x": -0.4622961080449185, 2991 | "v": 1 2992 | }, 2993 | { 2994 | "y": 0.985534683785326, 2995 | "x": -0.533144798711043, 2996 | "v": 1 2997 | }, 2998 | { 2999 | "y": -0.21940625317922158, 3000 | "x": 0.582699559660945, 3001 | "v": 1 3002 | }, 3003 | { 3004 | "y": 0.2401644655865791, 3005 | "x": -0.5522041944438826, 3006 | "v": 1 3007 | }, 3008 | { 3009 | "y": 0.386939289774338, 3010 | "x": -0.5283486992181476, 3011 | "v": 1 3012 | }, 3013 | { 3014 | "y": -0.8048024323010592, 3015 | "x": -0.31833263784849075, 3016 | "v": 0 3017 | }, 3018 | { 3019 | "y": -0.29810758698192275, 3020 | "x": -0.6119327465302289, 3021 | "v": 0 3022 | }, 3023 | { 3024 | "y": -0.19366635990412628, 3025 | "x": 0.2560009748366967, 3026 | "v": 1 3027 | }, 3028 | { 3029 | "y": 0.23911835795989944, 3030 | "x": -0.5400745833063416, 3031 | "v": 1 3032 | }, 3033 | { 3034 | "y": -0.39821302862326047, 3035 | "x": -0.23208236872131538, 3036 | "v": 0 3037 | }, 3038 | { 3039 | "y": -0.41960951152905623, 3040 | "x": 0.1463646424715015, 3041 | "v": 1 3042 | }, 3043 | { 3044 | "y": 0.4811892014029815, 3045 | "x": 0.035503203002436035, 3046 | "v": 0 3047 | }, 3048 | { 3049 | "y": 0.647814981151237, 3050 | "x": 0.8449025859916823, 3051 | "v": 0 3052 | }, 3053 | { 3054 | "y": -0.8749041182399792, 3055 | "x": 0.4439148451658923, 3056 | "v": 1 3057 | }, 3058 | { 3059 | "y": 0.6155036578170363, 3060 | "x": -0.6510779390950155, 3061 | "v": 1 3062 | } 3063 | ] 3064 | }, 3065 | "xmin": -1.0, 3066 | "ymin": -1.0 3067 | } 3068 | ] 3069 | } --------------------------------------------------------------------------------