diff --git a/corpus_build.py b/corpus_build.py new file mode 100644 index 0000000..2b7fce0 --- /dev/null +++ b/corpus_build.py @@ -0,0 +1,122 @@ +import glob +import os +import pandas as pd +import re + + +file_types = {'.clj': 'clojure', + '.cljs': 'clojure', + '.clojure': 'clojure', + '.edn': 'clojure', + '.hs': 'haskell', + '.lhs': 'haskell', + '.ghc': 'haskell', + '.java': 'java', + '.class': 'java', + '.js': 'javascript', + '.javascript': 'javascript', + '.ml': 'ocaml', + '.mli': 'ocaml', + '.ocaml': 'ocaml', + '.perl': 'perl', + '.php': 'php', + '.phtml': 'php', + '.php3': 'php', + '.php4': 'php', + '.php5': 'php', + '.phps': 'php', + '.python3': 'python', + '.python2': 'python', + '.py': 'python', + '.jruby': 'ruby', + '.scala': 'scala', + '.racket': 'scheme', + '.scm': 'scheme', + '.ss': 'scheme', + '.clojure': 'clojure'} + +hit_num = {"clojure": "1", + "haskell": "2", + "java": "3", + "javascript": "4", + "ocaml": "5", + "perl": "6", + "php": "7", + "python": "8", + "ruby": "9", + "scala": "10", + "scheme": "11"} + +raw_file_list = [filename for filename in + glob.iglob(os.path.join('corpus/bench', '*', '*')) + if os.path.splitext(filename)[1] in file_types.keys()] + +feature_list = [('parent_count', "[()]"), + ('double_colon', "::"), + ('let_exists', r"\blet\b"), + ('less_minus', "((\<\-))"), + ('paren_star', "(\(\*|\*\))"), + ('def_exists', r"\bdef\b"), + ('end_exists', r"\bend\b"), + ('curly_bracket', "[\{\}]"), + ('slash_star_star', "\/\*\*"), + ('forward_slash', "//"), + ('var_exists', r"\bvar\b"), + ('star_count', r"\b\*\b"), + ('dollar_sign', r"\$"), + ('val_exists', r"\bval\b"), + ('else_if', r"(else if)"), + ('elif', r"(elif)"), + ('print_space', r"(print )"), + ('pyth_print', r"(print\()"), + ('void', r"(void)")] + + +class Corpus(): + + def __init__(self, file_list=[]): + self.file_list = file_list + + def read_process_file(self, file_name): + with open(file_name) as f: + return f.read() + + def build_dataframe(self, snippet=True): + raw_text = [self.read_process_file(file) for file in self.file_list] + + if snippet: + a_dataframe = pd.DataFrame(raw_text, columns=['raw_text']) + else: + a_dataframe = pd.DataFrame([file_types[os.path.splitext(file)[1]] + for file in self.file_list], + columns=['file_type']) + + a_dataframe['hit_num'] = a_dataframe['file_type'].map(hit_num) + a_dataframe['raw_text'] = raw_text + + return a_dataframe + + def feat_lookup(self, regex, a_dataframe): + return [(len(re.findall(regex, a_row))/len(a_row)) + for a_row in a_dataframe['raw_text']] + + def feature_breakout(self, a_df): + + for name, regex in feature_list: + a_df[name] = self.feat_lookup(regex, a_df) + + return a_df + + def compl_df_build(self, snippet=True): + a_df = self.build_dataframe(snippet) + a_df = self.feature_breakout(a_df) + cleaned_df = self.clean_df(a_df, snippet) + return cleaned_df + + def clean_df(self, a_df, snippet): + cleaned_df = a_df.drop(['raw_text'], axis=1) + + if not snippet: + cleaned_df = cleaned_df.drop(['file_type'], axis=1) + + return cleaned_df diff --git a/lang classifier live.ipynb b/lang classifier live.ipynb new file mode 100644 index 0000000..fc999af --- /dev/null +++ b/lang classifier live.ipynb @@ -0,0 +1,2418 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:67cb485a11f3574e7154427b6ce8b9cb5f0788005d345301cc83874050c10871" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Brings in corpus and test data" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from corpus_build import Corpus, hit_num, raw_file_list\n", + "import pandas as pd\n", + "import glob\n", + "import os\n", + "\n", + "corpus = Corpus(raw_file_list)\n", + "corpus_df = corpus.compl_df_build(False)\n", + "corpus_df.head()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
hit_numparent_countdouble_colonlet_existsless_minusparen_stardef_existsend_existscurly_bracketslash_star_starforward_slashvar_existsstar_countdollar_signval_existselse_ifelifprint_spacepyth_printvoid
0 1 0.071901 0.000000 0.002066 0.000000 0.001240 0.000413 0 0.000000 0 0.000413 0 0.000000 0 0 0 0 0 0 0.000000
1 1 0.071704 0.000000 0.002699 0.000000 0.000771 0.000386 0 0.000000 0 0.000386 0 0.000000 0 0 0 0 0 0 0.000000
2 1 0.063995 0.000000 0.002695 0.000000 0.000337 0.000337 0 0.000000 0 0.000337 0 0.000000 0 0 0 0 0 0 0.000337
3 2 0.024707 0.002471 0.002471 0.000618 0.000000 0.000000 0 0.000000 0 0.000618 0 0.001235 0 0 0 0 0 0 0.000000
4 2 0.024352 0.002118 0.002647 0.000529 0.000000 0.000000 0 0.001059 0 0.000529 0 0.001059 0 0 0 0 0 0 0.000000
\n", + "
" + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 11, + "text": [ + " hit_num parent_count double_colon let_exists less_minus paren_star \\\n", + "0 1 0.071901 0.000000 0.002066 0.000000 0.001240 \n", + "1 1 0.071704 0.000000 0.002699 0.000000 0.000771 \n", + "2 1 0.063995 0.000000 0.002695 0.000000 0.000337 \n", + "3 2 0.024707 0.002471 0.002471 0.000618 0.000000 \n", + "4 2 0.024352 0.002118 0.002647 0.000529 0.000000 \n", + "\n", + " def_exists end_exists curly_bracket slash_star_star forward_slash \\\n", + "0 0.000413 0 0.000000 0 0.000413 \n", + "1 0.000386 0 0.000000 0 0.000386 \n", + "2 0.000337 0 0.000000 0 0.000337 \n", + "3 0.000000 0 0.000000 0 0.000618 \n", + "4 0.000000 0 0.001059 0 0.000529 \n", + "\n", + " var_exists star_count dollar_sign val_exists else_if elif \\\n", + "0 0 0.000000 0 0 0 0 \n", + "1 0 0.000000 0 0 0 0 \n", + "2 0 0.000000 0 0 0 0 \n", + "3 0 0.001235 0 0 0 0 \n", + "4 0 0.001059 0 0 0 0 \n", + "\n", + " print_space pyth_print void \n", + "0 0 0 0.000000 \n", + "1 0 0 0.000000 \n", + "2 0 0 0.000337 \n", + "3 0 0 0.000000 \n", + "4 0 0 0.000000 " + ] + } + ], + "prompt_number": 11 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "test_info = Corpus([filename for filename in glob.iglob(os.path.join('test/', '*'))])\n", + "test_info_df = test_info.compl_df_build(True)\n", + "test_info_df['answers'] = pd.read_csv('test_fixed.csv', dtype='object')\n", + "test_info_df.head()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
parent_countdouble_colonlet_existsless_minusparen_stardef_existsend_existscurly_bracketslash_star_starforward_slashvar_existsstar_countdollar_signval_existselse_ifelifprint_spacepyth_printvoidanswers
0 0.045734 0.000000 0.001759 0 0.000000 0.000000 0.000000 0.001759 0 0.000000 0.000000 0 0.000000 0.000000 0.000000 0 0 0 0 1
1 0.063037 0.000000 0.000000 0 0.000000 0.000000 0.000000 0.022923 0 0.000000 0.002865 0 0.000000 0.000000 0.000000 0 0 0 0 4
2 0.042795 0.000000 0.000058 0 0.000058 0.000000 0.000000 0.019122 0 0.005069 0.002477 0 0.000173 0.000346 0.000288 0 0 0 0 4
3 0.047059 0.000000 0.000000 0 0.000000 0.000000 0.000000 0.035294 0 0.011765 0.005882 0 0.000000 0.000000 0.000000 0 0 0 0 4
4 0.015708 0.000561 0.000000 0 0.000281 0.002805 0.004769 0.001122 0 0.000000 0.000000 0 0.000000 0.000000 0.000000 0 0 0 0 9
\n", + "
" + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 12, + "text": [ + " parent_count double_colon let_exists less_minus paren_star def_exists \\\n", + "0 0.045734 0.000000 0.001759 0 0.000000 0.000000 \n", + "1 0.063037 0.000000 0.000000 0 0.000000 0.000000 \n", + "2 0.042795 0.000000 0.000058 0 0.000058 0.000000 \n", + "3 0.047059 0.000000 0.000000 0 0.000000 0.000000 \n", + "4 0.015708 0.000561 0.000000 0 0.000281 0.002805 \n", + "\n", + " end_exists curly_bracket slash_star_star forward_slash var_exists \\\n", + "0 0.000000 0.001759 0 0.000000 0.000000 \n", + "1 0.000000 0.022923 0 0.000000 0.002865 \n", + "2 0.000000 0.019122 0 0.005069 0.002477 \n", + "3 0.000000 0.035294 0 0.011765 0.005882 \n", + "4 0.004769 0.001122 0 0.000000 0.000000 \n", + "\n", + " star_count dollar_sign val_exists else_if elif print_space \\\n", + "0 0 0.000000 0.000000 0.000000 0 0 \n", + "1 0 0.000000 0.000000 0.000000 0 0 \n", + "2 0 0.000173 0.000346 0.000288 0 0 \n", + "3 0 0.000000 0.000000 0.000000 0 0 \n", + "4 0 0.000000 0.000000 0.000000 0 0 \n", + "\n", + " pyth_print void answers \n", + "0 0 0 1 \n", + "1 0 0 4 \n", + "2 0 0 4 \n", + "3 0 0 4 \n", + "4 0 0 9 " + ] + } + ], + "prompt_number": 12 + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "RandomForestClassifier Model" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn import metrics\n", + "import numpy as np\n", + "import seaborn as sbn\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "corp_train = corpus_df.values[0::,1::]\n", + "corp_answer = corpus_df.values[0::,0]\n", + "test_train = test_info_df.values[0::,:-1:]\n", + "test_answer = test_info_df.values[0::1,-1]\n", + "\n", + "def run_test_model(classifier, x_train, y_train, x_test, y_test):\n", + "\n", + " classifier.fit(x_train, y_train)\n", + " predicted = classifier.predict(x_test)\n", + " print(metrics.classification_report(y_test, predicted))\n", + " print(metrics.confusion_matrix(y_test, predicted))\n", + " return metrics.f1_score(y_test, predicted)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 13 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "run_test_model(RandomForestClassifier(40), corp_train, corp_answer, test_train, test_answer)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.50 1.00 0.67 1\n", + " 7 1.00 0.67 0.80 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.87 0.87 31\n", + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 1 2 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n" + ] + }, + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 14, + "text": [ + "0.86991807475678429" + ] + } + ], + "prompt_number": 14 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "answers = []\n", + "for num in range(20,70):\n", + " answers.append((num, run_test_model(RandomForestClassifier(num), corp_train, corp_answer, test_train, test_answer)))\n", + "answers " + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.25 0.40 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 0.60 1.00 0.75 3\n", + "\n", + "avg / total 0.90 0.81 0.79 31\n", + "\n", + "[[1 0 2 0 0 0 0 0 0 0 1]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 0 0 0 0 3 1]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n", + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.25 0.40 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 0.75 0.75 0.75 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.88 0.81 0.79 31\n", + "\n", + "[[1 0 2 0 0 0 0 0 0 1 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.50 1.00 0.67 1\n", + " 7 1.00 0.67 0.80 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.87 0.87 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 1 2 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 1.00 1.00 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.94 0.87 0.87 31\n", + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 0 0 0 0 4 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n", + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.50 1.00 0.67 1\n", + " 7 1.00 0.67 0.80 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.87 0.87 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 1 2 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.25 0.40 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 0.75 0.75 0.75 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.89 0.81 0.79 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[1 0 2 0 0 0 0 0 0 1 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.25 0.40 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 0.75 0.75 0.75 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.88 0.81 0.79 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[1 0 2 0 0 0 0 0 0 1 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.50 1.00 0.67 1\n", + " 7 1.00 0.67 0.80 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.87 0.87 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 1 2 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.50 1.00 0.67 1\n", + " 7 1.00 0.67 0.80 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.87 0.87 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 1 2 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.50 1.00 0.67 1\n", + " 7 1.00 0.67 0.80 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.87 0.87 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 1 2 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 0.75 1.00 0.86 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 0 0 0 0 3 1]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 0.75 1.00 0.86 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 0 0 0 0 3 1]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 0.75 1.00 0.86 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 0 0 0 0 3 1]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.50 1.00 0.67 1\n", + " 7 1.00 0.67 0.80 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.87 0.87 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 1 2 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.50 1.00 0.67 1\n", + " 7 1.00 0.67 0.80 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.87 0.87 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 1 2 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.25 0.40 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 0.75 0.75 0.75 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.89 0.81 0.79 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[1 0 2 0 0 0 0 0 0 1 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.50 1.00 0.67 1\n", + " 7 1.00 0.67 0.80 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.87 0.87 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 1 2 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.91 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 0.80 1.00 0.89 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.50 1.00 0.67 1\n", + " 7 1.00 0.67 0.80 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.87 0.87 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 1 2 0 0]\n", + " [0 0 0 0 0 1 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.50 1.00 0.67 1\n", + " 7 1.00 0.67 0.80 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 0.75 1.00 0.86 3\n", + "\n", + "avg / total 0.92 0.87 0.87 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 1 2 0 0]\n", + " [0 0 0 0 0 0 0 0 0 3 1]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 1.00 1.00 1.00 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 0.75 1.00 0.86 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 0 0 0 0 0 3 1]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n", + " precision recall f1-score support\n", + "\n", + " 1 1.00 0.50 0.67 4\n", + " 10 1.00 1.00 1.00 2\n", + " 11 0.60 1.00 0.75 3\n", + " 2 1.00 1.00 1.00 3\n", + " 3 0.67 1.00 0.80 2\n", + " 4 1.00 1.00 1.00 4\n", + " 5 1.00 1.00 1.00 2\n", + " 6 0.33 1.00 0.50 1\n", + " 7 1.00 0.33 0.50 3\n", + " 8 1.00 0.75 0.86 4\n", + " 9 1.00 1.00 1.00 3\n", + "\n", + "avg / total 0.92 0.84 0.84 31\n" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "\n", + "[[2 0 2 0 0 0 0 0 0 0 0]\n", + " [0 2 0 0 0 0 0 0 0 0 0]\n", + " [0 0 3 0 0 0 0 0 0 0 0]\n", + " [0 0 0 3 0 0 0 0 0 0 0]\n", + " [0 0 0 0 2 0 0 0 0 0 0]\n", + " [0 0 0 0 0 4 0 0 0 0 0]\n", + " [0 0 0 0 0 0 2 0 0 0 0]\n", + " [0 0 0 0 0 0 0 1 0 0 0]\n", + " [0 0 0 0 0 0 0 2 1 0 0]\n", + " [0 0 0 0 1 0 0 0 0 3 0]\n", + " [0 0 0 0 0 0 0 0 0 0 3]]\n" + ] + }, + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 15, + "text": [ + "[(20, 0.79124423963133639),\n", + " (21, 0.83694316436251914),\n", + " (22, 0.83694316436251914),\n", + " (23, 0.78727598566308243),\n", + " (24, 0.86991807475678429),\n", + " (25, 0.86827956989247301),\n", + " (26, 0.83550947260624675),\n", + " (27, 0.83550947260624675),\n", + " (28, 0.83550947260624675),\n", + " (29, 0.86991807475678429),\n", + " (30, 0.83550947260624675),\n", + " (31, 0.78870967741935483),\n", + " (32, 0.83694316436251914),\n", + " (33, 0.78727598566308243),\n", + " (34, 0.86991807475678429),\n", + " (35, 0.87135176651305668),\n", + " (36, 0.83550947260624675),\n", + " (37, 0.86991807475678429),\n", + " (38, 0.83550947260624675),\n", + " (39, 0.83694316436251914),\n", + " (40, 0.83550947260624675),\n", + " (41, 0.83694316436251914),\n", + " (42, 0.83550947260624675),\n", + " (43, 0.83550947260624675),\n", + " (44, 0.83602150537634401),\n", + " (45, 0.83550947260624675),\n", + " (46, 0.83602150537634401),\n", + " (47, 0.83602150537634401),\n", + " (48, 0.83550947260624675),\n", + " (49, 0.87135176651305668),\n", + " (50, 0.83694316436251914),\n", + " (51, 0.83550947260624675),\n", + " (52, 0.83694316436251914),\n", + " (53, 0.86991807475678429),\n", + " (54, 0.78870967741935483),\n", + " (55, 0.83550947260624675),\n", + " (56, 0.83550947260624675),\n", + " (57, 0.86991807475678429),\n", + " (58, 0.83550947260624675),\n", + " (59, 0.83550947260624675),\n", + " (60, 0.83550947260624675),\n", + " (61, 0.83694316436251914),\n", + " (62, 0.83550947260624675),\n", + " (63, 0.83550947260624675),\n", + " (64, 0.83550947260624675),\n", + " (65, 0.86991807475678429),\n", + " (66, 0.83694316436251914),\n", + " (67, 0.87043010752688177),\n", + " (68, 0.83602150537634401),\n", + " (69, 0.83694316436251914)]" + ] + } + ], + "prompt_number": 15 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "clean_answers = [y for x,y in answers]\n", + "plt.plot(clean_answers)\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAECCAYAAAD9z2x7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztvXuUJFd95/mJfFZmVlZVP6pbrZa6BQgCYxAIZFsvQDy0\nYLDGMIt3lvXax9rFa+PhHO8uZ22sncOenTPe9RxW4B3PMjzGIHnGM8xoPHgAYxkZMAZJCBDIkgUK\nvaAltR5dLXVXZuUzIiP2j4ibGZmV8crMyMyIvJ9zdNRVmVEZcfPe3/3e3+93f1exLAuJRCKRpJ/M\nom9AIpFIJPNBGnyJRCJZEaTBl0gkkhVBGnyJRCJZEaTBl0gkkhVBGnyJRCJZEXJ+L6qqmgE+DlwG\ndID3aZr2mOv1dwM3ARbwGU3TPuFc86+BlwEm8Ouapmkx3b9EIpFIQhKk8N8FFDRNuxr4EHDzyOsf\nBa4HrgE+qKrqFvBfARVN064F/inw+7O9ZYlEIpFMQpDBvwa4HUDTtHuAK0Ze14EtoAwo2Iq+BWyq\nqqoAm0B3ljcskUgkkskIMvgbQM31c89x2QhuBu4FHgC+qGlaDbgTWAMeAj4J/NHsblcikUgkkxJk\n8GtA1f1+TdNMAFVVTwAfAE4ClwBHVVV9D/A7wJ2apqnAa4BbVVUtzPrGJRKJRBIN36Attlq/AbhN\nVdUrgftdr60BPaCjaZqpquoZ4ABQYbAqOAfkgazfh1iWZSmKMsHtSyQSyUoTyXAqfsXTHD+8yNIB\nuBF4HbCuadqnVVX9X4D/DmgDjwK/DqwDnwUOYxv7P9Q07XMB92Ht7NSj3Hdq2d6uItvCRrbFANkW\nA2RbDNjers7O4M8RafAdZGceINtigGyLAbItBkQ1+HLjlUQikawI0uBLJBLJiiANvkQikawI0uBL\nJBLJiiANvkQikawI0uBLJBLJiiANvkQikawI0uBLJBLJiiANvkQikawI0uBLJBLJiiANvkQikawI\n0uBLJBLJiiANvkQikawI0uBLJBLJiiANvkQikawI0uBL+jx1Zo9PfeFBfu9T3+ZcvbPo21kpvnjn\nj/nof7yPJTmfQpJSgo44lKwAjz9d40t3/YT7Hj079LvXqdsLvKvV4vuPnOXUs3VaHYPyWn7RtyNJ\nKdLgryiWZfHQqXN86e5T/OjUOQBecuEGFx9Z52/ue5p6s7vgO1wtRHvXmro0+Cmk2db5w9vu5x9c\ncwmvfPGhhd3Hyrh0jJ7Jp77wIH9x90/o6L2F3cf9jz3Pv7vj4YUu3Tt6j3/+p9/nI5+7jx+dOscr\nLjnA//bey7npV17Hax1VH8Xgm5bFv7vjYR54/Pm4bjnVWJZFvakDUGvEP9F+8a6fcOcDz8T+OUbP\n5LNf/hGPPrUb+2fNE+2Jc/zJ7Q/RM83Q1/z4mTqPnt7lB4+cDX5zjKyMwt853+LbP3wOgK/e+xTv\nfv2LueZVx8hkIh0JOTVf//5T/N1jz3P9z1zM9lZprp8teOb5Bg8/tcvJo1V+5W0qL75wo//aRrkA\n0DdAYTi72+av732Ks7ttXrVA9ZJUOnoP3bCNR9wG3zQt/vybj3Px9jrXvOpYrJ/1xHN7fPP+Z7As\nuPSizVg/a558476n+fYPn+O6y49z4mg11DXie53HhO7Hyij8rm4PqKMHSjTbBp/9y4f4Pz7zHe5/\n7Oxc1Xatv3Rf3Bcv2uKVLz44ZOwBqo7Bj3J//c4s3UATUXNNrnG70uotHcuCrhFenU5KWvvF7gTP\nNck1cbAyCr9r2G6cK15+hDe/9iL+/JuP860HnuEPb7ufl5/Y4pfedCkvOrYR8Femp9awB3e9EV5B\nzxqhJgu5/fN9tWz7j6Mo/PqSqJek4jbytQjtPgm7e3b2lRgPcSKMW9riQeJ5dvciiCJXjGaRrJzC\nz+cyHKgWufEdP8X/+T/8LJe95BAPPXGe3/+Te3lqZy/We7B9tYuf6btODKOQz+57LZfNUCrmIg3S\nwcBebGdOKu7JP+5JU3xXYjzESb+vL1DcxIEw2hOtgqVLZz4IRVPIDYzcRdvr/M+/9Grec91LMC2L\nnzxTj/Ue2t1efym9SNXT9VH4YKv8KMZbDICO3qPTXVxAPKkMK/yYDb5jcOah8IUbo97spmZ/gekW\nbRGMt3hvq2P0V9iLYGUMft+Nkd//yMcPV4D4B5t7YO8ucKYXgz2f26/wwQ7c1ps6ZshB6u74i/ZR\nJhF3m9XjVviO2tZ1M3YjLERD1zBpp0QI7DkxEJjM4MNixd7KGHyRipkfo2o31+1AZRSf3CQMB+cW\nt8wVy/lxkx/YCt+0LJptI9Tfm6dCTSPuvrAbtw+/YfvwLey0yThZFiM3S9wTchTRtrskY2RlDP4g\nULlf1W5MkJkyCUNKeIEK368tYJCpE3aQDg3slPlr54Ew+GuF7BwU/uDvx52pU5tjMHpeuJ8j7Bg2\n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\nRfj/AVqKnSI9NotsAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 16 + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Pass in any file of code" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def reverse_dict_match(a_dictionary, a_list):\n", + " \"\"\"Pass this function a dictionary and a list. it will reverse the order of the dict\n", + " and match the first values of the list with the dict.\"\"\"\n", + " reversed_dict = dict((v,k) for k,v in a_dictionary.items())\n", + " return [(reversed_dict.get(x),y) for x,y in a_list]\n", + "\n", + "def check_code_file(a_file, corp_train, corp_answer):\n", + " \n", + " # Ingest and featurizes file\n", + " request = Corpus([a_file])\n", + " request_df = request.compl_df_build()\n", + "\n", + " # Run model\n", + " model_created = RandomForestClassifier(40)\n", + " model_created.fit(corp_train, corp_answer)\n", + " predicted = model_created.predict(request_df.values)\n", + " predict_prob = model_created.predict_proba(request_df.values)\n", + " \n", + " #Pretty response\n", + " answer_list = list(zip(model_created.classes_, predict_prob[0]))\n", + " answer_list.sort(key=lambda x: x[1], reverse=True)\n", + " return reverse_dict_match(hit_num, answer_list)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 17 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "check_code_file('test/22', corp_train, corp_answer)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 22, + "text": [ + "[('java', 0.52500000000000002),\n", + " ('ruby', 0.17499999999999999),\n", + " ('clojure', 0.10000000000000001),\n", + " ('scheme', 0.074999999999999997),\n", + " ('haskell', 0.074999999999999997),\n", + " ('python', 0.050000000000000003),\n", + " ('scala', 0.0),\n", + " ('javascript', 0.0),\n", + " ('ocaml', 0.0),\n", + " ('perl', 0.0),\n", + " ('php', 0.0)]" + ] + } + ], + "prompt_number": 22 + }, + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Pass in any code snippet" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def check_code_snippet(code_snippet, corp_train, corp_answer):\n", + " request = Corpus()\n", + " code_snippet_df = pd.DataFrame(code_snippet, columns=['raw_text'])\n", + " code_snippet_df = request.feature_breakout(code_snippet_df)\n", + " request_df = request.clean_df(code_snippet_df, snippet='True')\n", + "\n", + " # Run model\n", + " model_created = RandomForestClassifier(50)\n", + " model_created.fit(corp_train, corp_answer)\n", + " predicted = model_created.predict(request_df.values)\n", + " predict_prob = model_created.predict_proba(request_df.values)\n", + " \n", + " #Pretty response\n", + " answer_list = list(zip(model_created.classes_, predict_prob[0]))\n", + " answer_list.sort(key=lambda x: x[1], reverse=True)\n", + " return reverse_dict_match(hit_num, answer_list)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 19 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "ocaml = \"\"\"| pid ->\n", + " Unix.close output;\n", + " let input = Unix.in_channel_of_descr input in fun () ->\n", + " let v = Marshal.from_channel input in\n", + " ignore (Unix.waitpid [] pid);\n", + " close_in input;\n", + " match v with `Res x -> x | `Exn e -> raise e\"\"\"\n", + "\n", + "check_code_snippet([ocaml], corp_train, corp_answer)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 20, + "text": [ + "[('ocaml', 0.57999999999999996),\n", + " ('clojure', 0.14000000000000001),\n", + " ('scheme', 0.080000000000000002),\n", + " ('haskell', 0.080000000000000002),\n", + " ('python', 0.059999999999999998),\n", + " ('ruby', 0.040000000000000001),\n", + " ('perl', 0.02),\n", + " ('scala', 0.0),\n", + " ('java', 0.0),\n", + " ('javascript', 0.0),\n", + " ('php', 0.0)]" + ] + } + ], + "prompt_number": 20 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 20 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 20 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 20 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 20 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 20 + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/test/26 b/test/26 deleted file mode 100644 index 182f919..0000000 --- a/test/26 +++ /dev/null @@ -1,35 +0,0 @@ -proc isaac::mix {a b c d e f g h} { - set a [expr {($a ^ ($b << 11)) & 0xffffffff}] - set d [expr {($d + $a) & 0xffffffff}] - set b [expr {($b + $c) & 0xffffffff}] - - set b [expr {($b ^ ($c >> 2)) & 0xffffffff}] - set e [expr {($e + $b) & 0xffffffff}] - set c [expr {($c + $d) & 0xffffffff}] - - set c [expr {($c ^ ($d << 8)) & 0xffffffff}] - set f [expr {($f + $c) & 0xffffffff}] - set d [expr {($d + $e) & 0xffffffff}] - - set d [expr {($d ^ ($e >> 16)) & 0xffffffff}] - set g [expr {($g + $d) & 0xffffffff}] - set e [expr {($e + $f) & 0xffffffff}] - - set e [expr {($e ^ ($f << 10)) & 0xffffffff}] - set h [expr {($h + $e) & 0xffffffff}] - set f [expr {($f + $g) & 0xffffffff}] - - set f [expr {($f ^ ($g >> 4)) & 0xffffffff}] - set a [expr {($a + $f) & 0xffffffff}] - set g [expr {($g + $h) & 0xffffffff}] - - set g [expr {($g ^ ($h << 8)) & 0xffffffff}] - set b [expr {($b + $g) & 0xffffffff}] - set h [expr {($h + $a) & 0xffffffff}] - - set h [expr {($h ^ ($a >> 9)) & 0xffffffff}] - set c [expr {($c + $h) & 0xffffffff}] - set a [expr {($a + $b) & 0xffffffff}] - - return [list $a $b $c $d $e $f $g $h] -} diff --git a/test/27 b/test/27 deleted file mode 100644 index 902ec5c..0000000 --- a/test/27 +++ /dev/null @@ -1,20 +0,0 @@ -proc twitter::follow {nick uhost hand chan argv} { - if {![channel get $chan twitter]} { return } - - if {[string length $argv] < 1} { - $twitter::output_cmd "PRIVMSG $chan :Usage: !follow " - return - } - - if {[catch {::twitlib::query $::twitlib::follow_url [list screen_name $argv]} result]} { - $twitter::output_cmd "PRIVMSG $chan :Twitter failed or already friends with $argv!" - return - } - - if {[dict exists $result error]} { - twitter::output $chan "Follow failed ($argv): [dict get $result error]" - return - } - - twitter::output $chan "Now following [dict get $result screen_name]!" -} \ No newline at end of file diff --git a/test/33 b/test/33 new file mode 100644 index 0000000..5f0b483 --- /dev/null +++ b/test/33 @@ -0,0 +1,56 @@ +#!/usr/local/bin/perl + +use English; +use Carp; +use Getopt::Long; + +sub Usage{ + my $message = shift; + + print STDERR $message, "\n" if $message; + print STDERR "\nUsage: $0 -d(ef) definition_file < source > newsource\n"; + + print STDERR <<'EOM'; + -d(ef) filename : Specifies the definition file which is a set of pairs, each corresponding to a "replacement pattern", e.g., + a A + b B + ... + z Z + would replace all lower cases with upper cases + + -h(elp) : display this message + +EOM + + exit(1); + +} + +if (! &GetOptions("help", "def=s") or + $opt_help) { + &Usage(); +} + +open(D, $opt_def) || die "can't open definition file:$opt_def\n"; +while () { + ($oldp, $newp) = split; + $dic{$oldp}=$newp; +} +close(D); + +$oldStr = ""; +$newStr =""; +while () { + $oldStr = $_; + foreach $k (keys %dic) { + s/$k/$dic{$k}/g; + } + + $newStr = $_; + if ($oldStr ne $newStr) { + print STDERR "\n"; + print STDERR "old>>$oldStr"; + print STDERR "new>>$newStr"; + } + print; +} diff --git a/test_fixed.csv b/test_fixed.csv new file mode 100644 index 0000000..a7f0fb5 --- /dev/null +++ b/test_fixed.csv @@ -0,0 +1 @@ +answers 1 4 4 4 9 9 9 2 2 2 11 1 11 11 3 3 10 10 7 7 1 7 5 5 6 1 8 8 8 8 4 \ No newline at end of file