├── .ipynb_checkpoints ├── Untitled-checkpoint.ipynb ├── evolved-forest-demo-checkpoint.ipynb ├── evolved-forest-demo-implicit-fitness-checkpoint.ipynb ├── evolved-forest-demo-implicit-fitness-multi-oob-checkpoint.ipynb ├── evolved-forest-demo-original-checkpoint.ipynb ├── evolved-forest-demo-scaled-checkpoint.ipynb ├── evolved-forest-demo-variance-implicit-fitness-pressure-checkpoint.ipynb ├── evolved-forest-demo-variance-lexicase-checkpoint.ipynb ├── evolved-forest-demo-variance-only-checkpoint.ipynb ├── evolved-forest-demo-variance-only-objective-checkpoint.ipynb ├── evolved-forest-demo-variance-only-olson-Copy2-checkpoint.ipynb ├── evolved-forest-demo-variance-only-olson-checkpoint.ipynb └── evolved-forest-demo-variance-only-olson-multi-oob-checkpoint.ipynb ├── README.md ├── datasets ├── GAMETES-easy-4x2-way_her-0.4_pop-1600_attribs-100_discrete.csv └── spambase.csv ├── papers └── Lexicase Selection.pdf ├── subsampling ├── .ipynb_checkpoints │ ├── Difficulty Level of Rows - Approach - Results-checkpoint.ipynb │ ├── evolved-forest-demo-checkpoint.ipynb │ ├── evolved-forest-demo-variance-only-objective-checkpoint.ipynb │ ├── evolved-forest-implicit-fitness-multi-oob-checkpoint.ipynb │ ├── evolved-forest-multi-obj-variance-oob-score-checkpoint.ipynb │ ├── evolved-forest-oob-variance-only-checkpoint.ipynb │ ├── evolved-forest-single-obj-implicit-fitness-pressure-checkpoint.ipynb │ ├── evolved-forest-single-obj-true-variance-checkpoint.ipynb │ └── evolved-forest-variance-lexicase-checkpoint.ipynb ├── Difficulty Level of Rows - Approach - Results.ipynb ├── dump │ ├── evolved-forest-demo-variance-only-objective.ipynb │ ├── evolved-forest-demo-variance-only-olson-Copy2.ipynb │ ├── evolved-forest-demo-variance-only.ipynb │ └── evolved-forest-demo.ipynb ├── evolved-forest - Update levels after each row's evaluation-Multi-objectives.ipynb ├── evolved-forest-implicit-fitness-multi-oob.ipynb ├── evolved-forest-multi-obj-variance-oob-score.ipynb ├── evolved-forest-oob-variance-only.ipynb ├── evolved-forest-single-obj-implicit-fitness-pressure.ipynb ├── evolved-forest-single-obj-true-variance.ipynb └── evolved-forest-variance-lexicase.ipynb └── subspacing ├── .ipynb_checkpoints └── evolved-forest-demo-variance-only-subspacing-checkpoint.ipynb ├── dataset_describe.py ├── dataset_describe.pyc └── evolved-forest-demo-variance-only-subspacing.ipynb /.ipynb_checkpoints/Untitled-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [], 3 | "metadata": {}, 4 | "nbformat": 4, 5 | "nbformat_minor": 0 6 | } 7 | -------------------------------------------------------------------------------- /.ipynb_checkpoints/evolved-forest-demo-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import operator\n", 12 | "import itertools\n", 13 | "import numpy as np\n", 14 | "\n", 15 | "from deap import algorithms\n", 16 | "from deap import base\n", 17 | "from deap import creator\n", 18 | "from deap import tools\n", 19 | "from deap import gp\n", 20 | "\n", 21 | "from sklearn.tree import DecisionTreeClassifier\n", 22 | "from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\n", 23 | "from sklearn.datasets import load_digits\n", 24 | "from sklearn.cross_validation import train_test_split\n", 25 | "\n", 26 | "np.seterr(all='raise')\n", 27 | "\n", 28 | "digits = load_digits()\n", 29 | "digit_features, digit_labels = digits.data, digits.target\n", 30 | "X_train, X_test, y_train, y_test = train_test_split(digit_features, digit_labels, stratify=digit_labels,\n", 31 | " train_size=0.75, test_size=0.25)\n", 32 | "\n", 33 | "# defined a new primitive set for strongly typed GP\n", 34 | "pset = gp.PrimitiveSetTyped('MAIN', itertools.repeat(float, digit_features.shape[1]), bool, 'Feature')\n", 35 | "\n", 36 | "# boolean operators\n", 37 | "pset.addPrimitive(operator.and_, [bool, bool], bool)\n", 38 | "pset.addPrimitive(operator.or_, [bool, bool], bool)\n", 39 | "pset.addPrimitive(operator.not_, [bool], bool)\n", 40 | "\n", 41 | "# floating point operators\n", 42 | "# Define a protected division function\n", 43 | "def protectedDiv(left, right):\n", 44 | " try: return left / right\n", 45 | " except (ZeroDivisionError, FloatingPointError): return 1.\n", 46 | "\n", 47 | "pset.addPrimitive(operator.add, [float, float], float)\n", 48 | "pset.addPrimitive(operator.sub, [float, float], float)\n", 49 | "pset.addPrimitive(operator.mul, [float, float], float)\n", 50 | "pset.addPrimitive(protectedDiv, [float, float], float)\n", 51 | "\n", 52 | "# logic operators\n", 53 | "# Define a new if-then-else function\n", 54 | "def if_then_else(in1, output1, output2):\n", 55 | " if in1: return output1\n", 56 | " else: return output2\n", 57 | "\n", 58 | "pset.addPrimitive(operator.lt, [float, float], bool)\n", 59 | "pset.addPrimitive(operator.eq, [float, float], bool)\n", 60 | "pset.addPrimitive(if_then_else, [bool, float, float], float)\n", 61 | "\n", 62 | "# terminals\n", 63 | "pset.addTerminal(False, bool)\n", 64 | "pset.addTerminal(True, bool)\n", 65 | "for val in np.arange(-10., 11.):\n", 66 | " pset.addTerminal(val, float)\n", 67 | "\n", 68 | "creator.create('FitnessMax', base.Fitness, weights=(1.0,))\n", 69 | "creator.create('Individual', gp.PrimitiveTree, fitness=creator.FitnessMax)\n", 70 | "\n", 71 | "toolbox = base.Toolbox()\n", 72 | "toolbox.register('expr', gp.genHalfAndHalf, pset=pset, min_=1, max_=3)\n", 73 | "toolbox.register('individual', tools.initIterate, creator.Individual, toolbox.expr)\n", 74 | "toolbox.register('population', tools.initRepeat, list, toolbox.individual)\n", 75 | "toolbox.register('compile', gp.compile, pset=pset)\n", 76 | "\n", 77 | "def evaluate_individual(individual):\n", 78 | " # Transform the tree expression into a callable function\n", 79 | " func = toolbox.compile(expr=individual)\n", 80 | " subsample = np.array([func(*record) for record in X_train])\n", 81 | " \n", 82 | " if X_train[subsample].shape[0] == 0:\n", 83 | " return 1e-20,\n", 84 | " \n", 85 | " clf = DecisionTreeClassifier(random_state=34092)\n", 86 | " clf.fit(X_train[subsample], y_train[subsample])\n", 87 | " score = clf.score(X_test, y_test)\n", 88 | " \n", 89 | " return score,\n", 90 | " \n", 91 | "toolbox.register('evaluate', evaluate_individual)\n", 92 | "toolbox.register('select', tools.selTournament, tournsize=3)\n", 93 | "toolbox.register('mate', gp.cxOnePoint)\n", 94 | "toolbox.register('expr_mut', gp.genFull, min_=0, max_=3)\n", 95 | "toolbox.register('mutate', gp.mutUniform, expr=toolbox.expr_mut, pset=pset)\n", 96 | "\n", 97 | "population = toolbox.population(n=100)\n", 98 | "halloffame = tools.HallOfFame(1)\n", 99 | "stats = tools.Statistics(lambda ind: ind.fitness.values)\n", 100 | "stats.register('std', np.std)\n", 101 | "stats.register('min', np.min)\n", 102 | "stats.register('avg', np.mean)\n", 103 | "stats.register('max', np.max)\n", 104 | "\n", 105 | "clf = DecisionTreeClassifier(random_state=34092)\n", 106 | "clf.fit(X_train, y_train)\n", 107 | "print('Base DecisionTreeClassifier accuracy: {}'.format(clf.score(X_test, y_test)))\n", 108 | "\n", 109 | "clf = RandomForestClassifier(random_state=34092)\n", 110 | "clf.fit(X_train, y_train)\n", 111 | "print('Base RandomForestClassifier accuracy: {}'.format(clf.score(X_test, y_test)))\n", 112 | "\n", 113 | "clf = GradientBoostingClassifier(random_state=34092)\n", 114 | "clf.fit(X_train, y_train)\n", 115 | "print('Base GradientBoostingClassifier accuracy: {}'.format(clf.score(X_test, y_test)))\n", 116 | "\n", 117 | "print('')\n", 118 | "\n", 119 | "cxpb = 0.5\n", 120 | "mutpb = 0.5\n", 121 | "ngen = 50\n", 122 | "verbose = True\n", 123 | "\n", 124 | "logbook = tools.Logbook()\n", 125 | "logbook.header = ['gen', 'nevals'] + (stats.fields if stats else [])\n", 126 | "\n", 127 | "# Evaluate the individuals with an invalid fitness\n", 128 | "invalid_ind = [ind for ind in population if not ind.fitness.valid]\n", 129 | "fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)\n", 130 | "for ind, fit in zip(invalid_ind, fitnesses):\n", 131 | " ind.fitness.values = fit\n", 132 | "\n", 133 | "if halloffame is not None:\n", 134 | " halloffame.update(population)\n", 135 | "\n", 136 | "record = stats.compile(population) if stats else {}\n", 137 | "logbook.record(gen=0, nevals=len(invalid_ind), **record)\n", 138 | "if verbose:\n", 139 | " print(logbook.stream)\n", 140 | "\n", 141 | "# Begin the generational process\n", 142 | "for gen in range(1, ngen + 1):\n", 143 | " # Select the next generation individuals\n", 144 | " offspring = toolbox.select(population, len(population))\n", 145 | "\n", 146 | " # Vary the pool of individuals\n", 147 | " offspring = algorithms.varAnd(offspring, toolbox, cxpb, mutpb)\n", 148 | "\n", 149 | " # Evaluate the individuals with an invalid fitness\n", 150 | " invalid_ind = [ind for ind in offspring if not ind.fitness.valid]\n", 151 | " fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)\n", 152 | " for ind, fit in zip(invalid_ind, fitnesses):\n", 153 | " ind.fitness.values = fit\n", 154 | "\n", 155 | " # Update the hall of fame with the generated individuals\n", 156 | " if halloffame is not None:\n", 157 | " halloffame.update(offspring)\n", 158 | "\n", 159 | " # Replace the current population by the offspring\n", 160 | " population[:] = offspring\n", 161 | "\n", 162 | " # Append the current generation statistics to the logbook\n", 163 | " record = stats.compile(population) if stats else {}\n", 164 | " logbook.record(gen=gen, nevals=len(invalid_ind), **record)\n", 165 | " if verbose:\n", 166 | " print(logbook.stream)\n", 167 | "\n", 168 | "str(halloffame[0])" 169 | ] 170 | }, 171 | { 172 | "cell_type": "code", 173 | "execution_count": null, 174 | "metadata": { 175 | "collapsed": false 176 | }, 177 | "outputs": [], 178 | "source": [ 179 | "forest_predictions = []\n", 180 | "\n", 181 | "for ind_num, individual in enumerate(pop):\n", 182 | " func = toolbox.compile(expr=individual)\n", 183 | " subsample = np.array([func(*record) for record in X_train])\n", 184 | " \n", 185 | " if X_train[subsample].shape[0] == 0:\n", 186 | " continue\n", 187 | " \n", 188 | " clf = DecisionTreeClassifier(random_state=34092)\n", 189 | " clf.fit(X_train[subsample], y_train[subsample])\n", 190 | " predictions = clf.predict(X_test)\n", 191 | " forest_predictions.append(predictions)" 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "execution_count": null, 197 | "metadata": { 198 | "collapsed": false, 199 | "scrolled": false 200 | }, 201 | "outputs": [], 202 | "source": [ 203 | "from collections import Counter\n", 204 | "from sklearn.metrics import accuracy_score\n", 205 | "\n", 206 | "y_pred = np.array(\n", 207 | " [Counter(instance_forest_predictions).most_common(1)[0][0] for instance_forest_predictions in zip(*forest_predictions)])\n", 208 | "np.sum(y_test == y_pred) / len(y_test)" 209 | ] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "execution_count": null, 214 | "metadata": { 215 | "collapsed": true 216 | }, 217 | "outputs": [], 218 | "source": [] 219 | } 220 | ], 221 | "metadata": { 222 | "kernelspec": { 223 | "display_name": "Python 3", 224 | "language": "python", 225 | "name": "python3" 226 | }, 227 | "language_info": { 228 | "codemirror_mode": { 229 | "name": "ipython", 230 | "version": 3 231 | }, 232 | "file_extension": ".py", 233 | "mimetype": "text/x-python", 234 | "name": "python", 235 | "nbconvert_exporter": "python", 236 | "pygments_lexer": "ipython3", 237 | "version": "3.5.1" 238 | } 239 | }, 240 | "nbformat": 4, 241 | "nbformat_minor": 0 242 | } 243 | -------------------------------------------------------------------------------- /.ipynb_checkpoints/evolved-forest-demo-original-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [ 10 | { 11 | "name": "stdout", 12 | "output_type": "stream", 13 | "text": [ 14 | "Base DecisionTreeClassifier accuracy: 0.869179600887\n", 15 | "Base RandomForestClassifier accuracy: 0.946784922395\n", 16 | "Base GradientBoostingClassifier accuracy: 0.953436807095\n", 17 | "\n", 18 | "gen\tnevals\tstd \tmin \tavg \tmax \n", 19 | "0 \t100 \t0.379036\t1e-20\t0.394612\t0.875831\n", 20 | "1 \t85 \t0.337387\t1e-20\t0.584945\t0.878049\n", 21 | "2 \t76 \t0.300443\t1e-20\t0.709135\t0.873614\n", 22 | "3 \t73 \t0.311377\t1e-20\t0.707761\t0.873614\n", 23 | "4 \t75 \t0.251842\t1e-20\t0.774656\t0.875831\n", 24 | "5 \t73 \t0.268957\t1e-20\t0.754745\t0.880266\n", 25 | "6 \t71 \t0.21039 \t1e-20\t0.80051 \t0.882483\n", 26 | "7 \t78 \t0.209782\t1e-20\t0.811175\t0.882483\n", 27 | "8 \t77 \t0.125856\t1e-20\t0.852106\t0.891353\n", 28 | "9 \t71 \t0.132058\t1e-20\t0.843259\t0.891353\n", 29 | "10 \t76 \t0.0994663\t1e-20\t0.855277\t0.891353" 30 | ] 31 | } 32 | ], 33 | "source": [ 34 | "import operator\n", 35 | "import itertools\n", 36 | "import numpy as np\n", 37 | "\n", 38 | "from deap import algorithms\n", 39 | "from deap import base\n", 40 | "from deap import creator\n", 41 | "from deap import tools\n", 42 | "from deap import gp\n", 43 | "\n", 44 | "from sklearn.tree import DecisionTreeClassifier\n", 45 | "from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\n", 46 | "from sklearn.datasets import load_digits\n", 47 | "from sklearn.cross_validation import train_test_split\n", 48 | "\n", 49 | "np.seterr(all='raise')\n", 50 | "\n", 51 | "digits = load_digits()\n", 52 | "digit_features, digit_labels = digits.data, digits.target\n", 53 | "X_train, X_test, y_train, y_test = train_test_split(digit_features, digit_labels, stratify=digit_labels,\n", 54 | " train_size=0.75, test_size=0.25)\n", 55 | "\n", 56 | "# defined a new primitive set for strongly typed GP\n", 57 | "pset = gp.PrimitiveSetTyped('MAIN', itertools.repeat(float, digit_features.shape[1]), bool, 'Feature')\n", 58 | "\n", 59 | "# boolean operators\n", 60 | "pset.addPrimitive(operator.and_, [bool, bool], bool)\n", 61 | "pset.addPrimitive(operator.or_, [bool, bool], bool)\n", 62 | "pset.addPrimitive(operator.not_, [bool], bool)\n", 63 | "\n", 64 | "# floating point operators\n", 65 | "# Define a protected division function\n", 66 | "def protectedDiv(left, right):\n", 67 | " try: return left / right\n", 68 | " except (ZeroDivisionError, FloatingPointError): return 1.\n", 69 | "\n", 70 | "pset.addPrimitive(operator.add, [float, float], float)\n", 71 | "pset.addPrimitive(operator.sub, [float, float], float)\n", 72 | "pset.addPrimitive(operator.mul, [float, float], float)\n", 73 | "pset.addPrimitive(protectedDiv, [float, float], float)\n", 74 | "\n", 75 | "# logic operators\n", 76 | "# Define a new if-then-else function\n", 77 | "def if_then_else(in1, output1, output2):\n", 78 | " if in1: return output1\n", 79 | " else: return output2\n", 80 | "\n", 81 | "pset.addPrimitive(operator.lt, [float, float], bool)\n", 82 | "pset.addPrimitive(operator.eq, [float, float], bool)\n", 83 | "pset.addPrimitive(if_then_else, [bool, float, float], float)\n", 84 | "\n", 85 | "# terminals\n", 86 | "pset.addTerminal(False, bool)\n", 87 | "pset.addTerminal(True, bool)\n", 88 | "for val in np.arange(-10., 11.):\n", 89 | " pset.addTerminal(val, float)\n", 90 | "\n", 91 | "creator.create('FitnessMax', base.Fitness, weights=(1.0,))\n", 92 | "creator.create('Individual', gp.PrimitiveTree, fitness=creator.FitnessMax)\n", 93 | "\n", 94 | "toolbox = base.Toolbox()\n", 95 | "toolbox.register('expr', gp.genHalfAndHalf, pset=pset, min_=1, max_=3)\n", 96 | "toolbox.register('individual', tools.initIterate, creator.Individual, toolbox.expr)\n", 97 | "toolbox.register('population', tools.initRepeat, list, toolbox.individual)\n", 98 | "toolbox.register('compile', gp.compile, pset=pset)\n", 99 | "\n", 100 | "def evaluate_individual(individual):\n", 101 | " # Transform the tree expression into a callable function\n", 102 | " func = toolbox.compile(expr=individual)\n", 103 | " subsample = np.array([func(*record) for record in X_train])\n", 104 | " \n", 105 | " if X_train[subsample].shape[0] == 0:\n", 106 | " return 1e-20,\n", 107 | " \n", 108 | " clf = DecisionTreeClassifier(random_state=34092)\n", 109 | " clf.fit(X_train[subsample], y_train[subsample])\n", 110 | " score = clf.score(X_test, y_test)\n", 111 | " \n", 112 | " return score,\n", 113 | " \n", 114 | "toolbox.register('evaluate', evaluate_individual)\n", 115 | "toolbox.register('select', tools.selTournament, tournsize=3)\n", 116 | "toolbox.register('mate', gp.cxOnePoint)\n", 117 | "toolbox.register('expr_mut', gp.genFull, min_=0, max_=3)\n", 118 | "toolbox.register('mutate', gp.mutUniform, expr=toolbox.expr_mut, pset=pset)\n", 119 | "\n", 120 | "population = toolbox.population(n=100)\n", 121 | "halloffame = tools.HallOfFame(1)\n", 122 | "stats = tools.Statistics(lambda ind: ind.fitness.values)\n", 123 | "stats.register('std', np.std)\n", 124 | "stats.register('min', np.min)\n", 125 | "stats.register('avg', np.mean)\n", 126 | "stats.register('max', np.max)\n", 127 | "\n", 128 | "clf = DecisionTreeClassifier(random_state=34092)\n", 129 | "clf.fit(X_train, y_train)\n", 130 | "print('Base DecisionTreeClassifier accuracy: {}'.format(clf.score(X_test, y_test)))\n", 131 | "\n", 132 | "clf = RandomForestClassifier(random_state=34092)\n", 133 | "clf.fit(X_train, y_train)\n", 134 | "print('Base RandomForestClassifier accuracy: {}'.format(clf.score(X_test, y_test)))\n", 135 | "\n", 136 | "clf = GradientBoostingClassifier(random_state=34092)\n", 137 | "clf.fit(X_train, y_train)\n", 138 | "print('Base GradientBoostingClassifier accuracy: {}'.format(clf.score(X_test, y_test)))\n", 139 | "\n", 140 | "print('')\n", 141 | "\n", 142 | "cxpb = 0.5\n", 143 | "mutpb = 0.5\n", 144 | "ngen = 50\n", 145 | "verbose = True\n", 146 | "\n", 147 | "logbook = tools.Logbook()\n", 148 | "logbook.header = ['gen', 'nevals'] + (stats.fields if stats else [])\n", 149 | "\n", 150 | "# Evaluate the individuals with an invalid fitness\n", 151 | "invalid_ind = [ind for ind in population if not ind.fitness.valid]\n", 152 | "fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)\n", 153 | "for ind, fit in zip(invalid_ind, fitnesses):\n", 154 | " ind.fitness.values = fit\n", 155 | "\n", 156 | "if halloffame is not None:\n", 157 | " halloffame.update(population)\n", 158 | "\n", 159 | "record = stats.compile(population) if stats else {}\n", 160 | "logbook.record(gen=0, nevals=len(invalid_ind), **record)\n", 161 | "if verbose:\n", 162 | " print(logbook.stream)\n", 163 | "\n", 164 | "# Begin the generational process\n", 165 | "for gen in range(1, ngen + 1):\n", 166 | " # Select the next generation individuals\n", 167 | " offspring = toolbox.select(population, len(population))\n", 168 | "\n", 169 | " # Vary the pool of individuals\n", 170 | " offspring = algorithms.varAnd(offspring, toolbox, cxpb, mutpb)\n", 171 | "\n", 172 | " # Evaluate the individuals with an invalid fitness\n", 173 | " invalid_ind = [ind for ind in offspring if not ind.fitness.valid]\n", 174 | " fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)\n", 175 | " for ind, fit in zip(invalid_ind, fitnesses):\n", 176 | " ind.fitness.values = fit\n", 177 | "\n", 178 | " # Update the hall of fame with the generated individuals\n", 179 | " if halloffame is not None:\n", 180 | " halloffame.update(offspring)\n", 181 | "\n", 182 | " # Replace the current population by the offspring\n", 183 | " population[:] = offspring\n", 184 | "\n", 185 | " # Append the current generation statistics to the logbook\n", 186 | " record = stats.compile(population) if stats else {}\n", 187 | " logbook.record(gen=gen, nevals=len(invalid_ind), **record)\n", 188 | " if verbose:\n", 189 | " print(logbook.stream)\n", 190 | "\n", 191 | "str(halloffame[0])" 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "execution_count": null, 197 | "metadata": { 198 | "collapsed": false 199 | }, 200 | "outputs": [], 201 | "source": [ 202 | "forest_predictions = []\n", 203 | "\n", 204 | "for ind_num, individual in enumerate(pop):\n", 205 | " func = toolbox.compile(expr=individual)\n", 206 | " subsample = np.array([func(*record) for record in X_train])\n", 207 | " \n", 208 | " if X_train[subsample].shape[0] == 0:\n", 209 | " continue\n", 210 | " \n", 211 | " clf = DecisionTreeClassifier(random_state=34092)\n", 212 | " clf.fit(X_train[subsample], y_train[subsample])\n", 213 | " predictions = clf.predict(X_test)\n", 214 | " forest_predictions.append(predictions)" 215 | ] 216 | }, 217 | { 218 | "cell_type": "code", 219 | "execution_count": null, 220 | "metadata": { 221 | "collapsed": false, 222 | "scrolled": false 223 | }, 224 | "outputs": [], 225 | "source": [ 226 | "from collections import Counter\n", 227 | "from sklearn.metrics import accuracy_score\n", 228 | "\n", 229 | "y_pred = np.array(\n", 230 | " [Counter(instance_forest_predictions).most_common(1)[0][0] for instance_forest_predictions in zip(*forest_predictions)])\n", 231 | "np.sum(y_test == y_pred) / len(y_test)" 232 | ] 233 | }, 234 | { 235 | "cell_type": "code", 236 | "execution_count": null, 237 | "metadata": { 238 | "collapsed": true 239 | }, 240 | "outputs": [], 241 | "source": [] 242 | } 243 | ], 244 | "metadata": { 245 | "kernelspec": { 246 | "display_name": "Python 2", 247 | "language": "python", 248 | "name": "python2" 249 | }, 250 | "language_info": { 251 | "codemirror_mode": { 252 | "name": "ipython", 253 | "version": 2 254 | }, 255 | "file_extension": ".py", 256 | "mimetype": "text/x-python", 257 | "name": "python", 258 | "nbconvert_exporter": "python", 259 | "pygments_lexer": "ipython2", 260 | "version": "2.7.9" 261 | } 262 | }, 263 | "nbformat": 4, 264 | "nbformat_minor": 0 265 | } 266 | -------------------------------------------------------------------------------- /.ipynb_checkpoints/evolved-forest-demo-scaled-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import operator\n", 12 | "import itertools\n", 13 | "import numpy as np\n", 14 | "\n", 15 | "from deap import algorithms\n", 16 | "from deap import base\n", 17 | "from deap import creator\n", 18 | "from deap import tools\n", 19 | "from deap import gp\n", 20 | "\n", 21 | "from sklearn.tree import DecisionTreeClassifier\n", 22 | "from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\n", 23 | "from sklearn.datasets import load_digits\n", 24 | "from sklearn.cross_validation import train_test_split\n", 25 | "\n", 26 | "np.seterr(all='raise')\n", 27 | "\n", 28 | "digits = load_digits()\n", 29 | "digit_features, digit_labels = digits.data, digits.target\n", 30 | "X_train, X_test, y_train, y_test = train_test_split(digit_features, digit_labels, stratify=digit_labels,\n", 31 | " train_size=0.75, test_size=0.25)\n", 32 | "\n", 33 | "# defined a new primitive set for strongly typed GP\n", 34 | "pset = gp.PrimitiveSetTyped('MAIN', itertools.repeat(float, digit_features.shape[1]), bool, 'Feature')\n", 35 | "\n", 36 | "# boolean operators\n", 37 | "pset.addPrimitive(operator.and_, [bool, bool], bool)\n", 38 | "pset.addPrimitive(operator.or_, [bool, bool], bool)\n", 39 | "pset.addPrimitive(operator.not_, [bool], bool)\n", 40 | "\n", 41 | "# floating point operators\n", 42 | "# Define a protected division function\n", 43 | "def protectedDiv(left, right):\n", 44 | " try: return left / right\n", 45 | " except (ZeroDivisionError, FloatingPointError): return 1.\n", 46 | "\n", 47 | "pset.addPrimitive(operator.add, [float, float], float)\n", 48 | "pset.addPrimitive(operator.sub, [float, float], float)\n", 49 | "pset.addPrimitive(operator.mul, [float, float], float)\n", 50 | "pset.addPrimitive(protectedDiv, [float, float], float)\n", 51 | "\n", 52 | "# logic operators\n", 53 | "# Define a new if-then-else function\n", 54 | "def if_then_else(in1, output1, output2):\n", 55 | " if in1: return output1\n", 56 | " else: return output2\n", 57 | "\n", 58 | "pset.addPrimitive(operator.lt, [float, float], bool)\n", 59 | "pset.addPrimitive(operator.eq, [float, float], bool)\n", 60 | "pset.addPrimitive(if_then_else, [bool, float, float], float)\n", 61 | "\n", 62 | "# terminals\n", 63 | "pset.addTerminal(False, bool)\n", 64 | "pset.addTerminal(True, bool)\n", 65 | "for val in np.arange(-10., 11.):\n", 66 | " pset.addTerminal(val, float)\n", 67 | "\n", 68 | "creator.create('FitnessMax', base.Fitness, weights=(1.0,))\n", 69 | "creator.create('Individual', gp.PrimitiveTree, fitness=creator.FitnessMax)\n", 70 | "\n", 71 | "toolbox = base.Toolbox()\n", 72 | "toolbox.register('expr', gp.genHalfAndHalf, pset=pset, min_=1, max_=3)\n", 73 | "toolbox.register('individual', tools.initIterate, creator.Individual, toolbox.expr)\n", 74 | "toolbox.register('population', tools.initRepeat, list, toolbox.individual)\n", 75 | "toolbox.register('compile', gp.compile, pset=pset)\n", 76 | "\n", 77 | "def evaluate_individual(individual):\n", 78 | " # Transform the tree expression into a callable function\n", 79 | " func = toolbox.compile(expr=individual)\n", 80 | " subsample = np.array([func(*record) for record in X_train])\n", 81 | " \n", 82 | " if X_train[subsample].shape[0] == 0:\n", 83 | " return 1e-20,\n", 84 | " \n", 85 | " clf = DecisionTreeClassifier(random_state=34092)\n", 86 | " clf.fit(X_train[subsample], y_train[subsample])\n", 87 | " score = clf.score(X_test, y_test)\n", 88 | " \n", 89 | " return score,\n", 90 | " \n", 91 | "toolbox.register('evaluate', evaluate_individual)\n", 92 | "toolbox.register('select', tools.selTournament, tournsize=3)\n", 93 | "toolbox.register('mate', gp.cxOnePoint)\n", 94 | "toolbox.register('expr_mut', gp.genFull, min_=0, max_=3)\n", 95 | "toolbox.register('mutate', gp.mutUniform, expr=toolbox.expr_mut, pset=pset)\n", 96 | "\n", 97 | "population = toolbox.population(n=100)\n", 98 | "halloffame = tools.HallOfFame(1)\n", 99 | "stats = tools.Statistics(lambda ind: ind.fitness.values)\n", 100 | "stats.register('std', np.std)\n", 101 | "stats.register('min', np.min)\n", 102 | "stats.register('avg', np.mean)\n", 103 | "stats.register('max', np.max)\n", 104 | "\n", 105 | "clf = DecisionTreeClassifier(random_state=34092)\n", 106 | "clf.fit(X_train, y_train)\n", 107 | "print('Base DecisionTreeClassifier accuracy: {}'.format(clf.score(X_test, y_test)))\n", 108 | "\n", 109 | "clf = RandomForestClassifier(random_state=34092)\n", 110 | "clf.fit(X_train, y_train)\n", 111 | "print('Base RandomForestClassifier accuracy: {}'.format(clf.score(X_test, y_test)))\n", 112 | "\n", 113 | "clf = GradientBoostingClassifier(random_state=34092)\n", 114 | "clf.fit(X_train, y_train)\n", 115 | "print('Base GradientBoostingClassifier accuracy: {}'.format(clf.score(X_test, y_test)))\n", 116 | "\n", 117 | "print('')\n", 118 | "\n", 119 | "cxpb = 0.5\n", 120 | "mutpb = 0.5\n", 121 | "ngen = 50\n", 122 | "verbose = True\n", 123 | "\n", 124 | "logbook = tools.Logbook()\n", 125 | "logbook.header = ['gen', 'nevals'] + (stats.fields if stats else [])\n", 126 | "\n", 127 | "# Evaluate the individuals with an invalid fitness\n", 128 | "invalid_ind = [ind for ind in population if not ind.fitness.valid]\n", 129 | "fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)\n", 130 | "for ind, fit in zip(invalid_ind, fitnesses):\n", 131 | " ind.fitness.values = fit\n", 132 | "\n", 133 | "if halloffame is not None:\n", 134 | " halloffame.update(population)\n", 135 | "\n", 136 | "record = stats.compile(population) if stats else {}\n", 137 | "logbook.record(gen=0, nevals=len(invalid_ind), **record)\n", 138 | "if verbose:\n", 139 | " print(logbook.stream)\n", 140 | "\n", 141 | "# Begin the generational process\n", 142 | "for gen in range(1, ngen + 1):\n", 143 | " # Select the next generation individuals\n", 144 | " offspring = toolbox.select(population, len(population))\n", 145 | "\n", 146 | " # Vary the pool of individuals\n", 147 | " offspring = algorithms.varAnd(offspring, toolbox, cxpb, mutpb)\n", 148 | "\n", 149 | " # Evaluate the individuals with an invalid fitness\n", 150 | " invalid_ind = [ind for ind in offspring if not ind.fitness.valid]\n", 151 | " fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)\n", 152 | " for ind, fit in zip(invalid_ind, fitnesses):\n", 153 | " ind.fitness.values = fit\n", 154 | "\n", 155 | " # Update the hall of fame with the generated individuals\n", 156 | " if halloffame is not None:\n", 157 | " halloffame.update(offspring)\n", 158 | "\n", 159 | " # Replace the current population by the offspring\n", 160 | " population[:] = offspring\n", 161 | "\n", 162 | " # Append the current generation statistics to the logbook\n", 163 | " record = stats.compile(population) if stats else {}\n", 164 | " logbook.record(gen=gen, nevals=len(invalid_ind), **record)\n", 165 | " if verbose:\n", 166 | " print(logbook.stream)\n", 167 | "\n", 168 | "str(halloffame[0])" 169 | ] 170 | }, 171 | { 172 | "cell_type": "code", 173 | "execution_count": null, 174 | "metadata": { 175 | "collapsed": false 176 | }, 177 | "outputs": [], 178 | "source": [ 179 | "forest_predictions = []\n", 180 | "\n", 181 | "for ind_num, individual in enumerate(pop):\n", 182 | " func = toolbox.compile(expr=individual)\n", 183 | " subsample = np.array([func(*record) for record in X_train])\n", 184 | " \n", 185 | " if X_train[subsample].shape[0] == 0:\n", 186 | " continue\n", 187 | " \n", 188 | " clf = DecisionTreeClassifier(random_state=34092)\n", 189 | " clf.fit(X_train[subsample], y_train[subsample])\n", 190 | " predictions = clf.predict(X_test)\n", 191 | " forest_predictions.append(predictions)" 192 | ] 193 | }, 194 | { 195 | "cell_type": "code", 196 | "execution_count": null, 197 | "metadata": { 198 | "collapsed": false, 199 | "scrolled": false 200 | }, 201 | "outputs": [], 202 | "source": [ 203 | "from collections import Counter\n", 204 | "from sklearn.metrics import accuracy_score\n", 205 | "\n", 206 | "y_pred = np.array(\n", 207 | " [Counter(instance_forest_predictions).most_common(1)[0][0] for instance_forest_predictions in zip(*forest_predictions)])\n", 208 | "np.sum(y_test == y_pred) / len(y_test)" 209 | ] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "execution_count": null, 214 | "metadata": { 215 | "collapsed": true 216 | }, 217 | "outputs": [], 218 | "source": [] 219 | } 220 | ], 221 | "metadata": { 222 | "kernelspec": { 223 | "display_name": "Python 3", 224 | "language": "python", 225 | "name": "python3" 226 | }, 227 | "language_info": { 228 | "codemirror_mode": { 229 | "name": "ipython", 230 | "version": 3 231 | }, 232 | "file_extension": ".py", 233 | "mimetype": "text/x-python", 234 | "name": "python", 235 | "nbconvert_exporter": "python", 236 | "pygments_lexer": "ipython3", 237 | "version": "3.5.1" 238 | } 239 | }, 240 | "nbformat": 4, 241 | "nbformat_minor": 0 242 | } 243 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #Evolved Forest 2 | 3 | Using Genetic Programming to grow forests for regression and classification. Metafeatures are used to reduce the exploration space and aid the GP to come with the better informed forests. 4 | Hunch is to see if GP can grow better trees than randomised generation of forests. 5 | 6 | Repo contains notebooks for different experiments. 7 | 8 | ## Subsampling 9 | Currently subspacing based methods have been explored. Each tree in the GP decides which rows to keep based on simple rules. 10 | Eg. 11 | ``` 12 | Feature_3 should be greater than 3 and Feature_4 < 2. 13 | ``` 14 | ## Subspacing 15 | [todo] Feature level metafeatures need to be extracted and made as primitives to be fed to GP. 16 | 17 | ##Fitness and Selection methods being explored 18 | - true_probablity variance 19 | - Custom difficulty scores per row. 20 | - Lexicase Selection 21 | - Implicit Fitness pressure. 22 | - Private Holdout Fitness 23 | - Out of Bag Error Fitness 24 | 25 | 26 | 27 | Multi-objective evolution and Pareto front are also being explored combining above methods. 28 | 29 | 30 | -------------------------------------------------------------------------------- /datasets/GAMETES-easy-4x2-way_her-0.4_pop-1600_attribs-100_discrete.csv: -------------------------------------------------------------------------------- 1 | N0 N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 N11 N12 N13 N14 N15 N16 N17 N18 N19 N20 N21 N22 N23 N24 N25 N26 N27 N28 N29 N30 N31 N32 N33 N34 N35 N36 N37 N38 N39 N40 N41 N42 N43 N44 N45 N46 N47 N48 N49 N50 N51 N52 N53 N54 N55 N56 N57 N58 N59 N60 N61 N62 N63 N64 N65 N66 N67 N68 N69 N70 N71 N72 N73 N74 N75 N76 N77 N78 N79 N80 N81 N82 N83 N84 N85 N86 N87 N88 N89 N90 N91 M0P0 M0P1 M1P0 M1P1 M2P0 M2P1 M3P0 M3P1 class 2 | 1 1 1 0 1 1 1 1 0 0 1 0 0 1 1 1 0 0 2 0 0 0 1 0 0 1 0 0 1 1 1 1 1 0 1 2 1 0 1 1 1 1 1 0 1 0 0 1 2 0 1 0 0 1 0 1 2 1 0 0 0 1 0 0 0 0 1 0 0 1 1 0 1 0 0 1 0 2 1 1 0 1 2 0 1 0 0 1 0 0 0 0 0 1 1 1 0 0 1 1 1 3 | 0 0 0 1 0 1 1 1 0 0 0 1 0 0 2 1 2 0 0 1 2 0 0 0 1 1 0 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 0 1 2 1 0 1 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 0 1 1 0 2 1 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 1 0 1 1 0 1 1 1 1 0 0 0 0 1 4 | 1 0 1 1 0 2 1 1 0 0 0 0 0 0 0 0 1 2 0 2 0 2 0 1 0 0 1 0 0 0 1 0 1 1 1 0 0 0 0 2 1 1 1 1 0 1 0 0 1 2 0 0 0 0 1 2 0 0 1 0 0 1 0 1 0 1 1 0 0 2 0 0 0 1 0 1 1 1 1 1 2 0 0 0 0 1 1 2 2 1 1 0 0 0 0 0 0 2 1 1 1 5 | 0 2 0 0 1 1 0 0 1 1 1 0 0 1 0 2 0 1 0 1 1 1 1 0 1 0 1 1 0 0 1 2 0 1 0 0 0 1 1 0 1 0 2 0 0 1 1 1 0 1 1 0 0 1 0 0 2 0 0 0 0 0 0 0 1 0 2 1 1 1 0 0 0 1 0 1 0 0 2 0 1 0 0 1 0 0 1 1 1 0 0 1 1 2 0 0 1 1 0 1 1 6 | 1 0 1 2 0 1 1 2 0 1 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 2 0 1 1 1 0 2 1 1 1 1 2 1 0 0 1 0 0 0 0 1 0 2 1 0 0 0 0 1 1 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 2 0 1 1 0 0 1 0 0 0 1 0 1 1 1 0 0 1 0 0 1 1 1 0 1 1 7 | 1 1 1 1 0 1 1 1 0 0 0 1 0 1 0 0 1 1 1 0 0 0 0 1 1 2 0 0 0 0 2 0 1 1 0 0 0 1 0 0 1 1 0 1 0 0 1 0 0 0 0 1 0 1 0 1 1 0 1 0 1 2 0 1 2 0 1 0 2 1 0 1 0 1 2 0 0 1 1 0 0 1 0 0 2 2 0 0 0 0 0 0 1 0 1 1 0 1 1 1 1 8 | 0 0 0 0 1 1 0 0 1 1 1 1 0 2 1 1 0 1 0 0 2 0 0 0 0 0 0 1 1 0 1 0 0 2 2 0 0 0 1 1 1 2 0 0 0 0 2 1 0 0 0 1 0 0 1 1 2 0 0 1 1 1 0 1 1 0 0 1 1 1 1 1 0 0 0 0 1 1 2 0 0 0 1 0 1 1 0 2 1 0 2 1 0 1 0 0 0 1 2 1 1 9 | 1 0 1 0 0 0 0 1 1 1 0 0 1 1 1 0 2 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 0 1 1 0 2 0 0 0 0 1 0 1 0 0 1 1 0 0 1 1 2 1 1 1 0 1 0 1 1 1 1 1 0 0 1 0 0 2 2 0 0 0 1 0 0 1 0 1 0 1 0 1 1 1 0 1 1 1 1 0 0 0 0 0 0 1 0 1 1 10 | 0 2 0 0 1 2 1 0 0 2 0 1 0 1 2 1 0 1 1 1 1 2 0 1 1 0 0 0 1 0 1 1 0 0 0 0 0 0 0 2 2 0 0 1 1 0 1 0 0 1 1 1 1 0 1 1 2 1 1 1 1 0 0 2 1 1 0 0 0 0 0 1 1 0 0 1 0 1 1 0 0 1 1 0 0 0 1 1 2 1 1 0 1 2 1 1 0 0 1 1 1 11 | 0 0 0 0 0 0 1 0 1 1 1 0 1 1 0 1 1 2 1 0 0 0 1 1 0 0 1 1 0 1 0 2 0 0 1 1 0 0 1 1 1 1 1 2 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 2 0 2 0 1 1 1 0 1 1 1 0 0 0 1 0 0 0 0 1 2 0 0 0 0 0 1 1 2 1 0 0 0 0 0 1 1 1 2 1 12 | 1 2 0 0 1 1 0 1 1 1 0 1 0 0 0 0 0 1 0 1 1 0 0 0 1 1 2 0 0 0 0 0 0 0 0 0 0 2 0 0 1 0 1 1 1 0 0 0 0 1 0 0 0 2 1 1 1 1 1 0 0 1 0 0 0 1 1 1 1 1 2 0 1 0 1 0 0 1 0 2 0 0 0 1 1 1 1 1 0 0 2 0 1 1 1 1 2 1 1 1 1 13 | 0 1 1 2 0 1 1 0 2 2 1 1 0 1 1 0 2 1 2 1 1 1 0 0 0 1 1 2 1 0 1 0 0 0 1 1 1 0 0 2 1 0 0 2 2 1 1 1 0 1 1 0 0 1 1 0 0 1 2 0 0 1 1 0 0 1 1 1 0 0 2 1 2 1 2 1 0 0 0 1 0 1 0 0 2 1 0 1 0 0 0 0 0 0 1 1 1 1 0 0 1 14 | 1 0 1 0 1 1 1 0 1 1 0 0 2 0 0 1 0 0 0 0 2 0 0 1 1 2 1 1 0 1 0 1 2 0 1 0 1 1 1 2 1 0 1 0 1 1 0 0 2 0 0 1 1 0 2 1 1 0 0 1 1 1 0 0 0 1 1 0 0 2 0 1 0 1 0 1 2 1 0 0 1 1 2 0 2 0 0 0 1 0 1 0 2 1 1 1 1 1 1 0 1 15 | 0 1 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 0 1 0 0 0 0 1 1 0 0 0 0 1 0 1 0 1 0 1 1 0 0 2 0 0 1 2 0 2 1 0 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 1 0 0 0 0 1 16 | 0 1 0 0 0 1 0 0 0 0 1 1 1 0 0 1 2 0 0 1 0 0 1 0 0 0 0 0 0 1 2 1 1 1 1 0 1 0 0 2 1 1 0 1 1 1 1 1 2 1 1 1 0 0 0 1 0 0 0 1 1 0 1 1 2 1 1 0 1 2 1 0 0 1 2 1 1 0 0 0 1 0 0 1 0 1 2 1 1 0 0 0 1 0 0 0 1 1 0 1 1 17 | 0 0 0 0 0 2 1 0 0 1 1 0 1 0 2 1 0 0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0 0 1 0 0 2 1 1 0 1 2 1 0 1 1 1 0 1 1 0 0 1 0 1 0 1 2 1 0 1 0 0 2 2 0 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 2 0 1 18 | 0 0 1 1 0 2 0 0 0 0 1 1 0 1 0 0 1 0 1 1 0 0 2 0 1 1 0 1 0 1 0 1 0 0 0 0 1 0 1 1 1 2 1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 1 1 1 0 0 0 0 1 1 0 1 1 1 1 1 0 0 0 2 1 1 0 1 0 1 1 1 0 0 0 1 1 0 1 1 1 2 0 0 0 0 1 1 1 19 | 2 0 1 0 1 2 0 0 0 2 1 0 2 1 1 1 0 1 0 1 0 0 2 0 0 1 0 0 0 0 1 1 0 1 0 1 0 0 2 1 0 2 0 1 1 0 1 1 0 1 0 2 1 1 0 1 1 0 1 0 0 0 2 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 1 2 0 0 0 2 1 1 0 0 1 1 1 0 1 20 | 1 1 1 0 0 1 0 1 1 1 0 1 2 1 1 1 1 1 1 0 0 1 1 1 1 0 0 0 0 1 2 0 1 0 1 1 1 1 1 0 0 1 2 1 0 1 1 0 0 0 0 0 2 1 1 1 1 1 0 1 2 0 0 0 0 1 1 2 1 1 0 0 0 0 0 1 0 0 1 1 1 1 0 1 2 0 0 1 0 1 1 0 1 0 1 0 0 0 2 1 1 21 | 1 0 0 0 0 0 1 0 1 1 1 1 0 1 2 0 0 1 0 1 1 1 1 0 1 1 0 1 0 1 1 1 0 0 1 1 0 2 0 0 1 2 0 0 2 1 0 0 1 0 1 1 0 1 1 1 1 0 0 0 1 1 0 0 1 1 0 0 2 1 2 1 0 1 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 0 0 1 1 2 0 0 0 0 0 0 1 22 | 0 0 0 0 1 0 1 2 1 1 0 1 1 1 1 0 0 1 0 0 2 0 1 0 1 1 0 1 0 1 0 1 2 1 0 0 0 1 0 1 0 0 1 0 0 0 1 1 1 2 0 0 0 2 1 0 1 2 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 2 0 0 1 0 0 0 0 0 1 0 0 2 1 0 1 0 1 23 | 0 0 1 0 0 0 1 0 1 0 1 0 1 1 2 0 1 1 0 1 0 2 0 1 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 1 1 0 0 0 0 0 1 1 2 2 1 1 0 2 0 0 1 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 0 0 1 1 1 24 | 0 0 1 2 0 1 0 2 0 1 1 0 1 1 1 0 1 1 1 1 0 0 2 1 0 0 0 0 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 1 1 2 0 1 2 1 0 1 0 0 1 1 0 0 1 0 0 1 0 2 0 0 0 0 0 0 2 0 1 1 0 1 1 0 1 1 1 0 0 1 1 0 1 0 1 1 0 0 2 0 0 1 25 | 1 1 0 2 0 2 2 1 1 1 1 0 1 1 0 1 0 1 1 1 1 1 1 0 0 1 0 1 1 0 1 1 0 0 1 0 1 0 0 1 2 1 0 0 1 1 0 0 1 1 1 0 1 2 0 0 2 0 1 1 0 0 0 0 1 0 1 2 2 0 0 2 1 1 1 1 1 1 0 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 26 | 0 1 1 1 1 0 0 1 0 1 2 1 0 2 1 0 0 1 1 2 2 0 1 1 1 0 0 0 1 1 0 0 1 0 1 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 1 1 0 0 1 1 1 2 1 1 1 1 1 1 2 1 2 0 1 0 0 0 0 0 1 2 0 1 0 1 0 2 0 0 1 0 1 0 0 0 0 1 0 2 1 1 1 2 1 1 27 | 0 1 1 1 1 2 0 0 0 0 1 0 1 0 0 0 0 1 0 2 0 0 0 0 2 1 1 0 0 0 0 2 0 0 2 0 0 1 0 0 1 0 0 1 1 0 0 0 1 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 2 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 0 1 0 1 1 0 0 1 0 1 1 1 28 | 1 1 2 0 0 0 1 1 1 1 1 0 0 1 0 1 1 1 1 0 0 0 0 0 1 0 1 1 0 1 0 2 0 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 0 2 0 1 1 1 2 1 1 1 1 1 0 0 2 0 0 0 1 0 0 0 0 1 0 2 0 0 1 2 1 0 1 2 0 1 0 0 0 1 1 1 0 0 1 1 1 2 1 2 1 1 1 29 | 0 0 0 0 2 0 2 0 0 2 1 1 1 0 0 0 1 0 0 1 0 0 1 1 1 1 2 0 1 0 2 0 1 1 0 1 1 0 0 0 0 0 1 1 1 1 0 2 2 1 1 0 1 1 1 0 0 1 0 0 0 1 1 0 1 2 0 1 2 1 1 0 1 0 0 1 1 0 2 0 1 0 0 1 0 0 2 1 0 0 0 0 2 1 0 2 0 1 0 2 1 30 | 1 0 0 0 1 1 0 2 0 0 0 0 1 0 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 0 1 0 2 0 1 1 1 0 1 1 1 0 0 0 0 1 2 1 1 0 0 1 1 1 1 0 1 1 1 2 0 1 0 1 0 0 2 1 0 0 0 1 0 0 1 2 1 0 1 0 0 1 0 0 2 0 2 1 1 1 0 0 0 0 2 0 0 0 0 0 1 31 | 0 1 0 1 1 0 1 1 1 1 0 0 0 0 1 1 1 2 2 0 0 0 1 0 0 0 2 0 0 1 0 1 1 1 1 1 0 1 1 1 1 0 0 0 1 0 0 0 0 0 2 0 1 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 0 0 1 2 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 0 0 1 1 1 32 | 1 2 1 1 0 1 1 0 2 2 1 2 0 0 1 0 0 2 0 0 0 0 1 1 2 0 0 0 1 0 0 0 1 0 1 1 2 0 0 1 1 2 0 1 1 0 2 1 1 0 1 0 0 1 1 1 0 0 1 0 0 1 1 0 0 1 0 1 2 2 1 0 1 1 0 1 0 1 1 1 1 1 0 0 1 1 0 1 2 0 1 2 1 1 2 1 0 0 1 0 1 33 | 0 0 1 1 1 0 1 1 0 2 0 1 1 2 1 0 0 2 0 0 1 0 1 0 0 0 0 0 2 1 0 0 1 0 0 1 0 1 0 0 1 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 1 1 1 0 0 1 2 0 1 1 1 1 1 0 0 0 0 1 0 1 0 1 0 1 1 0 0 1 0 1 0 0 0 1 1 1 1 0 0 0 0 0 1 1 34 | 0 1 1 0 0 1 2 0 0 1 0 1 1 1 0 1 1 1 0 1 0 2 0 1 1 2 0 0 0 0 0 2 0 0 0 1 0 1 1 0 2 1 0 2 1 0 0 0 1 0 2 0 1 2 0 0 1 1 1 0 1 0 0 1 0 0 2 2 1 0 1 1 1 1 1 0 1 2 1 1 2 1 2 0 0 0 0 1 1 0 1 1 0 1 0 0 0 0 1 0 1 35 | 1 1 0 1 1 1 0 0 0 2 0 1 0 2 1 0 0 0 1 1 1 1 2 0 1 1 0 0 1 0 1 1 1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 1 0 0 1 1 0 0 2 0 0 1 1 0 1 1 0 0 0 0 1 36 | 1 1 0 1 1 0 1 0 0 1 0 0 0 1 1 0 0 1 0 0 1 1 2 0 1 1 2 1 0 2 1 1 1 1 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 1 0 1 0 0 1 1 1 0 0 0 0 1 0 0 1 1 1 0 0 0 2 1 0 2 2 0 2 2 0 1 1 1 0 0 1 1 0 1 1 0 1 0 1 1 1 0 1 1 0 1 1 37 | 0 1 1 0 1 1 0 1 1 1 1 0 0 1 1 0 1 0 0 2 0 1 0 0 1 0 1 1 0 2 2 0 1 1 0 0 0 0 0 0 1 0 1 1 1 2 1 0 1 1 1 1 0 1 0 0 1 2 1 1 1 0 1 1 0 1 1 1 0 1 0 1 1 0 0 0 0 0 1 2 0 0 0 0 2 1 1 0 0 0 0 1 1 1 1 1 1 2 0 0 1 38 | 0 0 1 0 2 1 0 1 0 1 0 1 0 0 1 1 0 0 0 0 1 0 1 2 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 0 1 1 1 1 0 1 0 0 1 0 1 0 2 0 0 1 1 0 0 0 0 1 0 2 0 0 0 0 1 1 0 0 2 2 1 2 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 1 2 1 1 1 1 1 39 | 0 1 0 1 0 0 0 0 2 0 1 1 2 1 1 1 1 0 1 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0 0 1 1 0 0 0 1 1 1 2 1 1 0 1 0 0 0 1 0 0 2 1 0 0 0 0 0 0 1 2 2 1 0 1 1 1 1 0 1 1 2 1 1 1 0 0 0 1 1 1 0 0 1 1 1 1 0 1 0 0 1 1 0 2 2 1 1 40 | 0 0 1 1 1 0 0 1 0 1 0 1 0 1 2 1 1 1 0 1 1 2 1 0 0 1 0 0 1 0 0 1 1 0 0 2 0 1 2 0 0 1 1 0 1 1 1 1 0 0 1 0 2 0 1 0 1 2 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 0 2 0 0 0 0 1 1 0 0 0 1 2 0 0 1 1 0 2 0 0 1 0 1 2 0 1 1 41 | 1 2 0 0 0 0 1 0 1 1 2 1 1 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 0 2 0 0 0 1 0 2 1 1 1 0 0 1 1 1 0 0 0 2 1 2 0 0 0 0 1 1 1 0 1 1 0 0 0 1 0 1 1 0 1 0 1 0 1 2 1 0 0 1 0 1 1 1 1 1 2 1 2 1 2 0 0 1 0 0 1 0 1 1 1 2 1 42 | 1 0 0 1 0 0 1 1 2 2 0 1 1 0 0 0 1 1 0 0 1 2 0 0 0 1 2 1 0 1 1 1 1 0 1 1 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 0 2 0 1 1 1 1 0 0 0 0 1 1 0 0 0 1 0 0 1 1 2 1 0 1 0 0 0 0 0 1 1 43 | 0 0 0 1 1 0 1 0 0 0 0 0 1 0 0 1 1 0 0 1 2 1 1 0 0 1 0 0 0 2 1 0 1 0 1 2 0 0 2 1 0 0 1 2 1 1 0 0 0 0 0 1 1 1 0 0 1 1 1 0 2 0 1 0 1 1 0 1 1 1 0 0 1 0 0 0 0 2 0 2 2 1 0 1 1 0 0 0 0 1 0 1 1 1 0 0 0 0 1 1 1 44 | 0 0 0 0 0 0 1 0 0 1 2 1 1 0 1 0 1 1 1 0 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 0 1 0 0 1 1 1 0 0 0 0 1 0 1 1 0 2 1 2 1 0 1 0 1 0 2 0 0 1 1 0 1 0 1 2 1 1 0 0 0 1 0 0 1 0 0 2 2 0 0 0 1 1 0 0 0 1 1 1 0 0 0 1 1 0 1 45 | 1 1 1 0 1 0 2 2 1 0 0 0 2 0 0 1 1 1 0 1 1 0 0 2 0 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 1 0 0 1 1 2 1 0 0 1 1 1 1 1 1 0 0 1 0 1 1 0 1 1 2 1 1 1 0 1 0 2 0 0 0 1 1 0 1 0 0 0 1 0 0 1 0 0 0 2 0 1 0 1 0 0 0 0 1 1 1 46 | 1 0 0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 2 0 0 0 0 0 1 1 0 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 2 1 1 1 0 0 0 1 1 0 0 2 0 1 0 0 0 1 2 1 1 2 1 1 1 0 1 0 2 1 0 1 1 1 1 0 0 0 1 1 0 1 1 0 1 1 0 1 0 0 2 1 1 1 1 1 1 47 | 2 0 0 0 0 0 0 1 0 0 0 2 0 0 2 1 1 0 0 2 1 1 0 0 0 0 0 1 1 0 1 0 1 0 1 1 2 0 2 0 0 2 1 1 0 2 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 1 1 1 1 1 0 1 1 0 1 1 2 0 1 0 0 0 1 0 0 1 0 2 0 0 0 1 0 0 0 0 0 0 0 0 1 2 0 0 1 48 | 0 1 0 0 0 1 0 0 2 1 0 0 0 1 0 0 0 0 0 1 0 1 1 1 2 0 0 0 0 0 0 1 1 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 0 0 0 1 0 0 0 0 0 0 0 0 2 0 0 1 1 1 0 0 2 2 1 0 0 1 1 0 0 0 0 0 2 1 1 1 2 1 0 1 1 1 0 1 1 49 | 1 1 0 0 1 1 0 0 1 1 0 0 1 0 1 1 1 0 0 2 1 1 0 0 0 0 0 1 1 1 2 0 0 0 2 0 2 1 1 0 0 1 2 0 1 0 2 1 0 1 0 1 0 1 1 0 0 0 1 1 1 0 1 1 1 2 2 0 2 0 2 1 0 1 0 0 1 0 1 0 0 0 0 1 2 0 1 0 0 0 2 0 1 1 2 1 1 1 1 1 1 50 | 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 2 1 0 0 2 2 0 1 1 0 2 2 0 0 1 0 2 0 1 2 0 0 0 0 1 0 1 1 0 1 0 1 1 0 0 0 0 1 1 1 0 0 1 0 0 1 0 0 1 2 1 0 0 0 0 1 0 0 0 0 0 0 2 0 1 1 1 0 0 2 0 1 1 0 0 0 1 0 0 1 1 1 1 0 2 1 51 | 0 0 0 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 1 2 0 0 0 0 1 1 1 0 0 1 1 1 0 1 1 0 0 1 1 2 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 0 1 0 1 1 1 1 1 1 0 0 0 2 1 2 0 1 1 1 0 1 1 1 2 0 0 2 0 2 1 2 1 0 0 0 1 1 52 | 1 0 0 0 2 0 0 0 1 1 1 2 1 1 0 1 0 0 1 0 2 0 0 0 0 0 1 0 2 0 0 1 1 1 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 1 0 1 1 1 0 1 1 0 0 2 1 1 2 2 1 1 2 0 1 0 1 0 1 0 1 2 1 1 0 1 0 0 0 0 1 0 0 1 0 1 2 0 1 2 0 0 0 0 0 1 1 53 | 0 1 2 0 0 0 0 2 1 0 0 0 1 1 0 1 1 2 0 0 1 1 0 0 0 1 0 0 0 0 0 2 1 0 0 0 2 0 2 1 2 0 1 0 0 0 1 2 0 1 0 2 0 0 1 0 0 0 0 0 1 0 0 1 0 1 0 2 1 0 0 2 0 0 0 1 0 2 1 0 0 0 1 1 1 2 0 0 0 0 2 0 1 1 1 1 0 1 2 0 1 54 | 0 0 0 1 1 1 1 0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 1 0 0 2 0 0 1 1 0 0 2 1 1 1 0 0 1 0 0 0 1 1 1 0 0 0 0 1 0 0 1 1 2 1 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 0 1 1 1 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 0 2 0 1 0 0 0 1 0 1 55 | 1 1 1 0 0 1 0 1 0 0 2 0 0 0 0 0 0 1 0 1 0 0 2 1 1 0 1 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 2 1 0 0 0 2 1 0 2 0 1 1 1 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 1 2 1 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 2 1 0 0 2 1 0 0 1 56 | 1 2 0 1 1 0 1 1 0 0 0 0 1 0 1 0 2 0 1 1 2 1 0 0 0 0 2 0 0 0 0 0 0 2 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 2 2 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 0 0 0 1 0 1 1 1 1 1 0 0 0 0 1 57 | 0 0 0 1 0 0 1 0 1 0 0 0 1 1 1 2 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0 0 1 1 1 1 0 0 1 1 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 0 1 1 2 0 0 0 0 1 0 0 0 0 2 0 0 1 2 1 1 0 1 1 1 2 1 0 1 0 0 0 0 2 1 0 0 1 58 | 0 0 1 0 1 0 2 0 1 1 0 0 0 0 1 0 1 0 0 0 1 1 2 0 0 0 0 1 0 0 0 1 1 2 0 0 2 1 1 2 1 0 0 0 1 0 1 0 1 0 1 0 0 0 0 1 0 1 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 1 1 2 2 1 0 1 0 0 2 2 1 2 0 0 0 0 2 1 0 0 0 0 0 2 0 0 1 59 | 2 0 0 1 0 1 1 2 1 0 2 0 0 0 1 1 1 1 0 1 1 1 0 0 1 2 0 1 0 1 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 1 1 2 0 0 0 1 2 2 1 0 0 0 1 1 1 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 2 0 1 0 2 2 1 1 1 0 0 1 1 0 1 2 1 1 0 0 1 1 1 60 | 1 1 0 0 1 0 0 0 2 0 0 2 0 1 0 0 1 0 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 1 1 0 2 0 2 0 1 0 1 1 1 1 1 0 0 0 1 0 2 2 1 0 1 1 1 0 1 1 0 2 0 0 1 0 1 0 0 1 0 0 0 1 0 1 1 2 1 0 1 0 0 0 0 1 1 2 0 2 1 0 1 0 0 0 0 1 1 61 | 0 0 1 1 1 1 1 0 0 1 0 1 1 1 1 0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 2 2 0 1 1 0 2 0 1 1 2 0 1 0 1 1 0 2 0 1 0 0 0 1 0 1 0 1 1 1 0 0 1 0 2 1 0 1 0 1 1 2 1 0 2 2 0 0 0 1 0 1 0 2 1 0 0 1 2 0 0 0 1 1 0 1 1 1 62 | 0 1 1 2 1 0 0 1 1 0 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 0 2 1 1 1 0 0 1 1 2 0 0 1 1 1 1 2 1 2 0 1 0 0 0 2 0 1 0 0 0 0 0 1 1 1 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 0 0 1 1 0 2 0 2 1 2 0 1 1 0 0 0 0 1 1 0 2 0 1 0 0 1 63 | 0 0 1 0 1 1 0 2 1 1 1 1 0 1 0 1 1 0 0 0 0 1 2 0 1 0 0 1 1 2 1 0 1 1 1 2 0 1 2 1 0 1 0 0 0 0 1 1 0 1 0 0 2 1 1 1 1 0 0 0 2 1 0 1 1 0 2 1 0 0 0 0 0 1 1 0 2 1 0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 1 1 2 0 1 1 1 64 | 0 0 0 1 0 0 0 2 2 1 1 1 0 0 1 1 0 1 1 1 1 0 0 1 1 1 0 0 1 0 2 1 1 0 0 0 0 1 0 1 0 0 1 0 1 0 0 1 1 0 1 0 0 1 0 0 0 1 1 1 2 0 0 0 1 1 0 1 0 1 2 1 0 1 0 0 1 2 0 0 1 0 1 0 0 0 0 1 0 1 1 1 1 0 1 1 2 1 1 1 1 65 | 1 0 0 0 0 0 1 2 0 1 1 0 0 0 0 0 0 2 2 1 1 0 1 2 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 0 2 0 1 0 0 1 0 0 0 1 1 0 0 1 1 2 1 0 1 0 0 1 0 1 1 1 1 0 1 2 0 2 1 1 0 1 0 2 1 0 1 0 0 0 1 0 1 0 1 0 0 2 1 2 0 0 1 0 2 1 1 66 | 1 1 1 1 1 2 0 1 2 0 0 0 1 2 1 2 2 1 0 2 0 2 0 0 1 0 1 1 1 0 0 0 0 2 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 1 0 1 2 1 0 1 1 0 1 2 1 1 1 0 2 1 0 0 1 1 0 1 0 2 1 0 1 0 0 0 1 1 1 0 1 1 0 0 1 1 0 1 2 1 1 1 1 0 0 1 67 | 0 0 2 0 1 1 1 0 1 0 0 1 1 0 1 1 1 0 2 0 0 0 1 0 0 1 0 1 0 0 0 2 1 0 1 0 2 0 1 1 1 0 1 0 0 1 1 1 1 0 1 1 1 2 1 0 1 0 0 0 1 0 0 0 0 0 0 0 2 1 1 1 1 0 0 1 1 1 1 0 1 0 1 1 1 1 2 1 1 1 0 0 1 1 0 2 2 1 0 0 1 68 | 0 1 1 0 1 1 0 1 2 0 1 2 0 2 2 1 0 1 0 0 1 2 0 1 0 1 1 0 1 1 0 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0 1 0 1 0 0 0 1 0 0 1 1 1 0 0 1 1 1 0 1 1 1 2 0 1 0 0 1 0 0 0 0 1 0 1 1 1 2 1 1 2 0 0 1 0 0 1 0 1 1 1 1 1 2 1 1 69 | 1 0 2 0 2 1 0 0 1 1 1 1 0 1 0 1 1 0 0 1 0 0 0 1 1 0 0 2 0 0 1 1 0 0 0 0 0 0 1 0 2 0 1 0 0 0 0 0 0 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 0 1 0 1 1 0 0 1 1 0 2 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 0 1 0 1 70 | 1 0 0 0 0 1 1 0 1 1 1 2 1 1 2 0 0 0 1 0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 0 2 0 2 2 0 1 0 0 0 1 1 1 0 1 1 0 0 0 1 1 1 0 0 1 1 0 2 2 0 2 1 0 0 0 0 1 1 0 0 1 2 0 1 1 1 0 1 1 0 0 0 0 0 1 1 1 0 1 1 1 0 1 1 2 1 1 71 | 2 2 0 0 2 0 0 1 1 0 0 0 1 2 0 0 2 2 0 0 0 0 1 2 0 0 0 1 0 1 0 1 1 0 0 2 0 0 1 1 0 1 1 0 1 1 1 0 0 1 2 1 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 1 0 0 0 0 0 1 2 1 1 1 1 0 1 1 2 2 1 0 1 2 0 0 0 0 1 0 0 0 0 0 0 2 1 72 | 0 1 2 1 1 0 1 1 1 0 0 1 1 2 0 1 0 1 1 0 0 0 2 0 0 1 0 0 0 2 0 0 0 1 1 2 0 0 1 1 0 0 0 1 1 0 1 1 0 0 1 0 0 1 1 2 0 1 1 0 0 1 0 1 1 1 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 1 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1 0 2 1 1 73 | 0 0 1 0 1 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 1 0 1 0 1 0 1 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 2 1 0 1 1 1 2 0 1 0 1 1 0 1 0 0 0 0 1 0 0 2 0 0 0 1 0 1 0 0 0 0 1 2 2 0 2 0 0 1 1 0 1 1 1 0 0 0 0 1 1 74 | 1 0 0 0 1 0 1 0 0 1 0 1 1 0 0 2 0 1 1 1 1 1 1 1 1 1 0 2 0 0 0 0 0 1 0 0 2 0 0 1 1 0 1 0 0 0 1 0 1 1 1 2 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 2 0 2 0 1 0 0 0 1 0 0 1 1 1 0 0 0 1 1 1 75 | 0 1 2 2 0 0 0 1 0 1 1 0 1 1 2 1 1 0 0 2 0 1 1 1 0 0 2 0 2 1 0 2 0 1 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 0 1 1 0 0 0 2 0 1 0 0 2 0 0 1 1 0 0 0 1 1 0 0 1 1 1 0 1 2 0 0 1 1 1 0 1 0 0 1 0 0 0 1 1 1 0 0 1 1 2 1 1 76 | 1 0 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0 1 1 0 0 1 1 2 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 1 1 2 1 1 1 1 0 0 2 1 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 0 0 1 0 1 1 0 0 1 2 1 0 0 0 1 1 1 0 1 77 | 0 0 1 1 1 2 1 0 0 0 1 0 1 1 0 0 0 1 1 0 1 0 0 0 1 2 0 1 0 0 0 2 0 0 2 0 0 0 2 1 1 2 0 1 2 1 1 0 0 0 1 0 0 0 0 1 1 1 0 1 1 0 0 0 0 2 0 0 0 0 0 1 2 1 0 1 1 1 1 1 2 1 1 1 0 1 0 2 1 2 1 1 1 1 2 0 1 1 1 0 1 78 | 1 0 0 1 0 1 2 0 1 2 0 0 1 0 0 0 0 0 0 1 0 1 1 2 2 0 0 0 0 2 1 1 0 0 1 1 2 0 0 1 1 1 0 0 1 1 1 0 1 1 0 0 1 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 1 1 1 1 0 0 1 0 1 2 1 0 1 1 2 1 1 0 0 1 1 79 | 1 1 0 1 0 0 1 1 0 0 0 1 1 2 1 0 0 0 1 1 1 0 0 2 0 0 0 1 1 1 1 2 0 0 1 0 0 0 1 1 1 0 0 1 1 0 0 0 1 1 1 0 0 2 1 0 0 0 0 1 0 1 0 0 1 1 0 0 1 1 1 0 1 0 0 0 1 0 0 0 0 2 1 1 1 0 1 0 0 1 1 0 1 2 1 1 0 0 0 0 1 80 | 1 1 0 0 1 0 0 1 0 0 0 0 0 1 1 0 1 1 1 1 1 2 0 1 1 2 1 1 1 1 0 0 1 0 1 1 0 2 2 0 1 0 1 0 0 1 0 2 0 1 2 1 1 0 1 0 1 0 0 0 0 1 1 1 0 0 1 1 0 1 0 1 2 0 1 0 0 2 0 0 0 0 2 0 0 0 1 1 0 1 0 0 0 0 2 0 1 0 0 0 1 81 | 0 0 0 1 1 0 1 0 1 0 0 1 0 0 0 2 0 0 0 0 0 0 1 1 1 0 1 1 1 2 2 0 2 1 1 0 1 2 1 0 1 2 1 0 1 2 0 0 0 2 1 0 0 1 1 0 0 1 1 1 0 1 0 1 1 1 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 1 2 0 1 0 1 1 2 1 1 1 1 0 1 1 82 | 0 0 0 0 0 1 0 1 1 1 0 1 1 2 0 1 0 0 1 2 1 2 1 0 0 1 1 1 1 1 0 1 1 1 0 0 2 1 2 0 0 0 0 0 0 1 1 1 0 1 0 1 1 0 0 1 1 1 2 0 1 1 1 2 0 1 1 2 1 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 2 0 1 1 0 1 1 0 1 0 0 0 2 2 0 0 1 83 | 1 0 1 1 1 1 1 1 0 0 1 1 0 0 0 1 0 0 1 0 0 1 1 0 1 1 0 0 1 0 2 0 1 1 1 0 1 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 1 1 0 2 0 0 0 2 0 0 0 1 0 2 0 1 1 0 0 0 0 1 0 2 0 1 1 1 1 2 0 1 1 1 0 1 0 0 2 0 1 0 0 1 0 0 0 0 1 84 | 0 1 0 0 1 1 0 0 1 0 1 1 0 0 2 1 1 0 1 1 0 0 0 0 1 1 0 0 0 1 1 1 0 0 1 0 0 0 0 0 2 2 0 0 2 0 1 1 0 0 1 1 0 2 0 0 0 0 1 0 0 1 1 1 0 1 1 0 1 0 1 1 1 0 2 1 1 0 2 0 1 0 0 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 85 | 0 0 1 0 1 1 0 2 0 0 1 1 1 0 0 1 0 1 1 1 1 1 2 0 2 0 0 0 0 0 0 1 0 1 2 0 1 0 1 1 1 0 0 0 1 1 0 2 0 0 1 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 1 1 0 0 1 1 1 0 1 1 0 0 1 0 0 1 1 0 0 0 0 0 1 0 1 1 1 0 0 1 0 1 86 | 1 0 2 0 1 1 1 1 1 1 2 1 0 0 0 0 0 1 0 1 0 1 1 0 1 0 1 1 2 0 2 0 1 2 0 0 0 2 1 0 0 0 1 1 1 1 0 1 0 0 0 0 1 0 0 0 2 1 0 1 1 1 1 1 0 0 0 1 1 0 0 0 1 1 0 2 0 0 2 1 0 0 0 0 2 0 0 1 2 1 1 1 0 1 0 0 1 0 0 1 1 87 | 1 0 1 0 1 0 1 1 1 1 0 0 1 0 0 1 0 2 2 0 1 1 0 0 0 0 1 2 0 1 1 1 1 1 0 1 0 1 0 0 0 0 2 0 1 0 1 0 0 0 0 1 2 1 1 0 0 1 0 0 0 2 0 1 1 1 1 0 0 0 1 0 1 0 0 2 0 0 0 0 0 1 1 1 0 1 2 1 1 0 0 1 0 1 1 1 1 1 0 0 1 88 | 0 1 1 0 1 2 1 1 0 2 2 1 1 1 0 1 1 1 2 1 1 0 1 1 0 1 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0 1 1 0 1 0 1 0 1 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 1 0 2 1 0 0 2 0 0 1 1 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 2 0 0 0 0 1 0 1 0 0 1 89 | 1 0 1 0 1 0 0 0 1 1 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 2 2 0 0 0 2 0 0 2 1 0 1 0 1 1 0 0 0 0 1 1 1 1 1 0 1 0 0 1 0 0 0 1 0 1 2 0 0 0 1 0 0 0 2 2 0 1 0 0 0 1 2 1 1 0 0 0 0 1 0 0 1 0 1 1 0 1 2 0 0 0 1 0 1 1 90 | 1 1 1 0 0 2 0 0 1 0 2 1 0 0 1 0 0 0 1 0 0 0 1 1 1 0 1 0 2 0 2 1 1 1 1 0 2 0 1 1 2 1 0 0 1 0 0 1 1 0 0 0 0 0 1 0 1 1 0 2 0 1 1 1 0 1 0 0 2 0 0 1 0 1 0 0 0 2 1 1 0 1 0 1 1 0 0 0 1 0 1 0 1 1 1 1 2 0 1 0 1 91 | 0 1 1 0 1 0 0 0 0 1 1 1 1 0 0 2 0 0 0 1 1 1 0 1 1 0 0 0 1 0 1 1 1 0 1 1 0 0 1 0 0 1 2 2 0 1 0 1 1 0 1 1 0 0 2 0 1 0 0 0 1 1 1 2 1 1 1 1 0 1 0 0 1 0 1 0 0 0 1 1 1 0 1 0 0 0 0 1 1 0 0 0 0 2 1 0 1 0 1 0 1 92 | 1 1 0 1 1 0 2 0 0 1 1 1 1 2 1 1 0 1 0 2 0 0 0 1 0 2 0 1 1 0 1 0 0 0 0 1 1 2 0 1 0 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 0 0 0 0 2 1 0 1 1 0 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 1 2 1 1 0 1 1 1 1 1 1 1 0 1 0 0 1 93 | 0 2 0 0 0 1 1 1 1 0 0 0 1 2 2 1 1 1 1 1 0 0 0 1 1 0 0 1 1 1 2 0 0 0 0 1 0 0 1 1 2 2 0 1 1 1 2 0 1 0 0 1 0 0 1 0 0 2 0 1 0 0 1 0 1 1 0 0 0 0 0 0 2 2 0 0 1 1 0 1 0 0 1 0 2 0 0 1 0 1 1 0 0 1 2 0 0 0 1 1 1 94 | 0 1 1 1 0 0 0 0 2 1 0 0 0 1 1 0 1 0 0 0 0 1 0 2 2 0 1 0 0 1 1 0 0 0 0 0 0 0 1 0 2 0 1 1 2 0 1 0 0 0 0 0 0 0 1 1 0 0 1 1 1 1 0 1 0 0 2 1 0 1 0 0 2 1 1 1 1 0 0 2 0 0 1 0 1 0 1 1 0 0 0 1 0 0 0 0 1 0 2 1 1 95 | 0 0 1 1 0 1 1 1 0 2 1 2 0 0 2 1 0 1 2 1 1 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 1 1 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 2 1 1 0 1 0 1 0 0 0 1 0 1 1 1 1 0 0 1 1 0 1 0 1 0 1 0 0 1 0 1 1 1 1 1 96 | 2 1 1 1 0 2 1 0 1 1 1 2 0 0 0 1 1 2 0 0 0 0 0 0 1 0 0 2 0 1 0 1 0 1 1 0 0 0 0 1 1 0 0 0 0 0 1 1 0 1 1 1 1 0 0 2 1 0 1 1 0 0 1 2 0 0 0 1 0 0 1 0 2 1 1 1 1 1 1 0 1 0 0 0 1 0 2 1 0 1 1 2 0 0 1 2 0 1 1 0 1 97 | 0 0 1 1 0 0 1 0 1 0 0 0 1 1 1 0 0 1 0 0 0 1 1 0 1 1 1 0 1 0 1 0 0 0 0 1 1 1 0 1 1 1 0 1 2 1 0 0 2 0 0 1 0 0 0 2 2 2 1 0 1 0 1 1 0 1 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 0 1 0 0 1 1 0 0 0 0 1 98 | 1 1 0 0 0 1 1 0 1 0 0 1 1 1 1 1 0 0 1 0 0 1 0 0 0 2 1 0 1 1 0 1 0 2 0 0 0 0 0 2 1 0 0 1 0 1 0 1 0 1 0 0 1 2 0 0 0 1 0 0 1 0 1 1 1 1 1 0 0 1 1 1 0 1 0 0 2 1 0 0 0 0 0 1 2 0 1 0 0 1 0 1 0 0 2 1 1 1 0 0 1 99 | 1 1 0 1 0 0 2 1 0 0 0 0 1 1 1 0 2 0 1 1 0 0 0 1 1 0 1 1 0 0 1 1 1 1 2 1 0 1 0 1 2 2 1 1 1 1 1 0 1 0 0 2 0 1 1 0 0 0 0 2 1 2 0 0 1 0 1 2 1 0 1 0 0 1 1 0 0 0 1 1 0 1 1 1 1 1 0 0 1 0 0 1 0 0 0 1 0 0 0 2 1 100 | 0 2 1 2 1 0 0 1 0 1 1 1 1 0 0 0 1 0 0 2 1 0 1 0 1 1 1 0 0 1 1 0 0 1 2 0 1 0 0 1 1 0 2 1 0 0 0 1 1 0 0 1 1 1 1 1 2 2 0 0 0 1 0 0 1 1 1 2 1 0 1 0 1 1 0 0 1 0 1 2 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 101 | 2 0 0 1 0 0 0 2 0 2 0 1 0 0 1 2 1 0 2 1 0 2 1 1 0 1 1 2 1 0 0 1 0 0 0 1 1 0 1 1 0 0 2 0 0 2 1 0 0 1 2 0 0 2 0 1 1 2 1 0 1 0 1 1 1 1 0 0 0 0 0 1 0 1 1 2 0 1 1 1 0 1 0 2 0 2 0 1 0 0 1 1 1 1 0 2 0 1 1 2 1 102 | 1 0 0 1 0 0 1 1 0 1 0 0 0 2 1 1 0 0 0 1 0 1 0 1 1 0 1 1 1 0 1 0 1 0 2 1 0 1 1 0 1 1 0 0 2 2 0 0 1 1 1 1 0 2 0 0 0 1 1 0 0 1 1 0 0 0 0 0 1 1 1 0 2 0 1 2 0 1 1 1 2 0 0 0 1 1 1 1 0 2 0 1 0 1 1 0 1 0 1 0 0 103 | 0 1 1 0 0 2 0 0 2 2 1 0 1 1 1 1 0 0 1 2 1 1 0 1 2 0 0 1 1 0 0 1 2 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 2 1 0 0 0 1 1 0 2 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 1 0 2 0 1 1 2 0 0 104 | 1 1 1 0 1 0 1 0 0 0 1 0 0 1 2 1 2 0 0 0 1 0 0 1 1 1 1 1 0 0 1 0 1 0 0 0 0 0 0 1 1 0 1 0 1 2 0 1 2 1 0 0 1 1 1 1 1 0 1 1 0 0 1 0 2 0 0 1 0 1 1 1 1 0 1 2 1 1 1 1 1 0 1 1 1 2 1 1 1 1 0 0 1 0 1 0 0 0 2 0 0 105 | 1 1 2 2 1 0 0 0 0 0 1 0 1 1 0 1 1 1 0 1 2 0 0 1 2 0 0 0 1 0 2 0 2 0 0 1 1 1 1 1 0 1 1 1 0 0 2 0 1 0 1 1 1 0 1 1 0 0 0 2 0 0 0 0 1 1 1 1 1 1 1 0 2 0 0 0 0 1 1 0 0 1 0 1 0 0 1 0 1 0 2 1 0 1 0 0 0 1 0 0 0 106 | 1 0 0 1 0 1 0 1 1 0 2 1 0 0 2 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 1 1 1 1 0 0 0 0 0 1 2 0 0 1 0 0 1 1 0 1 1 2 0 0 0 0 0 1 1 0 0 0 1 0 0 2 0 0 1 1 0 1 0 0 1 0 2 0 1 0 0 1 0 1 1 0 0 1 0 2 0 0 0 0 1 0 0 1 1 0 0 107 | 1 0 1 1 1 0 0 1 0 0 2 1 2 0 0 2 0 1 0 1 0 1 0 2 0 0 0 2 0 1 0 1 2 0 0 0 0 0 1 1 1 1 1 0 0 0 1 1 2 0 0 1 0 1 1 1 0 0 0 0 0 1 1 0 0 0 1 1 0 1 1 1 1 0 1 0 1 1 0 0 1 1 1 1 1 1 1 0 2 1 0 1 0 1 1 0 0 0 0 1 0 108 | 1 0 1 1 1 1 0 1 0 1 1 1 0 1 1 0 0 1 1 0 1 2 1 1 0 1 0 2 0 1 0 1 0 1 1 0 1 0 0 0 0 2 0 0 1 2 0 1 0 1 0 1 2 0 1 0 1 0 2 1 0 0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 0 1 0 0 1 0 1 0 1 0 0 0 1 0 0 2 1 1 0 1 0 1 1 1 0 109 | 1 0 0 1 1 1 0 1 0 2 0 2 2 0 1 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 2 1 2 0 0 1 0 0 1 0 1 1 0 1 1 1 0 0 0 1 1 2 0 0 0 0 0 0 0 1 0 0 0 1 1 2 0 2 0 2 0 1 0 0 0 2 1 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 0 110 | 1 0 1 0 1 0 0 0 1 0 1 1 0 1 1 0 1 0 2 0 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 1 1 1 0 1 0 1 1 0 1 1 1 0 1 1 0 0 0 0 0 1 0 1 1 1 2 0 1 1 0 0 1 0 2 0 1 0 0 1 2 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 2 0 2 0 1 2 0 0 0 111 | 1 0 1 0 0 1 1 0 1 0 0 0 1 0 0 0 0 2 0 0 1 1 1 2 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 1 1 2 1 0 0 0 1 1 1 0 0 0 1 2 0 0 1 0 1 1 1 0 1 0 0 1 1 1 0 0 0 0 0 2 0 1 2 1 2 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 112 | 1 0 1 0 0 1 1 0 1 1 1 1 2 0 1 0 0 1 1 1 1 1 0 0 1 0 1 0 2 1 2 1 1 2 1 0 1 1 1 1 0 2 1 1 0 2 0 2 1 1 1 2 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 1 0 0 1 1 0 0 0 0 1 1 0 1 1 1 2 0 1 1 1 1 0 0 2 0 2 0 1 1 1 1 0 0 113 | 2 0 1 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 1 2 0 1 2 2 1 0 1 0 0 0 0 0 1 0 2 0 1 0 0 0 2 0 2 1 0 0 0 0 1 2 0 1 0 1 0 2 0 0 1 1 1 1 0 0 2 1 1 2 2 0 1 2 1 1 0 1 0 0 1 1 1 2 0 1 0 2 0 0 0 0 1 0 0 1 0 1 0 0 0 1 0 114 | 0 1 2 0 0 1 1 1 0 1 0 0 0 0 1 2 2 0 0 0 0 1 2 0 0 0 0 0 0 1 0 0 2 0 1 1 1 1 0 1 0 0 0 2 1 0 2 0 0 1 2 0 1 0 1 0 1 0 1 0 1 0 0 2 0 0 0 2 1 0 0 1 0 2 0 1 0 0 0 0 0 1 0 1 1 0 1 1 1 0 0 0 1 0 1 0 2 0 1 0 0 115 | 0 1 1 0 1 0 1 2 1 0 1 1 0 1 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 1 1 1 1 1 0 0 0 1 0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 1 1 0 0 0 2 0 0 0 1 1 2 1 1 2 0 0 1 1 0 1 0 1 2 1 2 0 0 1 1 0 0 1 1 0 0 116 | 0 0 1 2 0 1 0 1 0 2 1 1 1 1 1 0 0 1 2 1 0 0 1 2 1 2 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 1 1 1 2 0 1 1 2 1 2 0 2 1 1 0 0 0 1 1 0 2 0 0 1 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 117 | 1 1 0 0 0 2 0 0 1 0 1 1 1 1 1 1 1 0 0 1 1 0 0 1 0 0 0 1 1 0 1 1 2 1 0 1 0 0 1 2 0 1 1 0 0 1 1 1 2 1 1 0 1 0 2 0 0 1 0 1 2 0 0 1 0 2 1 2 1 2 0 1 0 1 0 0 0 0 0 2 1 2 1 0 1 0 2 0 0 0 1 1 0 1 0 1 1 0 0 0 0 118 | 0 1 0 0 0 1 0 1 1 1 0 0 2 0 0 0 0 0 0 1 2 2 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 2 2 1 2 1 1 0 0 1 0 0 0 1 0 1 1 0 1 1 0 0 1 0 0 1 1 1 1 0 1 1 0 0 0 0 1 1 2 0 1 1 1 1 1 1 0 1 0 0 1 0 0 0 1 1 0 1 1 1 1 0 1 0 0 119 | 2 2 2 0 0 1 0 1 1 0 1 1 1 0 1 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 1 0 0 0 2 1 1 0 1 1 1 0 1 1 0 1 0 0 0 1 0 1 0 1 0 0 1 1 2 0 0 0 0 1 0 1 0 1 0 1 2 0 1 0 1 0 0 0 0 1 1 0 1 0 0 1 1 1 0 0 120 | 1 1 0 1 0 1 0 0 0 0 2 0 1 2 1 0 1 1 0 0 1 1 0 1 1 0 1 1 0 2 0 1 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 1 0 1 1 1 2 1 0 0 0 1 0 0 0 1 0 0 1 1 0 1 1 1 0 0 0 0 1 1 0 0 0 0 2 1 0 1 1 2 0 2 2 1 0 1 0 2 0 1 2 0 1 1 0 121 | 1 0 1 0 1 1 1 0 0 1 1 1 0 1 1 0 1 1 2 0 0 2 1 1 2 1 2 1 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 2 2 1 0 0 0 1 0 0 1 0 1 1 0 1 0 0 1 1 2 0 0 1 1 1 2 2 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 1 0 1 1 0 122 | 1 1 0 0 0 2 0 1 1 1 1 0 0 0 0 1 0 1 0 1 2 1 0 1 0 0 1 0 0 1 0 1 1 2 0 0 1 1 1 0 0 2 1 0 1 1 2 2 1 1 0 1 0 0 1 0 1 1 1 1 1 1 0 1 0 2 1 1 0 0 2 0 1 2 0 1 1 0 0 0 0 1 1 2 0 0 0 0 0 1 1 1 0 1 0 1 0 0 1 0 0 123 | 0 0 0 1 2 0 1 0 0 0 1 1 0 0 1 0 0 0 0 0 1 1 1 0 0 1 0 1 1 1 0 1 0 1 0 0 0 1 2 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 2 0 1 0 0 0 0 1 1 1 1 1 0 0 1 0 1 0 0 1 2 1 0 0 0 0 1 0 124 | 0 1 1 1 0 0 0 0 1 2 1 1 1 2 1 0 0 0 2 0 1 1 0 1 0 0 0 1 1 0 0 0 1 1 1 1 0 1 0 1 0 0 0 0 0 0 1 1 0 0 2 1 0 1 1 1 2 0 1 0 0 1 0 0 0 1 1 1 0 1 0 0 1 1 0 0 0 1 1 1 2 1 0 0 2 1 1 0 0 0 0 2 1 0 0 1 0 2 0 0 0 125 | 0 0 0 0 2 0 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 2 1 1 1 1 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1 1 2 1 1 0 1 2 0 2 0 1 0 2 0 0 2 1 1 2 0 0 0 2 1 0 2 1 0 0 1 1 2 1 1 0 0 1 2 0 0 1 0 0 0 0 0 1 1 1 0 1 0 1 0 0 0 0 1 0 0 126 | 1 0 0 0 1 1 1 1 1 0 1 1 2 1 1 1 0 0 1 2 0 1 0 2 0 1 0 2 2 0 1 1 1 1 0 0 1 2 0 0 2 0 0 0 1 1 1 1 1 2 0 0 0 0 0 1 1 0 1 1 1 2 0 2 1 0 1 0 1 0 0 1 1 2 0 0 1 0 0 0 1 0 1 1 1 0 0 2 0 1 1 0 1 0 0 1 1 1 1 0 0 127 | 0 1 1 0 1 1 1 0 1 1 0 0 0 1 1 2 1 1 1 1 1 0 1 1 0 0 0 1 1 1 1 2 0 0 2 2 0 0 2 0 1 0 1 1 1 0 2 2 0 1 1 1 1 1 0 0 1 0 1 1 0 1 2 1 0 1 0 1 0 0 1 1 1 0 0 1 0 0 1 0 1 0 0 0 1 1 1 0 0 1 0 0 0 2 0 0 1 0 1 0 0 128 | 1 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 2 1 1 0 0 0 1 0 1 1 0 0 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 2 1 0 1 0 0 1 0 0 0 0 1 0 2 1 1 0 0 1 1 0 1 0 1 0 0 0 0 0 1 0 1 1 1 0 0 129 | 1 0 0 1 0 1 0 0 2 1 0 0 2 0 0 0 0 2 0 1 0 1 1 1 1 0 1 1 1 0 0 0 2 2 1 0 0 1 0 0 1 1 2 0 1 1 1 0 0 0 0 1 1 1 1 1 1 0 2 0 0 1 1 0 2 0 0 1 0 1 0 0 0 1 0 1 0 0 1 2 1 1 0 0 1 1 0 2 1 0 0 0 0 0 1 1 1 0 0 2 0 130 | 0 0 2 0 1 0 0 0 1 1 0 1 0 1 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 0 1 1 2 0 1 0 0 1 0 0 0 1 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 0 0 1 0 1 1 1 2 0 0 1 0 1 0 1 0 0 0 0 0 1 1 0 2 0 2 2 0 0 1 0 0 0 0 1 0 0 1 1 0 1 0 131 | 2 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 1 1 0 1 0 2 0 1 1 0 0 1 1 0 0 0 0 1 0 0 2 1 0 1 1 0 0 0 1 0 0 0 1 0 1 2 2 0 1 1 1 1 0 1 0 1 0 1 2 0 0 1 1 0 1 1 0 1 1 2 1 0 2 0 0 0 0 0 1 1 1 0 0 0 1 1 0 2 1 1 0 0 0 1 0 132 | 1 1 0 0 0 0 2 0 1 1 0 1 1 0 2 0 1 1 1 0 1 1 2 0 1 0 0 0 0 1 0 1 1 1 0 1 0 1 0 1 1 2 1 1 0 0 1 1 0 1 0 0 0 0 0 1 1 1 0 1 0 1 0 1 0 0 2 1 2 0 1 2 1 2 1 1 1 0 0 0 0 1 1 2 1 1 0 0 0 1 1 0 1 2 1 0 2 0 2 0 0 133 | 1 0 0 1 0 0 1 2 0 0 0 0 0 1 0 0 1 1 2 1 0 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 0 1 0 0 2 1 0 0 1 0 0 1 1 1 0 0 1 1 0 0 0 1 1 1 0 0 2 0 0 0 0 0 1 1 0 0 1 1 0 0 0 1 0 0 0 1 0 1 0 1 2 0 1 1 0 1 1 0 1 0 1 0 1 1 0 134 | 2 2 0 1 0 1 2 0 0 0 1 0 2 0 2 0 1 0 0 1 0 1 1 1 1 1 2 1 0 1 0 1 0 1 1 0 0 1 1 0 1 0 2 1 0 0 1 1 1 0 0 1 2 0 0 0 0 0 2 0 0 1 1 1 2 2 0 1 0 0 0 1 0 1 1 1 1 1 0 0 2 1 1 0 0 1 0 2 0 0 1 1 1 1 0 1 0 1 0 1 0 135 | 1 2 1 1 0 0 1 2 1 2 1 0 0 2 0 1 1 1 0 1 0 0 1 1 0 0 0 0 0 0 1 1 2 0 1 1 0 1 1 0 2 0 1 1 0 1 1 1 2 0 1 1 2 0 2 0 2 1 0 0 0 1 0 1 1 0 2 1 1 0 0 0 0 0 0 1 1 0 2 1 1 1 1 1 0 1 1 0 0 0 0 1 1 0 2 0 2 2 1 2 0 136 | 0 1 1 1 2 0 2 0 2 0 1 1 0 0 1 1 0 1 1 0 1 1 1 0 1 1 0 1 0 0 0 0 1 0 1 1 0 1 0 0 1 0 0 2 1 2 0 1 1 2 1 0 2 0 0 0 0 0 1 0 0 1 1 1 1 2 1 0 1 0 0 1 1 1 0 0 0 0 0 1 0 0 1 2 0 0 0 1 0 0 2 0 1 1 1 1 0 1 0 0 0 137 | 1 1 1 1 1 2 1 1 1 0 1 0 1 1 1 0 0 0 2 0 0 2 2 0 2 2 1 1 1 0 2 2 1 1 1 0 1 0 1 1 0 1 1 0 0 1 0 0 1 0 1 1 1 0 0 0 1 1 0 1 1 1 0 0 0 1 2 2 0 1 1 1 0 0 0 1 1 0 0 1 1 0 0 1 1 1 0 2 2 1 2 1 1 0 1 0 1 0 1 0 0 138 | 1 1 0 1 1 0 0 0 1 0 0 0 0 0 2 0 1 0 0 1 0 0 2 0 1 0 0 2 0 1 0 0 1 1 0 1 0 0 0 0 2 1 0 0 0 1 0 0 0 1 0 0 1 1 2 1 1 0 2 1 0 0 1 0 1 1 0 0 2 0 1 1 0 0 1 0 2 0 0 2 0 1 1 0 1 0 1 1 1 2 0 1 0 1 1 0 0 1 1 0 0 139 | 1 0 1 0 2 1 0 2 0 0 0 1 2 0 1 1 0 0 1 1 2 1 2 0 0 1 0 0 2 1 0 1 0 2 1 1 1 2 0 1 2 0 0 0 0 0 2 0 2 0 1 0 2 0 0 0 0 0 0 0 1 0 1 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1 0 0 0 2 1 2 0 1 0 0 0 1 1 1 0 1 0 1 1 0 1 2 0 140 | 0 0 0 0 0 0 0 1 1 1 0 0 1 2 2 2 0 0 0 1 0 0 0 1 1 2 2 1 1 1 1 2 0 0 0 1 0 1 2 1 1 1 0 1 0 0 1 0 0 1 0 2 1 0 1 0 0 0 0 0 1 0 1 0 0 0 1 1 0 1 0 1 1 1 1 0 0 1 1 1 2 0 0 2 0 1 0 2 0 0 2 1 1 1 1 0 0 0 1 2 0 141 | 0 0 0 0 2 1 1 0 2 0 1 2 1 2 2 0 1 0 1 2 0 0 0 0 0 0 1 1 1 1 0 1 1 1 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 2 1 0 1 1 1 0 0 0 0 1 0 0 2 1 0 0 0 2 0 0 1 1 0 2 1 1 1 0 1 1 1 2 1 0 1 0 1 1 2 1 0 1 0 0 1 0 142 | 1 0 1 1 0 0 0 1 0 1 1 1 0 2 2 0 0 1 0 0 2 1 0 1 0 0 0 1 1 2 1 1 1 0 1 2 0 1 1 2 1 1 1 1 1 0 1 1 1 0 0 1 0 0 0 0 1 1 0 0 2 1 0 0 0 0 1 1 1 0 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 1 0 0 0 143 | 1 1 1 1 0 0 0 1 2 0 1 0 0 0 1 0 0 1 1 1 0 0 0 2 0 1 2 1 0 0 0 1 1 0 2 1 0 1 1 1 0 2 0 0 0 1 2 1 1 0 0 1 1 1 2 2 0 0 1 0 1 1 0 0 1 1 1 1 2 0 1 1 2 2 1 0 0 1 0 0 0 0 0 0 2 2 1 1 0 1 1 1 2 0 0 0 1 2 1 2 0 144 | 1 0 2 0 1 0 1 1 1 0 1 1 0 0 0 0 0 1 0 1 0 0 2 1 1 0 1 0 0 0 1 0 0 1 0 0 0 1 0 2 0 0 0 0 1 1 0 1 1 1 1 0 2 0 0 1 1 0 0 0 0 1 0 1 1 0 1 0 2 1 1 0 0 0 0 0 0 1 0 0 1 0 0 1 0 1 1 2 0 0 1 0 0 1 0 0 0 1 1 0 0 145 | 0 2 1 1 2 0 2 1 2 0 1 1 1 1 1 0 1 1 1 0 0 0 2 0 0 0 1 0 1 0 0 2 1 0 0 1 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1 0 1 1 1 0 1 2 1 0 2 1 2 1 0 2 1 0 1 0 1 1 1 0 1 1 1 0 1 0 2 1 1 1 1 0 1 0 1 1 1 0 0 0 1 0 1 0 0 1 0 146 | 0 1 0 1 1 1 0 0 0 1 1 0 0 2 0 0 0 1 0 0 1 2 1 1 0 0 0 1 1 1 1 2 0 1 0 1 1 0 0 0 0 0 0 1 0 1 0 1 0 1 1 0 1 0 1 1 1 1 1 1 1 2 0 0 1 0 0 1 2 1 0 0 0 0 0 1 1 0 1 0 1 1 2 1 0 1 0 0 1 0 2 0 1 1 0 1 1 1 1 0 0 147 | 2 0 2 0 0 1 1 1 0 0 0 0 1 2 2 0 1 1 0 0 0 2 0 1 1 0 1 0 1 1 1 0 1 1 1 1 0 0 1 2 0 0 1 1 1 0 2 0 1 0 2 1 1 1 1 0 1 0 0 1 1 1 0 1 0 0 0 2 0 0 1 0 1 0 0 1 0 0 1 0 0 0 0 1 1 1 1 0 0 0 0 2 1 0 0 0 2 0 0 1 0 148 | 2 1 1 1 0 1 1 0 1 1 2 0 0 1 0 1 0 1 0 1 1 0 1 1 0 0 0 0 0 0 1 1 2 0 2 0 0 2 0 0 0 1 2 0 0 1 0 2 2 0 1 0 2 0 1 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 1 1 1 0 1 0 0 1 0 1 1 1 1 0 2 0 1 2 0 0 149 | 0 1 1 1 0 1 0 1 0 1 1 0 1 0 0 0 0 1 0 0 1 2 0 0 0 1 1 1 0 0 0 2 1 1 1 0 1 0 0 1 0 0 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 0 0 2 1 1 0 2 1 0 1 1 0 0 0 1 1 1 1 0 1 1 2 1 0 0 2 1 0 1 0 0 1 1 0 0 0 0 1 0 1 0 1 1 0 150 | 1 0 0 0 0 2 1 1 1 0 2 0 0 0 0 0 1 0 0 0 1 1 0 0 0 2 1 0 0 1 1 0 0 1 1 0 0 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 0 1 1 0 0 0 0 0 1 0 1 1 0 0 1 0 0 0 2 0 0 0 0 1 2 1 0 1 0 0 0 0 0 0 0 1 0 2 0 2 0 0 1 1 2 1 0 0 0 151 | 2 0 0 1 1 2 2 0 1 1 0 0 1 2 1 0 1 0 2 0 0 0 1 0 0 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 2 0 1 1 1 1 0 0 1 1 0 1 0 0 0 1 0 2 2 1 0 0 0 0 0 1 0 0 1 1 1 1 2 1 0 1 1 0 0 0 0 1 2 1 1 1 0 0 152 | 0 1 0 0 0 1 0 1 0 1 0 1 2 1 1 0 1 2 1 0 1 1 1 2 2 0 0 0 1 2 0 2 1 0 0 1 0 0 1 1 1 0 1 2 0 0 1 0 1 0 0 1 0 0 0 1 1 1 1 0 1 0 0 1 0 0 1 1 0 1 1 0 0 0 1 0 0 1 0 0 0 1 1 2 0 1 1 0 2 0 1 0 0 0 1 0 1 0 1 1 0 153 | 1 0 0 0 1 1 0 2 2 1 0 0 1 0 0 1 1 1 0 1 0 0 0 0 1 2 1 0 2 0 1 1 1 0 2 1 1 1 1 0 0 1 0 0 1 0 0 0 2 2 0 1 0 0 1 1 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0 2 1 0 1 1 1 0 0 1 0 0 0 0 1 0 1 0 0 0 1 0 0 1 2 0 0 2 0 1 0 154 | 1 2 0 1 0 1 0 0 1 1 2 0 1 2 1 0 0 0 0 1 1 0 0 0 1 0 0 2 0 1 1 1 1 2 1 1 2 1 0 1 0 1 0 1 1 0 0 0 1 2 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 0 0 1 0 1 2 0 0 0 1 1 0 0 0 0 1 1 2 0 1 0 0 2 1 1 1 0 0 0 0 155 | 0 0 0 1 1 1 0 0 0 1 2 2 1 1 1 1 2 0 2 2 2 1 0 0 0 0 0 0 1 1 0 2 0 1 1 1 0 0 0 0 1 2 1 1 2 0 0 0 0 1 1 1 1 0 1 0 0 0 1 1 0 0 0 0 0 0 0 2 0 0 0 1 0 1 0 1 1 1 1 0 2 2 2 1 1 1 1 0 1 0 0 0 2 0 0 1 1 1 1 0 0 156 | 0 0 2 0 1 0 1 0 0 1 1 0 1 0 0 0 0 1 0 1 0 0 1 0 0 1 0 1 2 1 1 1 2 0 1 1 0 0 0 1 0 0 0 1 1 1 2 0 1 0 2 0 0 1 1 2 1 0 0 1 0 1 0 1 0 2 0 0 1 1 2 0 1 0 0 1 0 1 1 0 0 2 1 0 0 1 1 0 0 1 2 0 0 1 0 0 1 0 0 0 0 157 | 1 1 0 1 1 0 0 1 1 0 0 1 2 1 1 2 2 1 1 1 0 1 0 0 1 1 0 0 1 1 0 1 1 0 0 0 1 1 1 0 1 1 2 0 1 0 0 0 0 0 1 1 0 1 1 1 1 0 0 1 0 1 1 0 1 0 1 0 1 1 0 1 1 1 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 1 1 0 1 0 0 0 1 0 0 1 0 158 | 0 1 0 2 0 0 0 1 1 1 1 0 0 1 0 0 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 1 0 1 1 1 1 0 1 1 0 0 0 1 0 1 2 0 0 2 1 0 2 1 1 1 0 2 0 1 0 1 0 0 0 1 0 0 2 2 1 1 2 0 1 0 1 1 1 0 1 0 0 0 0 0 0 0 2 0 1 1 1 0 0 2 1 1 0 159 | 2 0 1 2 0 0 1 0 1 1 1 0 0 0 1 1 0 0 0 1 0 1 0 0 2 1 0 0 2 1 0 1 2 0 0 1 0 0 0 0 1 1 1 2 0 1 1 1 1 2 0 0 1 0 1 0 1 0 1 0 0 1 0 2 1 0 0 1 0 1 1 0 1 2 1 1 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 160 | 0 0 1 1 2 0 1 1 1 0 1 0 0 1 0 0 0 1 1 0 0 0 1 0 2 0 1 0 1 0 0 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 0 2 0 0 1 1 1 1 0 1 1 1 1 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 2 2 1 2 1 0 2 0 1 1 1 2 0 1 1 0 0 0 0 0 161 | 1 0 0 0 2 1 0 0 1 1 0 1 0 0 0 1 1 0 0 1 1 0 0 1 0 2 0 2 1 0 0 1 2 1 1 0 0 0 0 0 0 1 0 1 1 1 1 0 1 1 0 2 0 0 0 0 0 1 1 2 0 0 0 0 0 2 0 2 1 2 0 0 1 2 1 0 1 0 0 0 0 0 0 2 0 1 0 1 2 2 1 0 1 0 1 0 1 1 1 0 0 162 | 1 1 0 1 2 1 1 0 1 0 1 1 0 1 1 0 2 1 2 0 0 1 0 1 0 1 2 0 0 1 1 1 1 2 0 0 1 1 0 1 0 1 0 0 2 0 0 1 0 0 1 1 0 0 0 1 0 2 0 1 1 1 0 0 0 2 1 1 0 2 1 0 2 2 1 0 0 0 1 0 0 0 0 1 1 0 0 1 1 0 1 1 2 0 1 0 0 1 1 0 0 163 | 0 0 0 2 1 1 1 0 2 0 0 1 2 0 1 1 0 0 0 0 0 1 1 0 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 2 0 1 1 1 0 1 1 1 0 1 1 1 0 1 0 1 0 2 0 0 0 0 2 2 0 1 1 2 1 1 1 1 2 1 1 2 0 0 0 1 0 1 0 2 1 1 0 0 1 1 0 0 1 0 2 0 0 164 | 0 1 0 2 1 0 1 2 1 1 1 1 0 0 1 0 0 0 0 0 1 1 0 1 0 0 0 1 1 2 2 1 0 2 1 2 1 1 1 1 1 0 0 2 1 0 0 1 0 1 2 1 1 1 1 0 1 1 0 1 1 0 1 0 1 1 1 2 1 0 2 1 0 1 1 0 1 0 0 2 2 1 1 0 1 1 1 1 2 0 1 1 0 1 1 0 0 2 0 0 0 165 | 0 1 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 2 1 1 2 1 0 0 1 0 0 2 0 0 2 0 1 0 0 1 0 0 1 0 0 1 1 0 1 1 1 0 1 1 0 1 0 2 2 1 0 1 0 1 1 1 1 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 2 0 0 1 0 0 1 0 0 0 0 0 0 1 2 1 0 2 0 0 166 | 0 1 1 1 0 0 0 1 1 2 1 1 0 0 0 0 1 0 0 0 0 0 1 1 0 1 1 1 1 0 1 1 0 1 2 2 1 1 1 0 1 2 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 1 1 2 0 1 0 0 0 0 1 1 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 2 1 1 0 0 0 0 0 1 1 0 2 2 1 0 0 167 | 1 1 0 0 2 0 0 1 1 1 0 0 0 0 1 2 1 1 0 0 1 1 0 0 2 0 0 1 1 2 1 0 0 1 1 0 1 0 0 0 1 2 1 0 0 0 1 1 1 2 1 0 1 0 0 0 1 1 1 2 2 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 2 1 1 0 0 0 0 0 1 0 1 1 1 0 2 0 0 2 2 0 168 | 0 1 1 1 0 1 1 1 1 0 0 2 1 0 0 1 0 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 2 0 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 1 0 1 0 0 1 1 2 1 0 1 0 0 0 0 0 0 1 1 1 2 1 0 0 0 0 2 2 0 0 0 2 1 0 1 1 0 1 0 0 169 | 1 0 0 1 1 0 0 1 2 0 0 0 2 1 0 0 1 1 0 1 0 0 0 1 2 0 0 1 0 0 1 0 0 1 0 1 1 0 0 2 1 1 0 1 0 1 1 1 2 0 1 0 2 1 0 0 1 1 0 2 1 1 0 1 1 1 0 0 1 0 2 0 0 1 1 0 0 0 1 0 2 1 0 1 0 2 0 0 1 1 0 1 1 1 0 2 0 0 0 0 0 170 | 1 0 0 1 0 0 0 1 0 0 0 0 0 2 0 0 0 1 0 1 1 1 2 0 1 1 1 0 2 2 1 1 0 0 1 0 0 2 1 0 0 2 0 1 0 2 1 1 0 0 1 0 0 1 0 1 0 0 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 0 1 2 0 2 1 0 0 0 0 1 1 0 1 1 0 1 0 1 2 1 1 0 1 1 0 0 171 | 0 1 0 1 0 0 1 1 0 0 0 1 1 0 2 0 1 1 1 1 0 1 1 0 1 0 0 2 1 0 1 1 1 0 2 2 1 1 2 1 0 1 0 1 1 2 1 0 1 0 2 1 1 1 2 0 1 0 0 1 0 1 1 2 1 1 0 1 0 0 0 1 1 0 1 0 1 1 0 1 1 0 1 2 0 1 1 1 1 0 1 1 2 0 0 1 1 0 0 2 0 172 | 1 2 1 1 1 0 0 0 0 1 1 1 0 0 1 0 0 0 0 1 2 1 1 0 0 1 1 1 0 0 0 1 1 1 1 1 0 1 0 2 0 1 0 0 1 0 1 0 0 2 1 0 1 0 0 0 2 1 1 1 0 2 0 2 2 2 0 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 1 1 2 1 1 0 1 1 1 1 2 1 1 0 2 1 1 2 0 173 | 2 1 1 0 0 0 1 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 0 1 0 1 2 1 0 1 1 0 1 1 1 1 0 2 1 2 0 0 0 0 1 1 1 1 1 1 2 1 1 1 1 1 1 0 0 2 1 0 0 0 1 1 1 1 0 1 0 1 1 0 1 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 2 0 2 0 1 2 1 2 0 174 | 1 1 0 0 0 0 1 0 1 0 1 1 1 2 0 1 2 0 0 0 2 0 0 1 1 1 0 2 0 0 1 2 0 1 0 1 0 0 0 2 0 1 1 0 1 1 1 0 1 0 1 0 0 2 1 1 0 0 0 1 0 2 2 0 1 1 0 0 0 0 2 0 0 1 0 0 0 0 1 1 1 0 1 1 1 1 0 1 2 1 0 1 2 1 0 1 1 1 0 1 0 175 | 0 1 0 1 0 0 0 1 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 1 1 2 0 0 0 0 1 1 0 0 0 2 1 1 1 1 0 0 0 1 1 0 0 1 1 1 1 1 0 1 0 1 0 2 2 1 0 1 0 1 0 0 2 1 0 0 0 0 2 0 0 2 1 0 1 0 0 0 0 176 | 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 2 0 1 1 0 0 0 0 1 0 1 0 0 1 0 1 2 0 1 0 0 0 1 0 1 0 1 1 1 0 1 0 0 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 0 1 0 0 0 1 1 2 1 1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 177 | 1 1 0 2 1 0 0 0 0 1 1 1 1 1 0 1 1 2 0 0 0 0 0 0 0 0 0 1 0 1 1 0 1 1 0 1 0 1 0 1 0 0 1 1 0 1 1 1 0 0 1 1 1 0 2 0 1 0 0 2 0 1 1 0 0 1 1 2 0 0 0 1 0 1 0 1 0 0 2 0 1 0 1 0 0 1 1 2 0 0 1 1 1 0 0 0 0 0 0 1 0 178 | 1 0 1 1 1 1 0 1 1 0 0 0 2 0 2 1 0 0 0 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 0 2 0 0 1 1 0 1 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 2 1 0 2 0 1 0 0 0 1 0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 1 1 2 0 1 2 1 1 0 0 0 179 | 2 2 0 0 0 1 0 1 0 1 2 0 0 0 1 0 0 0 1 0 0 2 1 0 1 1 1 0 2 0 0 1 0 0 0 1 0 1 0 1 2 1 1 1 0 2 0 0 0 0 1 1 0 0 1 0 1 1 0 0 1 0 0 2 0 0 1 0 1 1 1 1 0 1 2 0 1 2 1 1 1 0 1 0 0 0 1 1 1 0 0 2 0 1 0 1 0 1 0 1 0 180 | 1 1 0 0 0 0 1 1 1 0 0 0 0 1 0 1 0 1 1 2 1 2 1 2 0 1 0 0 1 1 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 1 1 0 0 1 0 0 0 1 1 0 1 1 0 0 1 0 1 1 0 0 0 0 1 0 1 0 2 0 0 0 1 1 1 0 2 1 1 0 0 0 0 0 0 0 1 0 0 1 2 1 1 2 1 0 0 181 | 0 1 0 1 0 0 0 1 0 1 0 0 0 1 1 1 0 0 0 1 1 1 0 1 1 2 0 1 0 0 0 0 0 1 0 0 1 2 1 1 1 0 0 1 0 1 1 0 2 1 1 0 0 0 1 2 1 2 1 1 1 0 0 0 1 1 0 2 0 1 0 0 0 0 1 1 0 1 2 0 1 0 1 0 0 1 2 1 1 1 0 0 1 0 0 1 1 1 1 1 0 182 | 0 1 0 0 1 1 0 1 2 0 0 2 0 0 0 0 1 2 0 0 0 0 0 1 0 1 1 1 1 1 0 0 1 0 1 1 0 1 0 1 0 1 0 0 2 1 1 0 2 1 0 1 1 2 1 1 0 1 0 0 1 1 0 0 1 0 0 2 1 2 0 2 0 2 0 1 1 0 0 0 1 2 0 0 1 1 1 0 0 0 0 1 0 2 0 1 0 1 1 0 0 183 | 1 1 1 1 0 1 1 0 0 1 0 0 0 0 1 1 0 1 0 0 0 0 1 2 0 2 0 0 1 0 0 1 0 0 0 1 0 1 2 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 0 2 1 0 0 1 0 0 0 1 0 2 0 1 1 1 1 0 0 1 0 1 2 1 1 0 1 0 1 0 0 0 0 1 0 2 2 1 0 1 0 0 1 1 2 0 0 184 | 0 1 0 0 1 1 1 1 1 1 0 1 1 0 1 1 2 0 1 1 0 1 0 1 2 1 1 0 0 0 1 0 2 1 0 1 0 1 1 2 0 1 1 1 1 0 0 0 0 2 0 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 1 0 1 1 1 1 2 0 1 1 1 0 0 1 1 0 2 1 0 0 0 0 1 2 1 1 1 0 1 0 185 | 1 0 0 2 1 2 2 0 0 0 1 0 0 0 0 2 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 1 0 2 1 0 0 0 1 0 0 0 0 1 0 1 1 1 1 0 0 0 1 2 1 1 1 2 0 1 0 1 1 2 1 0 1 1 1 0 0 1 0 1 1 1 1 0 0 1 0 2 1 0 2 2 2 0 0 0 1 1 1 1 0 0 1 0 0 0 186 | 0 2 0 0 0 0 2 0 1 1 0 0 0 0 0 0 0 0 0 2 0 1 0 0 0 1 2 0 0 0 1 0 0 0 1 1 1 1 2 0 0 0 0 1 0 0 0 1 0 1 1 2 0 0 1 1 0 0 1 1 1 0 0 1 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 0 0 0 1 2 2 1 1 1 0 1 0 0 1 2 0 1 0 0 2 0 0 187 | 0 0 1 1 1 2 0 2 1 0 1 0 1 0 1 1 1 1 1 0 2 0 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 2 0 0 0 1 1 0 1 1 0 1 1 0 0 1 0 1 1 1 1 0 1 0 0 0 1 0 1 0 0 0 1 1 1 0 2 1 0 0 0 0 0 1 0 1 1 0 1 0 1 1 2 0 0 1 0 1 0 188 | 0 0 0 0 0 0 2 2 0 0 0 1 1 2 1 0 0 1 2 1 0 2 1 0 0 1 2 0 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 0 1 1 0 0 2 0 1 1 0 0 1 1 2 1 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 2 0 1 0 1 0 0 1 0 1 0 1 0 189 | 1 2 0 0 1 1 2 1 0 2 1 1 0 1 2 2 0 0 0 0 1 0 0 1 1 0 1 1 2 1 1 1 1 1 1 0 0 0 0 0 0 2 1 1 2 1 0 0 0 0 0 0 1 0 1 0 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 2 0 1 1 2 0 1 0 0 0 0 0 1 1 0 1 1 0 0 0 2 0 0 0 1 0 1 1 1 0 190 | 0 1 1 0 1 1 0 0 0 0 0 0 2 0 1 0 1 1 0 0 1 1 0 0 0 1 0 2 1 0 2 2 1 0 1 1 0 0 0 1 0 1 0 0 1 1 0 0 1 2 0 1 1 1 1 0 1 1 1 1 1 2 1 1 1 1 0 0 1 1 0 1 0 2 0 1 1 0 0 1 1 1 1 0 0 1 2 1 0 1 1 1 0 1 1 0 2 2 0 1 0 191 | 2 2 1 1 1 0 0 0 2 1 0 1 0 1 0 0 1 0 1 1 1 0 1 1 0 1 2 1 0 1 0 1 2 1 1 1 1 0 0 0 1 0 0 0 0 1 1 0 1 1 0 0 0 1 0 1 1 2 0 0 1 0 1 1 0 0 2 0 0 0 1 0 2 0 0 2 0 1 1 0 0 1 1 0 1 0 0 0 0 2 0 2 2 0 1 1 2 1 2 1 0 192 | 0 1 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 2 1 0 1 1 0 0 0 1 0 0 1 0 0 0 1 2 1 1 0 0 1 2 1 2 1 1 0 1 1 0 0 0 0 2 1 2 0 0 1 1 0 0 2 2 0 0 1 0 0 1 1 0 0 1 0 0 1 0 0 1 1 1 1 2 0 1 0 2 0 1 0 0 0 0 0 1 1 2 0 0 193 | 0 0 0 0 1 1 1 0 1 1 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 1 1 0 0 1 0 2 0 1 1 0 0 1 0 0 0 1 0 2 0 1 2 1 0 0 1 1 0 1 0 1 0 0 0 1 0 0 1 1 1 2 0 0 1 1 0 2 0 0 1 1 0 1 0 194 | 1 0 0 1 0 0 2 1 1 1 1 2 1 0 1 0 0 0 0 1 0 2 0 0 2 0 0 1 2 0 1 1 1 1 0 0 0 0 0 1 0 0 1 2 1 1 1 0 1 0 0 0 0 1 2 2 0 2 0 1 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 0 0 0 0 2 0 0 0 1 0 0 1 1 1 0 1 1 2 2 0 0 0 0 1 0 195 | 0 1 1 0 0 0 0 1 1 1 0 0 2 1 0 0 2 1 0 2 1 2 2 0 1 1 1 0 1 0 0 0 0 1 0 0 0 1 1 1 0 1 2 0 1 1 1 0 0 0 0 0 1 0 0 2 0 1 1 1 2 0 2 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 1 2 1 0 0 1 1 0 0 0 0 0 1 0 2 0 1 0 0 196 | 1 1 1 1 0 0 0 1 0 1 0 0 1 0 0 0 1 2 0 1 0 1 1 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 2 1 2 2 0 0 1 0 1 2 1 0 1 1 1 0 0 1 1 0 0 1 1 2 0 1 2 0 0 1 1 0 0 1 0 0 1 1 0 0 0 1 1 0 0 1 0 0 1 0 1 0 1 2 0 1 1 0 197 | 0 0 0 1 2 0 0 0 1 0 1 1 1 1 2 2 2 0 1 0 0 0 0 0 2 0 1 0 0 1 0 1 0 0 1 1 0 2 1 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 0 0 0 2 1 2 1 1 2 1 1 0 0 1 0 0 1 2 0 1 1 0 1 0 2 0 1 1 0 1 2 0 1 1 0 1 0 1 0 0 1 0 0 0 198 | 1 0 1 1 0 0 0 1 0 0 2 0 0 0 1 1 1 0 0 1 0 0 1 0 1 1 2 0 0 1 1 0 0 1 1 1 2 0 2 0 0 1 0 1 1 1 2 0 0 1 1 0 0 0 1 0 0 0 2 1 1 0 1 0 0 0 1 0 0 0 0 1 1 1 0 0 1 0 0 1 1 1 0 0 0 0 0 1 1 0 1 0 1 1 1 0 1 0 1 0 0 199 | 1 1 2 1 0 1 1 1 1 1 1 1 0 2 0 0 1 0 0 0 1 0 0 1 0 2 1 0 0 0 1 0 1 1 0 0 0 2 0 0 0 0 1 0 1 1 2 0 0 0 0 1 1 0 2 0 1 1 1 0 1 1 1 1 0 1 0 1 0 1 1 0 1 1 1 0 2 0 1 0 0 0 1 1 1 1 1 0 0 0 1 1 2 0 0 1 1 0 0 0 0 200 | 1 1 2 1 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 1 0 1 1 0 0 0 1 1 1 0 1 2 1 0 1 1 1 1 0 0 1 2 0 0 0 0 1 0 2 1 0 0 0 1 0 1 0 0 0 2 0 0 1 0 2 2 1 1 1 2 1 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 201 | 0 2 1 0 0 0 1 0 1 0 1 0 1 0 0 1 1 0 1 0 0 1 2 2 1 0 2 0 0 0 1 1 0 1 0 1 0 0 0 0 0 1 1 2 0 1 0 1 1 1 1 1 1 1 0 1 1 0 2 1 0 0 1 0 1 1 1 0 0 1 1 0 0 1 0 1 0 0 1 0 0 1 1 1 1 1 0 1 0 1 0 0 2 0 0 0 1 0 1 0 0 202 | -------------------------------------------------------------------------------- /papers/Lexicase Selection.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvoML/evolved-forests/7572d5bcf38cfed643bcd42f9f3461aa7b102f17/papers/Lexicase Selection.pdf -------------------------------------------------------------------------------- /subsampling/.ipynb_checkpoints/Difficulty Level of Rows - Approach - Results-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "### Aim \n", 8 | "What I tried was with the intuition that if we provide a difficulty level to each of the row and allot the fitness function according to this difficulty then we can make ensemble of models which tries to solve different chunks of the dataset.\n", 9 | "\n", 10 | "-------------------------------\n", 11 | "\n", 12 | "#### Difficulty Marks\n", 13 | " - The difficulty would define that how many models were able to predict the exact value for that row. If the model is difficult then more marks will be awarded to the model on solving it.\n", 14 | " \n", 15 | " - We tried\n", 16 | " \n", 17 | " -- Discrete level of marking (ex: 0-10)\n", 18 | " \n", 19 | " -- -ve of Marks as per how many models have solved it. So higher magnitude on the -ve side would indicate many models have already solved it and now this model should focus on other rows.\n", 20 | " \n", 21 | " -- 1/(number of pop that has solved it)\n", 22 | " \n", 23 | " -- Again incremental marks but with upper and lower margin.\n", 24 | "\n", 25 | "-------------------------------------\n", 26 | "\n", 27 | "#### When to update the marks\n", 28 | " \n", 29 | " - We updated the score after each fitness calculation for each model, so that the models below in the population can focus on the harder problems. \n", 30 | " \n", 31 | " - Updated the score after each population iteration, so that in the next iteration the models can focus on harder rows of the dataset.\n", 32 | " \n", 33 | "-------------------------------------\n", 34 | "\n", 35 | "#### Results\n", 36 | " \n", 37 | " - But the results were not inline with our expectations. the difficulty seemed to be changing from one end to the other. It keeps on fluctuating during the iterations.\n", 38 | " \n", 39 | " - Also the accuracy kept on fluctuating. If we run it for multiple iterations, it wins sometimes but loses to the basic models most of the time.\n" 40 | ] 41 | } 42 | ], 43 | "metadata": { 44 | "kernelspec": { 45 | "display_name": "Python 2", 46 | "language": "python", 47 | "name": "python2" 48 | }, 49 | "language_info": { 50 | "codemirror_mode": { 51 | "name": "ipython", 52 | "version": 2 53 | }, 54 | "file_extension": ".py", 55 | "mimetype": "text/x-python", 56 | "name": "python", 57 | "nbconvert_exporter": "python", 58 | "pygments_lexer": "ipython2", 59 | "version": "2.7.9" 60 | } 61 | }, 62 | "nbformat": 4, 63 | "nbformat_minor": 0 64 | } 65 | -------------------------------------------------------------------------------- /subsampling/Difficulty Level of Rows - Approach - Results.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "### Aim \n", 8 | "What I tried was with the intuition that if we provide a difficulty level to each of the row and allot the fitness function according to this difficulty then we can make ensemble of models which tries to solve different chunks of the dataset.\n", 9 | "\n", 10 | "-------------------------------\n", 11 | "\n", 12 | "#### Difficulty Marks\n", 13 | " - The difficulty would define that how many models were able to predict the exact value for that row. If the model is difficult then more marks will be awarded to the model on solving it.\n", 14 | " \n", 15 | " - We tried\n", 16 | " \n", 17 | " -- Discrete level of marking (ex: 0-10)\n", 18 | " \n", 19 | " -- -ve of Marks as per how many models have solved it. So higher magnitude on the -ve side would indicate many models have already solved it and now this model should focus on other rows.\n", 20 | " \n", 21 | " -- 1/(number of pop that has solved it)\n", 22 | " \n", 23 | " -- Again incremental marks but with upper and lower margin.\n", 24 | "\n", 25 | "-------------------------------------\n", 26 | "\n", 27 | "#### When to update the marks\n", 28 | " \n", 29 | " - We updated the score after each fitness calculation for each model, so that the models below in the population can focus on the harder problems. \n", 30 | " \n", 31 | " - Updated the score after each population iteration, so that in the next iteration the models can focus on harder rows of the dataset.\n", 32 | " \n", 33 | "-------------------------------------\n", 34 | "\n", 35 | "#### Results\n", 36 | " \n", 37 | " - But the results were not inline with our expectations. the difficulty seemed to be changing from one end to the other. It keeps on fluctuating during the iterations.\n", 38 | " \n", 39 | " - Also the accuracy kept on fluctuating. If we run it for multiple iterations, it wins sometimes but loses to the basic models most of the time.\n" 40 | ] 41 | } 42 | ], 43 | "metadata": { 44 | "kernelspec": { 45 | "display_name": "Python 2", 46 | "language": "python", 47 | "name": "python2" 48 | }, 49 | "language_info": { 50 | "codemirror_mode": { 51 | "name": "ipython", 52 | "version": 2 53 | }, 54 | "file_extension": ".py", 55 | "mimetype": "text/x-python", 56 | "name": "python", 57 | "nbconvert_exporter": "python", 58 | "pygments_lexer": "ipython2", 59 | "version": "2.7.9" 60 | } 61 | }, 62 | "nbformat": 4, 63 | "nbformat_minor": 0 64 | } 65 | -------------------------------------------------------------------------------- /subsampling/dump/evolved-forest-demo.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 484, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "tools.selTournament?=" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 488, 17 | "metadata": { 18 | "collapsed": false, 19 | "scrolled": false 20 | }, 21 | "outputs": [ 22 | { 23 | "name": "stdout", 24 | "output_type": "stream", 25 | "text": [ 26 | "Base DecisionTreeClassifier accuracy: 0.79822616408\n", 27 | "Base RandomForestClassifier accuracy: 0.935698447894\n", 28 | "Base GradientBoostingClassifier accuracy: 0.953436807095\n", 29 | "\n", 30 | "gen\tnevals\tstd \tmin \tavg \tmax \n", 31 | "0 \t100 \t0.29591\t1e-20\t0.283743\t0.845697\n", 32 | "1 \t74 \t0.286518\t1e-20\t0.265852\t0.845697\n", 33 | "0.377744807122\n", 34 | "0.153958785316\n", 35 | "0.838137472284\n", 36 | "2 \t70 \t0.298589\t1e-20\t0.298604\t0.863501\n", 37 | "0.418545994065\n", 38 | "0.178662031471\n", 39 | "0.835920177384\n", 40 | "3 \t71 \t0.296482\t1e-20\t0.312243\t0.851632\n", 41 | "0.448872403561\n", 42 | "0.175614031596\n", 43 | "0.835920177384\n", 44 | "4 \t71 \t0.297173\t1e-20\t0.314295\t0.866469\n", 45 | "0.456112759644\n", 46 | "0.172477157744\n", 47 | "0.835920177384\n", 48 | "5 \t71 \t0.287548\t1e-20\t0.300233\t0.851632\n", 49 | "0.432551928783\n", 50 | "0.16791387545\n", 51 | "0.853658536585\n", 52 | "6 \t79 \t0.291583\t1e-20\t0.33621 \t0.851632\n", 53 | "0.475044510386\n", 54 | "0.197375676971\n", 55 | "0.851441241685\n", 56 | "7 \t83 \t0.288972\t1e-20\t0.325717\t0.860534\n", 57 | "0.46590504451\n", 58 | "0.185528906462\n", 59 | "0.862527716186\n", 60 | "8 \t73 \t0.28661 \t1e-20\t0.302143\t0.860534\n", 61 | "0.429317507418\n", 62 | "0.174967656034\n", 63 | "0.875831485588\n", 64 | "9 \t71 \t0.281472\t1e-20\t0.300827\t0.872404\n", 65 | "0.423560830861\n", 66 | "0.178092622587\n", 67 | "0.871396895787\n", 68 | "10 \t70 \t0.288094\t1e-20\t0.292819\t0.872404\n", 69 | "0.410652818991\n", 70 | "0.174985296847\n", 71 | "0.875831485588\n", 72 | "11 \t76 \t0.293143\t1e-20\t0.295748\t0.872404\n", 73 | "0.415400593472\n", 74 | "0.176095295506\n", 75 | "0.866962305987\n", 76 | "12 \t71 \t0.289762\t1e-20\t0.273901\t0.872404\n", 77 | "0.392433234421\n", 78 | "0.155369342742\n", 79 | "0.860310421286\n", 80 | "13 \t72 \t0.295138\t1e-20\t0.291235\t0.857567\n", 81 | "0.416320474777\n", 82 | "0.166150042546\n", 83 | "0.844789356984\n", 84 | "14 \t73 \t0.294758\t1e-20\t0.292039\t0.863501\n", 85 | "0.42765578635\n", 86 | "0.156421940329\n", 87 | "0.840354767184\n", 88 | "15 \t69 \t0.296153\t1e-20\t0.299076\t0.848665\n", 89 | "0.430652818991\n", 90 | "0.167498226142\n", 91 | "0.835920177384\n", 92 | "16 \t79 \t0.296001\t1e-20\t0.328756\t0.845697\n", 93 | "0.477952522255\n", 94 | "0.179559713439\n", 95 | "0.840354767184\n", 96 | "17 \t71 \t0.29285 \t1e-20\t0.317651\t0.845697\n", 97 | "0.461364985163\n", 98 | "0.173936089295\n", 99 | "0.849223946785\n", 100 | "18 \t68 \t0.29147 \t1e-20\t0.316392\t0.848665\n", 101 | "0.462759643917\n", 102 | "0.17002515921\n", 103 | "0.853658536585\n", 104 | "19 \t67 \t0.298827\t1e-20\t0.329119\t0.866469\n", 105 | "0.476824925816\n", 106 | "0.181412345922\n", 107 | "0.840354767184\n", 108 | "20 \t67 \t0.298097\t1e-20\t0.327061\t0.866469\n", 109 | "0.472611275964\n", 110 | "0.181510332729\n", 111 | "0.853658536585\n", 112 | "21 \t76 \t0.28923 \t1e-20\t0.307447\t0.866469\n", 113 | "0.442314540059\n", 114 | "0.172578744847\n", 115 | "0.855875831486\n", 116 | "22 \t73 \t0.285179\t1e-20\t0.32282 \t0.854599\n", 117 | "0.457210682493\n", 118 | "0.188430112702\n", 119 | "0.889135254989\n", 120 | "23 \t78 \t0.284747\t1e-20\t0.32154 \t0.845697\n", 121 | "0.452136498516\n", 122 | "0.19094445343\n", 123 | "0.875831485588\n", 124 | "24 \t73 \t0.28068 \t1e-20\t0.322317\t0.860534\n", 125 | "0.448931750742\n", 126 | "0.19570142394\n", 127 | "0.866962305987\n", 128 | "25 \t81 \t0.27866 \t1e-20\t0.317622\t0.860534\n", 129 | "0.445519287834\n", 130 | "0.18972445102\n", 131 | "0.889135254989\n", 132 | "26 \t77 \t0.284933\t1e-20\t0.328825\t0.860534\n", 133 | "0.466884272997\n", 134 | "0.190766626822\n", 135 | "0.889135254989\n", 136 | "27 \t70 \t0.280739\t1e-20\t0.324522\t0.848665\n", 137 | "0.45884272997\n", 138 | "0.190202114038\n", 139 | "0.89800443459\n", 140 | "28 \t81 \t0.282713\t1e-20\t0.337602\t0.860534\n", 141 | "0.477151335312\n", 142 | "0.198052890902\n", 143 | "0.882483370288\n", 144 | "29 \t77 \t0.29214 \t1e-20\t0.350574\t0.860534\n", 145 | "0.502225519288\n", 146 | "0.198922673136\n", 147 | "0.880266075388\n", 148 | "30 \t80 \t0.290774\t1e-20\t0.327165\t0.851632\n", 149 | "0.471424332344\n", 150 | "0.18290616772\n", 151 | "0.882483370288\n", 152 | "31 \t68 \t0.292776\t1e-20\t0.34284 \t0.851632\n", 153 | "0.496053412463\n", 154 | "0.189626659651\n", 155 | "0.844789356984\n", 156 | "32 \t72 \t0.291386\t1e-20\t0.353735\t0.857567\n", 157 | "0.511721068249\n", 158 | "0.195749254913\n", 159 | "0.847006651885\n", 160 | "33 \t71 \t0.289644\t1e-20\t0.326167\t0.851632\n", 161 | "0.468516320475\n", 162 | "0.183816854062\n", 163 | "0.860310421286\n", 164 | "34 \t76 \t0.280292\t1e-20\t0.311883\t0.860534\n", 165 | "0.442077151335\n", 166 | "0.181687974098\n", 167 | "0.882483370288\n", 168 | "35 \t63 \t0.276928\t1e-20\t0.32416 \t0.869436\n", 169 | "0.451928783383\n", 170 | "0.196391914623\n", 171 | "0.886917960089\n", 172 | "36 \t81 \t0.27892 \t1e-20\t0.315959\t0.869436\n", 173 | "0.435400593472\n", 174 | "0.196517872464\n", 175 | "0.875831485588\n", 176 | "37 \t76 \t0.28591 \t1e-20\t0.313277\t0.869436\n", 177 | "0.437329376855\n", 178 | "0.189225307873\n", 179 | "0.871396895787\n", 180 | "38 \t79 \t0.285711\t1e-20\t0.31892 \t0.860534\n", 181 | "0.446735905045\n", 182 | "0.191104504858\n", 183 | "0.884700665188\n", 184 | "39 \t70 \t0.292208\t1e-20\t0.326781\t0.854599\n", 185 | "0.4646884273\n", 186 | "0.188872948757\n", 187 | "0.875831485588\n", 188 | "40 \t72 \t0.284664\t1e-20\t0.33649 \t0.863501\n", 189 | "0.479792284866\n", 190 | "0.193188312152\n", 191 | "0.871396895787\n", 192 | "41 \t76 \t0.286813\t1e-20\t0.333206\t0.863501\n", 193 | "0.472670623145\n", 194 | "0.193742314499\n", 195 | "0.871396895787\n", 196 | "42 \t80 \t0.289526\t1e-20\t0.325685\t0.863501\n", 197 | "0.465133531157\n", 198 | "0.186237456756\n", 199 | "0.878048780488\n", 200 | "43 \t79 \t0.291194\t1e-20\t0.321169\t0.863501\n", 201 | "0.460860534125\n", 202 | "0.181476933701\n", 203 | "0.866962305987\n", 204 | "44 \t82 \t0.29731 \t1e-20\t0.315888\t0.863501\n", 205 | "0.457537091988\n", 206 | "0.174238962257\n", 207 | "0.860310421286\n", 208 | "45 \t78 \t0.288061\t1e-20\t0.312245\t0.863501\n", 209 | "0.454629080119\n", 210 | "0.169860825014\n", 211 | "0.858093126386\n", 212 | "46 \t69 \t0.291955\t1e-20\t0.317767\t0.863501\n", 213 | "0.45234421365\n", 214 | "0.183188930581\n", 215 | "0.860310421286\n", 216 | "47 \t70 \t0.296527\t1e-20\t0.299055\t0.863501\n", 217 | "0.42762611276\n", 218 | "0.170484506309\n", 219 | "0.855875831486\n", 220 | "48 \t73 \t0.292385\t1e-20\t0.273031\t0.860534\n", 221 | "0.396112759644\n", 222 | "0.14994997282\n", 223 | "0.847006651885\n", 224 | "49 \t78 \t0.287511\t1e-20\t0.29503 \t0.857567\n", 225 | "0.421246290801\n", 226 | "0.168813387474\n", 227 | "0.891352549889\n", 228 | "50 \t70 \t0.282213\t1e-20\t0.287907\t0.857567\n", 229 | "0.407299703264\n", 230 | "0.168514699756\n", 231 | "0.866962305987\n" 232 | ] 233 | }, 234 | { 235 | "data": { 236 | "text/plain": [ 237 | "'not_(or_(False, lt(if_then_else(False, add(Feature20, 3.0), if_then_else(False, Feature48, 7.0)), mul(if_then_else(False, Feature14, Feature8), if_then_else(False, Feature54, Feature36)))))'" 238 | ] 239 | }, 240 | "execution_count": 488, 241 | "metadata": {}, 242 | "output_type": "execute_result" 243 | } 244 | ], 245 | "source": [ 246 | "import operator\n", 247 | "import itertools\n", 248 | "import numpy as np\n", 249 | "\n", 250 | "from deap import algorithms\n", 251 | "from deap import base\n", 252 | "from deap import creator\n", 253 | "from deap import tools\n", 254 | "from deap import gp\n", 255 | "\n", 256 | "from sklearn.tree import DecisionTreeClassifier\n", 257 | "from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\n", 258 | "from sklearn.datasets import load_digits\n", 259 | "from sklearn.cross_validation import train_test_split\n", 260 | "\n", 261 | "np.seterr(all='raise')\n", 262 | "\n", 263 | "digits = load_digits()\n", 264 | "digit_features, digit_labels = digits.data, digits.target\n", 265 | "\n", 266 | "\n", 267 | "X_train_tot, X_test_tot, y_train_tot, y_test_tot = train_test_split(digit_features, digit_labels, stratify=digit_labels,\n", 268 | " train_size=0.75, test_size=0.25)\n", 269 | "\n", 270 | "\n", 271 | "X_train, X_test, y_train, y_test = train_test_split(X_train_tot, y_train_tot, stratify=y_train_tot,\n", 272 | " train_size=0.75, test_size=0.25)\n", 273 | "\n", 274 | "\n", 275 | "\n", 276 | "\n", 277 | "# defined a new primitive set for strongly typed GP\n", 278 | "pset = gp.PrimitiveSetTyped('MAIN', itertools.repeat(float, digit_features.shape[1]), bool, 'Feature')\n", 279 | "\n", 280 | "# boolean operators\n", 281 | "pset.addPrimitive(operator.and_, [bool, bool], bool)\n", 282 | "pset.addPrimitive(operator.or_, [bool, bool], bool)\n", 283 | "pset.addPrimitive(operator.not_, [bool], bool)\n", 284 | "\n", 285 | "# floating point operators\n", 286 | "# Define a protected division function\n", 287 | "def protectedDiv(left, right):\n", 288 | " try: return left / right\n", 289 | " except (ZeroDivisionError, FloatingPointError): return 1.\n", 290 | "\n", 291 | "pset.addPrimitive(operator.add, [float, float], float)\n", 292 | "pset.addPrimitive(operator.sub, [float, float], float)\n", 293 | "pset.addPrimitive(operator.mul, [float, float], float)\n", 294 | "pset.addPrimitive(protectedDiv, [float, float], float)\n", 295 | "\n", 296 | "# logic operators\n", 297 | "# Define a new if-then-else function\n", 298 | "def if_then_else(in1, output1, output2):\n", 299 | " if in1: return output1\n", 300 | " else: return output2\n", 301 | "\n", 302 | "pset.addPrimitive(operator.lt, [float, float], bool)\n", 303 | "pset.addPrimitive(operator.eq, [float, float], bool)\n", 304 | "pset.addPrimitive(if_then_else, [bool, float, float], float)\n", 305 | "\n", 306 | "# terminals\n", 307 | "pset.addTerminal(False, bool)\n", 308 | "pset.addTerminal(True, bool)\n", 309 | "for val in np.arange(-10., 11.):\n", 310 | " pset.addTerminal(val, float)\n", 311 | "\n", 312 | "creator.create('FitnessMax', base.Fitness, weights=(2.0,1.0))\n", 313 | "creator.create('Individual', gp.PrimitiveTree, fitness=creator.FitnessMax)\n", 314 | "\n", 315 | "toolbox = base.Toolbox()\n", 316 | "toolbox.register('expr', gp.genHalfAndHalf, pset=pset, min_=1, max_=3)\n", 317 | "toolbox.register('individual', tools.initIterate, creator.Individual, toolbox.expr)\n", 318 | "toolbox.register('population', tools.initRepeat, list, toolbox.individual)\n", 319 | "toolbox.register('compile', gp.compile, pset=pset)\n", 320 | "\n", 321 | "\n", 322 | "\n", 323 | "row_prob = {} # Each key is row index,\n", 324 | "row_mean_prob = {}\n", 325 | "def update_true_class_variance(pop_):\n", 326 | " \n", 327 | " \"\"\"\n", 328 | " pop is a list of indiv.\n", 329 | " Each indiv\n", 330 | " \"\"\"\n", 331 | " global row_prob, row_mean_prob\n", 332 | " row_prob = {} #reset\n", 333 | " row_mean_prob = {}\n", 334 | " \n", 335 | " for individual in pop_:\n", 336 | " func = toolbox.compile(expr=individual)\n", 337 | " subsample = np.array([func(*record) for record in X_train])\n", 338 | "\n", 339 | " if X_train[subsample].shape[0] == 0:\n", 340 | " continue\n", 341 | "\n", 342 | " clf = DecisionTreeClassifier(random_state=34092)\n", 343 | " clf.fit(X_train[subsample], y_train[subsample])\n", 344 | "\n", 345 | " probas = clf.predict_proba(X_test)\n", 346 | "# print clf.classes_\n", 347 | " for ix, row in enumerate(probas):\n", 348 | "# print row\n", 349 | " try:\n", 350 | " true_p = row[y_test[ix]]\n", 351 | " except:\n", 352 | " true_p = np.nan\n", 353 | " try:\n", 354 | " row_prob[ix].append(true_p)\n", 355 | " except:\n", 356 | " row_prob[ix] = [true_p]\n", 357 | "# print row_prob[ix]\n", 358 | " \n", 359 | "# print 'row_prob', row_prob\n", 360 | " for key in row_prob.keys():\n", 361 | " row_mean_prob[key] = np.nanmean(row_prob[key])\n", 362 | " \n", 363 | " return \n", 364 | " \n", 365 | "\n", 366 | "def evaluate_individual(individual):\n", 367 | " global row_mean_prob\n", 368 | " # Transform the tree expression into a callable function\n", 369 | " func = toolbox.compile(expr=individual)\n", 370 | " subsample = np.array([func(*record) for record in X_train])\n", 371 | " \n", 372 | " if X_train[subsample].shape[0] == 0:\n", 373 | " return (1e-20,1e-20)\n", 374 | " \n", 375 | " clf = DecisionTreeClassifier(random_state=34092)\n", 376 | " clf.fit(X_train[subsample], y_train[subsample])\n", 377 | " score = clf.score(X_test, y_test)\n", 378 | " \n", 379 | " probas = clf.predict_proba(X_test)\n", 380 | " total_variance = []\n", 381 | " for ix, row in enumerate(probas):\n", 382 | " try:\n", 383 | " true_p = row[y_test[ix]]\n", 384 | " except:\n", 385 | " true_p = 0\n", 386 | " mean_p = row_mean_prob[ix]\n", 387 | " \n", 388 | " # Can also simply do - 1 - true_p and measure variance in the model.\n", 389 | " if true_p>=0.1:\n", 390 | " added_variance = (mean_p - true_p)**2\n", 391 | " else:\n", 392 | " added_variance = 0 #Should this be nan?\n", 393 | " total_variance.append(added_variance)\n", 394 | " \n", 395 | " mean_variance_added = np.sqrt(np.nanmean(total_variance))\n", 396 | " \n", 397 | " return (score, mean_variance_added)\n", 398 | " \n", 399 | "toolbox.register('evaluate', evaluate_individual)\n", 400 | "#todo: change this according to multi-objective\n", 401 | "# toolbox.register('select', tools.selTournament, tournsize=3)\n", 402 | "toolbox.register('select', tools.selNSGA2)\n", 403 | "\n", 404 | "toolbox.register('mate', gp.cxOnePoint)\n", 405 | "toolbox.register('expr_mut', gp.genFull, min_=0, max_=3)\n", 406 | "toolbox.register('mutate', gp.mutUniform, expr=toolbox.expr_mut, pset=pset)\n", 407 | "\n", 408 | "population = toolbox.population(n=100)\n", 409 | "halloffame = tools.HallOfFame(1)\n", 410 | "stats = tools.Statistics(lambda ind: ind.fitness.values)\n", 411 | "stats.register('std', np.std)\n", 412 | "stats.register('min', np.min)\n", 413 | "stats.register('avg', np.mean)\n", 414 | "stats.register('max', np.max)\n", 415 | "\n", 416 | "clf = DecisionTreeClassifier(random_state=34092)\n", 417 | "clf.fit(X_train_tot, y_train_tot)\n", 418 | "print('Base DecisionTreeClassifier accuracy: {}'.format(clf.score(X_test_tot, y_test_tot)))\n", 419 | "\n", 420 | "clf = RandomForestClassifier(random_state=34092)\n", 421 | "clf.fit(X_train_tot, y_train_tot)\n", 422 | "print('Base RandomForestClassifier accuracy: {}'.format(clf.score(X_test_tot, y_test_tot)))\n", 423 | "\n", 424 | "clf = GradientBoostingClassifier(random_state=34092)\n", 425 | "clf.fit(X_train_tot, y_train_tot)\n", 426 | "print('Base GradientBoostingClassifier accuracy: {}'.format(clf.score(X_test_tot, y_test_tot)))\n", 427 | "\n", 428 | "print('')\n", 429 | "\n", 430 | "cxpb = 0.5\n", 431 | "mutpb = 0.5\n", 432 | "ngen = 50\n", 433 | "verbose = True\n", 434 | "holdout_perf = {}\n", 435 | "\n", 436 | "logbook = tools.Logbook()\n", 437 | "logbook.header = ['gen', 'nevals'] + (stats.fields if stats else [])\n", 438 | "\n", 439 | "\n", 440 | "update_true_class_variance(population)\n", 441 | "\n", 442 | "# Evaluate the individuals with an invalid fitness ~\n", 443 | "invalid_ind = [ind for ind in population if not ind.fitness.valid]\n", 444 | "fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)\n", 445 | "for ind, fit in zip(invalid_ind, fitnesses):\n", 446 | " ind.fitness.values = fit\n", 447 | "\n", 448 | "if halloffame is not None:\n", 449 | " halloffame.update(population)\n", 450 | "\n", 451 | "record = stats.compile(population) if stats else {}\n", 452 | "logbook.record(gen=0, nevals=len(invalid_ind), **record)\n", 453 | "if verbose:\n", 454 | " print(logbook.stream)\n", 455 | "\n", 456 | "# Begin the generational process\n", 457 | "for gen in range(1, ngen + 1):\n", 458 | " # Select the next generation individuals\n", 459 | " offspring = toolbox.select(population, len(population))\n", 460 | "\n", 461 | " # Vary the pool of individuals\n", 462 | " offspring = algorithms.varAnd(offspring, toolbox, cxpb, mutpb)\n", 463 | "\n", 464 | " # Evaluate the individuals with an invalid fitness\n", 465 | " invalid_ind = [ind for ind in offspring if not ind.fitness.valid]\n", 466 | " fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)\n", 467 | " for ind, fit in zip(invalid_ind, fitnesses):\n", 468 | " ind.fitness.values = fit\n", 469 | "\n", 470 | " # Update the hall of fame with the generated individuals\n", 471 | " if halloffame is not None:\n", 472 | " halloffame.update(offspring)\n", 473 | "\n", 474 | " # Replace the current population by the offspring\n", 475 | " population[:] = offspring\n", 476 | "\n", 477 | " #Generate true class predict_proba variance for each row.\n", 478 | " update_true_class_variance(population)\n", 479 | " \n", 480 | " # Append the current generation statistics to the logbook\n", 481 | " fits = pd.DataFrame()\n", 482 | " fits['score'] = map(lambda x: x.fitness.values[0], population)\n", 483 | " fits['contrib_variance'] = map(lambda x: x.fitness.values[1], population)\n", 484 | " \n", 485 | " record = stats.compile(population) if stats else {}\n", 486 | " logbook.record(gen=gen, nevals=len(invalid_ind),**record)\n", 487 | " holdout_perf[gen] = predict_holdout(population)\n", 488 | " if verbose:\n", 489 | " print(logbook.stream)\n", 490 | " print(fits.score.mean())\n", 491 | " print(fits.contrib_variance.mean())\n", 492 | " print(holdout_perf[gen])\n", 493 | "str(halloffame[0])" 494 | ] 495 | }, 496 | { 497 | "cell_type": "code", 498 | "execution_count": 489, 499 | "metadata": { 500 | "collapsed": false 501 | }, 502 | "outputs": [ 503 | { 504 | "data": { 505 | "text/plain": [ 506 | "deap.creator.FitnessMax((0.87240356083086057, 0.34103981606075923))" 507 | ] 508 | }, 509 | "execution_count": 489, 510 | "metadata": {}, 511 | "output_type": "execute_result" 512 | } 513 | ], 514 | "source": [ 515 | "\n", 516 | "# pop = offspring[:]\n", 517 | "# pop = [halloffame[0]]\n", 518 | "halloffame[0].fitness" 519 | ] 520 | }, 521 | { 522 | "cell_type": "code", 523 | "execution_count": 480, 524 | "metadata": { 525 | "collapsed": true 526 | }, 527 | "outputs": [], 528 | "source": [ 529 | "def predict_holdout(pop):\n", 530 | " forest_predictions = []\n", 531 | " subsample_sizes = []\n", 532 | " for ind_num, individual in enumerate(pop):\n", 533 | " func = toolbox.compile(expr=individual)\n", 534 | " # print individual\n", 535 | " subsample = np.array([func(*record) for record in X_train])\n", 536 | " subsample_sizes.append(subsample.sum())\n", 537 | "\n", 538 | " if X_train[subsample].shape[0] == 0:\n", 539 | " continue\n", 540 | "\n", 541 | " clf = DecisionTreeClassifier(random_state=34092)\n", 542 | " clf.fit(X_train[subsample], y_train[subsample])\n", 543 | " predictions = clf.predict(X_test_tot)\n", 544 | " forest_predictions.append(predictions)\n", 545 | " y_pred = np.array(\n", 546 | " [Counter(instance_forest_predictions).most_common(1)[0][0] for instance_forest_predictions in zip(*forest_predictions)])\n", 547 | " \n", 548 | " return np.sum(y_test_tot == y_pred)*1.0 / len(y_test_tot)" 549 | ] 550 | }, 551 | { 552 | "cell_type": "code", 553 | "execution_count": 467, 554 | "metadata": { 555 | "collapsed": false 556 | }, 557 | "outputs": [], 558 | "source": [ 559 | "forest_predictions = []\n", 560 | "subsample_sizes = []\n", 561 | "for ind_num, individual in enumerate(pop):\n", 562 | " func = toolbox.compile(expr=individual)\n", 563 | "# print individual\n", 564 | " subsample = np.array([func(*record) for record in X_train])\n", 565 | " subsample_sizes.append(subsample.sum())\n", 566 | " \n", 567 | " if X_train[subsample].shape[0] == 0:\n", 568 | " continue\n", 569 | " \n", 570 | " clf = DecisionTreeClassifier(random_state=34092, max_depth=5)\n", 571 | " clf.fit(X_train[subsample], y_train[subsample])\n", 572 | " predictions = clf.predict(X_test_tot)\n", 573 | " forest_predictions.append(predictions)" 574 | ] 575 | }, 576 | { 577 | "cell_type": "code", 578 | "execution_count": 468, 579 | "metadata": { 580 | "collapsed": true 581 | }, 582 | "outputs": [], 583 | "source": [ 584 | "# for x in \n", 585 | "fits = pd.DataFrame()\n", 586 | "fits['score'] = map(lambda x: x.fitness.values[0], pop)\n", 587 | "fits['contrib_variance'] = map(lambda x: x.fitness.values[1], pop)" 588 | ] 589 | }, 590 | { 591 | "cell_type": "code", 592 | "execution_count": 469, 593 | "metadata": { 594 | "collapsed": false 595 | }, 596 | "outputs": [], 597 | "source": [ 598 | "%matplotlib inline\n", 599 | "import matplotlib.pyplot as plt\n", 600 | "# fits.contrib_variance.hist()" 601 | ] 602 | }, 603 | { 604 | "cell_type": "code", 605 | "execution_count": 470, 606 | "metadata": { 607 | "collapsed": false 608 | }, 609 | "outputs": [ 610 | { 611 | "data": { 612 | "text/plain": [ 613 | "0.78528189910979218" 614 | ] 615 | }, 616 | "execution_count": 470, 617 | "metadata": {}, 618 | "output_type": "execute_result" 619 | } 620 | ], 621 | "source": [ 622 | "fits.score.mean()\n" 623 | ] 624 | }, 625 | { 626 | "cell_type": "code", 627 | "execution_count": 471, 628 | "metadata": { 629 | "collapsed": false 630 | }, 631 | "outputs": [ 632 | { 633 | "name": "stdout", 634 | "output_type": "stream", 635 | "text": [ 636 | "863.09\n", 637 | "100.248001975\n" 638 | ] 639 | } 640 | ], 641 | "source": [ 642 | "\n", 643 | "# plt.hist(subsample_sizes)\n", 644 | "print np.mean(subsample_sizes)\n", 645 | "print np.std(subsample_sizes)" 646 | ] 647 | }, 648 | { 649 | "cell_type": "code", 650 | "execution_count": 472, 651 | "metadata": { 652 | "collapsed": false 653 | }, 654 | "outputs": [ 655 | { 656 | "data": { 657 | "text/plain": [ 658 | "2.3569844789356984" 659 | ] 660 | }, 661 | "execution_count": 472, 662 | "metadata": {}, 663 | "output_type": "execute_result" 664 | } 665 | ], 666 | "source": [ 667 | "import pandas as pd\n", 668 | "## Mean # of unique labels predicted per sample.\n", 669 | "pd.DataFrame(forest_predictions).apply(lambda x: len(x.unique()), axis=0).mean()" 670 | ] 671 | }, 672 | { 673 | "cell_type": "code", 674 | "execution_count": 473, 675 | "metadata": { 676 | "collapsed": false, 677 | "scrolled": false 678 | }, 679 | "outputs": [ 680 | { 681 | "data": { 682 | "text/plain": [ 683 | "0.80487804878048785" 684 | ] 685 | }, 686 | "execution_count": 473, 687 | "metadata": {}, 688 | "output_type": "execute_result" 689 | } 690 | ], 691 | "source": [ 692 | "from collections import Counter\n", 693 | "from sklearn.metrics import accuracy_score\n", 694 | "\n", 695 | "y_pred = np.array(\n", 696 | " [Counter(instance_forest_predictions).most_common(1)[0][0] for instance_forest_predictions in zip(*forest_predictions)])\n", 697 | "np.sum(y_test_tot == y_pred)*1.0 / len(y_test_tot)" 698 | ] 699 | }, 700 | { 701 | "cell_type": "code", 702 | "execution_count": 465, 703 | "metadata": { 704 | "collapsed": false 705 | }, 706 | "outputs": [ 707 | { 708 | "data": { 709 | "text/html": [ 710 | "
\n", 715 | " | 0 | \n", 716 | "1 | \n", 717 | "2 | \n", 718 | "3 | \n", 719 | "4 | \n", 720 | "5 | \n", 721 | "6 | \n", 722 | "7 | \n", 723 | "8 | \n", 724 | "9 | \n", 725 | "... | \n", 726 | "441 | \n", 727 | "442 | \n", 728 | "443 | \n", 729 | "444 | \n", 730 | "445 | \n", 731 | "446 | \n", 732 | "447 | \n", 733 | "448 | \n", 734 | "449 | \n", 735 | "450 | \n", 736 | "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", 741 | "6 | \n", 742 | "6 | \n", 743 | "1 | \n", 744 | "0 | \n", 745 | "1 | \n", 746 | "8 | \n", 747 | "2 | \n", 748 | "2 | \n", 749 | "7 | \n", 750 | "4 | \n", 751 | "... | \n", 752 | "8 | \n", 753 | "8 | \n", 754 | "0 | \n", 755 | "5 | \n", 756 | "2 | \n", 757 | "2 | \n", 758 | "9 | \n", 759 | "9 | \n", 760 | "3 | \n", 761 | "4 | \n", 762 | "
1 rows × 451 columns
\n", 766 | "\n", 802 | " | 0 | \n", 803 | "1 | \n", 804 | "2 | \n", 805 | "3 | \n", 806 | "4 | \n", 807 | "5 | \n", 808 | "6 | \n", 809 | "7 | \n", 810 | "8 | \n", 811 | "9 | \n", 812 | "... | \n", 813 | "441 | \n", 814 | "442 | \n", 815 | "443 | \n", 816 | "444 | \n", 817 | "445 | \n", 818 | "446 | \n", 819 | "447 | \n", 820 | "448 | \n", 821 | "449 | \n", 822 | "450 | \n", 823 | "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", 828 | "6 | \n", 829 | "6 | \n", 830 | "1 | \n", 831 | "0 | \n", 832 | "1 | \n", 833 | "8 | \n", 834 | "2 | \n", 835 | "2 | \n", 836 | "7 | \n", 837 | "4 | \n", 838 | "... | \n", 839 | "8 | \n", 840 | "8 | \n", 841 | "0 | \n", 842 | "5 | \n", 843 | "2 | \n", 844 | "2 | \n", 845 | "9 | \n", 846 | "9 | \n", 847 | "3 | \n", 848 | "4 | \n", 849 | "
1 | \n", 852 | "6 | \n", 853 | "6 | \n", 854 | "1 | \n", 855 | "0 | \n", 856 | "1 | \n", 857 | "8 | \n", 858 | "2 | \n", 859 | "2 | \n", 860 | "7 | \n", 861 | "4 | \n", 862 | "... | \n", 863 | "8 | \n", 864 | "8 | \n", 865 | "0 | \n", 866 | "5 | \n", 867 | "2 | \n", 868 | "2 | \n", 869 | "9 | \n", 870 | "9 | \n", 871 | "3 | \n", 872 | "4 | \n", 873 | "
2 | \n", 876 | "6 | \n", 877 | "6 | \n", 878 | "1 | \n", 879 | "0 | \n", 880 | "1 | \n", 881 | "8 | \n", 882 | "2 | \n", 883 | "2 | \n", 884 | "7 | \n", 885 | "4 | \n", 886 | "... | \n", 887 | "8 | \n", 888 | "8 | \n", 889 | "0 | \n", 890 | "5 | \n", 891 | "2 | \n", 892 | "2 | \n", 893 | "9 | \n", 894 | "9 | \n", 895 | "3 | \n", 896 | "4 | \n", 897 | "
3 | \n", 900 | "6 | \n", 901 | "6 | \n", 902 | "1 | \n", 903 | "0 | \n", 904 | "1 | \n", 905 | "8 | \n", 906 | "2 | \n", 907 | "2 | \n", 908 | "7 | \n", 909 | "4 | \n", 910 | "... | \n", 911 | "8 | \n", 912 | "8 | \n", 913 | "8 | \n", 914 | "5 | \n", 915 | "2 | \n", 916 | "2 | \n", 917 | "9 | \n", 918 | "9 | \n", 919 | "3 | \n", 920 | "4 | \n", 921 | "
4 | \n", 924 | "6 | \n", 925 | "6 | \n", 926 | "1 | \n", 927 | "0 | \n", 928 | "1 | \n", 929 | "8 | \n", 930 | "2 | \n", 931 | "2 | \n", 932 | "7 | \n", 933 | "4 | \n", 934 | "... | \n", 935 | "8 | \n", 936 | "8 | \n", 937 | "0 | \n", 938 | "5 | \n", 939 | "2 | \n", 940 | "2 | \n", 941 | "9 | \n", 942 | "9 | \n", 943 | "3 | \n", 944 | "4 | \n", 945 | "
5 | \n", 948 | "6 | \n", 949 | "6 | \n", 950 | "1 | \n", 951 | "0 | \n", 952 | "1 | \n", 953 | "8 | \n", 954 | "2 | \n", 955 | "2 | \n", 956 | "7 | \n", 957 | "4 | \n", 958 | "... | \n", 959 | "8 | \n", 960 | "8 | \n", 961 | "0 | \n", 962 | "5 | \n", 963 | "2 | \n", 964 | "2 | \n", 965 | "9 | \n", 966 | "9 | \n", 967 | "3 | \n", 968 | "1 | \n", 969 | "
6 | \n", 972 | "6 | \n", 973 | "6 | \n", 974 | "1 | \n", 975 | "0 | \n", 976 | "1 | \n", 977 | "8 | \n", 978 | "2 | \n", 979 | "2 | \n", 980 | "7 | \n", 981 | "4 | \n", 982 | "... | \n", 983 | "8 | \n", 984 | "8 | \n", 985 | "0 | \n", 986 | "5 | \n", 987 | "2 | \n", 988 | "2 | \n", 989 | "9 | \n", 990 | "9 | \n", 991 | "3 | \n", 992 | "4 | \n", 993 | "
7 | \n", 996 | "6 | \n", 997 | "6 | \n", 998 | "1 | \n", 999 | "0 | \n", 1000 | "1 | \n", 1001 | "8 | \n", 1002 | "2 | \n", 1003 | "2 | \n", 1004 | "7 | \n", 1005 | "4 | \n", 1006 | "... | \n", 1007 | "8 | \n", 1008 | "8 | \n", 1009 | "0 | \n", 1010 | "5 | \n", 1011 | "2 | \n", 1012 | "2 | \n", 1013 | "9 | \n", 1014 | "9 | \n", 1015 | "3 | \n", 1016 | "4 | \n", 1017 | "
8 | \n", 1020 | "6 | \n", 1021 | "6 | \n", 1022 | "1 | \n", 1023 | "0 | \n", 1024 | "1 | \n", 1025 | "8 | \n", 1026 | "2 | \n", 1027 | "2 | \n", 1028 | "7 | \n", 1029 | "4 | \n", 1030 | "... | \n", 1031 | "8 | \n", 1032 | "8 | \n", 1033 | "0 | \n", 1034 | "5 | \n", 1035 | "2 | \n", 1036 | "2 | \n", 1037 | "9 | \n", 1038 | "9 | \n", 1039 | "3 | \n", 1040 | "4 | \n", 1041 | "
9 | \n", 1044 | "6 | \n", 1045 | "6 | \n", 1046 | "1 | \n", 1047 | "0 | \n", 1048 | "1 | \n", 1049 | "8 | \n", 1050 | "2 | \n", 1051 | "2 | \n", 1052 | "7 | \n", 1053 | "4 | \n", 1054 | "... | \n", 1055 | "8 | \n", 1056 | "8 | \n", 1057 | "0 | \n", 1058 | "5 | \n", 1059 | "2 | \n", 1060 | "2 | \n", 1061 | "9 | \n", 1062 | "9 | \n", 1063 | "3 | \n", 1064 | "1 | \n", 1065 | "
10 | \n", 1068 | "6 | \n", 1069 | "6 | \n", 1070 | "1 | \n", 1071 | "0 | \n", 1072 | "1 | \n", 1073 | "8 | \n", 1074 | "2 | \n", 1075 | "2 | \n", 1076 | "7 | \n", 1077 | "4 | \n", 1078 | "... | \n", 1079 | "8 | \n", 1080 | "8 | \n", 1081 | "0 | \n", 1082 | "5 | \n", 1083 | "2 | \n", 1084 | "2 | \n", 1085 | "9 | \n", 1086 | "9 | \n", 1087 | "3 | \n", 1088 | "1 | \n", 1089 | "
11 | \n", 1092 | "6 | \n", 1093 | "6 | \n", 1094 | "1 | \n", 1095 | "0 | \n", 1096 | "1 | \n", 1097 | "8 | \n", 1098 | "2 | \n", 1099 | "7 | \n", 1100 | "7 | \n", 1101 | "4 | \n", 1102 | "... | \n", 1103 | "8 | \n", 1104 | "8 | \n", 1105 | "0 | \n", 1106 | "5 | \n", 1107 | "2 | \n", 1108 | "2 | \n", 1109 | "9 | \n", 1110 | "9 | \n", 1111 | "3 | \n", 1112 | "4 | \n", 1113 | "
12 | \n", 1116 | "6 | \n", 1117 | "6 | \n", 1118 | "1 | \n", 1119 | "0 | \n", 1120 | "1 | \n", 1121 | "8 | \n", 1122 | "2 | \n", 1123 | "2 | \n", 1124 | "7 | \n", 1125 | "4 | \n", 1126 | "... | \n", 1127 | "8 | \n", 1128 | "8 | \n", 1129 | "0 | \n", 1130 | "5 | \n", 1131 | "2 | \n", 1132 | "2 | \n", 1133 | "9 | \n", 1134 | "9 | \n", 1135 | "3 | \n", 1136 | "4 | \n", 1137 | "
13 | \n", 1140 | "6 | \n", 1141 | "6 | \n", 1142 | "1 | \n", 1143 | "0 | \n", 1144 | "1 | \n", 1145 | "8 | \n", 1146 | "2 | \n", 1147 | "2 | \n", 1148 | "7 | \n", 1149 | "4 | \n", 1150 | "... | \n", 1151 | "8 | \n", 1152 | "8 | \n", 1153 | "0 | \n", 1154 | "5 | \n", 1155 | "2 | \n", 1156 | "2 | \n", 1157 | "9 | \n", 1158 | "9 | \n", 1159 | "3 | \n", 1160 | "4 | \n", 1161 | "
14 | \n", 1164 | "6 | \n", 1165 | "6 | \n", 1166 | "1 | \n", 1167 | "0 | \n", 1168 | "1 | \n", 1169 | "8 | \n", 1170 | "2 | \n", 1171 | "2 | \n", 1172 | "7 | \n", 1173 | "4 | \n", 1174 | "... | \n", 1175 | "8 | \n", 1176 | "8 | \n", 1177 | "0 | \n", 1178 | "5 | \n", 1179 | "2 | \n", 1180 | "2 | \n", 1181 | "9 | \n", 1182 | "9 | \n", 1183 | "3 | \n", 1184 | "4 | \n", 1185 | "
15 | \n", 1188 | "6 | \n", 1189 | "6 | \n", 1190 | "1 | \n", 1191 | "0 | \n", 1192 | "1 | \n", 1193 | "8 | \n", 1194 | "2 | \n", 1195 | "2 | \n", 1196 | "7 | \n", 1197 | "4 | \n", 1198 | "... | \n", 1199 | "8 | \n", 1200 | "8 | \n", 1201 | "0 | \n", 1202 | "5 | \n", 1203 | "2 | \n", 1204 | "2 | \n", 1205 | "9 | \n", 1206 | "9 | \n", 1207 | "3 | \n", 1208 | "4 | \n", 1209 | "
16 | \n", 1212 | "6 | \n", 1213 | "6 | \n", 1214 | "1 | \n", 1215 | "0 | \n", 1216 | "1 | \n", 1217 | "8 | \n", 1218 | "2 | \n", 1219 | "2 | \n", 1220 | "7 | \n", 1221 | "4 | \n", 1222 | "... | \n", 1223 | "8 | \n", 1224 | "8 | \n", 1225 | "0 | \n", 1226 | "5 | \n", 1227 | "2 | \n", 1228 | "2 | \n", 1229 | "9 | \n", 1230 | "9 | \n", 1231 | "3 | \n", 1232 | "4 | \n", 1233 | "
17 | \n", 1236 | "6 | \n", 1237 | "6 | \n", 1238 | "1 | \n", 1239 | "0 | \n", 1240 | "1 | \n", 1241 | "8 | \n", 1242 | "2 | \n", 1243 | "2 | \n", 1244 | "7 | \n", 1245 | "4 | \n", 1246 | "... | \n", 1247 | "8 | \n", 1248 | "8 | \n", 1249 | "0 | \n", 1250 | "5 | \n", 1251 | "2 | \n", 1252 | "2 | \n", 1253 | "9 | \n", 1254 | "9 | \n", 1255 | "3 | \n", 1256 | "1 | \n", 1257 | "
18 | \n", 1260 | "6 | \n", 1261 | "6 | \n", 1262 | "1 | \n", 1263 | "0 | \n", 1264 | "1 | \n", 1265 | "8 | \n", 1266 | "2 | \n", 1267 | "2 | \n", 1268 | "7 | \n", 1269 | "4 | \n", 1270 | "... | \n", 1271 | "8 | \n", 1272 | "8 | \n", 1273 | "0 | \n", 1274 | "5 | \n", 1275 | "2 | \n", 1276 | "2 | \n", 1277 | "9 | \n", 1278 | "9 | \n", 1279 | "3 | \n", 1280 | "4 | \n", 1281 | "
19 | \n", 1284 | "6 | \n", 1285 | "6 | \n", 1286 | "1 | \n", 1287 | "0 | \n", 1288 | "1 | \n", 1289 | "8 | \n", 1290 | "2 | \n", 1291 | "2 | \n", 1292 | "7 | \n", 1293 | "4 | \n", 1294 | "... | \n", 1295 | "8 | \n", 1296 | "8 | \n", 1297 | "0 | \n", 1298 | "5 | \n", 1299 | "2 | \n", 1300 | "2 | \n", 1301 | "9 | \n", 1302 | "9 | \n", 1303 | "3 | \n", 1304 | "4 | \n", 1305 | "
20 | \n", 1308 | "6 | \n", 1309 | "6 | \n", 1310 | "1 | \n", 1311 | "0 | \n", 1312 | "1 | \n", 1313 | "8 | \n", 1314 | "2 | \n", 1315 | "2 | \n", 1316 | "7 | \n", 1317 | "4 | \n", 1318 | "... | \n", 1319 | "8 | \n", 1320 | "8 | \n", 1321 | "0 | \n", 1322 | "5 | \n", 1323 | "2 | \n", 1324 | "2 | \n", 1325 | "9 | \n", 1326 | "9 | \n", 1327 | "3 | \n", 1328 | "4 | \n", 1329 | "
21 | \n", 1332 | "6 | \n", 1333 | "6 | \n", 1334 | "1 | \n", 1335 | "0 | \n", 1336 | "1 | \n", 1337 | "8 | \n", 1338 | "2 | \n", 1339 | "2 | \n", 1340 | "7 | \n", 1341 | "4 | \n", 1342 | "... | \n", 1343 | "8 | \n", 1344 | "8 | \n", 1345 | "0 | \n", 1346 | "5 | \n", 1347 | "2 | \n", 1348 | "2 | \n", 1349 | "9 | \n", 1350 | "9 | \n", 1351 | "3 | \n", 1352 | "4 | \n", 1353 | "
22 | \n", 1356 | "5 | \n", 1357 | "6 | \n", 1358 | "8 | \n", 1359 | "0 | \n", 1360 | "8 | \n", 1361 | "8 | \n", 1362 | "8 | \n", 1363 | "5 | \n", 1364 | "7 | \n", 1365 | "4 | \n", 1366 | "... | \n", 1367 | "8 | \n", 1368 | "8 | \n", 1369 | "6 | \n", 1370 | "5 | \n", 1371 | "1 | \n", 1372 | "8 | \n", 1373 | "9 | \n", 1374 | "9 | \n", 1375 | "5 | \n", 1376 | "5 | \n", 1377 | "
23 | \n", 1380 | "6 | \n", 1381 | "6 | \n", 1382 | "1 | \n", 1383 | "0 | \n", 1384 | "1 | \n", 1385 | "8 | \n", 1386 | "2 | \n", 1387 | "2 | \n", 1388 | "7 | \n", 1389 | "4 | \n", 1390 | "... | \n", 1391 | "8 | \n", 1392 | "8 | \n", 1393 | "0 | \n", 1394 | "5 | \n", 1395 | "2 | \n", 1396 | "2 | \n", 1397 | "9 | \n", 1398 | "9 | \n", 1399 | "3 | \n", 1400 | "4 | \n", 1401 | "
24 | \n", 1404 | "6 | \n", 1405 | "6 | \n", 1406 | "1 | \n", 1407 | "0 | \n", 1408 | "1 | \n", 1409 | "8 | \n", 1410 | "2 | \n", 1411 | "2 | \n", 1412 | "7 | \n", 1413 | "4 | \n", 1414 | "... | \n", 1415 | "8 | \n", 1416 | "8 | \n", 1417 | "0 | \n", 1418 | "5 | \n", 1419 | "2 | \n", 1420 | "2 | \n", 1421 | "9 | \n", 1422 | "9 | \n", 1423 | "3 | \n", 1424 | "4 | \n", 1425 | "
25 | \n", 1428 | "6 | \n", 1429 | "6 | \n", 1430 | "1 | \n", 1431 | "0 | \n", 1432 | "1 | \n", 1433 | "8 | \n", 1434 | "2 | \n", 1435 | "2 | \n", 1436 | "7 | \n", 1437 | "4 | \n", 1438 | "... | \n", 1439 | "8 | \n", 1440 | "8 | \n", 1441 | "0 | \n", 1442 | "5 | \n", 1443 | "2 | \n", 1444 | "2 | \n", 1445 | "9 | \n", 1446 | "9 | \n", 1447 | "3 | \n", 1448 | "4 | \n", 1449 | "
26 | \n", 1452 | "6 | \n", 1453 | "6 | \n", 1454 | "1 | \n", 1455 | "0 | \n", 1456 | "1 | \n", 1457 | "8 | \n", 1458 | "2 | \n", 1459 | "2 | \n", 1460 | "7 | \n", 1461 | "4 | \n", 1462 | "... | \n", 1463 | "8 | \n", 1464 | "8 | \n", 1465 | "0 | \n", 1466 | "5 | \n", 1467 | "2 | \n", 1468 | "2 | \n", 1469 | "9 | \n", 1470 | "9 | \n", 1471 | "3 | \n", 1472 | "4 | \n", 1473 | "
27 | \n", 1476 | "6 | \n", 1477 | "6 | \n", 1478 | "1 | \n", 1479 | "0 | \n", 1480 | "1 | \n", 1481 | "8 | \n", 1482 | "2 | \n", 1483 | "2 | \n", 1484 | "7 | \n", 1485 | "4 | \n", 1486 | "... | \n", 1487 | "8 | \n", 1488 | "8 | \n", 1489 | "0 | \n", 1490 | "5 | \n", 1491 | "2 | \n", 1492 | "2 | \n", 1493 | "9 | \n", 1494 | "9 | \n", 1495 | "3 | \n", 1496 | "4 | \n", 1497 | "
28 | \n", 1500 | "6 | \n", 1501 | "6 | \n", 1502 | "1 | \n", 1503 | "0 | \n", 1504 | "1 | \n", 1505 | "8 | \n", 1506 | "2 | \n", 1507 | "2 | \n", 1508 | "7 | \n", 1509 | "4 | \n", 1510 | "... | \n", 1511 | "8 | \n", 1512 | "8 | \n", 1513 | "0 | \n", 1514 | "5 | \n", 1515 | "2 | \n", 1516 | "2 | \n", 1517 | "9 | \n", 1518 | "9 | \n", 1519 | "3 | \n", 1520 | "4 | \n", 1521 | "
29 | \n", 1524 | "6 | \n", 1525 | "6 | \n", 1526 | "1 | \n", 1527 | "0 | \n", 1528 | "1 | \n", 1529 | "8 | \n", 1530 | "2 | \n", 1531 | "2 | \n", 1532 | "7 | \n", 1533 | "4 | \n", 1534 | "... | \n", 1535 | "8 | \n", 1536 | "8 | \n", 1537 | "0 | \n", 1538 | "5 | \n", 1539 | "2 | \n", 1540 | "2 | \n", 1541 | "9 | \n", 1542 | "9 | \n", 1543 | "3 | \n", 1544 | "4 | \n", 1545 | "
... | \n", 1548 | "... | \n", 1549 | "... | \n", 1550 | "... | \n", 1551 | "... | \n", 1552 | "... | \n", 1553 | "... | \n", 1554 | "... | \n", 1555 | "... | \n", 1556 | "... | \n", 1557 | "... | \n", 1558 | "... | \n", 1559 | "... | \n", 1560 | "... | \n", 1561 | "... | \n", 1562 | "... | \n", 1563 | "... | \n", 1564 | "... | \n", 1565 | "... | \n", 1566 | "... | \n", 1567 | "... | \n", 1568 | "... | \n", 1569 | "
69 | \n", 1572 | "6 | \n", 1573 | "6 | \n", 1574 | "1 | \n", 1575 | "0 | \n", 1576 | "1 | \n", 1577 | "8 | \n", 1578 | "2 | \n", 1579 | "2 | \n", 1580 | "7 | \n", 1581 | "4 | \n", 1582 | "... | \n", 1583 | "8 | \n", 1584 | "8 | \n", 1585 | "0 | \n", 1586 | "5 | \n", 1587 | "2 | \n", 1588 | "2 | \n", 1589 | "9 | \n", 1590 | "9 | \n", 1591 | "3 | \n", 1592 | "4 | \n", 1593 | "
70 | \n", 1596 | "6 | \n", 1597 | "6 | \n", 1598 | "1 | \n", 1599 | "0 | \n", 1600 | "1 | \n", 1601 | "8 | \n", 1602 | "2 | \n", 1603 | "2 | \n", 1604 | "7 | \n", 1605 | "4 | \n", 1606 | "... | \n", 1607 | "8 | \n", 1608 | "8 | \n", 1609 | "0 | \n", 1610 | "5 | \n", 1611 | "2 | \n", 1612 | "2 | \n", 1613 | "9 | \n", 1614 | "9 | \n", 1615 | "3 | \n", 1616 | "4 | \n", 1617 | "
71 | \n", 1620 | "6 | \n", 1621 | "6 | \n", 1622 | "1 | \n", 1623 | "0 | \n", 1624 | "1 | \n", 1625 | "8 | \n", 1626 | "2 | \n", 1627 | "2 | \n", 1628 | "7 | \n", 1629 | "4 | \n", 1630 | "... | \n", 1631 | "8 | \n", 1632 | "8 | \n", 1633 | "0 | \n", 1634 | "5 | \n", 1635 | "2 | \n", 1636 | "2 | \n", 1637 | "9 | \n", 1638 | "9 | \n", 1639 | "3 | \n", 1640 | "4 | \n", 1641 | "
72 | \n", 1644 | "5 | \n", 1645 | "6 | \n", 1646 | "8 | \n", 1647 | "0 | \n", 1648 | "1 | \n", 1649 | "8 | \n", 1650 | "8 | \n", 1651 | "8 | \n", 1652 | "7 | \n", 1653 | "4 | \n", 1654 | "... | \n", 1655 | "8 | \n", 1656 | "8 | \n", 1657 | "7 | \n", 1658 | "5 | \n", 1659 | "1 | \n", 1660 | "8 | \n", 1661 | "0 | \n", 1662 | "9 | \n", 1663 | "1 | \n", 1664 | "5 | \n", 1665 | "
73 | \n", 1668 | "6 | \n", 1669 | "6 | \n", 1670 | "1 | \n", 1671 | "0 | \n", 1672 | "1 | \n", 1673 | "8 | \n", 1674 | "2 | \n", 1675 | "2 | \n", 1676 | "7 | \n", 1677 | "4 | \n", 1678 | "... | \n", 1679 | "8 | \n", 1680 | "8 | \n", 1681 | "0 | \n", 1682 | "5 | \n", 1683 | "2 | \n", 1684 | "2 | \n", 1685 | "9 | \n", 1686 | "9 | \n", 1687 | "3 | \n", 1688 | "4 | \n", 1689 | "
74 | \n", 1692 | "6 | \n", 1693 | "6 | \n", 1694 | "1 | \n", 1695 | "0 | \n", 1696 | "1 | \n", 1697 | "8 | \n", 1698 | "2 | \n", 1699 | "2 | \n", 1700 | "7 | \n", 1701 | "4 | \n", 1702 | "... | \n", 1703 | "8 | \n", 1704 | "8 | \n", 1705 | "0 | \n", 1706 | "5 | \n", 1707 | "2 | \n", 1708 | "2 | \n", 1709 | "9 | \n", 1710 | "9 | \n", 1711 | "3 | \n", 1712 | "4 | \n", 1713 | "
75 | \n", 1716 | "6 | \n", 1717 | "6 | \n", 1718 | "1 | \n", 1719 | "0 | \n", 1720 | "1 | \n", 1721 | "8 | \n", 1722 | "2 | \n", 1723 | "2 | \n", 1724 | "7 | \n", 1725 | "4 | \n", 1726 | "... | \n", 1727 | "8 | \n", 1728 | "8 | \n", 1729 | "0 | \n", 1730 | "5 | \n", 1731 | "2 | \n", 1732 | "2 | \n", 1733 | "9 | \n", 1734 | "9 | \n", 1735 | "3 | \n", 1736 | "4 | \n", 1737 | "
76 | \n", 1740 | "6 | \n", 1741 | "6 | \n", 1742 | "1 | \n", 1743 | "0 | \n", 1744 | "1 | \n", 1745 | "8 | \n", 1746 | "2 | \n", 1747 | "2 | \n", 1748 | "7 | \n", 1749 | "4 | \n", 1750 | "... | \n", 1751 | "8 | \n", 1752 | "8 | \n", 1753 | "0 | \n", 1754 | "5 | \n", 1755 | "2 | \n", 1756 | "2 | \n", 1757 | "9 | \n", 1758 | "9 | \n", 1759 | "3 | \n", 1760 | "4 | \n", 1761 | "
77 | \n", 1764 | "6 | \n", 1765 | "6 | \n", 1766 | "1 | \n", 1767 | "0 | \n", 1768 | "1 | \n", 1769 | "8 | \n", 1770 | "2 | \n", 1771 | "2 | \n", 1772 | "7 | \n", 1773 | "4 | \n", 1774 | "... | \n", 1775 | "8 | \n", 1776 | "8 | \n", 1777 | "0 | \n", 1778 | "5 | \n", 1779 | "2 | \n", 1780 | "2 | \n", 1781 | "9 | \n", 1782 | "9 | \n", 1783 | "3 | \n", 1784 | "4 | \n", 1785 | "
78 | \n", 1788 | "6 | \n", 1789 | "6 | \n", 1790 | "1 | \n", 1791 | "0 | \n", 1792 | "1 | \n", 1793 | "8 | \n", 1794 | "2 | \n", 1795 | "2 | \n", 1796 | "7 | \n", 1797 | "4 | \n", 1798 | "... | \n", 1799 | "8 | \n", 1800 | "8 | \n", 1801 | "0 | \n", 1802 | "5 | \n", 1803 | "2 | \n", 1804 | "2 | \n", 1805 | "9 | \n", 1806 | "9 | \n", 1807 | "3 | \n", 1808 | "4 | \n", 1809 | "
79 | \n", 1812 | "6 | \n", 1813 | "6 | \n", 1814 | "1 | \n", 1815 | "0 | \n", 1816 | "1 | \n", 1817 | "8 | \n", 1818 | "2 | \n", 1819 | "2 | \n", 1820 | "7 | \n", 1821 | "4 | \n", 1822 | "... | \n", 1823 | "8 | \n", 1824 | "8 | \n", 1825 | "0 | \n", 1826 | "5 | \n", 1827 | "2 | \n", 1828 | "2 | \n", 1829 | "9 | \n", 1830 | "9 | \n", 1831 | "3 | \n", 1832 | "4 | \n", 1833 | "
80 | \n", 1836 | "6 | \n", 1837 | "6 | \n", 1838 | "1 | \n", 1839 | "0 | \n", 1840 | "1 | \n", 1841 | "8 | \n", 1842 | "2 | \n", 1843 | "2 | \n", 1844 | "7 | \n", 1845 | "4 | \n", 1846 | "... | \n", 1847 | "8 | \n", 1848 | "8 | \n", 1849 | "0 | \n", 1850 | "5 | \n", 1851 | "2 | \n", 1852 | "2 | \n", 1853 | "9 | \n", 1854 | "9 | \n", 1855 | "3 | \n", 1856 | "4 | \n", 1857 | "
81 | \n", 1860 | "6 | \n", 1861 | "6 | \n", 1862 | "1 | \n", 1863 | "0 | \n", 1864 | "1 | \n", 1865 | "8 | \n", 1866 | "2 | \n", 1867 | "2 | \n", 1868 | "7 | \n", 1869 | "4 | \n", 1870 | "... | \n", 1871 | "8 | \n", 1872 | "8 | \n", 1873 | "0 | \n", 1874 | "5 | \n", 1875 | "2 | \n", 1876 | "2 | \n", 1877 | "9 | \n", 1878 | "9 | \n", 1879 | "3 | \n", 1880 | "4 | \n", 1881 | "
82 | \n", 1884 | "6 | \n", 1885 | "6 | \n", 1886 | "1 | \n", 1887 | "0 | \n", 1888 | "1 | \n", 1889 | "8 | \n", 1890 | "2 | \n", 1891 | "2 | \n", 1892 | "7 | \n", 1893 | "4 | \n", 1894 | "... | \n", 1895 | "8 | \n", 1896 | "8 | \n", 1897 | "0 | \n", 1898 | "5 | \n", 1899 | "2 | \n", 1900 | "2 | \n", 1901 | "9 | \n", 1902 | "9 | \n", 1903 | "3 | \n", 1904 | "4 | \n", 1905 | "
83 | \n", 1908 | "6 | \n", 1909 | "6 | \n", 1910 | "1 | \n", 1911 | "0 | \n", 1912 | "1 | \n", 1913 | "8 | \n", 1914 | "2 | \n", 1915 | "2 | \n", 1916 | "7 | \n", 1917 | "4 | \n", 1918 | "... | \n", 1919 | "8 | \n", 1920 | "8 | \n", 1921 | "0 | \n", 1922 | "5 | \n", 1923 | "2 | \n", 1924 | "2 | \n", 1925 | "9 | \n", 1926 | "9 | \n", 1927 | "3 | \n", 1928 | "4 | \n", 1929 | "
84 | \n", 1932 | "6 | \n", 1933 | "6 | \n", 1934 | "8 | \n", 1935 | "0 | \n", 1936 | "1 | \n", 1937 | "3 | \n", 1938 | "8 | \n", 1939 | "7 | \n", 1940 | "7 | \n", 1941 | "1 | \n", 1942 | "... | \n", 1943 | "8 | \n", 1944 | "8 | \n", 1945 | "1 | \n", 1946 | "5 | \n", 1947 | "2 | \n", 1948 | "8 | \n", 1949 | "3 | \n", 1950 | "9 | \n", 1951 | "3 | \n", 1952 | "1 | \n", 1953 | "
85 | \n", 1956 | "6 | \n", 1957 | "6 | \n", 1958 | "8 | \n", 1959 | "0 | \n", 1960 | "1 | \n", 1961 | "9 | \n", 1962 | "8 | \n", 1963 | "5 | \n", 1964 | "7 | \n", 1965 | "4 | \n", 1966 | "... | \n", 1967 | "8 | \n", 1968 | "8 | \n", 1969 | "4 | \n", 1970 | "5 | \n", 1971 | "2 | \n", 1972 | "8 | \n", 1973 | "9 | \n", 1974 | "9 | \n", 1975 | "5 | \n", 1976 | "1 | \n", 1977 | "
86 | \n", 1980 | "6 | \n", 1981 | "6 | \n", 1982 | "1 | \n", 1983 | "0 | \n", 1984 | "1 | \n", 1985 | "8 | \n", 1986 | "2 | \n", 1987 | "2 | \n", 1988 | "7 | \n", 1989 | "4 | \n", 1990 | "... | \n", 1991 | "8 | \n", 1992 | "8 | \n", 1993 | "0 | \n", 1994 | "5 | \n", 1995 | "2 | \n", 1996 | "2 | \n", 1997 | "9 | \n", 1998 | "9 | \n", 1999 | "3 | \n", 2000 | "4 | \n", 2001 | "
87 | \n", 2004 | "6 | \n", 2005 | "6 | \n", 2006 | "1 | \n", 2007 | "0 | \n", 2008 | "1 | \n", 2009 | "8 | \n", 2010 | "2 | \n", 2011 | "2 | \n", 2012 | "7 | \n", 2013 | "4 | \n", 2014 | "... | \n", 2015 | "8 | \n", 2016 | "8 | \n", 2017 | "0 | \n", 2018 | "5 | \n", 2019 | "2 | \n", 2020 | "2 | \n", 2021 | "9 | \n", 2022 | "9 | \n", 2023 | "3 | \n", 2024 | "4 | \n", 2025 | "
88 | \n", 2028 | "6 | \n", 2029 | "6 | \n", 2030 | "1 | \n", 2031 | "0 | \n", 2032 | "1 | \n", 2033 | "8 | \n", 2034 | "2 | \n", 2035 | "2 | \n", 2036 | "7 | \n", 2037 | "4 | \n", 2038 | "... | \n", 2039 | "8 | \n", 2040 | "8 | \n", 2041 | "0 | \n", 2042 | "5 | \n", 2043 | "2 | \n", 2044 | "2 | \n", 2045 | "9 | \n", 2046 | "9 | \n", 2047 | "3 | \n", 2048 | "4 | \n", 2049 | "
89 | \n", 2052 | "6 | \n", 2053 | "2 | \n", 2054 | "1 | \n", 2055 | "0 | \n", 2056 | "1 | \n", 2057 | "1 | \n", 2058 | "2 | \n", 2059 | "7 | \n", 2060 | "7 | \n", 2061 | "4 | \n", 2062 | "... | \n", 2063 | "1 | \n", 2064 | "1 | \n", 2065 | "5 | \n", 2066 | "5 | \n", 2067 | "2 | \n", 2068 | "2 | \n", 2069 | "9 | \n", 2070 | "9 | \n", 2071 | "5 | \n", 2072 | "2 | \n", 2073 | "
90 | \n", 2076 | "6 | \n", 2077 | "6 | \n", 2078 | "1 | \n", 2079 | "0 | \n", 2080 | "1 | \n", 2081 | "8 | \n", 2082 | "2 | \n", 2083 | "2 | \n", 2084 | "7 | \n", 2085 | "4 | \n", 2086 | "... | \n", 2087 | "8 | \n", 2088 | "8 | \n", 2089 | "0 | \n", 2090 | "5 | \n", 2091 | "2 | \n", 2092 | "2 | \n", 2093 | "9 | \n", 2094 | "9 | \n", 2095 | "3 | \n", 2096 | "4 | \n", 2097 | "
91 | \n", 2100 | "6 | \n", 2101 | "6 | \n", 2102 | "1 | \n", 2103 | "0 | \n", 2104 | "1 | \n", 2105 | "8 | \n", 2106 | "2 | \n", 2107 | "2 | \n", 2108 | "7 | \n", 2109 | "4 | \n", 2110 | "... | \n", 2111 | "8 | \n", 2112 | "8 | \n", 2113 | "0 | \n", 2114 | "5 | \n", 2115 | "2 | \n", 2116 | "2 | \n", 2117 | "9 | \n", 2118 | "9 | \n", 2119 | "3 | \n", 2120 | "4 | \n", 2121 | "
92 | \n", 2124 | "6 | \n", 2125 | "6 | \n", 2126 | "1 | \n", 2127 | "0 | \n", 2128 | "1 | \n", 2129 | "8 | \n", 2130 | "2 | \n", 2131 | "2 | \n", 2132 | "7 | \n", 2133 | "4 | \n", 2134 | "... | \n", 2135 | "8 | \n", 2136 | "8 | \n", 2137 | "0 | \n", 2138 | "5 | \n", 2139 | "2 | \n", 2140 | "2 | \n", 2141 | "9 | \n", 2142 | "9 | \n", 2143 | "3 | \n", 2144 | "4 | \n", 2145 | "
93 | \n", 2148 | "6 | \n", 2149 | "6 | \n", 2150 | "1 | \n", 2151 | "0 | \n", 2152 | "1 | \n", 2153 | "8 | \n", 2154 | "2 | \n", 2155 | "2 | \n", 2156 | "7 | \n", 2157 | "4 | \n", 2158 | "... | \n", 2159 | "8 | \n", 2160 | "8 | \n", 2161 | "0 | \n", 2162 | "5 | \n", 2163 | "2 | \n", 2164 | "2 | \n", 2165 | "9 | \n", 2166 | "9 | \n", 2167 | "3 | \n", 2168 | "4 | \n", 2169 | "
94 | \n", 2172 | "6 | \n", 2173 | "6 | \n", 2174 | "1 | \n", 2175 | "0 | \n", 2176 | "1 | \n", 2177 | "8 | \n", 2178 | "2 | \n", 2179 | "2 | \n", 2180 | "7 | \n", 2181 | "4 | \n", 2182 | "... | \n", 2183 | "8 | \n", 2184 | "8 | \n", 2185 | "0 | \n", 2186 | "5 | \n", 2187 | "2 | \n", 2188 | "2 | \n", 2189 | "9 | \n", 2190 | "9 | \n", 2191 | "3 | \n", 2192 | "4 | \n", 2193 | "
95 | \n", 2196 | "6 | \n", 2197 | "6 | \n", 2198 | "1 | \n", 2199 | "0 | \n", 2200 | "1 | \n", 2201 | "8 | \n", 2202 | "2 | \n", 2203 | "2 | \n", 2204 | "7 | \n", 2205 | "4 | \n", 2206 | "... | \n", 2207 | "8 | \n", 2208 | "8 | \n", 2209 | "0 | \n", 2210 | "5 | \n", 2211 | "2 | \n", 2212 | "2 | \n", 2213 | "9 | \n", 2214 | "9 | \n", 2215 | "3 | \n", 2216 | "4 | \n", 2217 | "
96 | \n", 2220 | "6 | \n", 2221 | "6 | \n", 2222 | "1 | \n", 2223 | "0 | \n", 2224 | "1 | \n", 2225 | "8 | \n", 2226 | "2 | \n", 2227 | "7 | \n", 2228 | "7 | \n", 2229 | "4 | \n", 2230 | "... | \n", 2231 | "8 | \n", 2232 | "8 | \n", 2233 | "1 | \n", 2234 | "5 | \n", 2235 | "2 | \n", 2236 | "2 | \n", 2237 | "9 | \n", 2238 | "9 | \n", 2239 | "3 | \n", 2240 | "4 | \n", 2241 | "
97 | \n", 2244 | "6 | \n", 2245 | "6 | \n", 2246 | "1 | \n", 2247 | "0 | \n", 2248 | "1 | \n", 2249 | "8 | \n", 2250 | "2 | \n", 2251 | "2 | \n", 2252 | "7 | \n", 2253 | "4 | \n", 2254 | "... | \n", 2255 | "8 | \n", 2256 | "8 | \n", 2257 | "0 | \n", 2258 | "5 | \n", 2259 | "2 | \n", 2260 | "2 | \n", 2261 | "9 | \n", 2262 | "9 | \n", 2263 | "3 | \n", 2264 | "4 | \n", 2265 | "
98 | \n", 2268 | "6 | \n", 2269 | "6 | \n", 2270 | "1 | \n", 2271 | "0 | \n", 2272 | "1 | \n", 2273 | "8 | \n", 2274 | "2 | \n", 2275 | "2 | \n", 2276 | "7 | \n", 2277 | "4 | \n", 2278 | "... | \n", 2279 | "8 | \n", 2280 | "8 | \n", 2281 | "0 | \n", 2282 | "5 | \n", 2283 | "2 | \n", 2284 | "2 | \n", 2285 | "9 | \n", 2286 | "9 | \n", 2287 | "3 | \n", 2288 | "4 | \n", 2289 | "
99 rows × 451 columns
\n", 2293 | "