diff --git a/nbs/ComparisonPlots.ipynb b/nbs/ComparisonPlots.ipynb new file mode 100644 index 0000000..17beadf --- /dev/null +++ b/nbs/ComparisonPlots.ipynb @@ -0,0 +1,274 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from matplotlib import pyplot as plt\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "nb = [0.606, 0.663, 0.6985]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "l2 = [0.852, 0.8599, 0.873]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "l1 = [0.804, 0.851, 0.889]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "fm = [0.615, 0.6552, 0.722]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "nt = [0.682, 0.693, 0.717]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "lda = [0.704, 0.7514, 0.7984]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "model_names = []\n", + "metric_names = []\n", + "metric_values = []" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "model_names = model_names + [\"Multinomial NB\" for i in range(3)]\n", + "metric_names = metric_names + [\"accuracy\" for i in range(3)]\n", + "metric_values = metric_values + nb" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "model_names = model_names + [\"LDA\" for i in range(3)]\n", + "metric_names = metric_names + [\"accuracy\" for i in range(3)]\n", + "metric_values = metric_values + lda" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "model_names = model_names + [\"L1 Logistic Regression\" for i in range(3)]\n", + "metric_names = metric_names + [\"accuracy\" for i in range(3)]\n", + "metric_values = metric_values + l1" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "model_names = model_names + [\"L2 Logistic Regression\" for i in range(3)]\n", + "metric_names = metric_names + [\"accuracy\" for i in range(3)]\n", + "metric_values = metric_values + l2" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "model_names = model_names + [\"Logistic Factorization Machine\" for i in range(3)]\n", + "metric_names = metric_names + [\"accuracy\" for i in range(3)]\n", + "metric_values = metric_values + fm" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "model_names = model_names + [\"n-Tuple Classifier\" for i in range(3)]\n", + "metric_names = metric_names + [\"accuracy\" for i in range(3)]\n", + "metric_values = metric_values + nt" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "metric_df = pd.DataFrame({\"model\": model_names,\n", + "\"metric\": metric_names,\n", + "\"values\": metric_values})\n", + "accuracy_df = metric_df[metric_df.metric == \"accuracy\"]\n", + "accuracy_df.columns = [\"metric\", \"Model\", \"Accuracy Score\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAr4AAALsCAYAAAAFwbSJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XlclXX+///nYVcEZXHDJXM9CCJqZqCOuymlKRk0bmk5\nNVlpizMjU1lWllbmZGnfmbFRJ2k0dxHLtMVQsXJFTXJJ1BTFg+ASINv5/eHP8/EECEcOm+dxv928\n3eJ9va7rvM6R9Omb9/W+DGaz2SwAAADgNudU1Q0AAAAAlYHgCwAAAIdA8AUAAIBDIPgCAADAIRB8\nAQAA4BAIvgAAAHAIBF8AAAA4BIIvAAAAHALBFwAAAA6B4AsAqLZWrVolo9GoM2fOWMbGjBmjsWPH\nVmFXN/fBBx/IaDTe0rlTp05V37597dwRgOsIvgBuWWxsrIxGo6Kjo6u6lRonKytLc+fO1ZAhQ9Sp\nUyd169ZNw4YN04wZM3T+/Pmqbq/SjBgxQkajUUuXLi32uMFgkMFguKVr9+3bV0ajUY8++mixxz/7\n7DMZjUYZjUYdPHjwll6jOOXpuTznAigdwRfALVu/fr2aNm2qpKQknTp1qqrbqTHy8/M1atQoLVy4\nUHfddZdiYmL05JNPKigoSPHx8UpJSanqFivFiRMndODAATVt2lRxcXEV8hoeHh76/vvvlZ6eXuRY\nXFycPDw8CJqAAyH4Arglp06d0p49ezR16lT5+Pho3bp1Vd1SibKzs6u6BSubNm3SoUOHNGPGDL3y\nyiuKiorSuHHjNGPGDH377bdq3759pfVSlZ/N2rVr5e/vr6lTp2r37t1WyxnspXPnzqpdu7Y2bNhg\nNX7u3Dnt2rVLvXr1svtrAqi+CL4AbklcXJzq1q2r3r1769577y1xxs5sNmvx4sUaMmSIQkJCFBYW\npgkTJhT50fLatWv10EMPKTQ0VHfffbdGjx6tbdu2WY4bjUZ9+OGHRa7ft29fxcTEWL5evXq1jEaj\nfvzxR7366qsKDw9X7969JUlnzpzRq6++qkGDBqljx47q1q2bJk+erNOnTxe57uXLl/Xmm2+qb9++\n6tChg3r16qW//e1vyszMVFZWljp16qQ333yzyHnnzp1T+/bt9a9//avEz+7UqVMyGAzq1KlTkWNu\nbm7y9PS0Gvvll180efJkhYWFqWPHjho0aJDmzJljVfPTTz9pwoQJ6tKlizp16qRx48Zp3759VjU3\n+2yu9x4TE6Pu3burQ4cOuv/++7Vy5coS30d5xcfHa9CgQerVq5e8vLy0fv16u7+Gm5ubBgwYUOTa\n179/e/ToUex5iYmJGjlypDp16qSuXbtq4sSJOnbsWJG6nTt36sEHH1RISIgGDhyoZcuWldjL2rVr\nFRkZafnee/7553X27NlS30N8fLwiIyPVuXNndenSRUOGDNF///vfUs8DUJRLVTcAoGZav3697r33\nXrm4uOi+++7T0qVLdeDAAQUHB1vV/f3vf9fq1avVu3dvRUVFqaCgQDt37tTevXsVFBQkSfrwww/1\n4YcfqnPnzpo8ebJcXV21b98+ff/99+revfst9Td9+nT5+vrqqaeessxq7t+/X/v27dP999+vhg0b\n6vTp0/rf//6nsWPHasOGDXJ3d5d0bf3tyJEjdfz4cT344INq3769MjIy9PXXX+vs2bMyGo3q37+/\nNmzYoJiYGKsflV//B8ADDzxQYm9NmjSR2WzWmjVr9OSTT970fSQnJ2vUqFFyc3NTdHS0mjRpopMn\nT+rbb7/Vc889J0k6evSoRo0aJS8vLz3++ONydnbWsmXLNGbMGC1ZskQhISGlfjbp6emKioqSs7Oz\nxowZIx8fH3333Xd68cUX9dtvv9n9ZrJ9+/bpxIkTmjlzplxdXTVgwADFxcXp8ccft+vrSNL999+v\nRx99VKdOnVKzZs0kXQuT179/f2/79u16/PHH1axZMz3zzDPKycnRJ598opEjR2r16tUKCAiQJB0+\nfFgTJkyQr6+vJk2apPz8fH3wwQfy8/Mrcs2PPvpIc+fOVUREhKKionThwgV98sknGj16tNasWaM6\ndeoU2/u2bdv0wgsvqHv37nrooYckSceOHdOePXuq9Q1+QLVlBgAb7d+/39yuXTtzYmKiZaxXr17m\nN99806ouMTHR3K5duyLjNzpx4oQ5MDDQ/Mwzz9z0Ndu1a2f+4IMPioz36dPHPHXqVMvXq1atMrdr\n1848evRoc2FhoVXt1atXi5y/b98+c7t27cxr1661jL3//vtmo9Fo3rx5c4n9bN261Ww0Gs0JCQlW\n40OHDjWPGTPmpu8lJyfHPGjQIHO7du0s/a9YscKcnp5epHbUqFHmLl26mM+ePVvi9SZOnGju0KGD\n+ddff7WMpaWlmTt37mwePXq0Zexmn83f//53c8+ePc0XL160Gn/++efNXbt2LfazK4/XXnvN3KdP\n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\nrv2jDYBtmPEFUGZfffWVfvvtN/Xt27fY46GhoZYblAYPHqxu3brpgQce0CeffKKUlBT17NlThYWF\n2rVrl7p166ZRo0apefPm+vOf/6yPPvpII0eO1MCBA+Xm5qb9+/erYcOGli27HnroIb3yyiuaNGmS\nwsPDlZycrG3btsnX17dIHyUF6D59+mjdunWqU6eOWrdurT179mjHjh3y8fGxqnvssce0ceNGPfvs\ns4qMjFRQUJAyMzP1zTffaPr06VY/9h8yZIjeffddbd68WSNHjpSzs3Opn+P27dv1wQcfqG/fvurY\nsaNq166tU6dOaeXKlcrLy9PTTz9tqX3xxRc1atQoDR8+XNHR0WratKl+/fVXbdmyRWvWrJEkPfvs\ns9q+fbv++Mc/auTIkXJyctJnn32mvLy8IutlS/pspkyZoh9++EFRUVF66KGH1Lp1a2VmZurgwYPa\nsWPHTW/AskVcXJzq1atX7B7G0rV9mT/77DNt2bJF/fv3t8trXhcQEGD12V73+8/kr3/9q/70pz8p\nKipKI0aMUHZ2tmJjY+Xt7W11/jPPPKOEhASNHDlSf/zjH5Wfn6/Y2Fi1adNGP//8s6WuWbNmmjx5\nsubMmaNff/1V/fv3l6enp06dOqXNmzfr4Ycf1vjx44vt+aWXXtLFixfVrVs3NWrUSKdPn1ZsbKwC\nAwPtvi4ecAQEXwBlFhcXp1q1apW4htdgMKhXr15av369Ll68qLp162rmzJkyGo1asWKF3nnnHXl5\neSk4OFidO3e2nDdp0iQ1a9ZMn3zyif7xj3/Iw8ND7dq1s9odISoqSqdPn9aKFSuUkJCgrl276j//\n+Y/GjRtXZN1kSY+gfemll+Ts7Kz169fr6tWr6tKlixYuXKjHHnvM6pzatWvr008/1dy5c7V582at\nWbNGfn5+CgsLK7JswM/PT927d9d3332noUOHlulzvPfee5WVlaWtW7fq+++/V2ZmpurWrauQkBA9\n+uij6tq1q6XWaDTqs88+0/vvv2+5kS4gIMBqR4TWrVvr008/1ezZs/Wvf/1LhYWFCg0N1ezZs9Wh\nQ4cyfTZ+fn5avny55s+fr82bN+t///uf6tWrpzZt2tjtZrMLFy5ox44dGjJkSIl9hIWFqVatWlq3\nbt1Ng29ZHjNsMBjKXPf7HhYsWKAPPvhAH3zwgVxcXHT33XfrhRdesLoxsF27dvr44481c+ZMffDB\n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\na9q2bYsDBw4gNzcXZmZmAIBbt27BwMAADRo0AAC4u7tDqVRi+PDhmtedOHEC7u7ufzljkyZNNH8O\nEREREUlHbm5uhW5SSqLxBYDAwEAEBQXBzc0NrVq1wubNm5GXl4cBAwYAAEJCQvDw4UMsXrwYANC3\nb1+sWrUKQUFB+OCDD5CWloYlS5Zg4MCBmmUOw4cPx7BhwxAeHo5u3bphz549uHr1KoKDg/9yPjMz\nM5ibm7+6b5iIiIiIdEoyjW+fPn2Qnp6OFStWICUlBS4uLli/fj2srKwAACkpKUhMTNTMNzc3x8aN\nGxEcHIyAgADUqlULvXv3xtSpUzVzPDw8EBISgmXLlmHZsmWwt7fHypUreWADERERkQwp1Gq1WnQI\nKcvJycG1a9fg4uLCO75EREREElTRfk0S+/gSEREREVU2Nr5EREREJAtsfImIiIhIFtj4EhEREZEs\nsPElIiIiIllg40tEREREssDGl4iIiIhkgY0vEREREckCG18iIiIikgU2vkREREQkC2x8iYiIiEgW\n2PgSERERkSyw8SUiIiIiWWDjS0RERESywMaXiIiIiGSBjS8RERERyQIbXyIiIiKSBTa+RERERCQL\nbHyJiIiISBbY+BIRERGRLLDxJSIiIiJZYONLRERERLLAxpeIiIiIZIGNLxERERHJAhtfIiIiIpIF\nNr5EREREJAtsfImIiIhIFtj4EhEREZEssPElIiIiIllg40tEREREssDGl4iIiIhkgY0vEREREckC\nG18iIiIikgU2vkREREQkC2x8iYiIiEgW2PgSERERkSyw8SUiIiIiWWDjS0RERESywMaXiIiIiGSB\njS8RERERyQIbXyIiIiKSBTa+RERERCQLbHyJiIiISBbY+BIRERGRLLDxJSIiIiJZYONLRERERLLA\nxpeIiIiIZEFSjW9ERAR8fHzQunVrvP3227h06VK5c8+cOQNnZ2etf1xcXJCamqqZs2PHDs14yZw2\nbdro4lshIiIiIokxEh2gxN69e7Fo0SJ8+eWXaNWqFTZv3ozRo0dj//79sLKyKvM1CoUCBw4cQPXq\n1TVj1tbWWnNq1KiBAwcOQK1Wa15DRERERPIjmTu+mzZtwjvvvAN/f384Ojpi7ty5MDU1xfbt21/4\nOisrK1hbW2v+eZ5CodCaU14TTURERET6TRKNb2FhIa5evQpvb2/NmEKhQMeOHXHhwoVyX6dWq/HW\nW2+hc+fOGDlyJM6fP19qTk5ODnx8fNC9e3dMmDAB8fHxlfI9EBEREZG0SWKpQ3p6OlQqFerUqaM1\nbm1tjVu3bpX5mrp162LevHlwc3NDQUEBfvzxRwwfPhw//fQTXFxcAAAODg6YP38+nJyckJ2djfXr\n1+Pdd9/Fnj17UL9+/Ur/voiIiIhIOiTR+P4dDg4OcHBw0Hzu7u6Oe/fuYdOmTVi8eLFmzN3dXWtO\nnz598MMPP2Dy5MkV+nOKi4sBAI8fP0Zubu4r/A6IiIiI6FXIz88H8L++rTySaHxr164NQ0NDpKSk\naI2npqaWugv8Iq1atSpzuUMJIyMjuLi44M6dOxX+miX/IhMTEyv8GiIiIiLSvfz8fFhYWJR7XRKN\nr7GxMVxdXaFUKuHr6wvg6fpdpVKJYcOGVfjrxMbGol69euVeLy4uRlxcHLp3717hr1mzZk00adIE\n1apVg4GBJJZEExEREdEziouLkZ+fj5o1a75wniQaXwAIDAxEUFAQ3NzcNNuZ5eXlYcCAAQCAkJAQ\nPHz4ULOMYfPmzbC1tUXz5s2Rn5+PH3/8EadPn8bGjRs1XzMsLAzu7u6ws7NDVlYW1q9fj8TERAQE\nBFQ4l5GRUZm7RRARERGRdLzoTm8JyTS+ffr0QXp6OlasWIGUlBS4uLhg/fr1mu3HUlJStJYbFBYW\nYvHixXj48CFMTU3h5OSETZs2oX379po5mZmZmD17NlJSUmBpaQk3Nzds27YNjo6OOv/+iIiIiEgs\nhbrkZAciIiIiIj3GRatEREREJAtsfImIiIhIFtj4EhEREZEssPElIiIiIllg40tEREREssDGl4iI\niIhkgY2vTOTk5CAyMhIRERG4ffu26DhERKSnYmJi8Mknn+C9995DcnIyAGDXrl04f/684GTyVVhY\nCE9PT9y4cUN0FOEkc4AFvToJCQn4+OOPcfXqVbi7u2P+/PkYMWIE7ty5AwAwNTXFunXrtA77IKL/\nSUlJweLFi6FUKpGWlobntzu/du2aoGTE2kjbb7/9ho8++gj/93//h8uXL6OgoAAAkJGRgd27d2Pt\n2rWCE8qTsbExatSoUervixzxAAs9NGXKFCQlJWHIkCHYt28fbt++DXt7e8yfPx8KhQJz5szB48eP\n8e2334qOSmVQq9U4evQotm/fjhUrVoiOI0ujR49GYmIihgwZgnr16pW67ufnJyAVAayN1PXv3x/D\nhg3DgAED4OHhgV27dqFx48b4448/MGbMGJw4cUJ0RNnasmULTp06ha+++grm5uai4wjDO756KDo6\nGqtWrULr1q3RtWtXeHl5YcGCBbC2tgYATJgwAe+//77glPS8e/fuYfv27dixYwfS0tLQsWNH0ZFk\n69y5c9i6dStcXFxER6HnsDbS9ueff6JDhw6lxmvUqIHMzEwBiajE3r17ERsbi86dO6NJkyYwMzPT\nuh4RESEomW6x8dVDqampsLGxAQDUqlULZmZmqFOnjuZ6nTp1+D8giSgoKMD+/fsRGRmJ8+fPQ6VS\nYebMmQgICICFhYXoeLLVsGFDviUoUayNtNWpUwd3795Fo0aNtMbPnz+Pxo0bC0pFANCmTRu0adNG\ndAzh2PjqKYVCIToCvcCVK1cQGRmJPXv2wM7ODm+99RaWLl2Kbt26oXPnzmx6Bfv0008REhKCuXPn\nwtbWVnQcegZrI20BAQFYsGABFi5cCIVCgZSUFFy+fBlfffUVxo4dKzqerM2cOVN0BElg46unli9f\nrnkbo7CwEKtWrUKNGjUAALm5uSKjEYC3334bQ4cOxQ8//ICmTZuKjkPPmTZtGnJzc9GzZ0+YmprC\n2NhY6/qZM2cEJSPWRtrGjRsHlUqFoUOHIi8vD4MHD4axsTECAwO5xE4CcnJycPjwYdy9exdDhgyB\npaUlbt68idq1a8PKykp0PJ1g46uH2rdvj1u3bmk+9/DwwL1797TmeHp66joWPcPb2xuRkZFITU3F\nW2+9hS5duvAuvYR8+umnoiNQOVgbaVMoFJg0aRLGjBmDW7duIScnBy1atOC7WBJw8+ZNjBgxAmq1\nGmlpaejbty8sLS0RFRWFtLQ0LFy4UHREneCuDkSCJCYmYvv27YiKikJ+fj569+6N77//Hrt27YKj\no6PoeEREpEdGjRoFe3t7zJo1C+3atdPsuBEdHY2ZM2fi0KFDoiPqBO/4EgnSsGFDTJo0CZMmTcKJ\nEycQFRUFQ0NDTJgwAb169UKvXr3g6uoqOqZsqVQqHDx4EDdv3gQANG/eHD4+PjA0NBScjFgb6crN\nzcWGDRugVCqRmppa6kHEAwcOCEpGly5dwuzZs2FgoH12WYMGDfDo0SNBqXSPja8eCg0NrdC8SZMm\nVXISqqhOnTqhU6dOyMjIwK5du7B9+3asW7eOm/ELcufOHYwdOxbJyclwcHAAAKxduxYNGjTA2rVr\nYWdnJzihfLE20jZ79mwolUr069cPdevW5RIuCTEwMEBeXl6p8Xv37qFmzZoCEonBpQ56yN/fv9xr\nCoUCt27dQn5+Ppsqibt69Srv+AoyZswYqNVqfP3116hVqxYAID09HTNmzICBgQFPnxKItZE2T09P\nrF69ms+RSNDMmTNRWFiIr7/+WrPUwdzcHOPHj0fLli0xZ84c0RF1go2vjFy7dg1ff/01Tp8+jQED\nBmDevHmiI8ne7du3cejQITx48AAKhQK2trbw8/PjfpeCubu744cffoCTk5PWeGxsLAYPHoyYmBhB\nyYi1kTYfHx+sXbsWzZo1Ex2FnpOWloYJEybg/v37SEtLg52dHRITE9G8eXOEh4drdn7Sd1zqIAP3\n7t3D8uXLsW/fPvTs2RO7d+9GkyZNRMeSvTVr1mDFihUoLi6GtbW15knbkJAQTJs2DaNGjRIdUbZM\nTEzw5MmTUuNPnjwptX0W6RZrI22TJ09GWFgYFi1ahGrVqomOQ8+wsrLCtm3bcPToUVy/fh05OTlw\ndXVFjx49ZLU+nnd89VhaWhrCwsLwww8/oF27dvjoo4/QunVr0bEIwKlTpzBixAhMmDABw4cP16yv\nevz4MTZv3ow1a9Zg8+bNaN++veCk8vTxxx/jjz/+wPz58zV/Zy5evIjZs2fD1dUVixYtEpxQvlgb\naRs4cCBu3boFhUKBxo0bw8hI+/5aZGSkoGRET7Hx1UM5OTnYuHEjwsPDYW9vjw8//BCdO3cWHYue\nMXXqVFhaWpa73GT27Nl48uQJli5dquNkBACZmZmYOXMmDh8+rPnBrVKp4OPjg0WLFsnmLUEpYm2k\n7Ztvvnnh9alTp+ooCQFPf9F48803YWJi8tJfOgICAnSUSiw2vnqoU6dOePLkCYYOHYq+ffuWO8/Z\n2VmHqehZPj4++Oqrr8p9ACQ6Ohoff/wxfv/9dx0no2fdvn0bf/75JwDA0dER9vb2ghNRCdaG6OW8\nvLywd+9eWFlZwcvLq9x5CoUCSqVSh8nEYeOrh55taBUKhdY+iiWfKxQK7uogUJs2bXDgwAE0aNCg\nzOtJSUl4/fXXcenSJR0nIyIifaFSqWS1frci+HCbHpLL6StVWX5+/gsfxDEyMkJhYaEOE9HChQsx\nZcoUmJubv/TozqCgIB2lIoC1kTpvb2/s2bNHc1fxRXv3yuWuolS4ubnh+PHjsLa2xrhx4/D111/L\n/vhoNr56qFGjRqIjUAX89NNPMDc3L/NaWU+tU+X6448/UFRUpPm4PNyQX/dYG2n78MMPNc3UNWva\nwwAAIABJREFURx99JDgNPcvMzAyZmZmwtrbGkSNHUFBQIDqScFzqQCSAj4/PS+coFArevScior9t\n3LhxiIuLQ4sWLXDkyBF06tSp3HcbV69ereN0YvCOL5EAL3toLSkpCWFhYTpKQy+TnZ2NU6dOwcHB\nAY6OjqLj0DNYG+lRq9W4f/8+UlNTUVxcrHWtbdu2glLJ09dff40ffvgBd+/eBQDUrl0bpqamglOJ\nxTu+RBIUGxuL/v378wFEQaZMmYL27dtj6NChyMvLw1tvvYUHDx5ArVZj6dKl6NWrl+iIssXaSNul\nS5cwffp03Lt3D8+3F3yoWqyBAwdi48aNmn3j5Yp3fImInhMdHY3x48cDAH777Teo1WqcPXsWO3bs\nwKpVq9hcCcTaSNvnn38OJycn/Pvf/0bdunW57lpCtm/fLjqCJLDxJSJ6TlZWluauyLFjx/D666/D\nzMwM3bt3x5IlSwSnkzfWRtpu376N5cuXc19liVi+fDnGjh0LMzMzLF++/IVzp0yZoqNUYrHx1TP+\n/v4V/g17x44dlZyGqGpq2LAhYmJiULNmTRw7dkxzgl5mZiZMTEwEp5M31kbaWrVqhXv37rHxlYij\nR48iMDAQZmZmOHr0aLnzFAoFG1+qmvz8/ERHoAqYNGnSC69nZmbqKAmVZfjw4ZgxYwbMzc1hY2OD\nDh06AADOnj2LFi1aCE4nb6yN9MTHx2s+fv/997F48WKkpqbCyclJc6x0iWbNmuk6nqw9u7yBSx2e\n4sNtRAJUdJP9l23WT5Xn8uXLSEpKQseOHVG9enUAwJEjR1CjRg20a9dOcDp5Y22kxdnZWetU0LIe\nauOJodKTl5eH8+fPw97eXlb7/7PxJSJ6CZVKhbi4ONjY2Mj+iWipYW3EK9kqqyLs7OwqMQm9yMyZ\nM+Hu7o7BgwejoKAAAwcOxI0bN2BkZIR///vf6NGjh+iIOsGlDnpMpVJh06ZN2LdvHxITE0sdgXvm\nzBlByYikbf78+WjRogUGDRoElUqFoUOHIiYmBmZmZli9erXm7XXSPdZGetjMVg0nTpzA+++/DwA4\nePAgnjx5glOnTiEqKgqhoaGyaXwNRAegyhMaGorw8HD06dMHWVlZCAwMRM+ePaFQKF66xpRIzg4c\nOABnZ2cAwOHDh3H//n3s27cP77//PpYtWyY4nbyxNtK2bt06REVFlRqPiorChg0bBCSiEhkZGbCy\nsgLwdEeUXr16oVatWujVqxf+/PNPwel0h42vHvvll18QHByMkSNHwtDQEH379sX8+fMxceJEXLx4\nUXQ8IslKT09H3bp1AQD/+c9/8MYbb8DBwQEDBw5EXFyc4HTyxtpI2/fff4+mTZuWGm/atCm2bt0q\nIBGVqF+/Pq5cuYKCggIcO3YMnTp1AvD09EM57YjCxlePpaSkaJ5yrl69OrKysgAAPXr0wJEjRwQm\nI5K2OnXqID4+HiqVSusHRF5eHgwNDQWnkzfWRtoePXoEa2vrUuPW1tZ4+PChgERUYsiQIZg2bRp8\nfHxgYWEBLy8vAMC5c+dktdsG1/jqsfr16+PRo0ewsbFB48aNceLECbi6uuLy5cuy+u2O6K8aMGAA\npk6dqjl5qmPHjgCAixcvlnk3i3SHtZG2Bg0a4MKFC2jcuLHWeExMjOZOPYkxYsQItGzZEomJiejR\no4dmqzlra2tZLX9k46vHevbsCaVSiTZt2mDYsGGYMWMGIiMjkZCQgMDAQNHxiCTrgw8+QPPmzZGU\nlIQ33nhD84uioaEhxowZIzidvLE20hYQEID58+dDpVLB29sbAKBUKrFo0SIMHz5ccDp6/uHPO3fu\noHv37qhWrZqgRLrH7cxkJCYmBhcuXIC9vT18fHxExyGqEvLz82X1Q6EqYW2kR61WY/HixdiyZQtU\nKhUAwNjYGKNGjcLkyZMrfLIovXohISFwdHSEv78/1Go1Ro4cCaVSCQsLC6xbtw4eHh6iI+oEG18i\noueoVCqsXr0a27ZtQ2pqKg4cOIDGjRvjm2++QaNGjTBo0CDREWWLtakasrOzcePGDZiamqJJkyYw\nMzMTHUn2unfvjhUrVqB169Y4fPgwPvvsM6xbtw67d+/G5cuXsWXLFtERdYIPt+mZQ4cOafbrPXTo\n0Av/IaKyrVq1Cjt27MCMGTNgbGysGW/RogUiIyMFJiPWpmqwsLCAh4cHXFxc2PRKRGpqKurVqwfg\n6UmHvXv3hqurKwYPHiyrE/W4xlfPTJw4ESdOnIC1tTUmTpxY7jweHUlUvp9//hlffvklvL298cUX\nX2jGnZycZLXfpRSxNtL3xx9/YP/+/UhISCh1cNLy5csFpSIrKyvcvn0b9erVw7Fjx/Dpp58CAAoL\nC2W1BIWNr56JjY0t82Miqrjk5OQyT6NSq9UoKioSkIhKsDbStm/fPsyYMQNeXl44deoUvLy8cOfO\nHaSnp/PZEsH69euHadOmoWHDhigoKEDnzp0BAJcvX0aTJk3EhtMhNr5ERM9p1qwZoqOj0ahRI63x\n/fv3w8XFRVAqAlgbqVu1ahVmzpyJYcOGwcPDA1988QUaNWqEWbNmwcbGRnQ8Wfvoo4/QtGlTJCYm\nol+/fjA1NQXw9CHRkSNHCk6nO2x89dylS5dw+vRppKWlobi4WOtaUFCQoFRE0jZhwgR88sknSE5O\nhlqtxq+//opbt25h586dWLNmjeh4ssbaSNvdu3fRvXt3AICJiQlycnJgYGCAkSNHIjAwUFb7xUqN\nQqHAgAEDSo2/8847AtKIw8ZXj61evRrffPMNHBwcUKdOHa1rclrPQ/RX+fn5YfXq1QgLC4OZmRlW\nrFiBli1bYvXq1ZqTwkgM1kbaLC0tkZOTAwCoV68ebt68CScnJ2RnZ2vGSZyCggJcvHixzPXXAQEB\nglLpFrcz02MdO3bE9OnTy/wNj4jKplKpcP78eTg5OcHS0lJ0HHoGayN9H374IVq3bo3AwECEhobi\n+++/h5+fH44fPw4nJyesXLlSdETZunHjBv71r3/h0aNHKCoqgqmpKXJzc2FiYoLq1atDqVSKjqgT\n3M5MjxkYGKBt27aiYxBVKYaGhhg5ciQyMjJER6HnsDbSN2vWLPTq1QsAMH78eAwZMgQJCQno0aMH\n5s+fLzidvC1YsACenp44d+4cTE1NsWvXLuzZswctW7bEokWLRMfTGS510GPvv/8+IiIi8Nlnn4mO\nQlSlNG/eHPfv30fjxo1FR6HnsDbSZmVlpfnY0NAQEyZMEJiGnnXlyhV8//33MDExgYGBAQoKCuDo\n6IgZM2bg888/R7du3URH1Ak2vnps1KhRGDt2LPz8/NCsWTMYGWmXOzQ0VFAyImmbOnUqFi9ejClT\npsDV1RXm5uZa1y0sLAQlI9aG6O8xMDCAiYkJAMDa2hpJSUlwdHSElZUV7t+/Lzid7rDx1WPBwcE4\nffo0OnTogFq1avGBNqIKGjt2LICnb9U++/dGrVbz8BfBWBtpcnNzq9C8K1euVHISKo+zszOuXLkC\nOzs7tG3bFmFhYcjNzUVUVBQcHR1Fx9MZNr56bMeOHfj3v/+t2VqGiCrm22+/FR2BysHaSFNRURFs\nbGzQv39/tGjRQnQcKsPkyZM1O2tMmzYNU6dOxZQpU2Bra4slS5YITqc73NVBj/Xo0QPr16+X1W9y\nRESkexcuXEBkZCT27dsHBwcHDBw4EP369ePSE4krLi6GgYG89jlg46vHtm/fjmPHjmHhwoUwMzMT\nHYeoyijvuG+FQoFq1arBxsZGs1aOdIu1kbbc3Fzs27cPUVFRuHr1Knx9fREQEAAvLy/R0YgAsPHV\na/7+/rh79y7UajVsbW1LPdy2Y8cOQcmIpM3Z2fmFa+KNjIzQp08fzJs3D9WqVdNhMmJtqo47d+5g\n9uzZOHv2LJRKJWrVqiU6kuy89957FX6+JyIiopLTSAPX+OoxPz8/0RGIqqSVK1diyZIlGDlyJFq3\nbg3g6fHf4eHhmDRpEoqKihASEoJvvvkGM2fOFJxWXlgb6Xv48CF27tyJqKgoZGVlITAwkEseBGnT\npo3oCJLDO75ERM95++238cEHH6BLly5a48eOHcPy5csRGRmJgwcPYtGiRTh48KCglPLE2khTYWEh\nfv/9d0RGRuLUqVPo1KkTAgIC0L1791LvNhKJxP8aZeDKlSu4efMmgKebv7ds2VJwIiJpi42NhY2N\nTalxGxsbxMXFAXj6lvujR490HU32WBtp6tKlC8zNzeHv74/Zs2ejbt26AJ42xIWFhZp5fN5E97Kz\ns7F//3688cYbpe68Z2Vl4cCBA2Ve01dsfPVYamoqpk2bhjNnzmjOtc/MzESHDh2wbNkyrRN2iOh/\nmjZtinXr1mHevHmaB6UKCwuxbt06NG3aFACQnJwMa2trkTFlibWRpsePH+Px48dYuXIlVq1aVe48\n7rOse1u3bsX58+cREBBQ6lqNGjVw6NAhJCQkYPLkyQLS6R6XOuixqVOn4t69e/jqq680W5rFx8dj\n5syZsLe3x9KlSwUnJJKm8+fPY/z48TAwMICTkxMAIC4uDiqVCmvWrIG7uzt27tyJlJQUjB49WnBa\neWFtpEmpVFZonre3dyUnoef1798fH374YanlQSWOHz+OkJAQ2TzwzsZXj7Vr1w7h4eGaB0BKXLp0\nCSNHjkR0dLSgZETSl52djV9++QW3b98GADg4OKBv376yeTtQylgboopr27Ytdu/eXeYSIQBISEhA\nv379cO7cOR0nE4NLHfRYcXExjI2NS40bGRmhuLhYQCKiqsPCwgKDBw8WHYPKwNoQVZxCoUBKSkq5\njW9KSoqOE4klr+M6ZMbLywvz589HcnKyZiw5ORkLFy7k201EL7Fz504MHjwYnTt3xoMHDwAAmzZt\n4k4BEsDaEFWcs7Mzjhw5Uu7133//XbNsSA7Y+Oqxzz//HNnZ2fD19YWfnx/8/Pzg6+uL7OxszJ49\nW3Q8IsnaunUrFi1ahK5duyIzM1PzDomlpSU2b94sOJ28sTZEf827776LdevWISoqqtS17du3Y8OG\nDXj33XcFJBODa3z1nFqtxsmTJ/Hnn38CABwdHdGxY0fBqYikrU+fPvjwww/h5+cHDw8P7Nq1C40b\nN0ZcXByGDRuG06dPi44oW6wN0V8XHByMLVu2wNraGvb29gCenqyXlpaGwYMH4/PPPxecUHe4xlfP\nKRQKdOrUCZ06dRIdhajKuH//PlxcXEqNm5iYIDc3V0AiKsHaEP11s2bNgq+vL3bv3o07d+5ArVaj\ne/fu6Nu3r+yWPrLx1XNKpRJKpRKpqamlHmhbuHChoFRE0mZra4tr166hUaNGWuPHjh3TbA1IYrA2\n0pabm4sNGzZofu48/6bygQMHBCUjb29v2TW5ZWHjq8dCQ0MRFhYGNzc31K1bFwqFQnQkoiphxIgR\nmDdvHgoKCgA83QJw9+7dWLt2LYKDgwWnkzfWRtpmz54NpVKJfv368ecOSRLX+Oqxzp07Y/r06fD3\n9xcdhajK2bVrF0JDQ3H37l0AQL169fDBBx9g0KBBgpMRayNdnp6eWL16NTw9PUVHISoTG1891qFD\nB/z000+ws7MTHYWoysrNzUVOTg6PwJUg1kZ6fHx8sHbtWjRr1kx0FKIycTszPRYQEIBffvlFdAyi\nKs3MzEzTWOXn52PDhg2CE1EJ1kZ6Jk+ejLCwMOTn54uOQlQm3vHVY8HBwfj555/h5OQEJycnGBlp\nL+kOCgoSlIxIutLS0nDx4kUYGxvD29sbhoaGKCwsxNatW7F27VoUFRVxyyxBWBvpGzhwIG7dugWF\nQoHGjRuX+rkTGRkpKBkBT7c4vXjxIu7evQtfX19Ur14dGRkZMDMzg4mJieh4OsGH2/TY9evX4ezs\nDACIi4vTusYHDohKi46Oxrhx45CdnQ2FQgE3NzcsXLgQEydOhKGhISZNmoT+/fuLjilLrE3V0KVL\nF3Tp0kV0DCpDcnIyxo0bh7i4OBQXF+PXX39F9erVsWzZMhgYGMhmL1/e8SUi+q9hw4ahXr16GDdu\nHKKiohAeHg57e3tMmzYNb7zxhuh4ssbaEP0zkydPBvB0K9POnTtrDn9RKpWYM2eObLaa4xpfIqL/\niouLw/jx49G8eXNMmTIFCoUCM2bMYGMlAaxN1RIbG4s9e/Zgz549uH79uug4BODMmTOYPHkyqlev\nrjXeuHFjJCUlCUqle1zqoGcmTZqERYsWwcLCApMmTXrh3NDQUB2lIqoaMjIyULt2bQCAqakpTE1N\n0aJFC8GpCGBtqoq0tDRMnz4dJ0+ehLm5OYCnu2907NgRX3/9taaGpHtFRUVlLnN89OiRplZywMZX\nz9SoUUPzsYWFBdfyEv1F8fHxePTokebzW7duIScnR2tOydp50i3WRvqCg4ORnp6uebAaeHr399NP\nP0VwcDBCQkIEJ5QvLy8vfP/995g1a5ZmLD8/H2FhYejUqZPAZLrFNb5ERP/l7OwMhUJR6phVAJpx\nhUKBa9euCUgnb6xN1eDp6YmNGzeidevWWuMXLlzAmDFjcPbsWUHJ6N69ewgMDEStWrVw/fp1eHp6\n4s8//4SxsTG2bt2K+vXri46oE7zjq8eGDx+O0NBQWFpaao1nZ2djwoQJ+PbbbwUlI5KmQ4cOiY5A\n5WBtqgaVSlXmtljVqlVDUVGRgERUonHjxti3bx+ioqIQGxuLnJwcdO/eHQEBAbCwsBAdT2d4x1eP\nOTs748SJE6VONUpNTUXXrl1x9epVQcmIiEgfjRs3Djk5OVi6dCnq1KkD4Oka0unTp8Pc3ByrVq0S\nnJDkjnd89VBsbKzm4+fXxBUXF+PYsWOyeUuDiIh0Z/bs2Rg3bhy6d++ORo0aAQAePHiApk2bYuHC\nhYLTyY9SqazwXG9v70pMIh2846uHStbCAShzPZypqSlmzZqFgIAAXUcjIiI9p1arcfToUdy6dQsA\n0LRpU3Tp0oUPWwtQ0Yc95bQ+no2vHnrw4AHUajX8/Pzw008/wcrKSnPN2NgY1tbWMDQ0FJiQiIiI\nKtvzu568iFy2NGPjS0RERH9bREQEAgICUK1aNURERLxw7pAhQ3SUiqhsbHz1zF958tnX17cSkxBV\nXffu3YNKpUKTJk20xm/fvg0jIyPY2tqKCUasjQR169YNO3fuRO3atdGtW7dy5ykUChw5ckR3waiU\nCxcuYPPmzbh58yYAwNHREe+//z7c3d0FJ9MdNr56hut5iP65oUOHYtCgQXjrrbe0xn/++WdERkbi\nu+++E5SMWBuiv2f79u2YPXs2unbtqml0L1y4gGPHjmHu3Lmyee6HjS8R0XPatm2LnTt3ws7OTmv8\nzp07GDhwIKKjowUlI9ZG2lavXo3AwECYmppqjefn5yM8PBzjxo0TlIx69OiBoUOHYtSoUVrjGzdu\nxLfffiubu/EGogMQEUmNQqFAdnZ2qfGsrCyoVCoBiagEayNty5cvx5MnT0qN5+TkYPny5QISUYn0\n9HT4+fmVGvf19cXjx48FJBKD+/jqsdDQ0BdenzRpko6SEFUt7du3x5o1a7B06VLNDigqlQpr165F\nu3btBKeTN9ZG2kqOjn7ejRs3ULNmTQGJqETXrl1x9OhRDBs2TGv86NGj6NSpk6BUuselDnrM399f\n6/OioiLcv38fhoaGsLOzw44dOwQlI5K2+Ph4DBkyBJaWlvD09AQAREdHIzs7G5s3b0aLFi0EJ5Qv\n1kaavLy8oFAo8PjxY9SsWVOr+S0uLkZWVhYCAgIwb948gSnlbf369Vi7di06deqENm3aAAAuXryI\nkydPYuzYsVq/mOjzel82vjKTnZ2NTz75BH5+fqUaYyL6n+TkZERERCA2NhampqZo0aIFhg4dilq1\naomOJnusjfT89NNPAJ6e3PbJJ5+gevXqmmvGxsawtbXV/KJCYnh5eVVonkKh+EsnvlU1bHxl6Pr1\n6xg/fjx+//130VGIiEiPKJVKeHp6wtjYWHQUojJxja8MZWVlISsrS3QMIkmJjY1FixYtYGBggNjY\n2BfOrei2gfRqsDZVh7e3t+bjwsJCFBUVaV03MzPTdSQiLbzjq8e+/fZbrc/VajUePXqEn3/+Ga+9\n9hpCQkIEJSOSHmdnZ5w4cQLW1tZwdnaGQqFAWf975B7YusfaVB15eXkICQnBvn37kJqaWuo66yNO\ncHDwC6/PmjVLR0nE4h1fPbZp0yatzw0MDGBlZYX+/ftj7NixYkIRSdShQ4dgZWWl+Zikg7WpOpYs\nWYITJ07g008/RVBQEGbNmoWkpCT8+OOP+Oijj0THk7WS09pKFBUV4ebNmygsLESrVq0EpdI9Nr56\njGt4iSquUaNGmo8TEhLg4eEBIyPt/0UWFRUhJiZGay5VPtam6jh06BAWLVoELy8vfPbZZ3jttddg\nb28PW1tb7Nu3jw9VCxQeHl5qrKCgALNnz5ZV48sDLIiInjN8+HBkZGSUGs/KysLw4cMFJKISrI20\nPX78WHOqnoWFhaZWnp6eOHPmjMhoVAYTExOMHTsWa9asER1FZ3jHVw8FBQVVaN7ChQsrOQlR1VTe\nJvyPHz/mwzmCsTbS1rhxYyQkJMDGxgZNmzbF/v370bp1axw9ehQWFhai41EZkpOTUVBQIDqGzrDx\n1UM7duyAjY0NWrZsWeYDIERUtpLTDBUKBT755BOYmJhorqlUKly/fh0eHh6i4skaa1M1+Pv74+rV\nq/D09MSYMWMwfvx4REREoKCgAB9//LHoeLL2/JHRJQ+8//bbb3j99dcFpdI9Nr56aPDgwdizZw/u\n37+PAQMG4M033+TG7kQVUKNGDQBPfyBUr14dpqammmvGxsZwd3fHoEGDRMWTNdamahg1apTm486d\nO2Pv3r24fPky7O3t4erqKjAZHT16VOvzkgfex48fjyFDhghKpXvczkxPFRQU4Ndff8X27dsRExOD\nbt26ISAgAJ07dy7zbUIi+p/Q0FCMHDkS5ubmoqPQc1gbaUtOTkbt2rW17sgDT39hefjwIerXry8o\nmXwlJyfz3/sz2PjKwIMHD7Bjxw7s3LkTKpUKu3fv1jpOkoi05eXlQa1Wa9aMPnjwAL/99huaNWuG\nzp07C04nb6yNtDk7O6N58+ZYuXIlGjdurBlPSUlBly5duI+vAC4uLjh+/Disra1FR5EE7uogAwYG\nT8usVquhUqkEpyGSvgkTJmDnzp0AgMzMTAwaNAjh4eGYMGECtm7dKjidvLE20mdnZ4dBgwbh9OnT\nWuO8zyYG/71rY+OrpwoKCrB7926MGDECvXr1QlxcHD7//HMcOXKEd3uJXqLk4RwAOHDgAOrUqYPD\nhw9j8eLF+O677wSnkzfWRtoUCgXmzZuH0aNHY8yYMYiIiNC6RmLw3/3/8OE2PTRnzhzs3bsXDRo0\nwMCBAxESEqI59YiIXi4vL0/zC+Lx48fx+uuvw8DAAO7u7khISBCcTt5YG2krubs4evRoNG3aFNOn\nT8f169cxfvx4wcnkLTQ0VOuB0LLIZdcNNr56aNu2bbCxsUHjxo1x9uxZnD17tsx5oaGhOk5GVDXY\n2dnh4MGD6NmzJ44fP47AwEAAQGpqKvciFYy1qTp8fHzw/fffY/z48bh06ZLoOLJ25cqVUqcdPktO\nd4TZ+Oohf39/Wf1HTPSqTZw4EdOnT8fChQvh7e2t2R/2xIkTcHFxEZxO3lgbaWvbti2MjY01nzs5\nOSEyMhITJ07kWlOBVq1axYfb/ou7OhARleHRo0d49OgRnJ2dNQ+IXrp0CdWrV4ejo6PgdPLG2lRN\nKpUKhoaGomPIDnd10MbGl4iIiP623NxczfZyubm5L5zLY6V1z9nZGSdOnGDj+19c6kBEhKdH4i5a\ntAgWFhaa43HLw/XxusXaSFvbtm01dxQ9PDzKXGqnVquhUCi4j68AX375pebkQ2LjS0QEAFo/GPhD\nQlpYG2nbuHEjatasCQAIDw8XnIaeV9ZR3m3btsXPP/+sdciIXHCpAxEREf1jRUVFWL9+Pfz9/dGg\nQQPRcegFPDw8sGvXLlk2vjzAgoiIiP4xIyMjrFmzhieEkqRxqQMR0XPK2xJQoVDAxMQE9vb26N+/\nP7y8vASkkzfWRto6dOiAs2fPolGjRqKj0Au8+eabsj3F1XDOnDlzRIcgIpKShIQEnDhxAg0aNEC7\ndu1ga2uL9PR0/Pnnn+jWrRvu37+P0NBQODs7o2nTpqLjygprI205OTlYtmwZ0tLSkJGRgYSEBNy5\nc0fzT5MmTURHJAA9evSQ7Q4bXONLRPSczz//HPXr18fEiRO1xleuXImEhAQEBwdjxYoVOHLkCKKi\nogSllCfWRtqcnZ3LvcZdHcRTKpVQKpVITU1FcXGx1rWFCxcKSqVbbHyJiJ7j6emJ7du3w97eXmv8\nzp07GDBgAM6dO4ebN28iICAAMTExglLKE2sjbS9b38sDLMQJDQ1FWFgY3NzcULdu3VJLhsLCwgQl\n0y2u8SUieo6JiQliYmJKNVcxMTGoVq0agKf7kpZ8TLrD2kgbG1vp2rZtGxYuXAh/f3/RUYRi40tE\n9JyhQ4fiiy++wJUrV9CqVSsAwOXLlxEZGYl//etfAIDjx4/DxcVFZExZYm2k79y5c9i4cSNu3rwJ\nAGjWrBlGjRoFDw8PwcnkrbCwEG3bthUdQzgudSAiKsOuXbsQERGBW7duAQAcHBwwdOhQ9OvXDwCQ\nl5cHhULBO4sCsDbStXv3bnz88cfw9fXVNFnnz5/H77//jiVLlqBPnz6CE8rXkiVLYG5uXmp9vNyw\n8SUiIqJXok+fPhg4cCBGjRqlNb5+/XpERUVh7969gpJRcHAwfv75Zzg5OcHJyQlGRtpv+gcFBQlK\npltc6kBEVI4rV65o3q5t3rw5WrZsKTgRlWBtpOnevXvw8/MrNd6zZ08sX75cQCIqcf36dc2uG3Fx\ncVrXytobW1+x8SUiek5qaiqmTZuGM2fOwNLSEgCQmZmJDh06YNmyZbCyshKcUL5YG2m5YQNqAAAQ\nuElEQVSrX78+zpw5U+rhw9OnT/MYY8G+++470REkgY0vEdFzvvzySzx58gR79uyBo6MjACA+Ph4z\nZ85EcHAwli5dKjihfLE20jZixAjMmzcPsbGxmofZzp8/j8jISMycOVNwOiKu8SUiKqVdu3YIDw9H\n69attcYvXbqEkSNHIjo6WlAyYm2kb9++fQgPD9csRXF0dMSoUaPQq1cvwcmIeMeXiKiU4uJiGBsb\nlxo3MjIqddoR6RZrI329e/dG7969RccgKpOB6ABERFLj5eWF+fPnIzk5WTOWnJyMhQsXwtvbW2Ay\nYm2krVevXnj8+HGp8czMTN7xJUngUgciouckJiZi/PjxiI+P1zyQk5SUhObNm2PVqlV8SEcg1kba\nnJ2dceLECVhbW2uNp6SkoHv37rhy5YqgZERPcakDEdFzGjZsiB07duDkyZP4888/ATxdp9ixY0fB\nyYi1kab//Oc/mo+VSiVq1Kih+VylUuHkyZNo1KiRiGhEWnjHl4iogpKSkhAWFoYvv/xSdBR6Dmsj\nVsn+sAqFAs+3FYaGhmjYsCGCgoLg6+srIh6RBhtfIqIKio2NRf/+/XHt2jXRUeg5rI1YKpUKarUa\nvr6+iIyM1NpP2dDQUGAyIm1c6kBERET/SElz++ySByIp4q4ORERE9EosWLAAERERpcYjIiKwaNEi\nAYmItLHxJSIioldi//79mhPbntWmTRvs3btXQCIibVzqQET0X5MmTXrh9czMTB0loeexNlVDeno6\nLCwsSo3XqFED6enpAhIRaWPjS0T0X89uwVTedW7JJAZrUzXY2dnh2LFjGDJkiNb48ePHYWtrKygV\n0f9wVwciIiJ6JX788UcsWLAAY8aMgZeXF4Cn+/pu2LABH3/8MQYPHiw4IckdG18iIiJ6Zb777jus\nWbMGKSkpAIAGDRpg0qRJCAgIEJyMiI0vERERVYKHDx/C1NQUlpaWoqMQabDxJSIiIiJZ4MNtRERE\n9MocPHgQ+/btQ0JCAgoLC7WuRUZGCkpF9BT38SUiIqJXYsuWLZgxYwYsLCxw+fJlODs7w8zMDLdv\n39Y87EYkEhtfIqIKysjIwM6dO0XHkLXi4uJyxxMSEnSchp63ZcsWzJ07F3PnzoWxsTH+9a9/4bvv\nvsOQIUOQl5cnOh4RG18ioopKTExEUFCQ6BiylJ2djSlTpsDd3R0dO3bE8uXLoVKpNNfT0tLg6+sr\nMCEBT/+OtGvX7v/bu/uYKsvHj+OfG3kUDprgMln2YLiDTsBAwYegQWlNnLnl5gOZYFOZrNWy0ra0\nppa5WaYkVka65j9N/zBRsyBXQ7dQx0AgbGSWgSBD4HDcrAl8/0DPOh58+MUNN/zu9+uv43Xd3udz\ndv7ws8vrXLckKSgoSFevXpUkzZs3T4cOHbIyGiCJPb4A4OF2u3s1j76zbds21dTUaMuWLWpvb1d+\nfr6qq6u1Y8cOBQYGSpL4rbb1IiIi1NbWpqioKI0ePVoVFRVyOp2qr6/n+8GAQPEFgBsSExNlGMZt\n57u6uu44j75TXFyszZs3KykpSZKUnp6uFStWKCcnR/n5+ZLEdzMAJCcn64cfftD48eM1b948vffe\ne/ruu+9UUVGhtLQ0q+MBHGcGADclJCRo5cqViouL63H+jz/+0Lp16/TLL7/0czLExcWpsLBQDz74\noGfM7XbrpZdeUlBQkDZu3KiZM2fy3Vjs+vXr6uzs9KzCHzx4UGVlZXr44Ye1aNEizzhgFVZ8AeCG\n8ePHS5KmTJnS43x4eDj/XWuRBx54QOfPn/cqvmFhYfriiy+0bNky5ebmWpgON/n7e9eKuXPnau7c\nuRalAXzx4zYAuGHOnDkKCgq67XxkZCQFyyIzZszQgQMHfMZDQ0O1e/fuO35v6HtvvPGG1x74mpoa\nnzN8gYGArQ4AgAGvra1Nly9fVnR0dI/zbrdb1dXVt12tR9+KiYlRSUmJIiIiJEmPP/64Dh486LVC\nDwwErPgCwD1qaGjQ22+/bXUMWxo2bNhtS6/UXXw5Lss6t66hsaaGgYriCwD3qLW1lUeuDlB8NwDu\nBT9uAwAAvVZbW6umpibPn8+fP+95gMVNTqezv2MBXii+AACg15YuXeq1xWHFihWSus9XvnkGNsfN\nwWoUXwAA0CvFxcVWRwDuCcUXAG6421FlLpern5LgVnw3A1tUVJTVEYB7QvEFgBscDsdd5/kH3hp8\nNwDMwDm+AAAAsAWOMwMAAIAtUHwBAABgCxRfAABgiosXL+rChQs+4xcuXNBff/3V/4GAW1B8AQCA\nKdauXavy8nKf8fLycq1du9aCRIA3ii8AADBFdXW1Jk2a5DMeHx/PwyswIFB8AQCAKQzDkNvt9hlv\nb29XR0eHBYkAbxRfAABgismTJ+vTTz/1KrkdHR367LPPlJCQYGEyoBvn+AIAAFPU1tZq8eLFCg8P\nV2JioiTp9OnTcrvd2rt3r8aNG2dxQtgdxRcAAJimsbFR+/btU01NjYKDgzVu3DhlZmZq+PDhVkcD\nKL4AAACwB3+rAwAAgMGrpqZG48aNk5+fn2pqau54rdPp7KdUQM9Y8QUAAP+Z0+nUiRMnFBERIafT\nKcMw1FO1MAyDI81gOYovAAD4z+rq6jR69GgZhqG6uro7XhsVFdVPqYCesdUBAAD8Z/8us/X19Zo0\naZL8/b3rxfXr11VWVkbxheU4xxcAAJhiyZIlamtr8xlvb2/XkiVLLEgEeKP4AgAAU3R1dckwDJ/x\n1tZWhYSEWJAI8MZWBwAA0Cu5ubmSun/AtmbNGgUGBnrmOjo6dO7cOU2aNMmqeIAHxRcAAPSKw+GQ\n1L3iGxoaquDgYM9cQECA4uPjNX/+fKviAR6c6gAAAEyRl5en7OxsDR061OooQI8ovgAAwBTXrl1T\nV1eXZz9vXV2dvv/+ez322GOaMWOGxekAii8AADBJdna2nn76aS1cuFAul0vPPPOMAgIC1NLSojVr\n1mjRokVWR4TNcaoDAAAwRVVVlRITEyVJx44dU2RkpI4fP64PPvhAX331lcXpAIovAAAwybVr1xQa\nGipJKikp0cyZM+Xn56f4+HjV19dbnA6g+AIAAJOMGTNGRUVFunTpkkpKSjR9+nRJUnNzs8LCwixO\nB1B8AQCASVatWqUtW7YoLS1NcXFxnrN7T5w4oZiYGIvTAfy4DQAAmKipqUlNTU1yOp3y8+teX6uo\nqFBoaKjGjh1rcTrYHcUXAAAAtsCT2wAAwH+Wm5urzZs3KywszPPo4tvJy8vrp1RAzyi+AADgP7v5\nuOJbXwMDEVsdAAAAYAuc6gAAAABbYKsDAAAwxXPPPSfDMHzGDcNQYGCgHnroIc2bN0/JyckWpANY\n8QUAACZJSUnRxYsXFRISoqSkJCUlJWno0KH6888/NXHiRDU1NSkrK0tFRUVWR4VNseILAABM0dra\nqqysLK1atcprfOfOnaqvr1dBQYG2b9+unTt36qmnnrIoJeyMFV8AAGCKI0eOKCMjw2d89uzZOnr0\nqOf177//3t/RAEkUXwAAYJLAwECVlZX5jJeVlSkoKEiS1NXV5XkN9De2OgAAAFNkZmZq/fr1qqys\n1MSJEyVJZ8+e1f79+7VixQpJUklJiWJiYqyMCRvjHF8AAGCab775Rvv27fNsZ3jkkUeUmZmpOXPm\nSJKuXbsmwzBY9YUlKL4AAACwBbY6AAAAU1VWVuq3336TJEVHR2v8+PEWJwK6UXwBAIApmpub9eqr\nr6q0tFTh4eGSJJfLpaSkJH300UcaMWKExQlhd5zqAAAATLFhwwZdvXpVhw8fVmlpqUpLS1VYWCi3\n262NGzdaHQ9gjy8AADBHQkKCvvzyS8XGxnqNV1RUKDs7W6dPn7YoGdCNFV8AAGCKzs5OBQQE+Iz7\n+/urs7PTgkSAN4ovAAAwRXJysjZt2qTGxkbPWGNjo95//31NnTrVwmRAN7Y6AAAAU1y6dEk5OTmq\nra3VqFGjJEkNDQ2Kjo5Wfn6+ZwywCsUXAACYpqurSydPntT58+clSWPHjtW0adMsTgV0o/gCAIA+\n1dDQoE8++UQbNmywOgpsjj2+AACgT7W2tmr//v1WxwAovgAAALAHii8AAABsgeILAAAAW/C3OgAA\nABjccnNz7zjvcrn6KQlwZxRfAADQKw6H467zUVFR/ZQGuD2OMwMAAIAtsMcXAAAAtkDxBQAAgC1Q\nfAEAAGALFF8AAADYAsUXAAAAtkDxBQAAgC1QfAFgAMvLy5PT6VRqamqP8wsWLJDT6dTatWt7/V6b\nNm1SWlra//nvpaWlaePGjb1+fwDoaxRfABjg/P391dLSolOnTnmN19fXq7y8XKGhoaa8j2EYMgzD\nlHsBwEBE8QWAAS4gIEApKSkqLCz0Gj98+LCio6M1ZswYi5IBwOBC8QWAAc4wDM2ePVvffvutOjo6\nPOOFhYXKyMjQrQ/gPHXqlBYsWKC4uDglJyfrrbfeUltbm9c1ly9f1sqVKxUfH6/U1FTt3r27x/du\nbGzU6tWrlZycrLi4OGVmZqqqqsr8DwkA/YDiCwCDQFpamv755x+VlJRIkmpra/Xrr79q9uzZXtdV\nVlYqOztbDodD27dv1+uvv67jx49r+fLlXgU5JydHVVVVevfdd7V+/XoVFRXp2LFjXvdyuVxauHCh\nzp07p3Xr1mnHjh0KCQnR0qVLdeXKlb7/0ABgMn+rAwAA7i4oKEjp6ek6cuSIUlNTVVhYqPj4eEVF\nRXldt2vXLo0cOVK7du3SkCFDJEmjRo3SsmXL9OOPP+rJJ5/UTz/9pOrqau3du1dTpkyRJE2ZMkWp\nqakaPny451579uyR2+3WgQMHdN9990mSpk6dqlmzZqmgoECrV6/up08PAOZgxRcABomMjAwVFxfr\n77//1tGjR5WRkeFzzZkzZ5Senu4pvZI0ffp0hYeH68yZM5KkiooKORwOT+mVpLCwME2bNs3rXidP\nnlRSUpLCw8PV0dGhjo4OGYahyZMn6+zZs330KQGg77DiCwCDxIwZMzRkyBB9/PHHqqur07PPPutz\njcvlUmRkpM94RESEZ59vU1OTZwX31mv+raWlReXl5ZowYYLXuGEY/KAOwKBE8QWAQcLf31+zZs3S\nnj17NG3aNI0YMcLnmmHDhqm5udlnvLm5WcOGDZMkjRw5Ui0tLT1ec+u9nnjiCb3yyis+P6ALDAzs\nzUcBAEtQfAFgEHn++ed15coVzZ8/v8f5hIQEFRUVac2aNfLz697NduLECblcLiUmJkqSYmNj1d7e\nrp9//llJSUmSpPb2dp08edJrj+/UqVN16NAhPfroowoODu7jTwYAfY/iCwCDSGxsrPLy8m47v3Ll\nSi1cuFDLly/XCy+8oKamJn344YeKj49XSkqKJCklJUUxMTFavXq1XnvtNTkcDn3++edyOBxe98rK\nylJhYaEWL16sJUuWaPTo0bpy5YrKy8t1//3368UXX+zTzwoAZqP4AsAAd7enqf37iWsTJkxQQUGB\ntm7dqpdfflkhISFKT0/Xm2++6XWf/Px8rV+/Xu+8847Cw8OVmZmp5uZmFRUVea4ZPny4vv76a23b\ntk1bt25Va2urIiIiFBcXp5kzZ95zPgAYKIyuWzduAQAAAP8PcZwZAAAAbIHiCwAAAFug+AIAAMAW\nKL4AAACwBYovAAAAbIHiCwAAAFug+AIAAMAWKL4AAACwBYovAAAAbIHiCwAAAFug+AIAAMAWKL4A\nAACwhf8ByyrUkq+6X8YAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(8,6))\n", + "sns.set_style(\"whitegrid\")\n", + "g = sns.stripplot(x=\"Model\",\n", + " y=\"Accuracy Score\",\n", + " data=accuracy_df,\n", + " size=8,\n", + " color=\"gray\")\n", + "for item in g.get_xticklabels():\n", + " item.set_rotation(90)\n", + "\n", + "plt.title(\"Accuracy Score - All Models\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/nbs/FactorizationMachineResults-MoreFactorsLongerRun-Copy1.ipynb b/nbs/FactorizationMachineResults-MoreFactorsLongerRun-Copy1.ipynb new file mode 100644 index 0000000..08df0e7 --- /dev/null +++ b/nbs/FactorizationMachineResults-MoreFactorsLongerRun-Copy1.ipynb @@ -0,0 +1,528 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os\n", + "import pickle\n", + "import numpy as np\n", + "from scipy import sparse\n", + "from functools import partial\n", + "from sklearn.externals import joblib\n", + "from sklearn.cross_validation import KFold\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.cross_validation import train_test_split\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from sklearn.linear_model import LogisticRegression" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "labels = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_labels.pkl\")\n", + "features = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_matrix.pkl\")\n", + "features = features.todense()\n", + "mozart_labels = [k for k in range(len(labels)) if labels[k] == \"mozart\"]\n", + "bach_labels = [k for k in range(len(labels)) if labels[k] == \"bach-js\"]\n", + "schubert_labels = [k for k in range(len(labels)) if labels[k] == \"schubert\"]\n", + "chopin_labels = [k for k in range(len(labels)) if labels[k] == \"chopin\"]\n", + "tchaikovsky_labels = [k for k in range(len(labels)) if labels[k] == \"tchaikovsky\"]\n", + "X = features[mozart_labels + bach_labels + schubert_labels + chopin_labels + tchaikovsky_labels].A\n", + "y = np.array([0 for i in range(len(mozart_labels))] + [1 for i in range(len(bach_labels))] + \n", + " [2 for i in range(len(schubert_labels))] + [3 for i in range(len(chopin_labels))] +\n", + " [4 for i in range(len(tchaikovsky_labels))])\n", + "y = y.reshape((y.shape[0],))\n", + "del features" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X = X[:,X.sum(axis=0).nonzero()[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pywFM" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# %%bash\n", + "# git clone https://github.com/srendle/libfm ./libfm\n", + "# cd ./libfm/ && make all\n", + "# export LIBFM_PATH=/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/libfm/bin/" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# %%bash\n", + "# export LIBFM_PATH=/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/libfm/bin/" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# %%bash\n", + "# pip install pywFM" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os\n", + "os.environ[\"LIBFM_PATH\"] = \"/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/libfm/bin/\"" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# X = sparse.dok_matrix(X.astype(np.float64)).A" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n" + ] + } + ], + "source": [ + "predicted = []\n", + "actuals = []\n", + "fm_models = []\n", + "i = 0\n", + "for train_idx, test_idx in KFold(n=X.shape[0], n_folds=10, shuffle=True):\n", + " X_train = X[train_idx]\n", + " y_train = y[train_idx]\n", + " X_test = X[test_idx]\n", + " y_test = y[test_idx]\n", + " fm = pywFM.FM(task=\"classification\", learning_method=\"mcmc\",\n", + " k0=True, k1=True, k2=20,\n", + " verbose=True,\n", + " num_iter=15000)\n", + " try:\n", + " classes = np.unique(y)\n", + " models = []\n", + " for cls in classes:\n", + " y_train_cls = np.array([1 if y_i == cls else 0 for y_i in y_train])\n", + " y_test_cls = np.array([1 if y_i == cls else 0 for y_i in y_test])\n", + " print(cls)\n", + " model = fm.run(X_train, y_train_cls, X_test, y_test_cls)\n", + " models.append(model)\n", + " except:\n", + " continue\n", + " \n", + " preds = [m.predictions for m in models]\n", + " predicted.append(preds)\n", + " actuals.append(y_test)\n", + " pickle.dump(predicted, open(\"./dumps/factorization_machine_two/predicted_fold_{fold}.pkl\"\n", + " .format(fold=str(i)), 'wb'))\n", + " pickle.dump(actuals, open(\"./dumps/factorization_machine_two/actuals_fold_{fold}.pkl\"\n", + " .format(fold=str(i)), 'wb'))\n", + " i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 164, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# preds = (np.array(model.predictions) > (1-y.sum() / y.shape[0])).astype(int)\n", + "preds = (np.array(model.predictions) > 0.9).astype(int)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + } + ], + "source": [ + "print(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 166, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.785714285714\n", + "[[519 105]\n", + " [ 57 75]]\n" + ] + } + ], + "source": [ + "print(metrics.accuracy_score(y_test, preds))\n", + "print(metrics.confusion_matrix(y_test, preds))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['predicted_fold_0.pkl',\n", + " 'predicted_fold_1.pkl',\n", + " 'actuals_fold_0.pkl',\n", + " 'actuals_fold_1.pkl']" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.listdir(model_folder)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn import metrics\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# mkdir /home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/dumps/factorization_machine_two/" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false, + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "confusion matrix\n", + "[[ 32 16 12 8 1]\n", + " [ 34 198 3 13 2]\n", + " [ 6 3 9 1 2]\n", + " [ 6 2 0 7 0]\n", + " [ 10 1 5 5 2]]\n", + "\taccuracy\n", + "\t\t 0.656084656085\n", + "\tf1\n", + "\t\t 0.671105998306\n", + "\trecall\n", + "\t\t 0.656084656085\n", + "\tprecision\n", + "\t\t 0.704412207237\n", + "confusion matrix\n", + "[[ 26 30 9 3 4]\n", + " [ 14 192 9 6 7]\n", + " [ 8 3 6 7 4]\n", + " [ 1 11 2 7 5]\n", + " [ 5 6 7 3 3]]\n", + "\taccuracy\n", + "\t\t 0.619047619048\n", + "\tf1\n", + "\t\t 0.612611543086\n", + "\trecall\n", + "\t\t 0.619047619048\n", + "\tprecision\n", + "\t\t 0.610530615142\n", + "confusion matrix\n", + "[[ 30 28 10 4 5]\n", + " [ 15 177 15 6 9]\n", + " [ 7 5 8 6 6]\n", + " [ 1 9 4 14 3]\n", + " [ 5 2 4 1 4]]\n", + "\taccuracy\n", + "\t\t 0.616402116402\n", + "\tf1\n", + "\t\t 0.623312734315\n", + "\trecall\n", + "\t\t 0.616402116402\n", + "\tprecision\n", + "\t\t 0.635562867708\n", + "confusion matrix\n", + "[[ 23 29 2 3 8]\n", + " [ 20 211 5 2 5]\n", + " [ 6 7 4 5 5]\n", + " [ 2 8 2 4 1]\n", + " [ 8 12 2 2 2]]\n", + "\taccuracy\n", + "\t\t 0.645502645503\n", + "\tf1\n", + "\t\t 0.626085520324\n", + "\trecall\n", + "\t\t 0.645502645503\n", + "\tprecision\n", + "\t\t 0.611901802625\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n" + ] + } + ], + "source": [ + "model_folder = \"/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/dumps/factorization_machine_two/\"\n", + "accuracy = []\n", + "precision = []\n", + "recall = []\n", + "f1 = []\n", + "mcc = []\n", + "predicted = pickle.load(open(model_folder + \"predicted_fold_3.pkl\", 'rb'))\n", + "actuals = pickle.load(open(model_folder + \"actuals_fold_3.pkl\", 'rb'))\n", + "for preds, actual in zip(predicted, actuals):\n", + " pred = np.array(preds).argmax(axis=0)\n", + " print(\"confusion matrix\")\n", + " print(metrics.confusion_matrix(actual, pred))\n", + " print(\"\\taccuracy\")\n", + " acc = metrics.accuracy_score(actual, pred)\n", + " accuracy.append(acc)\n", + " print(\"\\t\\t\", acc)\n", + " print(\"\\tf1\")\n", + " f = metrics.f1_score(actual, pred)\n", + " f1.append(f)\n", + " print(\"\\t\\t\", f)\n", + " print(\"\\trecall\")\n", + " r = metrics.recall_score(actual, pred)\n", + " recall.append(r)\n", + " print(\"\\t\\t\", r)\n", + " print(\"\\tprecision\")\n", + " p = metrics.precision_score(actual, pred)\n", + " precision.append(p)\n", + " print(\"\\t\\t\", p)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "print(1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/nbs/FactorizationMachineResults-MoreFactorsLongerRun.ipynb b/nbs/FactorizationMachineResults-MoreFactorsLongerRun.ipynb new file mode 100644 index 0000000..669c117 --- /dev/null +++ b/nbs/FactorizationMachineResults-MoreFactorsLongerRun.ipynb @@ -0,0 +1,485 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os\n", + "import pickle\n", + "import numpy as np\n", + "from scipy import sparse\n", + "from functools import partial\n", + "from sklearn.externals import joblib\n", + "from sklearn.cross_validation import KFold\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.cross_validation import train_test_split\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from sklearn.linear_model import LogisticRegression" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "labels = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_labels.pkl\")\n", + "features = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_matrix.pkl\")\n", + "features = features.todense()\n", + "mozart_labels = [k for k in range(len(labels)) if labels[k] == \"mozart\"]\n", + "bach_labels = [k for k in range(len(labels)) if labels[k] == \"bach-js\"]\n", + "schubert_labels = [k for k in range(len(labels)) if labels[k] == \"schubert\"]\n", + "chopin_labels = [k for k in range(len(labels)) if labels[k] == \"chopin\"]\n", + "tchaikovsky_labels = [k for k in range(len(labels)) if labels[k] == \"tchaikovsky\"]\n", + "X = features[mozart_labels + bach_labels + schubert_labels + chopin_labels + tchaikovsky_labels].A\n", + "y = np.array([0 for i in range(len(mozart_labels))] + [1 for i in range(len(bach_labels))] + \n", + " [2 for i in range(len(schubert_labels))] + [3 for i in range(len(chopin_labels))] +\n", + " [4 for i in range(len(tchaikovsky_labels))])\n", + "y = y.reshape((y.shape[0],))\n", + "del features" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X = X[:,X.sum(axis=0).nonzero()[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pywFM" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# %%bash\n", + "# git clone https://github.com/srendle/libfm ./libfm\n", + "# cd ./libfm/ && make all\n", + "# export LIBFM_PATH=/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/libfm/bin/" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# %%bash\n", + "# export LIBFM_PATH=/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/libfm/bin/" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# %%bash\n", + "# pip install pywFM" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os\n", + "os.environ[\"LIBFM_PATH\"] = \"/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/libfm/bin/\"" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# X = sparse.dok_matrix(X.astype(np.float64)).A" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n" + ] + } + ], + "source": [ + "predicted = []\n", + "actuals = []\n", + "fm_models = []\n", + "i = 0\n", + "for train_idx, test_idx in KFold(n=X.shape[0], n_folds=10, shuffle=True):\n", + " X_train = X[train_idx]\n", + " y_train = y[train_idx]\n", + " X_test = X[test_idx]\n", + " y_test = y[test_idx]\n", + " fm = pywFM.FM(task=\"classification\", learning_method=\"mcmc\",\n", + " k0=True, k1=True, k2=20,\n", + " verbose=True,\n", + " num_iter=15000)\n", + " try:\n", + " classes = np.unique(y)\n", + " models = []\n", + " for cls in classes:\n", + " y_train_cls = np.array([1 if y_i == cls else 0 for y_i in y_train])\n", + " y_test_cls = np.array([1 if y_i == cls else 0 for y_i in y_test])\n", + " print(cls)\n", + " model = fm.run(X_train, y_train_cls, X_test, y_test_cls)\n", + " models.append(model)\n", + " except:\n", + " continue\n", + " \n", + " preds = [m.predictions for m in models]\n", + " predicted.append(preds)\n", + " actuals.append(y_test)\n", + " pickle.dump(predicted, open(\"./dumps/factorization_machine_two/predicted_fold_{fold}.pkl\"\n", + " .format(fold=str(i)), 'wb'))\n", + " pickle.dump(actuals, open(\"./dumps/factorization_machine_two/actuals_fold_{fold}.pkl\"\n", + " .format(fold=str(i)), 'wb'))\n", + " i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 164, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# preds = (np.array(model.predictions) > (1-y.sum() / y.shape[0])).astype(int)\n", + "preds = (np.array(model.predictions) > 0.9).astype(int)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + } + ], + "source": [ + "print(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 166, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.785714285714\n", + "[[519 105]\n", + " [ 57 75]]\n" + ] + } + ], + "source": [ + "print(metrics.accuracy_score(y_test, preds))\n", + "print(metrics.confusion_matrix(y_test, preds))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['predicted_fold_9.pkl',\n", + " 'predicted_fold_0.pkl',\n", + " 'actuals_fold_5.pkl',\n", + " 'predicted_fold_5.pkl',\n", + " 'actuals_fold_2.pkl',\n", + " 'predicted_fold_1.pkl',\n", + " 'predicted_fold_7.pkl',\n", + " 'actuals_fold_4.pkl',\n", + " 'actuals_fold_6.pkl',\n", + " 'predicted_fold_3.pkl',\n", + " 'predicted_fold_4.pkl',\n", + " 'predicted_fold_2.pkl',\n", + " 'actuals_fold_0.pkl',\n", + " 'model_fold_0.pkl',\n", + " 'actuals_fold_8.pkl',\n", + " 'actuals_fold_9.pkl',\n", + " 'predicted_fold_6.pkl',\n", + " 'actuals_fold_7.pkl',\n", + " 'actuals_fold_3.pkl',\n", + " 'predicted_fold_8.pkl',\n", + " 'actuals_fold_1.pkl']" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.listdir(model_folder)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn import metrics\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# mkdir /home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/dumps/factorization_machine_two/" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false, + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "confusion matrix\n", + "[[ 26 36 5 4 3]\n", + " [ 10 200 9 5 4]\n", + " [ 6 6 10 2 2]\n", + " [ 5 4 1 12 2]\n", + " [ 4 10 7 2 3]]\n", + "\taccuracy\n", + "\t\t 0.664021164021\n", + "\tf1\n", + "\t\t 0.645064474466\n", + "\trecall\n", + "\t\t 0.664021164021\n", + "\tprecision\n", + "\t\t 0.637743171343\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n" + ] + } + ], + "source": [ + "model_folder = \"/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/dumps/factorization_machine_two/\"\n", + "accuracy = []\n", + "precision = []\n", + "recall = []\n", + "f1 = []\n", + "mcc = []\n", + "predicted = pickle.load(open(model_folder + \"predicted_fold_0.pkl\", 'rb'))\n", + "actuals = pickle.load(open(model_folder + \"actuals_fold_0.pkl\", 'rb'))\n", + "for preds, actual in zip(predicted, actuals):\n", + " pred = np.array(preds).argmax(axis=0)\n", + " print(\"confusion matrix\")\n", + " print(metrics.confusion_matrix(actual, pred))\n", + " print(\"\\taccuracy\")\n", + " acc = metrics.accuracy_score(actual, pred)\n", + " accuracy.append(acc)\n", + " print(\"\\t\\t\", acc)\n", + " print(\"\\tf1\")\n", + " f = metrics.f1_score(actual, pred)\n", + " f1.append(f)\n", + " print(\"\\t\\t\", f)\n", + " print(\"\\trecall\")\n", + " r = metrics.recall_score(actual, pred)\n", + " recall.append(r)\n", + " print(\"\\t\\t\", r)\n", + " print(\"\\tprecision\")\n", + " p = metrics.precision_score(actual, pred)\n", + " precision.append(p)\n", + " print(\"\\t\\t\", p)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "print(1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/nbs/FactorizationMachineResults.ipynb b/nbs/FactorizationMachineResults.ipynb new file mode 100644 index 0000000..fca7b2c --- /dev/null +++ b/nbs/FactorizationMachineResults.ipynb @@ -0,0 +1,687 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os\n", + "import pickle\n", + "import numpy as np\n", + "from scipy import sparse\n", + "from functools import partial\n", + "from sklearn.externals import joblib\n", + "from sklearn.cross_validation import KFold\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.cross_validation import train_test_split\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from sklearn.linear_model import LogisticRegression" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "labels = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_labels.pkl\")\n", + "features = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_matrix.pkl\")\n", + "features = features.todense()\n", + "mozart_labels = [k for k in range(len(labels)) if labels[k] == \"mozart\"]\n", + "bach_labels = [k for k in range(len(labels)) if labels[k] == \"bach-js\"]\n", + "schubert_labels = [k for k in range(len(labels)) if labels[k] == \"schubert\"]\n", + "chopin_labels = [k for k in range(len(labels)) if labels[k] == \"chopin\"]\n", + "tchaikovsky_labels = [k for k in range(len(labels)) if labels[k] == \"tchaikovsky\"]\n", + "X = features[mozart_labels + bach_labels + schubert_labels + chopin_labels + tchaikovsky_labels].A\n", + "y = np.array([0 for i in range(len(mozart_labels))] + [1 for i in range(len(bach_labels))] + \n", + " [2 for i in range(len(schubert_labels))] + [3 for i in range(len(chopin_labels))] +\n", + " [4 for i in range(len(tchaikovsky_labels))])\n", + "y = y.reshape((y.shape[0],))\n", + "del features" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X = X[:,X.sum(axis=0).nonzero()[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pywFM" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# %%bash\n", + "# git clone https://github.com/srendle/libfm ./libfm\n", + "# cd ./libfm/ && make all\n", + "# export LIBFM_PATH=/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/libfm/bin/" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# %%bash\n", + "# export LIBFM_PATH=/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/libfm/bin/" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# %%bash\n", + "# pip install pywFM" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os\n", + "os.environ[\"LIBFM_PATH\"] = \"/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/libfm/bin/\"" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# X = sparse.dok_matrix(X.astype(np.float64)).A" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n" + ] + } + ], + "source": [ + "predicted = []\n", + "actuals = []\n", + "fm_models = []\n", + "i = 0\n", + "for train_idx, test_idx in KFold(n=X.shape[0], n_folds=10, shuffle=True):\n", + " X_train = X[train_idx]\n", + " y_train = y[train_idx]\n", + " X_test = X[test_idx]\n", + " y_test = y[test_idx]\n", + " fm = pywFM.FM(task=\"classification\", learning_method=\"mcmc\",\n", + " k0=True, k1=True,\n", + " verbose=True,\n", + " num_iter=10000)\n", + " try:\n", + " classes = np.unique(y)\n", + " models = []\n", + " for cls in classes:\n", + " y_train_cls = np.array([1 if y_i == cls else 0 for y_i in y_train])\n", + " y_test_cls = np.array([1 if y_i == cls else 0 for y_i in y_test])\n", + " print(cls)\n", + " model = fm.run(X_train, y_train_cls, X_test, y_test_cls)\n", + " models.append(model)\n", + " except:\n", + " continue\n", + " \n", + " preds = [m.predictions for m in models]\n", + " predicted.append(preds)\n", + " actuals.append(y_test)\n", + "# fm_models.append(models.)\n", + "# pickle.dump(models, open(\"./dumps/factorization_machine/model_fold_{fold}.pkl\"\n", + "# .format(fold=str(i)), 'wb'))\n", + " pickle.dump(predicted, open(\"./dumps/factorization_machine/predicted_fold_{fold}.pkl\"\n", + " .format(fold=str(i)), 'wb'))\n", + " pickle.dump(actuals, open(\"./dumps/factorization_machine/actuals_fold_{fold}.pkl\"\n", + " .format(fold=str(i)), 'wb'))\n", + " i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 164, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# preds = (np.array(model.predictions) > (1-y.sum() / y.shape[0])).astype(int)\n", + "preds = (np.array(model.predictions) > 0.9).astype(int)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + } + ], + "source": [ + "print(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 166, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.785714285714\n", + "[[519 105]\n", + " [ 57 75]]\n" + ] + } + ], + "source": [ + "print(metrics.accuracy_score(y_test, preds))\n", + "print(metrics.confusion_matrix(y_test, preds))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['predicted_fold_9.pkl',\n", + " 'predicted_fold_0.pkl',\n", + " 'actuals_fold_5.pkl',\n", + " 'predicted_fold_5.pkl',\n", + " 'actuals_fold_2.pkl',\n", + " 'predicted_fold_1.pkl',\n", + " 'predicted_fold_7.pkl',\n", + " 'actuals_fold_4.pkl',\n", + " 'actuals_fold_6.pkl',\n", + " 'predicted_fold_3.pkl',\n", + " 'predicted_fold_4.pkl',\n", + " 'predicted_fold_2.pkl',\n", + " 'actuals_fold_0.pkl',\n", + " 'model_fold_0.pkl',\n", + " 'actuals_fold_8.pkl',\n", + " 'actuals_fold_9.pkl',\n", + " 'predicted_fold_6.pkl',\n", + " 'actuals_fold_7.pkl',\n", + " 'actuals_fold_3.pkl',\n", + " 'predicted_fold_8.pkl',\n", + " 'actuals_fold_1.pkl']" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "os.listdir(model_folder)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn import metrics\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "# Results" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "from scipy.stats.distributions import beta\n", + "def posterior_overlap_eval(actual, pred, labels, granularity=10000):\n", + " colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k')\n", + " tp_fn = []\n", + " confusion = metrics.confusion_matrix(actual, pred)\n", + " for i in range(confusion.shape[0]):\n", + " tp = confusion[i,i]\n", + " fn = np.delete(confusion[i,:], i).sum()\n", + " tp_fn.append((tp, fn))\n", + " betas = [beta(a=1 + tp, b = 1 + fn) for tp, fn in tp_fn]\n", + " for i, beta_dist in enumerate(betas):\n", + " random_draws = beta_dist.rvs(granularity)\n", + " plt.hist(random_draws, alpha=0.2, color=colors[i], bins=np.linspace(0,1, 100))\n", + " plt.vlines(random_draws.mean(), 0, 2000, label=labels[i], color=colors[i], linestyles=\"dotted\")\n", + " plt.legend(loc=\"upper left\")\n", + " plt.show()\n", + "labs = [\"mozart\", \"bach\", \"schubert\", \"chopin\", \"tchaikovsky\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "confusion matrix\n", + "[[ 26 36 5 4 3]\n", + " [ 10 200 9 5 4]\n", + " [ 6 6 10 2 2]\n", + " [ 5 4 1 12 2]\n", + " [ 4 10 7 2 3]]\n", + "\taccuracy\n", + "\t\t 0.664021164021\n", + "\tf1\n", + "\t\t 0.645064474466\n", + "\trecall\n", + "\t\t 0.664021164021\n", + "\tprecision\n", + "\t\t 0.637743171343\n", + "confusion matrix\n", + "[[ 31 21 8 1 4]\n", + " [ 21 189 6 3 8]\n", + " [ 10 10 10 2 5]\n", + " [ 6 6 3 4 4]\n", + " [ 5 10 5 2 4]]\n", + "\taccuracy\n", + "\t\t 0.62962962963\n", + "\tf1\n", + "\t\t 0.62060646659\n", + "\trecall\n", + "\t\t 0.62962962963\n", + "\tprecision\n", + "\t\t 0.615831426651\n", + "confusion matrix\n", + "[[ 26 29 4 3 4]\n", + " [ 16 204 3 5 3]\n", + " [ 6 9 5 2 5]\n", + " [ 5 15 2 7 3]\n", + " [ 3 10 1 3 5]]\n", + "\taccuracy\n", + "\t\t 0.653439153439\n", + "\tf1\n", + "\t\t 0.628746589606\n", + "\trecall\n", + "\t\t 0.653439153439\n", + "\tprecision\n", + "\t\t 0.615971532183\n", + "confusion matrix\n", + "[[ 39 17 3 3 3]\n", + " [ 23 213 4 4 2]\n", + " [ 10 3 6 1 2]\n", + " [ 3 9 5 11 0]\n", + " [ 7 3 3 0 4]]\n", + "\taccuracy\n", + "\t\t 0.722222222222\n", + "\tf1\n", + "\t\t 0.719647262413\n", + "\trecall\n", + "\t\t 0.722222222222\n", + "\tprecision\n", + "\t\t 0.723444657896\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n" + ] + } + ], + "source": [ + "model_folder = \"/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/dumps/factorization_machine/\"\n", + "accuracy = []\n", + "precision = []\n", + "recall = []\n", + "f1 = []\n", + "mcc = []\n", + "predicted = pickle.load(open(model_folder + \"predicted_fold_3.pkl\", 'rb'))\n", + "actuals = pickle.load(open(model_folder + \"actuals_fold_3.pkl\", 'rb'))\n", + "for preds, actual in zip(predicted, actuals):\n", + " pred = np.array(preds).argmax(axis=0)\n", + " print(\"confusion matrix\")\n", + " print(metrics.confusion_matrix(actual, pred))\n", + " print(\"\\taccuracy\")\n", + " acc = metrics.accuracy_score(actual, pred)\n", + " accuracy.append(acc)\n", + " print(\"\\t\\t\", acc)\n", + " print(\"\\tf1\")\n", + " f = metrics.f1_score(actual, pred)\n", + " f1.append(f)\n", + " print(\"\\t\\t\", f)\n", + " print(\"\\trecall\")\n", + " r = metrics.recall_score(actual, pred)\n", + " recall.append(r)\n", + " print(\"\\t\\t\", r)\n", + " print(\"\\tprecision\")\n", + " p = metrics.precision_score(actual, pred)\n", + " precision.append(p)\n", + " print(\"\\t\\t\", p)\n", + "# posterior_overlap_eval(actual, pred, labels=labs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.72222222222222221" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.max(accuracy)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nwGKxsG/fPp555hlUVWX27NnNPs6HH35IXl4et9xyS4tj2bVrFyUlJdx4440tPkZTjEYj27dvR6/X\nU1lZSWZmJrm5ucyePZspU6Ywe/Zs+vTp0yrnFkKIYJAkVAjRYSiKQlZWlvv5qFGjOHbsGLt27Qoo\nCQ2Gv/zlL0yZMgWDwRD0Y5tMJrZu3cqsWbNQFAWr1cq4cePIzc2lT58+DB8+nI0bN7JgwYKgn1sI\nIYJFmuOFEB1aTEyM19KR33zzDbfddhvDhg1jxIgR3HvvvVRWVgINE86//fbbnDhxwt20fyGZO3jw\nIHPnzmXs2LEMGzaMadOmsX37dq9zFhUVsX//fq655ppWuaa3336bmTNnuqeDKigoICkpyf36Nddc\nw7vvvovL5WqV8wshRDBITagQokNxOp1AQ3P8F198wc6dO5k7d6779W+++YZbb72Vq666ihUrVmAy\nmVixYgV33nknb7zxBnfeeSeVlZUUFBTw9NNPA7gTvOLiYoYNG8aMGTOIjIzkwIED/PGPf0RVVaZN\nm+Y+x+eff45Op2Po0KFBv76ysjJ69eqFVqt1l23YsIHf//737ufDhg2jsrKSo0ePMmTIkKDHIIQQ\nwSBJqBCiwzCZTB5Jl6IoTJ482aMp/plnniErK4vnn3/eXTZgwACmTp3KJ598wrhx40hOTqakpMSj\naR9gypQpHs9HjBhBaWkpb775pkcSevjwYdLS0tDr9V4xHj9+nG3bttG7d2+OHj3KNddcwxVXXIHF\nYsHpdLrXcffn448/5mc/+xn5+fksXbqUIUOGUFdXx7XXXuvepn///mi1Wg4dOiRJqBCizZIkVAjR\nYURFRbFx40ZUVcVms3HkyBFWrlzJI488wtKlS7FYLHzzzTc8+OCD7hpTgL59+9KzZ08OHz7MuHHj\n/B6/pqaG559/nn/961+cO3fOfYzvN4VDQ21lcnKy1/6HDh3ij3/8I5s3byY2NpaamhomTpzIrl27\n2L17NxMmTLjoNTocDgwGA/369ePVV18F4IYbbiAvL4/LLrsMAK1WS1xcHGVlZRd/04QQIkwkCRVC\ndBiKojB48GD382HDhuFwOFi+fDmzZs0iLi4Op9PJsmXLWLp0qde+Z8+ebfL4Dz74IIcOHeKuu+7i\n0ksvJTY2lk2bNvGPf/zDYzubzeY1IElVVR544AHuvvtuYmNjAYiPjycpKYl9+/ZRXV1NYmLiRa9R\np/P+2rZarRw9etSdhAIYDAYsFstFjyeEEOEiSagQokPLyMhAVVWOHz/OlVdeiaIozJkzh9zcXK9t\nG9dofp/NZmPPnj08/PDD/PKXv3SX+xr8k5CQQElJiUfZ119/TUlJCRMnTvQoj4mJYfv27cybN++i\n15Kfn09GRoZHmclkorCwkF69enmU19bWNnk9QggRbpKECiE6tP/85z8oikJycjJRUVFkZ2eTn5/v\nMZCnMb1ej81m8yiz2Wy4XC6Pmsi6ujr+9a9/ee2fnp7Ol19+6VF2/vx5+vTpQ2RkpEe5oihkZGQw\ncODAi17Ll19+yahRozzKdu7cSdeuXfnRj37kLqusrMRsNpOenn7RYwohRLhIEiqE6DBUVeXQoUMA\n2O128vLyeOWVV7j00ksZMWIEAA888AAzZ85k/vz5TJkyhfj4eEpLS/n888/5+c9/zsiRI8nIyGDb\ntm3s2LGDvn37kpSURGpqKkOHDmX16tUkJSWh1WpZs2YN8fHxVFRUeMQxfPhwXnrpJc6dO0f37t0B\nGDRoEGaz2WO7b7/9FovFQq9evTAajcTHx/PBBx+Ql5fH/fff73V9VquV/fv3069fP6ChtvPVV1/l\nySef9EiODx8+jKIoXH755cF7c4UQIsgUNdD17IQQog1atWoVL774ovu5VqulZ8+ejB8/njvvvNNj\noNCRI0d44YUXOHDgAHa7ne7du5OTk8OcOXPo3r07dXV1PPbYY+zduxej0ci0adNYtmwZZ86c4bHH\nHuPgwYMkJSXx61//mvr6el577TUOHDjgPr7dbmfs2LHce++9TJ8+3V3+t7/9jVOnTtGnTx/sdjv9\n+/dHr9ezbt06Bg8ezJw5c1ixYgWbN2/m448/JioqyuMat2zZQnp6OocPH0ar1XL69GmmTZvmNRXU\nkiVLOHbsGK+//nqw32YhhAgaSUKFEKIVLF++nKNHj7J+/fqA9/3www8ZNWoUcXFx7rLTp09TWlrK\n6NGjm9zX6XRy5ZVXcv/99/PTn/404HMLIUSoyIpJQgjRCmbNmsWhQ4c4duxYwPuePXvWIwEFOHDg\nANnZ2Rfd99133yUmJoapU6cGfF4hhAglSUKFEKIVdOvWjSeffNK9HGhzffvtt/Tv39+r3Gw2ew1q\n8kWr1bJ06VI0Gvl6F0K0bdIcL4QQbYiqqu414YUQoiOTf5WFEKINkQRUCNFZSBIqhBBCCCFCTpJQ\nIYQQQggRcpKECiGEEEKIkJMkVAghhBBChJwkoUIIIYQQIuQkCRVCCCGEECEnSagQQgghhAg5SUKF\nEEIIIUTISRIqhBBCCCFCTpJQIYQQQggRcv8Pu1VXj+89zvoAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mymodel = \"Factorization Machine\"\n", + "sns.set_style(\"whitegrid\")\n", + "plt.title(\"Posterior Probability of Within-Class Error\\n{model}\".format(model=mymodel))\n", + "plt.xlabel('P(actual=predicted)\\n' + r'Beta($\\alpha, \\beta$)')\n", + "plt.ylabel(\"Density\")\n", + "plt.yticks([])\n", + "ax = plt.gca()\n", + "ax.grid(False)\n", + "posterior_overlap_eval(actual, pred, labels=labs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 39, 17, 3, 3, 3],\n", + " [ 23, 213, 4, 4, 2],\n", + " [ 10, 3, 6, 1, 2],\n", + " [ 3, 9, 5, 11, 0],\n", + " [ 7, 3, 3, 0, 4]])" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "metrics.confusion_matrix(actual, pred)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/nbs/FeaturePlots.ipynb b/nbs/FeaturePlots.ipynb new file mode 100644 index 0000000..2e83e33 --- /dev/null +++ b/nbs/FeaturePlots.ipynb @@ -0,0 +1,466 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import os\n", + "import pickle\n", + "import numpy as np\n", + "from scipy import sparse\n", + "from functools import partial\n", + "from sklearn.externals import joblib\n", + "from sklearn.cross_validation import KFold\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.cross_validation import train_test_split\n", + "from midi_ml.models.n_tuple import NTupleClassifier" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "labels = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_labels.pkl\")\n", + "features = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_matrix.pkl\")\n", + "features = features.todense()\n", + "mozart_labels = [k for k in range(len(labels)) if labels[k] == \"mozart\"]\n", + "bach_labels = [k for k in range(len(labels)) if labels[k] == \"bach-js\"]\n", + "schubert_labels = [k for k in range(len(labels)) if labels[k] == \"schubert\"]\n", + "chopin_labels = [k for k in range(len(labels)) if labels[k] == \"chopin\"]\n", + "tchaikovsky_labels = [k for k in range(len(labels)) if labels[k] == \"tchaikovsky\"]\n", + "X = features[mozart_labels + bach_labels + schubert_labels + chopin_labels + tchaikovsky_labels].A\n", + "y = np.array([0 for i in range(len(mozart_labels))] + [1 for i in range(len(bach_labels))] + \n", + " [2 for i in range(len(schubert_labels))] + [3 for i in range(len(chopin_labels))] +\n", + " [4 for i in range(len(tchaikovsky_labels))])\n", + "y = y.reshape((y.shape[0],))\n", + "del features" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(3776, 16384)" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "plot_df = pd.DataFrame({\n", + " \"composer\": [\"mozart\", \"bach\", \"schubert\", \"chopin\", \"tchaikovsky\"],\n", + " \"num_records\": [len(mozart_labels), len(bach_labels), len(schubert_labels), len(chopin_labels), len(tchaikovsky_labels)]\n", + "})" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsMAAAInCAYAAAB9WVTWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xl8TPf+x/H3SBOJIJZQoghKJpZEovaEohq1V1FFLVWl\nti7aq0otsV9UlXJVKUpRW9VWamlray0l+KFVa65ENUEikpiI8/vDzTxME2Q0k0Tn9Xw8PB7me75z\n5nMmZ+LtO9/zPSbDMAwBAAAATihPThcAAAAA5BTCMAAAAJwWYRgAAABOizAMAAAAp0UYBgAAgNMi\nDAMAAMBpEYYBAADgtAjDAAAAcFqEYQAAADgtwjCAXO/777+X2WzW//3f/9n93EGDBikkJOSB/RIT\nE2U2m/X5558/TIlOr3bt2ho8eHBOl5FpM2fOVOPGjVW5cmV16dIlS/fdrl07derUKUv3+aho166d\n+vbtm9NlAHZ5LKcLAB51ZrP5gX1MJpMWLVqkmjVrZkNF9jtw4IB++ukn9erVSx4eHvfsZ7FYVK9e\nPQUEBGj+/PkZ9rl9+7ZCQkJUtmxZLV26NMtqNJlMWbavR1FiYqKCg4MlSeHh4erYsaPN9sWLF2vs\n2LHatGmTypUrl+31PUo/ny1btmjmzJnq2LGjnnrqKXl7ez/wOZs3b9ayZct0/PhxJScny8fHR02b\nNlXv3r1VoEABm76P0nvxME6ePKmtW7fqxRdfVLFixWy25cmT5x9//PjnIQwDf9PkyZNtHn/99dfa\ns2ePJk+eLMMwrO0VKlTI7tIybf/+/frkk0/00ksv3TcMu7m5qWnTpvrmm28UGxurokWLpuuze/du\nXblyRYMGDcqy+p5++mlFRETIzc0ty/b5qDKZTPrPf/6jF154QS4uLjbthJDM+fnnn+Xh4aHw8PBM\n9R85cqSWL1+uatWq6fXXX5enp6eOHj2q+fPna+PGjVq4cKFKlSrl4KpzjxMnTmjmzJlq1KhRujC8\nbNkyzkM8cgjDwN/UqlUrm8eHDx/Wnj171LJlyyx9nVu3bkmSHnss6z+2d4f2B2ndurXWrFmjDRs2\nqFu3bum2r1+/Xo899piaNWv2t+tKTk6Wu7u7JBGE/8ff318nTpzQ6tWr1aFDh5wuJ1ulpKQoT548\nNv8JeBixsbHy9PTMVN+vvvpKy5cvV/v27TV27Fhre4cOHdS6dWv17NlTb7/9tpYvX/63anKEuz8/\nWckwjHsGXkf8fgIcjTnDQDa6efOmpk2bpnbt2qlGjRoKCgrSyy+/rIMHD9r0O3PmjMxms5YsWaJ5\n8+apSZMmCgwMVGRkpCQpMjJSvXv3VvXq1VW/fn39+9//1o4dO2Q2m3XkyBGbfR08eFA9e/a0vl73\n7t1t+kydOlUff/yxJKl+/foym83y9/dXbGxshsdQp04dFS9eXOvXr0+3zWKxaOvWrQoNDVWhQoUk\n3Qke48aNU8uWLRUUFKSaNWuqb9++On36tM1z0+YFb9u2TZMmTVJISIiCg4N1+/Zt67HdPWd47969\nGjhwoBo2bKhq1aqpcePGmjp1qiwWS4Z1nzlzRt26dVP16tX19NNP67PPPsuw319FRUXpnXfeUd26\ndRUQEKDWrVtr3bp16frNmzdPzz33nAIDA1W7dm117NhRW7duzdRr2CMkJEQBAQH6z3/+o9TU1Pv2\nvdf8zUGDBtn8J+7UqVMym81avny5FixYoMaNGysoKEh9+vRRbGysbt++rWnTpik0NFTVq1fXm2++\nqcTExAxfc/v27WrVqpUCAgLUqlUr/fDDD+n6XL16VaNGjVKDBg1UrVo1hYWFaeHChTZ90mpaunSp\nPv30UzVu3FjVq1dXVFTUPY83JSVF06ZNU5MmTVStWjU988wzmjlzpvV9SpsXvnnzZsXExFjP9S1b\ntmS4P8MwNHv2bBUrVkwffPBBuu1PPfWUunXrpiNHjmR4nIcOHVLHjh0VGBioZ599VmvWrEnXJzPn\nTWbOwXt9fvbu3Suz2azvvvsu3Wtv3rxZZrNZ+/fvlySdP39eH3zwgcLCwhQYGKi6detq8ODB+uOP\nP6zPWbJkid5//31J0gsvvGB9D9M+mxmdc5cvX9a//vUva/3t2rXTxo0bbfrcfQ4uWrRIjRs3VkBA\ngDp16qRff/3Vpu+lS5f0zjvvKDQ0VNWqVVNoaKgGDhyomJiYdMcIZAb/hQOy0bVr17R27Vo1b95c\nnTp1Unx8vFasWKFXXnlFq1evTjeVYunSpUpNTVXnzp3l4uKiAgUKKCEhQS+//LLi4+PVs2dPFS5c\nWGvXrtWePXvSjdb8+OOP6tevn4KCgqzTFlauXKmXX35Zy5cvl9lsVosWLXThwgVt2bJFI0eOVP78\n+SUp3TzINCaTSS1atNCCBQsUGRmp0qVLW7dt27ZNN27csAlap0+f1u7duxUWFiYfHx9dvnxZS5cu\nVbdu3bRhwwZraE4zbdo0eXp6qk+fPrpx44Z1DuJfj239+vUyDEMvv/yyChYsqEOHDmnevHmKjY3V\n+PHjbfrevHlTr776qurXr69mzZpp+/btmjJlikwmk3r16nXPn1d0dLTat2+v/Pnzq2fPnipYsKC2\nb9+ud999Vzdv3lT79u0lSQsWLNDkyZPVpk0bvfLKK0pKStKJEyd09OhRPfPMM/fc/8MaMGCAevfu\n/cDRYXu/rl62bJkkqUePHoqJidH8+fP17rvvqkKFCvr111/Vt29f/f7771q6dKmKFSumYcOG2Tz/\n5MmT2rVrl7p06aKCBQtqxYoV6t+/v7744gsFBQVJkhISEvTSSy8pISFBnTp1UvHixfXzzz9rwoQJ\nunbtmt544w2bfS5ZskS3b99W165dlSdPnvuO6A4ePFjfffedWrVqperVq+vgwYOaOXOmIiMjNWnS\nJOXNm1eTJ0/WokWLdP78eY0YMUKGYSggICDD/Z08eVLR0dF6+eWXlTdv3gz7tG3bVvPmzdOOHTvU\nsGFDa/vly5fVr18/tW3b1hpehw4dKnd3dz333HOSMnfeZPYcTHP35ycxMVF16tRRsWLFtGnTJjVt\n2tSm78aNG1W8eHHrtQy//PKLTp48qdatW6t48eK6cOGCvvzyS504cULffPONHnvsMYWEhKhjx45a\nsWKF3nzzTev0kLTfA3895xISEtS5c2fFxMTo5Zdf1uOPP67169fr7bffVlJSkl544QWb/suXL1dK\nSoq6desmi8Wizz77TG+88Ya+/fZba58+ffro8uXL6tq1q0qUKKGYmBjt3LlTly9fztT8byAdA0CW\nCg8PN8xmc4bbUlNTjVu3btm0Xbt2zahVq5YRHh5ubTt9+rTh5+dn1K5d27h+/bpN/9mzZxtms9nY\nvXu3tS05Odl45plnDLPZbERERFhfq1GjRkb//v1tnp+YmGg0bNjQeP31161ts2bNMsxmsxETE5Op\nY/y///s/w8/Pz/jkk09s2vv162cEBwcbycnJ1rabN2+me/6ZM2eMypUrGwsWLLC27dixw/Dz8zNa\ntmxppKSk2PTfsWOHYTabjWPHjt13v9OmTTOqVKliXL161do2cOBAw2w2G9OmTbPp261bNyMoKMi4\nceOGYRiGcePGDcPPz8+YP3++tc+bb75pNGnSxNonTZ8+fYz69esbqamphmEYRo8ePYwXX3wxXT1Z\n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\nhuvWrVNsbKz8/f21fft27d+/X2+//fZ9L4567733dOjQIT3//PPq2LGjypcvr6tXr+ro0aM6duyY\n9YKkl156SeXLl1dgYKCKFCmiX3/9VStXrtRzzz3n8JsQpI0OHzt2LN1/BDp06KBly5apV69eatOm\njf744w+tXLlSFStWzPT+7fl6vEKFCnr77bfVuXNneXl5afny5bpx44bNSGO/fv30448/qkePHmrf\nvr3MZrMSEhJ04sQJbd26Vfv27XuoeezBwcF69tlntWDBAsXGxlqXVtuwYYPatm2rqlWr2r1PSXrx\nxRd17NgxrVy5Ur/++quaN29uvQPd6tWrVbJkSX344YfpnleyZElNmzZNZ86cUalSpfTNN9/o/Pnz\nmjp1qrVPZs6bzJ6D0oN/Vmmjw9KdCwvvZjKZ1KBBAy1fvlxubm4qW7as9u/fryNHjqS7gLFy5coy\nmUyaNWuW/vjjD7m5uSk0NDTD5Ri7du2qVatW6a233lLXrl2tS6udPHlSY8eOtftnffz4cQ0cOFDP\nPfecypcvL5PJpE2bNikxMVEtWrSwa19AGsIw4AD3Gp3s1KmTrl69qpUrV+rHH3/Uk08+qenTp1v/\noc3MPgoUKKDFixcrPDxcCxculKenp9q2bSt/f3+98847NvOMQ0JCtGzZMs2aNUuLFy9WUlKSihUr\npurVq6tTp07Wfk899ZT69++vFStWaMeOHdY5hRndbvluhQoVUmhoqL7//vt0F86leeONN5SSkqJv\nv/1W69atU0BAgObPn6/hw4enO8b7ff1697a8efNqzpw5GjdunGbPnq18+fKpWbNmat26tV588cV0\nz3V3d9e8efM0atQobdiwQQULFtTgwYP16quvpnuNu1+nZMmSWrVqlWbOnKlNmzYpNjZWhQsXVqVK\nlWwCXpcuXbRx40bNnz9fycnJKlGihF577TX16dPnvu+fve51y+UBAwbo9ddfT7etSpUqGjdunGbN\nmqVJkyapUqVKmj59uhYtWpRuSsO93vvMfiVuMpnk5+enwYMH68MPP9SFCxdUtmxZffLJJwoODrb2\ny58/v5YtW6bZs2dry5YtWrlypby8vFSuXDm98847NuHI3uk7U6dO1axZs7R27Vpt2rRJjz/+uAYO\nHJjhjUfs2feYMWMUEhKipUuXatasWbp586Z8fHzUq1cv9e7dO8PVLooXL6733ntP48aN09KlS/X4\n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\nCMMAAACwLMIwAAAALIswDAAAAMsiDAMAAMCyCMMAAACwLMIwAAAALIswDAAAAMsiDAMAAMCyCMMA\nAACwLMIwAAAALIswDAAAAMsiDAMAAMCyCMMAAACwLMIwAAAALKvGhOFly5bJZrM5PSIiIpzaLF68\nWD169FBgYKDGjBmj9PR0p/mFhYX605/+pO7duys4OFhTpkxRTk5OVW4GAAAAbiM1JgxLUrt27fTF\nF19o9+7d2r17tzZs2OCY99Zbb2n9+vWaMWOG3nvvPXl5eemZZ55RYWGho81rr72mnTt3aunSpVq/\nfr2ys7M1efLk6tgUAAAA3AZqVBj28PBQo0aN5OPjIx8fH91zzz2OeWvWrNFvf/tb9e3bV+3bt9e8\nefOUnZ2txMRESdLly5cVHx+v2NhYdevWTQEBAZo1a5a++eYbHTx4sLo2CQAAANWoRoXhtLQ09ezZ\nUw8//LBefPFFZWVlSZIyMjJkt9sVFhbmaFuvXj0FBgbqwIEDkqRDhw6puLhYDz74oKNNmzZt1KJF\nC+3fv79qNwQAAAC3BY/qLqC8AgMDNWfOHLVu3Vpnz57V0qVL9fTTT+ujjz6S3W6Xm5ubGjdu7LSM\nj4+P7Ha7JCknJ0eenp6qV6/eddtURH5+frnbFhQUVHj9cJ2CggLl5eW5dP24fbh6fwMAbj8VyWk1\nJgz37NnT8XP79u3VuXNn9e3bV//93/+tNm3aVHk9aWlp5W6bmprqukJQYampqbrrrrtcun7cPly9\nvwEANVuNCcM/Vb9+ffn6+urkyZPq1q2bjDGy2+1OZ4dzcnLk7+8vSWrcuLGKiop0+fJlp7PDOTk5\npc4ol4evr6+8vLzK1TYvL0+7du2qcB9wjdatWzveF67A/r69uHp/AwBuP/n5+eU+cVljw/D333+v\nkydP6je/+Y3uv/9+NW7cWF9++aVsNpukHy6YS05O1lNPPSVJ6tixo9zd3ZWUlKT+/ftLklJSUpSZ\nmang4OAK9+/l5VXus01169at8PrhOnXr1nXpmUL29+3F1fsbAFCz1ZgwPHfuXIWHh6tFixY6c+aM\nli5dKg8PD8e9hkeNGqW4uDi1atVKLVu21OLFi3XvvfeqX79+kn64oO6xxx7T7Nmz1aBBA919992a\nOXOmQkJC1Llz5+rcNAAAAFSTGhOGz5w5o2nTpun8+fNq1KiRQkNDtXHjRnl7e0uSxo8fr4KCAr3y\nyiu6dOmSunTpopUrV6p27dqOdbz00ktyd3fXlClTVFhYqJ49e+qPf/xjdW0SAAAAqlmNCcOLFi26\naZvJkyff8Es0ateurZdfflkvv/xyZZYGAACAGqpG3WcYAAAAqEyEYQAAAFgWYRgAAACWRRgGAACA\nZRGGAQAAYFmEYQAAAFgWYRgAAACWRRgGAACAZRGGAQAAYFmEYQAAAFgWYRgAAACWRRgGAACAZRGG\nAQAAYFmEYQAAAFgWYRgAAACWRRgGAACAZRGGAQAAYFmEYQAAAFgWYRgAAACWRRgGAACAZRGGAQAA\nYFmEYQAAAFgWYRgAAACWRRgGAACAZRGGAQAAYFmEYQAAAFgWYRgAAACWRRgGAACAZRGGAQAAYFmE\nYQAAAFgWYRgAAACWRRgGAACAZRGGAQAAYFmEYQAAAFgWYRgAAACWRRgGAACAZXlUdwEAUJMVFhYq\nOTm5usvA/wkMDFTt2rWruwwANQhhGABuQXJysl577TU1bdq0ukuxvOzsbE2fPl1du3at7lIA1CCE\nYQC4RU2bNlXLli2ruwwAwM9AGAYAACgDw6BuL64aBkUYBgAAKAPDoG4frhwGRRgGAAC4DoZB3fm4\ntRoAAAAsizAMAAAAy2KYBAAA5cQFVbcX7iuNykAYBgCgnLig6vbBfaVRWQjDAABUABdUAXcWxgwD\nAADAsgjDAAAAsCzCMAAAACyLMAwAAADLIgwDAADAsgjDAAAAsCzCMAAAACyLMAwAAADLIgwDAADA\nsgjDAAAAsCzCMAAAACyLMAwAAADLIgwDAADAsgjDAAAAsCzCMAAAACyLMAwAAADLIgwDAADAsgjD\nAAAAsCzCMAAAACyLMAwAAADLIgwDAADAsgjDAAAAsCzCMAAAACyLMAwAAADLIgwDAADAsgjDAAAA\nsCzCMAAAACyLMAwAAADLIgwDAADAsgjDAAAAsCzCMAAAACyLMAwAAADLIgwDAADAsgjDAAAAsCzC\nMAAAACzLkmF4/fr1Cg8PV+fOnfX444/r4MGD1V0SAAAAqoHlwvDHH3+sOXPmaMqUKdq6datsNpvG\njRun3Nzc6i4NAAAAVcxyYfidd97RE088oWHDhqlt27b605/+pLp16yo+Pr66SwMAAEAVs1QYLioq\n0pEjR/Tggw86prm5uemhhx7SgQMHqrEyAAAAVAeP6i6gKp07d07FxcVq3Lix03QfHx+lpqaWax0l\n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\ndzmmr1q1SuvWrdOzzz6rNWvW6IMPPlCPHj1KXSTn5eVVgS2AqxUUFGjcuHFq0KCBFixYoPj4eMf4\nzWv7rm7dujddz0/fV25ubhV6X6G0WrVqafXq1Vq1apXatWuntWvXatCgQbLb7eVavqx9ci30/Pjn\na65evVqh+vLy8iRJM2fO1AcffOB4fPTRR9q4caNTW37vb11Ffw+vhauf7mdXqK5+a4JbPX7m5+ff\n9Bhdltq1a+uhhx7SZ599pjNnzlS47vDwcJWUlGjnzp06ffq09u7dq1//+teO+dHR0dq2bZv69Omj\nr776ShEREUpMTCx3/yNGjNDHH3+swsJCbdmyRREREapTp06F66xshGGLa9OmTamLHvbt26e7775b\n9957r6QfLr6Ii4vT4sWLdd999zm1/eabb9SvXz8NGTJEfn5+uu+++5Samlquvj08PAhOLnbw4EGn\n5wcOHJCvr69SUlIcFz+GhoaqdevWpcJW+/bttXfvXi6IqybBwcGKjo5WQkKCPDw89MUXX+i+++5T\nUlLSz15no0aN9P333zsuxpN+uIDlp7KysnT27FnH8/3798vd3V1t2rSRj4+PmjZtqpMnT+r+++93\nerRs2dKxTFl3jfD09OT9VEG+vr6qU6fOdff7ze7O0aZNG33zzTdO0/bt2ydfX1+nZZOTk53aJCcn\nq23bttddL3cFcVa7dm2n9/atHj9TUlJ04cKFGx6jy+Lu7q758+crICBAI0eOVHZ2tmNeeT7va9eu\nrf79+zv+wG3Tpk2pC2wfeOABjRo1Sm+//bYGDBigLVu2XLf/Hx9HJKl3797y8vLShg0btGvXLj32\n2GMVfm1cgTBscU899ZSysrI0Y8YMpaSkKDExUcuWLdOYMWMkSd9++61iYmI0fvx4tW3bVna7XXa7\nXRcuXJD0w4H6iy++0P79+3XixAm98sor5f43WcuWLZWUlCS73a6LFy+6bButLDMzU3PnzlVqaqo+\n+ugjrVu3TqNGjVLz5s3l6empNWvWKCMjQ59++qni4uKclo2MjNTly5c1depUHT58WOnp6Xr//feV\nlpZWPRtjEQcPHtSbb76pw4cPKysrS5988onOnTuntm3bKjo6WqtXr9batWuVnp6uI0eOaN26deVe\nd2BgoOrWrauFCxcqIyNDH374obZu3Vqqnaenp2JiYnTs2DHt3btXr732mgYNGqRGjRpJkiZPnqy3\n3npLa9euVVpamr799ltt2bJF77zzjmMdZZ0hbNmypfLy8pSUlKRz5845hXKUrXbt2ho3bpzmz5+v\nhIQEZWRkKDk5WZs3b5Z08zOxY8eO1ZdffqkVK1YoLS1NW7du1YYNG/TMM884tfvmm2/09ttvKy0t\nTevXr9cnn3yiUaNGXXe9nAF21rJlSx08eFDfffedzp07d8vHz/Ico6Wy94Obm5sWLFggm82mUaNG\nOUL0zT7vr/nVr36lzz77TPHx8Ro6dKhj+pUrVzRjxgzt2bNHmZmZ2rdvnw4dOqRf/OIX1+1/5MiR\nTiG+Vq1aGjZsmBYuXChfX1917ty5XK+Hq5X+3zlqtLL+Wr/RtGbNmmnlypWaN2+ehg0bpoYNG+rx\nxx/XpEmTJElHjhxRQUGB4uLinH4Ru3btqjVr1mjSpEk6deqUxo0bJy8vLz3++OPq37+/Ll26dMP+\nJSkmJkZz5szRpk2b1KxZM76Ao5K5ublp2LBhKigo0IgRI+Tu7q7Ro0drxIgRkqS5c+dq0aJFWrdu\nnQICAhQTE+PY75J0zz336N1339W8efMUFRUld3d3+fv7KzQ0tLo2yRLuvvtux22aLl++rBYtWigm\nJsZxy6PCwkK98847mjdvnry9vTVw4EDHsjf7/W/YsKHmz5+vefPmafPmzQoLC9PkyZP1yiuvOC3j\n6+ur/v37a8KECbp48aL69u2rP/7xj475I0aM0F133aVVq1Zp/vz58vLyUvv27Z3CU1m1BAcH68kn\nn9TUqVN14cIF/e53v+NbDMshOjpanp6eWrp0qbKzs9WkSRM9+eSTkm6+zwMCAvT6669ryZIliouL\nU5MmTfT888+X+pbBMWPG6PDhw1q2bJnq1aun2NhYPfTQQ2Wuszz9Ws3YsWMVExOjwYMH68qVK/r0\n009v6fjZqFEjzZkz54bHaOn6r7m7u7v+8pe/6Pnnn9fo0aO1Zs2am37eXxMWFqaGDRsqPT1dQ4YM\ncUyvVauWzp8/r5iYGNntdnl7e2vAgAFl/g6X1f+1P6Yfe+wxvfnmmxo+fHi5Xouq4Gb48w4AAMsK\nDw/X6NGjHRdoAa60d+9ejRkzRjt37nQE5OrGmWEAAAC4VGFhoXJzc7Vs2TKnYVe3A8YMAwBgYVYe\n3oCqs23bNoWHh+vy5ct68cUXq7scJwyTAAAAgGVxZhgAAACWRRgGAACAZRGGAQAAYFmEYQAAAFgW\nYRgAAACWRRgGAACAZfGlGwBQTT799FNt2LBBhw8f1vfff69mzZrpl7/8pcaOHStfX9/qLg8ALIH7\nDANANViwYIFWrVqlQYMGKSIiQt7e3srIyFB8fLzy8vK0ZcuW6i4RACyBMAwAVWznzp169tlnFR0d\nrejo6DLn9+7duxoqu/1cuXJFderUqe4yANzBGDMMAFVs9erVaty4sSZNmlTm/GtBuLCwULNnz1bP\nnj3VuXNnDRs2TImJiU5tY2JiNHToUCUlJelXv/qVAgMDFRUVpczMTF24cEHPP/+8QkND1b9/f338\n8cdOy0ZFRWnixIlKSEhQ//79HcumpqY6tStPHcePH9f48ePVvXt3BQUF6ZFHHtHbb7/t1Gb//v0a\nNWqUgoOD1aVLF02bNk25ubmO+d99951sNpu2bt2ql19+Wd27d9eIESMq9uICQAVxZhgAqlBxcbGC\ng4M1cOBAzZ8//4ZtJ0+erF27dumFF15Q69atlZCQoG3btmnFihXq27evJCk2Nlb//Oc/de+992ri\nxIny8PDQzJkz1bx5c3l5ealr164KCgrSxo0blZiYqB07dqh58+aSfgjDaWlpatCggZ577jkZY/SX\nv/xFRUVF2r59uzw9PctdR79+/dSkSRNNmDBB9erVU3p6us6cOeM4871//36NHDlSffv21fDhw5WX\nl6fXX39d3t7e+tvf/ibphzB8bT19+vTRoEGDVFJSoh49erhkXwCAJMkAAKqM3W43fn5+ZtGiRTds\nd+zYMePn52c2bdrkNP2JJ54wjz76qON5TEyM8ff3N8ePH3dMW7duXak+Ll68aAICAsyaNWsc0yIj\nI01AQIA5efKkY1p6errx9/c3GzduNMYYc/To0ZvWkZuba/z8/Mw///nP627P008/bZ566imnaceP\nHzc2m83s3LnTGGPMqVOnjJ+fn5kwYcINXxsAqEwMkwCA29DevXvl5uamgQMHOk2PiIjQ0aNHVVBQ\n4JjWtGlTtW3b1vHc19dXbm5uCgsLc0yrX7++GjVqpKysLKf1tWvXTvfff7/jeatWrWSz2ZScnCxJ\n2rdv303r8Pb2VosWLbRw4UIlJCTozJkzTm0LCgq0f/9+DRw4UMXFxY7HAw88oObNm+vQoUNO7Xv1\n6lWRlwoAbglhGACq0D333KM6deqUCqU/dfHiRXl4eKhBgwZO0xs3bixjjC5evOiYVr9+fac214Y3\n/HRZT09PFRYWOk3z8fEp1bePj4/Onj1boTr++te/qm3btvrzn/+s3r17a/jw4dq7d68k6cKFAR1G\nDgAAAr1JREFUCyouLtbs2bPVoUMHx6Njx47KysrS6dOnS60bAKoK9xkGgCrk7u6ukJAQJSUlqaSk\nRLVqlX1OomHDhrp69aouXbrkFHbPnj0rNze3UuH058rJySlzmr+/f4XqeOCBB/T666+ruLhY+/fv\n18KFCzVp0iR9/vnnatCggdzc3DRx4kQ9/PDDpfrz9vZ2eu7m5lYp2wYA5cGZYQCoYqNHj5bdbteK\nFSvKnL9z506FhobKGKPt27c7zdu+fbv8/f1Vt27dSqnlP//5jzIyMhzP09PTdezYMQUFBUlShetw\nd3dXly5dNGHCBF2+fFnZ2dny8vJSUFCQTpw44XRm+NqjRYsWlbItAPBzcGYYAKpY79699cwzz2j5\n8uU6ceKEBg8erHvuuUenTp1SfHy8vv/+e23ZskUDBgzQ7NmzlZ+fr9atW+v9999XcnKy4uLibtqH\nKeeNgnx8fDRx4kRNnjxZxhgtWbJE9957r4YNGyZJ8vPzu2kd//73vzV37lwNGjRIrVq10qVLl/TW\nW2/pvvvuU6tWrSRJv//97zV69GhNnTpVgwcPVoMGDZSVlaWkpCQNHz5cXbt2/ZmvJgDcGsIwAFSD\nF198USEhIVq/fr2mT5+uvLw8NWvWTD169NAzzzwj6YdvqVu0aJFWrlypCxcuqE2bNlqyZEmpL+Qo\na1hBeacFBAQ4bvNmt9sVGBioV1991THuuDx1NGnSRE2aNNHKlSt15swZ1a9fX126dNGCBQscfQYH\nB2vDhg1aunSpXnrpJRUVFalZs2Z68MEHHYH5ejUCgCtxn2EAsKioqCjdfffdeuONN6q7FACoNowZ\nBgAAgGURhgHAwhiWAMDqGCYBAAAAy+LMMAAAACyLMAwAAADLIgwDAADAsgjDAAAAsCzCMAAAACyL\nMAwAAADLIgwDAADAsgjDAAAAsKz/BeQwqXDmS1HGAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(8,6))\n", + "sns.set_style(\"whitegrid\")\n", + "sns.barplot(x=\"composer\", y=\"num_records\",\n", + " data=plot_df,\n", + " color=\"gray\")\n", + "plt.xlabel(\"Composer\")\n", + "plt.ylabel(\"Number of Observations\")\n", + "plt.title(\"Target Variables - Number of Observations\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "composer = [\"mozart\", \"bach\", \"schubert\", \"chopin\", \"tchaikovsky\"]\n", + "percent_nonzero = []\n", + "for i, comp in enumerate(composer):\n", + " percent_nonzero.append(X[y==i].sum(axis=0).astype(bool).mean())\n", + "plot_df_2 = pd.DataFrame({\n", + " \"composer\": composer,\n", + " \"percent_nonzero\": percent_nonzero\n", + "})" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nw3bt/vvvN6xWq5GWlma7dvr0aSMyMtJISEi4bk3z5883rFarsWrVKtu1/v37G926dTOuXLli1/fh\nhx82OnToYPd6QkNDjb59+xoFBQV2fYcPH25ERkYaR48etV3LyMgwGjVqZPTt2/e69VwTGhpqWK1W\nIzQ01PbHarUaKSkppuvMy8srNP6xY8eMyMhIY968ebZrX3/9tREaGmr3HNfcf//9xtixYwtd79u3\nrxEXF2f7eseOHUZoaKjxl7/8xbh8+bJd37lz5xoNGzY0fvzxR7vriYmJRnh4uHHy5EnDMAxjypQp\nxj333FPk9+X3HD161AgNDTWio6ONjIwM2/U9e/YYoaGhxrRp02zXRo8ebbRq1cru8Xv37r3u67/m\nwoULRmhoqPH44487VFNxfob37Nlju7Zt2zbba7r2/TEMw1i6dKlhtVqNzz//3HZt7NixhtVqtfs3\nZRiGMWTIECMyMtLIysoyDMMw3n//fSM0NNR444037PqNHDnSCAsLs81PcnKyYbVajbNnz1739a1c\nudK46667jF27dtldX7JkiWG1Wo0vv/zSdi00NNS46667jIMHD153PODPjq0OgJuqWbOmunbtqmXL\nlikzM7PIPh9//LEsFosGDBhgd33gwIEyDKPQPsp69eqpUaNGtq+rVaumOnXq6OjRo0WOv337ds2c\nOVNxcXG2vbTnzp3Tjh071LFjR124cEFZWVm2P82bN9eRI0fs3ga3WCy2LQLXFBQU6LPPPtNf/vIX\nuxUtf39/PfDAA9q1a5ftrf/f07ZtW7399tu2P2+99ZZatGhhuk4vLy+72s6ePSsfHx/VqVNH3377\n7Q3rKI4ePXoU2ru5ceNG3XPPPapYsaJdvU2bNtUvv/yinTt3SpIqVaqknJycYr8N3q5dO7t3EaKi\notSgQQNt3brVdq179+7KyMjQ9u3bbddWr14tX19ftW/f/rpjX5u3W265xaFaivMz/Ot3A66tKjdp\n0kS33Xab3WsyDEM//fRToeeMjY0t9HVeXp4+++wzW02enp7q27dvoZoKCgr08ccfS7o6D5L0/vvv\nX3f/98aNG1W3bl0FBwfbzWnjxo1lGIZ27Nhh1/++++5T3bp1ixwLcAdsdQDc2LBhw7Rq1Sq9+eab\neu655wq1Hzt2TB4eHqpdu7bd9erVq6tSpUp2e3Il6Y477ig0RqVKlXTu3LlC10+ePKnRo0fr7rvv\ntr21K119q9kwDL366qt65ZVXCj3OYrHozJkzdm+F//bt2jNnzignJ0fBwcGFHh8SEqKCggKdPHnS\ntv3iem6//XY1bdq0yDYzdRqGoYULF+rf//63jh49qvz8fFufqlWr/m4NxVXUW9hHjhzR/v37i3xN\nFotFp0+flnT1A2IbNmzQY489poCAADVv3lydOnVSy5YtHXru3/68SFJwcLA2bNhg+7p58+aqXr26\nVq9erSZNmsgwDK1du1Zt27a1bXkpyrXA68h/XKSS/wxXrFhR0tWfhV+79dZbJUnnz5+3u+7h4aGa\nNWvaXbv2c3js2DFJ0vHjxxUQEFDodV77ebxWU+fOnfXf//5X48ePV2Jiopo2baq//OUv6tixo+0/\nekeOHNGhQ4duOKfXsLUB7o7gC7ixmjVrqkuXLlq2bJkGDx583X6Ongbg4VH0m0i/Xa26cuWKRo4c\nKR8fH73yyit2j7vWd+DAgbbV1d+qVauW3deuPGLseszU+dprr2nWrFnq1auXRo0apSpVqshiseif\n//ynCgoKHHq+681BQUGBypUrV+h6Ud+TgoICNWvWTIMHDy5yBbFOnTqSrq7Ur1y5Utu2bdPHH3+s\njz/+WCtWrFCPHj00depUh+q9EQ8PDz3wwAP673//qwkTJigtLU0ZGRnq2rXr7z6uYsWKCggIsPuw\nnCNK+jNc1PdYct1JHJJUvnx5LVq0SNu3b9fWrVv1ySefaN26dVq2bJneeustWSwWFRQU6M4771R8\nfHyRtfw2yJfGvxWgLCH4Am5u+PDhWr16tebPn1+oLSgoSAUFBTp8+LDd26OnT5/W+fPnFRgYWKzn\nfPHFF/X9999r0aJFqlatml3btdUyT0/P66623ki1atXk6+ur9PT0Qm0HDx6Uh4dHoRU8s8zUuWnT\nJjVp0kQvvvii3fXz58/brfj+XjirXLmyLly4UOj68ePHC60wXk+tWrWUnZ2tJk2a3LCvp6enWrdu\nbTslY8KECVq2bJmGDx9+w+c7fPhwkdd+u9rYvXt3JScn68MPP9TWrVvl5+d33f9E/Frr1q31n//8\nR3v27LnhB9xc9TN8PQUFBfrpp5/sVpiv/RzWqFFDkhQYGKjt27crOzvbbtX34MGDtvZfa9KkiZo0\naaJnn31Wb7zxhl555RVt375dTZs2Va1atfT99987NKcAOM4McHvXVn2XLl1aaK9vq1atbG/T/9q1\n1aZfHx3mqOXLl2vZsmWaMGGCIiIiCrVXq1ZN9913n5YuXapTp04Vaj9z5swNn8PDw0PNmzfXBx98\nYPdWdmZmptauXau7777b4T2i12OmTg8Pj0KrcevXr9fPP/9sd+3a+cO/fftcujpPu3fv1i+//GK7\n9uGHH+rEiRMO19yxY0ft3r27yDvPXbhwwbYF4+zZs4Xa77zzTkkqdERWUT744AO71/bVV19pz549\niomJsesXGhqqO++8U8uWLdOmTZv017/+9borrr82ePBg+fj4aNy4cYXeypekH3/80Xb0mit+hm/k\nvffes/t60aJF8vLysoXTmJgY/fLLL4X6JScny8PDQ61atZKkIrcIWa1WGYZhm4dOnTrp5MmTWrZs\nWaG+ly9ftp1yAuAqVnwBN1PU26HX9vqmp6erfv36tutWq1U9evTQsmXLdP78ed1777366quvtHLl\nSrVv31733XefqefOysrSpEmTVL9+fXl6emrVqlV27e3bt5ePj48mTJigRx55RF26dFHv3r1Vs2ZN\nZWZmavfu3fr555/tzga+3lvNTz75pD777DP97W9/0yOPPCIPDw8tW7ZMV65c0dNPP22q7utxtM77\n779f8+bNU3x8vBo1aqTvv/9eq1evLrRlo1atWqpUqZKWLFmiChUqqEKFCoqKilKNGjXUq1cvbdy4\nUY8++qg6deqkH3/8UatWrSpyP+31DBo0SFu2bNHQoUPVo0cPhYeHKycnR99//702bdqkLVu2qEqV\nKho3bpzOnTunxo0b6/bbb9exY8e0aNEihYWF3XBf9LXX8cgjj+hvf/ub7TizatWq6dFHHy3Ut3v3\n7kpISJDFYnH4ZiE1a9ZUYmKiRo8erc6dO9vduW3Xrl3auHGjevbsKcn5P8M34u3trU8++URjx45V\nVFSUbavI0KFDbav7bdq0UePGjfXKK6/o6NGjtuPMPvzwQw0YMMC2oj537lx98cUXiomJUWBgoE6f\nPq1///vfCgwM1N133y1J6tatm9avX6+JEydqx44datSokfLz83Xw4EFt2LBBb731lsLDw536GoGb\nGcEXcDNFvZ1eq1Ytde3aVStXrizUPmXKFNWsWVMpKSnavHmz/P39NXToUD3++OOFxr3eW/XXrmdn\nZ+vKlSs6cOCAnn322UL97rnnHgUGBiokJETLly/X3LlzlZKSorNnz8rPz09hYWFFPm9R6tWrp8WL\n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\nQuzxBQAAgFso1orvzz//rOTkZO3atUtnz55VlSpVdPfdd6t///667bbbnF0jAAAAUGKmV3z379+v\nLl26aMmSJfL391eTJk3k7++vJUuWqGvXrvrhhx9cUScAAABQIqZXfBMSElSzZk299dZbqly5su36\nuXPnNHDgQCUkJCgpKcmpRQIAAAAlZXrFd9euXRo2bJhd6JWkypUra9iwYUpLS3NacQAAAICzmA6+\n5cqVU15eXpFteXl5KleuXImLAgAAAJzNdPBt1qyZXnnlFaWnp9tdP3z4sF599VU1a9bMacUBAAAA\nzmJ6j+/YsWPVt29f/fWvf1X9+vVVvXp1nT59Wvv379cdd9yh+Ph4V9QJAAAAlIjp4BsYGKjVq1dr\n+fLlSktL0/nz5xUcHKwHH3xQPXv21C233OKKOgEAAIASMRV88/Ly9NFHHyksLEz9+vVTv379XFUX\nAAAA4FSm9vh6e3vrqaee0vHjx11SzKJFi9SmTRtFRUWpd+/e+uqrr67bNy0tTX/729/UuHFjNWjQ\nQJ06dVJycrJdn5SUFFmtVoWFhclqtcpqtapBgwYuqR0AAABlm+mtDnXr1tWJEyecXsi6des0bdo0\nvfjii4qMjNTChQs1aNAgbdiwQdWqVSvUv0KFCoqLi1NoaKh8fX2VlpamF154Qbfccot69epl63fr\nrbdq48aNMgxDkmSxWJxeOwAAAMo+06c6jB49Wq+99pq+/vprpxaSnJysPn36qHv37goJCdGkSZPk\n4+Oj5cuXF9k/LCxMnTt3VkhIiAIDA9WlSxe1aNFCX3zxhV0/i8WiatWqyc/PT35+fkWGaAAAAPz5\nmV7xnT59us6ePavevXurSpUqql69ul27xWLRqlWrTI155coV7d27V0OGDLEbp1mzZtq9e7dDY3z7\n7bf68ssv9Y9//MPuenZ2ttq0aaOCggLdddddGj16tOrVq2eqPgAAANz8TAff8PBwRUREOLWIrKws\n5efnFwrRfn5+hc4L/q2YmBidOXNGBQUFGjFihB588EFbW506dTRlyhSFhobq4sWLSkpK0sMPP6y1\na9fqtttuc+prAAAAQNlmOvhOmzbNFXUU2+LFi5Wdna3du3dr+vTpql27tjp37ixJio6OVnR0tK1v\ndHS0OnfurKVLl2rkyJGmnicnJ8epdePPITc3t7RLwK/k5uYqOzu7tMsAcBPi93nZYvb3uaM5zXTw\n/TXDMJSRkSE/Pz95ehZ/qKpVq6pcuXLKzMy0u3769OlCq8C/FRQUJEmqX7++MjMzNXv2bFvw/S1P\nT0+FhYU6WzDOAAAgAElEQVTpyJEjpms8fPiw6cfgz+9G70jgj5Wenq4KFSqUdhkAbkL8Pi9bXPX7\nvFhp9ZNPPtHs2bP17bffKj8/X//9738VHh6u8ePH695771XXrl1Njefl5aXw8HClpqaqbdu2kq6G\n6tTUVMXFxTk8Tn5+vvLy8q7bXlBQoP3796t169am6pOk4OBg+fr6mn4c/tyys7O1bdu20i4D/1On\nTh2FhYWVdhkAbkL8Pi9bzP4+z8nJcWiR0nTwXbNmjZ5++ml16tRJvXr10vjx421tNWvW1IoVK0wH\nX0kaMGCA4uPjFRERYTvOLDc3Vz179pQkJSYmKiMjQwkJCZKunvkbGBiounXrSpI+//xzvf322+rf\nv79tzLlz5yo6Olq1atXShQsXlJSUpBMnTuihhx4yXZ+vry8rSSjEx8entEvAr/j4+PDvFECx8Pu8\nbHHV73PTwXfevHnq37+/xo4dq/z8fLvgW79+fS1cuLBYhXTu3FlZWVmaNWuWMjMzFRYWpqSkJNvx\nY5mZmXbnBxuGoRkzZujo0aPy9PRUzZo19cwzz6hPnz62PufPn9f48eOVmZmpSpUqKSIiQkuWLFFI\nSEixagQAuI+8vDzt2bOntMvA/zRo0EDe3t6lXQZucqaD708//aSYmJgi23x9fXXhwoViFxMbG6vY\n2Ngi26ZOnWr3dd++fdW3b9/fHS8+Pl7x8fHFrgcA4L727NmjKVOmKCAgoLRLcXsZGRl6/vnnde+9\n95Z2KbjJmQ6+/v7+OnTokJo2bVqo7fvvv1dgYKBTCgMAoLQFBATYPkQN4OZnOvg+8MADmj17turW\nrav77rtP0tWbTezfv19JSUn629/+5vQiAaAs4K3vsoW3vgGYZTr4jhgxQj/88IP+/ve/q0qVKpKk\nwYMH68yZM2rdurUee+wxpxcJAGUBb32XHbz1DaA4TAdfb29vvfbaa9q+fbs+++wzZWVlqXLlymrW\nrJmaNWvmihoBoMzgrW8AuHkV+64TTZo0UZMmTZxZCwAAAOAyHo50io+P16ZNm27Yb9++fbYbUAAA\nAABliUPBNyUlRaNGjdILL7ygy5cvX7dfXl6ejh8/7rTiAAAAAGdxKPhKUteuXbVixQo9+OCD+uGH\nH1xZEwAAAOB0Dgff2NhYLVmyRFeuXNFDDz2kxYsXu7IuAAAAwKkcDr6SFBERoZSUFHXq1EmTJ0/W\niBEjdO7cOVfVBgAAADiNqeArSRUqVNC0adM0ffp0bd++Xd27d9cXX3zhitoAAAAApzEdfK954IEH\nlJKSooCAAPXv319z5sxRfn6+M2sDAAAAnKbY5/hKUs2aNbV48WLNmjVL8+bNU0pKirPqAgAAAJyq\n2Cu+15QrV07/+Mc/9Pbbb+vKlSvOqAkAAABwOodWfD/44AP5+/v/bp/GjRtr9erV+v77751SGAAA\nAOBMDq34BgUFydvbu8i2lStX2k52qFy5su677z7nVQcAAAA4SYm2OuTn5ys+Pl5Hjx51Vj0AAACA\nS5R4j69hGM6oAwAAAHCpEgdfAAAA4GZQouDr4eGhHj16qGrVqs6qBwAAAHCJEp3ja7FYNHXqVGfV\nAgAAALhMsYJvfn6+9uzZo5MnTyovL69Qe/fu3UtcGAAAAOBMpoPv3r179cQTT+jEiRNFfrDNYrEQ\nfAEAAFDmmA6+EydOVMWKFbVw4ULVq1dPXl5erqgLAAAAcCrTwffAgQN65ZVXuFEFAAAAbiqmT3UI\nDg7WpUuXXFELAAAA4DKmg298fLzeeOMNHTx40BX1AAAAAC5heqvDiy++qFOnTqlLly4KCAjQrbfe\natdusVi0atUqpxV4s8nLy9OePXtKuwz8T4MGDeTt7V3aZQAAgDLAdPANDw+XxWJxRS1/Cnv27NGU\nKVMUEBBQ2qW4vYyMDD3//PO69957S7sUAABQBpgOvtOmTXNFHX8qAQEBCgoKKu0yAAAA8CslumVx\nbm6uMjIylJub66x6AAAAAJco1p3bPvzwQ82ZM0f79u2TYRiyWCwKCwvTyJEjFRMT4+waAQAAgBIz\nveK7efNmDR8+XF5eXho7dqwSExP17LPPytvbW8OGDdPmzZtdUScAAABQIqZXfOfMmaO//vWvmj59\nut31/v37a8yYMZozZ47atWvntAIBAAAAZzC94nvo0CF17969yLZu3brp0KFDJS4KAAAAcDbTwbdy\n5cpKT08vsi09PV2VK1cucVEAAACAs5ne6tC5c2fNmDFDPj4+6tChgypVqqQLFy5ow4YNeuWVV9S7\nd29X1AkAAACUiOng+9RTT+n48eMaP368XnjhBXl6euqXX36RYRhq3769Ro8e7Yo6AQAAgBIxHXy9\nvb01e/Zsff/99/riiy90/vx5Va5cWXfffbdCQ0NdUSMAAABQYsU6x1eSQkNDCboAAAC4aTgUfI8f\nP25q0MDAwGIVAwAAALiKQ8G3TZs2slgsDg1osVj07bffFquYRYsWacGCBcrMzJTVatW4ceMUFRVV\nZN+0tDRNnz5dhw4dUm5urgIDA9WnTx8NGDDArt/69es1a9YsHTt2TMHBwXrqqae4uxwAAIAbcij4\nzpkz53fb8/LytGzZMm3fvl3lypUrViHr1q3TtGnT9OKLLyoyMlILFy7UoEGDtGHDBlWrVq1Q/woV\nKiguLk6hoaHy9fVVWlqaXnjhBd1yyy3q1auXJGnXrl0aM2aMxowZo5iYGK1evVqPP/64Vq5cqXr1\n6hWrTgAAANycHAq+17sT2+XLl7VkyRItWLBAZ86cUY8ePTRkyJBiFZKcnKw+ffrYbo4xadIkffTR\nR1q+fLkGDx5cqH9YWJjCwsJsXwcGBmrTpk364osvbMH33XffVcuWLfX3v/9dkjRq1Ch99tlneu+9\n9zRx4sRi1QkAAICbk+kbWEhSTk6OFixYoLZt22r69Olq3bq1NmzYoKlTpyo4ONj0eFeuXNHevXvV\ntGlT2zWLxaJmzZpp9+7dDo3x7bff6ssvv9R9991nu7Z79241a9bMrl+LFi0cHhMAAAB/HqZOdbh0\n6ZLee+89JScn69KlS3rooYc0ePBg3XHHHSUqIisrS/n5+apevbrddT8/v+veJe6amJgYnTlzRgUF\nBRoxYoQefPBBW9upU6eKHDMzM9N0jTk5OQ71y83NNT02XCc3N1fZ2dkuHR9lB/PtXphv98J8uxez\n8+1oTnMo+F68eFHJycl69913dfnyZfXp00ePPvqoAgICHC7IVRYvXqzs7Gzt3r1b06dPV+3atdW5\nc2enP8/hw4cd6nejoI4/Vnp6uipUqODS8VF2MN/uhfl2L8y3e3HVfDsUfO+//35dvHhRjRs31sCB\nA+Xn56dTp07p1KlTRfYPDw83VUTVqlVVrly5Qiuxp0+fLrRi+1tBQUGSpPr16yszM1OzZ8+2BV9/\nf/9ijVmU4OBg+fr63rBfdna2tm3bZnp8uEadOnXs9oI7G/NdtjDf7oX5di/Mt3sxO985OTkOLVI6\nFHwvXLggSdq+fbt27Nhx3X6GYchisWjfvn2OVfk/Xl5eCg8PV2pqqtq2bWsbKzU1VXFxcQ6Pk5+f\nr7y8PNvX0dHRSk1NVb9+/WzXPv30U0VHR5uqT5J8fX0d+p+Hj4+P6bHhOj4+Pi5dIWC+yxbm270w\n3+6F+XYvrppvh4LvO++84/Qn/q0BAwYoPj5eERERtuPMcnNz1bNnT0lSYmKiMjIylJCQIOnqmb+B\ngYGqW7euJOnzzz/X22+/rf79+9vG7Nevn+Li4vT2228rJiZGa9eu1d69e/XSSy+5/PUAAACgbHEo\n+P76pARX6dy5s7KysjRr1ixlZmYqLCxMSUlJtjN8MzMzdeLECVt/wzA0Y8YMHT16VJ6enqpZs6ae\neeYZ9enTx9anYcOGSkxM1MyZMzVz5kzVrl1b8+bN4wxfAAAAN2TqVAdXi42NVWxsbJFtU6dOtfu6\nb9++6tu37w3H7NChgzp06OCU+gAAAHDzKtY5vgAAAMDNhuALAAAAt0DwBQAAgFsg+AIAAMAtFPvD\nbQcPHtTXX3+tkydP6sEHH5S/v7+OHDkiPz8/VaxY0Zk1AgAAACVmOvjm5ORo3LhxWr9+vSwWiwoK\nCtSyZUv5+/srMTFRNWrU0DPPPOOKWgEAAIBiM73VISEhQdu3b9ebb76ptLQ0GYZha4uJidEnn3zi\n1AIBAAAAZzAdfDdu3KgxY8aoRYsW8vLysmsLCgrSsWPHnFYcAAAA4Cymg292drb8/f2LbMvJySlx\nQQAAAIArmA6+oaGh2rRpU5FtH330kSIiIkpcFAAAAOBspj/cNnz4cA0fPlw5OTnq2LGjLBaLvvrq\nK61Zs0bLly/X/PnzXVEnAAAAUCKmg2/r1q01Y8YM/etf/9Lq1aslSZMmTdLtt9+u6dOnq2nTpk4v\nEgAAACipYp3j27FjR3Xs2FHp6enKyspS5cqVFRIS4uzaAAAAAKcxtcf38uXL6tq1q7Zt2yZJqlOn\njho1akToBQAAQJlnKviWL19eP//8szw8uNMxAAAAbi6mE2z79u21fv16V9QCAAAAuIzpPb6NGjXS\njBkzNGTIELVq1UrVq1eXxWKx69O+fXunFQgAAAA4g+ngGx8fL0naunWrtm7dWqjdYrFo3759Ja8M\nAAAAcCLTwfeDDz5wRR0AAACAS5kOvkFBQa6oAwAAAHCpYp3je01OTo4uX75c6HqVKlVKMiwAAADg\ndKaDr2EYmjdvnpYuXapTp04V2Yc9vgAAAChrTB9nlpycrOTkZMXGxsowDA0dOlSPP/64goODFRQU\npBdffNEVdQIAAAAlYjr4/ve//9UTTzyhQYMGSZLatWunESNGaO3atQoJCdGPP/7o9CIBAACAkjId\nfI8dO6awsDCVK1dOnp6eOn/+/NWBPDz0yCOPaMWKFU4vEgAAACgp08G3SpUqunjxoiQpMDBQ3377\nra0tKytLubm5zqsOAAAAcJJi3bnt66+/1v33368HHnhAc+bMUWZmpjw9PbVs2TI1bdrUFXUCAAAA\nJWI6+I4YMUI///yzJGno0KE6f/681qxZo8uXL6tZs2YaP36804sEAAAASsp08K1bt67q1q0rSfL2\n9ta4ceM0btw4pxcGAAAAOJPpPb4AAADAzYjgCwAAALdA8AUAAIBbIPgCAADALRB8AQAA4BZMB9+2\nbdvqu+++K7Jt//79atu2bYmLAgAAAJytWLcszsvLK7ItNzdXJ0+eLHFRAAAAgLM5dI7v5cuXlZOT\nI8MwJEkXL17U2bNnC/XZvHmzAgICnF8lAAAAUEIOBd/58+dr7ty5kiSLxaJHH330un1HjBjhnMoA\nAAAAJ3Io+LZr105BQUEyDEPPPfechg0bplq1atn18fLyUkhIiMLCwlxSKAAAAFASDgVfq9Uqq9Uq\n6eqKb+vWrVW1alWXFgYAAAA4k0PB99d69OjhijoAAAAAlzIdfCVp586dWrp0qQ4fPqzLly8Xal+9\nenWxilm0aJEWLFigzMxMWa1WjRs3TlFRUUX2ff/99/Xvf/9b+/btU15enurXr68RI0aoRYsWtj4p\nKSmKj4+XxWKxfTCvfPny2rNnT7HqAwAAwM3L9HFmn3zyifr376+srCx98803uuOOO1S1alWlp6cr\nJydHERERxSpk3bp1mjZtmkaOHKmUlBRZrVYNGjRIZ86cKbL/zp071bx5c82fP18pKSlq3Lixhg4d\nWuiM4VtvvVWffvqp7c+HH35YrPoAAABwczMdfGfPnq3+/fvrzTfflCSNGjVK77zzjjZu3ChPT081\nadKkWIUkJyerT58+6t69u0JCQjRp0iT5+Pho+fLlRfZ/7rnn9OijjyoiIkK1atXSP/7xDwUHB2vL\nli12/SwWi6pVqyY/Pz/5+fmpWrVqxaoPAAAANzfTwffgwYNq1aqVPDw8ZLFYlJOTI0kKCgrSE088\noddee810EVeuXNHevXvVtGlT2zWLxaJmzZpp9+7dDo1hGIYuXbqkypUr213Pzs5WmzZt1Lp1aw0f\nPlwHDhwwXR8AAABufqb3+JYvX175+fmyWCzy9/fXjz/+qHvuuUeSdMsttxTrzm1ZWVnKz89X9erV\n7a77+fkpPT3doTGSkpKUnZ2tTp062a7VqVNHU6ZMUWhoqC5evKikpCQ9/PDDWrt2rW677TZTNV4L\n+DeSm5traly4Vm5urrKzs106PsoO5tu9MN/uhfl2L2bn29GcZjr4Wq1WHTx4UC1atFDTpk31+uuv\nq2rVqvL09NQrr7yiO++80+yQJbZ69WrNmzdPr732mt1WhujoaEVHR9t93blzZy1dulQjR4409RyH\nDx92qJ+jQR1/jPT0dFWoUMGl46PsYL7dC/PtXphv9+Kq+TYdfPv376+jR49KkkaPHq2hQ4dq2LBh\nkqTbb79dc+bMMV1E1apVVa5cOWVmZtpdP336dKFV4N9au3atXnjhBb366qs33F/s6empsLAwHTly\nxHSNwcHB8vX1vWG/7Oxsbdu2zfT4cI06deq49KYqzHfZwny7F+bbvTDf7sXsfOfk5Di0SGk6+MbE\nxNj+ftttt2nFihU6cuSIcnNzVbduXXl7e5sdUl5eXgoPD1dqaqratm0r6eqe3dTUVMXFxV33cWvW\nrNG4ceM0c+ZMtWrV6obPU1BQoP3796t169ama/T19XXofx4+Pj6mx4br+Pj4uHSFgPkuW5hv98J8\nuxfm2724ar6LdY7vr1ksFgUHB5e4kAEDBig+Pl4RERGKjIzUwoULlZubq549e0qSEhMTlZGRoYSE\nBElXtzfEx8fr+eefV2RkpG212MfHRxUrVpQkzZ07V9HR0apVq5YuXLigpKQknThxQg899FCJ6wUA\nAMDNpVjB99ChQ9q0aZNOnjxZ6AYWFotF//znP02P2blzZ2VlZWnWrFnKzMxUWFiYkpKSbHt2MzMz\ndeLECVv/ZcuWKT8/X5MnT9bkyZNt17t3766pU6dKks6fP6/x48crMzNTlSpVUkREhJYsWaKQkJDi\nvGwAAADcxEwH35UrV+q5555T+fLlFRgYKC8vL7t2i8VS7GJiY2MVGxtbZNu1MHvNu+++e8Px4uPj\nFR8fX+x6AAAA8OdhOvi+9tpr6tChg/75z3869GEvAAAAoCwwfQOLjIwM9e7dm9ALAACAm4rp4HvP\nPfdo//79rqgFAAAAcBmHtjqcPXvW9vfRo0fr6aefVvny5dW8eXPdeuuthfpXqVLFeRUCAAAATuBQ\n8G3SpIndh9YMw9DEiROv+0G2ffv2Oac6AAAAwEkcCr7//Oc/S3RaAwAAAFDaHAq+124iAQAAANys\nTH+4rW3btvruu++KbNu/f7/tlsMAAABAWWI6+B47dkx5eXlFtuXm5urkyZMlLgoAAABwNoe2Oly+\nfFk5OTkyDEOSdPHiRbuTHq712bx5swICApxfJQAAAFBCDgXf+fPna+7cuZKu3pL40UcfvW7fESNG\nOKcyAAAAwIkcCr7t2rVTUFCQDMPQc889p2HDhqlWrVp2fby8vBQSEqKwsDCXFAoAAACUhEPB12q1\nymq1Srq64tu6dWtVrVrVpYUBAAAAzuRQ8P21Hj16uKIOAAAAwKVMn+oAAAAA3IwIvgAAAHALBF8A\nAAC4BYIvAAAA3ILpD7ddvHhReXl5qlatmu3aqlWrdPDgQTVt2lRNmjRxaoEAAACAM5he8X366af1\n6quv2r6eM2eOnnnmGS1ZskQDBw7UunXrnFogAAAA4Aymg+/XX3+tFi1aSJIMw9DixYs1ZMgQ7dix\nQ3FxcVqwYIHTiwQAAABKynTwPXfunO3mFd98842ysrL00EMPSZLatGmj9PR051YIAAAAOIHp4Fu9\nenUdOHBAkrR161YFBQWpZs2akqScnBx5epreNgwAAAC4nOmU2rFjR7388sv67LPP9PHHH2vQoEG2\ntm+//Va1a9d2aoEAAACAM5gOvk899ZRuueUWffPNNxo4cKAee+wxW9vevXvVqVMnpxYIAAAAOIPp\n4Ovp6akRI0YU2TZ37twSFwQAAAC4QrE35B48eFBff/21Tp48qQcffFD+/v46cuSI/Pz8VLFiRWfW\nCAAAAJSY6eCbk5OjcePGad26dfLw8FBBQYFatmwpf39/JSYmqkaNGnrmmWdcUSsAAABQbKZPdUhI\nSND27ds1f/58paWlyTAMW1tMTIw++eQTpxYIAAAAOIPp4Ltx40aNGTNGLVq0kJeXl11bUFCQjh07\n5rTiAAAAAGcxHXyzs7Pl7+9fZFtOTk6JCwIAAABcwXTwDQ0N1aZNm4ps++ijjxQREVHiogAAAABn\nM/3htuHDh2v48OHKyclRx44dZbFY9NVXX2nNmjVavny55s+f74o6AQAAgBIxHXxbt26tGTNm6F//\n+pdWr14tSZo0aZJuv/12TZ8+XU2bNnV6kQAAAEBJFesc344dO6pjx45KT09XVlaWKleurJCQEGfX\nBgAAADiNqT2+ly9fVteuXbVt2zZJUp06ddSoUSNCLwAAAMo8U8G3fPny+vnnn+XhYfozcQAAAECp\nMp1g27dvr/Xr17uiFgAAAMBlTO/xbdSokWbMmKEhQ4aoVatWql69uiwWi12f9u3bO61AAAAAwBlM\nB9/4+HhJ0tatW7V169ZC7RaLRfv27St5ZQAAAIATmQ6+H3zwgSvqkCQtWrRICxYsUGZmpqxWq8aN\nG6eoqKgi+77//vv697//rX379ikvL0/169fXiBEj1KJFC7t+69ev16xZs3Ts2DEFBwfrqaeeUkxM\njMteAwAAAMom03t8g4KCbvinONatW6dp06Zp5MiRSklJkdVq1aBBg3TmzJki++/cuVPNmzfX/Pnz\nlZKSosaNG2vo0KH67rvvbH127dqlMWPGqHfv3lq5cqXatm2rxx9/XAcOHChWjQAAALh5mV7xPX78\n+A37BAYGmi4kOTlZffr0Uffu3SVdvSnGRx99pOXLl2vw4MGF+j/33HN2X//jH//QBx98oC1btshq\ntUqS3n33XbVs2VJ///vfJUmjRo3SZ599pvfee08TJ040XSMAAABuXqaDb5s2bQp9mO23zO7xvXLl\nivbu3ashQ4bYrlksFjVr1ky7d+92aAzDMHTp0iVVrlzZdm337t220HtNixYtXLpdAwAAAGWT6eA7\nZ86cQtfOnz+vbdu2affu3RozZozpIrKyspSfn6/q1avbXffz81N6erpDYyQlJSk7O1udOnWyXTt1\n6lSRY2ZmZpquEQAAADc308G3Xbt2RV7v2bOnpk6dqs8//1ydO3cucWFmrF69WvPmzdNrr72matWq\nueQ5cnJyHOqXm5vrkudH8eTm5io7O9ul46PsYL7dC/PtXphv92J2vh3NaaaD7++JiYnRk08+aXr/\nbNWqVVWuXLlCK7GnT58utGL7W2vXrtULL7ygV199VU2aNLFr8/f3L9aYRTl8+LBD/RxdocYfIz09\nXRUqVHDp+Cg7mG/3wny7F+bbvbhqvp0afHft2iVvb2/Tj/Py8lJ4eLhSU1PVtm1bSVf37Kampiou\nLu66j1uzZo3GjRunmTNnqlWrVoXao6OjlZqaqn79+tmuffrpp4qOjjZdY3BwsHx9fW/YLzs7W9u2\nbTM9PlyjTp06CgsLc9n4zHfZwny7F+bbvTDf7sXsfOfk5Di0SGk6+L700kuFruXl5enQoUNKS0vT\nwIEDzQ4pSRowYIDi4+MVERGhyMhILVy4ULm5uerZs6ckKTExURkZGUpISJB0dXtDfHy8nn/+eUVG\nRtpWdn18fFSxYkVJUr9+/RQXF6e3335bMTExWrt2rfbu3Vvka7gRX19fh/7n4ePjY3psuI6Pj49L\nVwiY77KF+XYvzLd7Yb7di6vm23Tw3bJlS6Fr5cuX1+23364JEyaoV69exSqkc+fOysrK0qxZs5SZ\nmamwsDAlJSXZ9uxmZmbqxIkTtv7Lli1Tfn6+Jk+erMmTJ9uud+/eXVOnTpUkNWzYUImJiZo5c6Zm\nzpyp2rVra968eapXr16xagQAAMDNyynB11liY2MVGxtbZNu1MHvNu+++69CYHTp0UIcOHUpcGwAA\nAG5upu/cNmfOHP38889FtmVkZBR53BkAAABQ2kwH37lz5/5u8J07d26JiwIAAACczXTwNQzjum2n\nTp1SpUqVSlQQAAAA4AoO7fFds2aN1qxZI+nqrYQTEhJ066232vXJy8vTN998o0aNGjm/SgAAAKCE\nHAq+V65c0aVLlyRdXfHNycmRh4f9YrG3t7e6deumQYMGOb9KAAAAoIQcCr49evRQjx49JElxcXGa\nOHGiQkJCXFoYAAAA4EymjzNz9BgxAAAAoCwp1i2LCwoKtH37dqWnpysvL8+uzWKxaMCAAc6oDQAA\nAHAa08H31KlT6tu3r44cOSKLxWI75cFisdj6EHwBAABQ1pg+zmzatGmqWrWqtm7dKsMwtGzZMm3Z\nskWjRo1S7dq1tXHjRlfUCQAAAJSI6eC7c+dODRw4UP7+/rZrgYGBGjp0qLp166bJkyc7tUAAAADA\nGUwH3wsXLqhq1ary8PBQxYoVdfr0aVtbdHS00tLSnFogAAAA4Aymg2+NGjVstyyuV6+e/u///s/W\ntnnzZlWpUsV51QEAAABOYjr4tm7dWp9++qkkadiwYdq8ebOaNm2qli1bavHixerbt6/TiwQAAABK\nyvSpDk899ZTt7zExMVq8eLE++OAD5ebmqlmzZoqJiXFqgQAAAIAzFOsc31+LiopSVFSUM2oBAAAA\nXKbYwffjjz/W119/rZMnT2rYsGEKDAzUzp07VatWLd12223OrBEAAAAoMdPB98yZMxo+fLj27Nmj\nO+64QydOnNDDDz+swMBALV++XL6+vpowYYIragUAAACKzfSH26ZMmaKsrCytWbNGmzZtst25TZKa\nNm2q1NRUpxYIAAAAOIPp4Lt161Y9+eSTCgkJsbtNsSTdcccdtqPOAAAAgLLEdPDNz89XhQoVimw7\nf94p2nYAACAASURBVP68vLy8SlwUAAAA4Gymg29UVJSWL19eZNvatWvVqFGjEhcFAAAAOJvpD7c9\n+eST6tevn2JjY9WhQwdZLBZt3rxZb7zxhrZu3arFixe7ok4AAACgREyv+DZs2FDvvPOOLBaLEhIS\nZBiGXn/9dZ06dUrJyckKDw93RZ0AAABAiRTrHN+GDRvqvffeU25urs6dO6dKlSrJ19fX2bUBAAAA\nTuNQ8D179qwqVaokDw/7BWIfHx/5+Pi4pDD8v/buPC6qcv8D+GdkEcolRNxTlGvMqMiAO+GGKYla\nXM2lWDU1F9zSW1BadrVwQ01NStFwweuG4E1Nb2rupLmhklwvsoiBygCiNGzC8/ujF+fXBOoMzujY\n+bxfL14v5znPec73zAOHD8cz5xARERGRMel1qUOPHj1w5coV6bUQAnPmzEF2drbJCiMiIiIiMia9\ngu8fH1IBABUVFdi5cyfy8vJMUhQRERERkbEZ/OG2Sn8Ow0RERERE5qzGwZeIiIiI6Hmi910dUlNT\nYWFhAeD3p7dVtlWHtzQjIiIiInOjd/ANCwur0vaPf/wDCoVCei2EgEKhwNWrV41THRERERGRkegV\nfDdu3GjqOoiIiIiITEqv4Nu1a1dT10FEREREZFL8cBsRERERyQKDLxERERHJAoMvEREREckCgy8R\nERERyYJewTckJAQZGRkAgPj4eOTn55u0KCIiIiIiY9Mr+B4+fBh3794F8Pv9fDMzM01aFBERERGR\nsel1O7PGjRvj8OHDsLe3hxACOTk5yMrKemj/Zs2aGa1AIiIiIiJj0Cv4BgUFYeHChVizZg0UCgVC\nQkKq7fekT26LiYnBunXroNFooFQqMXv2bHTs2LHavjk5OViwYAGuXLmCGzduIDAwsMrT5eLi4hAW\nFgaFQgEhBACgdu3aSExMrFF9RERERPT80iv4BgcHo2/fvkhNTcXEiRMxa9YsODo6GrWQffv2YcGC\nBZg3bx5cXFywYcMGjB07Fvv370eDBg2q9C8tLYW9vT0mTZqEDRs2PHTcunXr4sCBA1Lw/eMjlomI\niIhIPvQKvgDQqlUrtGrVCn//+9/h7e2Nl19+2aiFREdHY+TIkfD19QUAfPbZZzhy5AhiY2Mxbty4\nKv2bN2+Ojz76CACwc+fOh46rUCiqDc5EREREJC8G384sPDxcCr3FxcW4c+cOiouLn6iIsrIyJCUl\noUePHlKbQqGAh4cHLl68+ERja7VaeHl5oU+fPpg0aRJSUlKeaDwiIiIiej7pfcb3j3788UesWrUK\nV69ela7rValUmDp1Knr37m3wePn5+SgvL0fDhg112u3t7ZGWllaTEgEArVu3xueffw5nZ2cUFhYi\nKioKo0aNwt69e9G4cWODxioqKtKr35P+EUDGVVxcDK1Wa9LxyXxwvuWF8y0vnG95MXS+9c1pBgff\ngwcPYsqUKXB1dUVoaCgaNmyInJwc7N+/HxMnTsSKFSvw2muvGTqsSajVaqjVap3XPj4+2LZtG6ZO\nnWrQWOnp6Xr1e5KgTsaXlpaGF154waTjk/ngfMsL51teON/yYqr5Njj4rlq1CoMGDcKSJUt02oOC\ngjBr1iysWrXK4OBrZ2cHCwsLaDQanfbc3NwqZ4GfhKWlJVQqlfQwDkM4OjrC1tb2sf20Wi1OnDhR\nk/LIBFq3bg2VSmWy8Tnf5oXzLS+cb3nhfMuLofNdVFSk10lKg4NvamoqZs2aVe2yN998E5MnTzZ0\nSFhZWaF9+/ZISEhAv379APx+a7SEhAQEBAQYPN7DVFRU4Nq1a+jTp4/B69ra2ur1l4eNjU0NKiNT\nsbGxMekZAs63eeF8ywvnW1443/Jiqvk2OPjWr18faWlp8PT0rLIsLS0N9evXr1EhwcHBCAsLQ4cO\nHaTbmRUXF2Po0KEAgIiICNy5cwcLFy6U1klOToYQAlqtFnl5eUhOToaVlRWcnJwAAF999RXUajVa\ntmyJ+/fvIyoqCtnZ2XjrrbdqVCMRERERPb8MDr4+Pj5YunQpbGxs4O3tjXr16uH+/fvYv38/li9f\njhEjRtSoEB8fH+Tn52PFihXQaDRQqVSIioqSbkWm0WiQnZ2ts46vr690X95ffvkFe/bsQbNmzXDo\n0CEAwL179zBnzhxoNBrUq1cPHTp0wNatW6VgTERERETyYXDwnTlzJrKysjBnzhx88sknsLS0xIMH\nDyCEwIABA/D+++/XuBg/Pz/4+flVuyw8PLxKW3Jy8iPHCwsLq/I0NyIiIiKSJ4ODr7W1NVauXIn/\n/ve/OHv2LO7du4f69eujU6dOcHZ2NkWNRERERERPrEb38QUAZ2dnBl0iIiIiem4Y/OQ2IiIiIqLn\nEYMvEREREckCgy8RERERyQKDLxERERHJgsHBNz4+Hvn5+dUuu3v3LuLj45+4KCIiIiIiYzM4+IaF\nhSEzM7PaZTdv3uR9c4mIiIjILBkcfIUQD1127949vPjii09UEBERERGRKeh1H9+jR4/i+PHj0uv1\n69ejYcOGOn1KSkrw008/QaVSGbdCIiIiIiIj0Cv4pqen4/DhwwAAhUKBs2fPwtraWqePlZUV2rZt\n+0SPLCYiIiIiMhW9gm9QUBCCgoIAAF5eXli9ejWUSqVJCyMiIiIiMiaDH1lceeaXiIiIiOh5YnDw\nBYCCggIcO3YMt27dQklJic4yhUKByZMnG6U4IiIiIiJjMTj4njhxAlOnToVWq4WNjQ2srKx0ljP4\nEhEREZE5Mjj4Lly4EC4uLvjiiy/QvHlzU9RERERERGR0Bt/HNzMzE+PHj2foJSIiIqLnisHBt127\ndsjOzjZFLUREREREJmNw8J07dy42bdqE48eP48GDB6aoiYiIiIjI6Ay+xnfkyJF48OABxo8fj1q1\naqF27do6yxUKBc6dO2e0AomIiIiIjMHg4DtmzBgoFApT1EJEREREZDIGB98pU6aYog4iIiIiIpMy\n+BrfP8rOzsb58+eh1WqNVQ8RERERkUnUKPhu27YNPXv2RN++feHn54e0tDQAwOTJk7FhwwajFkhE\nREREZAwGB9/o6GjMmzcPvr6+WL9+PYQQ0rKuXbti//79Ri2QiIiIiMgYDL7Gd/PmzZg0aRImTZqE\n8vJynWWtW7eWzv4SEREREZkTg8/43r59G25ubtUus7Ky4vW+RERERGSWDA6+zZo1w+XLl6tdlpiY\nCEdHxyetiYiIiIjI6AwOviNGjEBkZCR27NiBwsJCAMCDBw9w5MgRrFu3DiNHjjR6kURERERET8rg\na3zfffddZGdn45NPPsGnn34KAHj77bcBAO+88w78/PyMWyERERERkREYHHwBYPbs2QgKCsKpU6eQ\nn5+P+vXro0ePHrzMgYiIiIjMVo2CLwC8/PLLvKyBiIiIiJ4bBl/ju2/fPkRFRVW7bN26dfj++++f\nuCgiIiIiImMzOPiuWbMG1tbW1S6zsbHB2rVrn7goIiIiIiJjMzj4pqeno23bttUuc3Jy4gMsiIiI\niMgsGRx8a9eujdzc3GqX5eTkwNKyxpcNExERERGZjMHBt0uXLlizZk2VJ7RptVpERUWha9euRiuO\niIiIiMhYDD49O2PGDIwaNQr9+/eHt7c3GjVqhDt37uDAgQMoKyvD0qVLTVEnEREREdETMTj4Ojk5\nYefOnVixYgX+85//4O7du3jppZfg4eGBkJAQtGrVyhR1EhERERE9EYOCrxACBQUFaNq0KSIiIkxV\nExERERGR0Rl0jW9ZWRk8PDxw6tQpU9VDRERERGQSBgVfa2trNGnSBOXl5SYpJiYmBl5eXujYsSNG\njBiBS5cuPbRvTk4OZs6cCW9vb6hUKoSHh1fb7/vvv8fAgQPRsWNHvPHGGzh69KhJaiciIiIi82bw\nXR3eeecdREdHo6SkxKiF7Nu3DwsWLMDUqVMRFxcHpVKJsWPHIi8vr9r+paWlsLe3x6RJk6BSqart\nc/78ecyaNQsjRoxAfHw8+vXrh8mTJyMlJcWotRMRERGR+TP4w23Z2dlIS0tDnz590LVrVzRs2BAK\nhUKnz+zZsw0uJDo6GiNHjoSvry8A4LPPPsORI0cQGxuLcePGVenfvHlzfPTRRwCAnTt3Vjvmpk2b\n0LNnT4wePRoAMG3aNJw6dQqbN2/G3LlzDa6RiIiIiJ5fBgffH3/8UXpk8eXLl6ssVygUBgffsrIy\nJCUl4b333tMZx8PDAxcvXjS0RMnFixel0FvJ09MThw4dqvGYRERERPR8Mjj4Hj582OhF5Ofno7y8\nHA0bNtRpt7e3f6JHIOfk5FQ7pkajMXisoqIivfoVFxcbPDaZTnFxcZWHrRh7fDIfnG954XzLC+db\nXgydb31zGp8vrKf09HS9+j1JUCfjS0tLwwsvvGDS8cl8cL7lhfMtL5xveTHVfNco+Obl5WH9+vW4\nfPkybt26hVWrVqFt27bYsGEDXF1doVarDRrPzs4OFhYWVc7E5ubmVjljawgHBwejjeno6AhbW9vH\n9tNqtThx4oTB45NptG7d+qEffjQGzrd54XzLC+dbXjjf8mLofBcVFel1ktLg4JuUlITg4GDUrVsX\nXbp0wZkzZ1BaWgoAuH37NqKjo7F8+XKDxrSyskL79u2RkJCAfv36Afj9YRkJCQkICAgwtESJWq1G\nQkICAgMDpbaTJ08aHMwBwNbWVq+/PGxsbAwem0zHxsbGpGcION/mhfMtL5xveeF8y4up5tvg25mF\nh4dDrVbjwIED+PzzzyGEkJa5uroiMTGxRoUEBwdjx44diI+Px/Xr1/Hpp5+iuLgYQ4cOBQBERETg\nww8/1FknOTkZV69ehVarRV5eHpKTk3H9+nVpeWBgII4fP45vv/0WqampWLlyJZKSkuDv71+jGomI\niIjo+WXwGd/Lly9j5cqVsLKyqvIgiwYNGiA3N7dGhfj4+CA/Px8rVqyARqOBSqVCVFQUGjRoAADQ\naDTIzs7WWcfX11e6ldovv/yCPXv2oFmzZtJdG9zc3BAREYFly5Zh2bJlaNWqFVavXo2//e1vNaqR\niIiIiJ5fBgdfW1tbFBYWVrssKysLL730Uo2L8fPzg5+fX7XLqnsyW3Jy8mPH9Pb2hre3d41rIiIi\nIqK/BoMvdfD09ERkZCTy8/OlNoVCgeLiYmzcuBG9e/c2aoFERERERMZg8Bnff/zjH3j77bfh7e2N\nbt26QaFQYPny5UhJSYFCocD06dNNUScRERER0RMx+Ixv48aNER8fD39/f+Tk5KBly5a4e/cuhgwZ\ngtjYWNjb25uiTiIiIiKiJ1Kj+/jWq1cPU6dOxdSpU41dDxERERGRSegdfFNSUrB161bcvHkTjRo1\nwuuvvw4PDw9T1kZEREREZDR6Bd+zZ89i9OjRePDgAezs7FBQUIAdO3bgk08+wdtvv23qGomIiIiI\nnphe1/iuXLkSTk5OOHz4ME6dOoXTp0/jtddeM/gJbUREREREz4pewffatWuYNGkSmjZtCgCoU6cO\nPvzwQxQUFFR5qAQRERERkTnSK/jm5+ejSZMmOm2VIfiP9/MlIiIiIjJXBt/OjIiIiIjoeaT3XR2C\ngoKgUCiqtPv5+em0KxQKnDt3zjjVEREREREZiV7BNyQkxNR1EBERERGZFIMvEREREckCr/ElIiIi\nIllg8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIi\nWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZ\nYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg\n8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZMKvgGxMTAy8vL3Ts2BEjRozA\npUuXHtn/9OnTGDp0KFxcXODt7Y24uDid5XFxcVAqlVCpVFAqlVAqlXB1dTXlLhARERGRmbJ81gVU\n2rdvHxYsWIB58+bBxcUFGzZswNixY7F//340aNCgSv+bN29iwoQJePvtt7FkyRIkJCRg9uzZaNSo\nEV599VWpX926dXHgwAEIIQAACoXiqe0TEREREZkPsznjGx0djZEjR8LX1xdOTk747LPPYGNjg9jY\n2Gr7/+tf/0KLFi3wwQcfoE2bNvDz84O3tzeio6N1+ikUCjRo0AD29vawt7evNkQTERER0V+fWQTf\nsrIyJCUloUePHlKbQqGAh4cHLl68WO06iYmJ8PDw0Gnz9PSs0l+r1cLLywt9+vTBpEmTkJKSYvwd\nICIiIiKzZxbBNz8/H+Xl5WjYsKFOu729PTQaTbXr5OTkwN7evkr/wsJClJaWAgBat26Nzz//HKtX\nr8aSJUtQUVGBUaNG4fbt26bZESIiIiIyW2Zzja8pqNVqqNVqndc+Pj7Ytm0bpk6datBYRUVFevUr\nLi42aFwyreLiYmi1WpOOT+aD8y0vnG954XzLi6HzrW9OM4vga2dnBwsLiypnd3Nzc6ucBa7k4OCA\n3NzcKv3r1KkDa2vratextLSESqVCRkaGwTWmp6fr1S8tLc3gscl00tLS8MILL5h0fDIfnG954XzL\nC+dbXkw132YRfK2srNC+fXskJCSgX79+AAAhBBISEhAQEFDtOmq1GseOHdNpO3nypM4Z3j+rqKjA\ntWvX0KdPH4NrdHR0hK2t7WP7abVanDhxwuDxyTRat24NlUplsvE53+aF8y0vnG954XzLi6HzXVRU\npNdJSrMIvgAQHByMsLAwdOjQQbqdWXFxMYYOHQoAiIiIwJ07d7Bw4UIAwKhRoxATE4PFixdj2LBh\nSEhIwIEDB7BmzRppzK+++gpqtRotW7bE/fv3ERUVhezsbLz11lsG12dra6vXXx42NjYGj02mY2Nj\nY9IzBJxv88L5lhfOt7xwvuXFVPNtNsHXx8cH+fn5WLFiBTQaDVQqFaKioqTbj2k0GmRnZ0v9W7Ro\ngTVr1iA8PBybNm1CkyZNMH/+fJ07Pdy7dw9z5syBRqNBvXr10KFDB2zduhVOTk5Pff+IiIiI6Nky\nm+ALAH5+fvDz86t2WXh4eJW2Ll26YNeuXQ8dLywsDGFhYUarj4iIiIieX2ZxOzMiIiIiIlNj8CUi\nIiIiWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIiWWDwJSIi\nIiJZYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZYPAlIiIi\nIllg8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIi\nWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZ\nYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg\n8CUiIiIiWWDwJSIiIiJZYPAlIiIiIllg8CUiIiIiWTCr4BsTEwMvLy907NgRI0aMwKVLlx7Z//Tp\n0xg6dChcXFzg7e2NuLi4Kn2+//57DBw4EB07dsQbb7yBo0ePmqp8IiIiIjJjZhN89+3bhwULFmDq\n1KmIi4uDUqnE2LFjkZeXV23/mzdvYsKECejevTt2796NwMBAzJ49GydPnpT6nD9/HrNmzcKIESMQ\nHx+Pfv36YfLkyUhJSXlau0VEREREZsJsgm90dDRGjhwJX19fODk54bPPPoONjQ1iY2Or7f+vf/0L\nLVq0wAcffIA2bdrAz88P3t7eiI6Olvps2rQJPXv2xOjRo9GmTRtMmzYN7du3x+bNm5/SXhERERGR\nuTCL4FtWVoakpCT06NFDalMoFPDw8MDFixerXScxMREeHh46bZ6enjr9L168+Ng+RERERCQPls+6\nAADIz89HeXk5GjZsqNNub2+PtLS0atfJycmBvb19lf6FhYUoLS2FtbU1cnJyqh1To9HoXVtFRQUA\n4O7duygqKnps/5KSEtSqVQslJSV6b4NMo3IecnNzTbYNzrf54HzLC+dbXjjf8lKT+a6ct8rc9jBm\nEXzNWeUbmZ2drVd/W1tbjBs3zpQlkYHS09NNNjbn2/xwvuWF8y0vnG95qcl8l5SUoE6dOg9dbhbB\n187ODhYWFlXOxObm5lY5Y1vJwcGhyl8Cubm5qFOnDqytraU+hoxZnfr168PR0RG1a9dGrVpmcWUI\nEREREf1BRUUFSkpKUL9+/Uf2M4vga2Vlhfbt2yMhIQH9+vUDAAghkJCQgICAgGrXUavVOHbsmE7b\nyZMnoVardfokJCQgMDDwoX0ex9LSssolFURERERkXh51preS2ZzCDA4Oxo4dOxAfH4/r16/j008/\n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\nRERERCQL/wddFbV3vROdKgAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(8,6))\n", + "sns.set_style(\"whitegrid\")\n", + "sns.barplot(x=\"composer\", y=\"percent_nonzero\",\n", + " data=plot_df_2,\n", + " color=\"gray\")\n", + "plt.xlabel(\"Composer\")\n", + "plt.ylabel(\"Percent of Features that are Non-Zero\")\n", + "plt.title(\"Nonzero Features by Composer\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "composer = [\"mozart\", \"bach\", \"schubert\", \"chopin\", \"tchaikovsky\"]\n", + "count_nonzero = []\n", + "for i, comp in enumerate(composer):\n", + " count_nonzero.append(X[y==i].sum(axis=0).astype(bool).sum())\n", + "plot_df_3 = pd.DataFrame({\n", + " \"composer\": composer,\n", + " \"count_nonzero\": count_nonzero\n", + "})" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/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", + "
composercount_nonzero
0mozart5206
1bach6667
2schubert5612
3chopin5673
4tchaikovsky6012
\n", + "
" + ], + "text/plain": [ + " composer count_nonzero\n", + "0 mozart 5206\n", + "1 bach 6667\n", + "2 schubert 5612\n", + "3 chopin 5673\n", + "4 tchaikovsky 6012" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "plot_df_3" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "7616" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X.sum(axis=0).astype(bool).sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X = X[:,X.sum(axis=0).nonzero()[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n9nvXr1/XZ599pp49e6pu3br24zVr1lTfvn118OBBXb169Y7rGjBggN566y37n5UrV9pn0Y8fP67v\nv/9effr00aVLl+x/srOz1alTJ4elNs4887Jwu3HbsWOHunbtqqKiIoeaH374YV2+fFlfffWVJMnb\n21vnz5/XkSNHyrw2AK6HJR8AXF7Lli315z//WdeuXdOJEye0Y8cOvf322/rNb36jv//97w5LAho0\naFDs+4GBgcrLy1NGRob8/PyUn5+vJUuWaPPmzTp//rw9aFssFl25cqXY928Nqjf97ne/0+TJk/XY\nY4/poYce0qOPPqr/+Z//Ub169e7oHh9++GH5+/tr69at6tixo2w2m95//3117979J5dmZGRkKDc3\nV4GBgcXagoKCdP36df344493vGwiMDBQnTp1KrHt9OnTkm5sxVcSNzc3XblyRdWrV3f6mZeF/x63\njIwMXb58We+9957Wr19frL/FYrH/cPOll17S3r179dxzz6lBgwZ6+OGH1bdvX4WHh5dLrQDMjUAN\n4J5RqVIltWzZUi1btlRgYKAmT56s7du3a/To0U6dZ8aMGfr73/+uyMhItW7d2r7rxfjx4x22ubup\natWqxY49+eSTateunXbs2KE9e/ZoxYoVWr58uRYtWqQuXbo4fW9ubm7q27ev/va3v2natGk6cOCA\nLly4oKefftrpc1WUm6F40qRJatasWYl9bv5jwNln7ozbff+/x+1mv6efflr9+vUr8Ts37yMoKEjb\nt2/XP//5T/373//WRx99pHfeeUdjxozRmDFjDNULwPUQqAHck26+kOTixYsOx2/Omt7q1KlTqlq1\nqn1XkI8++kjPPPOMfv/739v7FBQUOD1T6u/vr4EDB2rgwIHKyMjQM888oyVLltw2UP/cdnD9+vXT\nqlWr9M9//lO7du2Sn5+fOnfu/JPf8fX1lYeHh06dOlWs7eTJk3Jzc1Pt2rVLf1NOuDkb7+npedtZ\n7JtK+8x/6hn5+PgU619YWFjsfwO34+vrK09PTxUVFf1svdKNQP7kk0/qySef1LVr1zRmzBgtWbJE\no0aNcljCAuDexxpqAC7t888/L/H4p59+Kklq2LChw/GkpCSHNbmpqan65JNP1KVLF3tYc3NzKzar\nuXr1ahUVFZWqpuvXrys7O9vhmK+vr2rVqqWCgoLbfu/mPsi3C+7NmjVT06ZN9d577+mjjz5Snz59\n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\n0tLk6+vr0G61WuXj42PvY1a5ubnKycm522WYXm5ursPfMA/GxrwYG3NjfMyLsTGv/Pz8Cr2e04E6\nIyNDzz//fLmEaUmKi4vTd999p3fffbdczu+KbDabTp06JavVerdLcRmnT5++2yXgNhgb82JszI3x\nMS/GBk4H6i5duigpKclhaUVZmTFjhv71r38pMTFRtWrVsh/39/eXzWZTWlqawyx1enq6mjdvbu9T\nWFio7Oxsh1nq9PR0+3f8/f2VkZHhcM2ioiJlZWWZ+g2PFotFDRs2tN8rbi83N1enT59WYGCgPDw8\n7nY5uAVjY16MjbkxPubF2JhXZmamUlNTK+x6Tgfq6dOna/z48crLy1PHjh3l7e1drM9DDz3kdCEz\nZszQxx9/rLVr1yogIMChrV69evL399e+ffsUHBwsScrOzlZycrIGDRokSWrZsqWsVqv27t2rnj17\nSpJSUlJ07tw5hYWFSZJat26ty5cv69ixY/Z11Hv37pXNZlNoaKjTNVckDw8PtvZzAs/LvBgb82Js\nzI3xMS/GxnwqehmO04H66tWrys3N1dKlS7Vs2TKHNpvNJovFouPHjzt1zri4OL3//vtavHixPDw8\n7OuZq1evripVqkiSIiMjtXjxYtWvX19169bVggULVLt2bXXv3l3SjR8pPvvss0pISJC3t7c8PT01\nc+ZMhYeHKyQkRJIUFBSkzp07KyYmRnFxcSosLFR8fLz69OnDDh8AAAC4I04H6okTJyo1NVVTp05V\nYGBgsV0+7sS6detksVg0dOhQh+MJCQnq16+fJGnkyJHKy8tTbGysrly5orZt22r58uVyd3e3958y\nZYqsVqvGjRvn8GKXW82fP18zZszQ8OHD5ebmpscff1zR0dGG7wEAAAD3J6cD9eHDhzV//vwy3WLu\nxIkTpeo3duzYYi9quZW7u7umTp2qqVOn3raPt7e35s2b53SNAAAAQEmcflNigwYNdO3atfKoBQAA\nAHA5TgfqyZMna8mSJTp58mR51AMAAAC4FKeXfMyePVsXL17UU089pVq1ahXbj9pisWjLli1lViAA\nAABgZk4H6oceekgWi6U8agEAAABcjtOB+vXXXy+POgAAAACX5PQaagAAAAD/x+kZ6smTJ/9sn4SE\nhDsqBgAAAHA1Tgfqkt6CePnyZaWmpuqBBx7Qgw8+WCaFAQAAAK7A6UD997//vcTjJ0+e1KuvvqqJ\n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\nUmmVcQGAqKgolR/anDvaV9fYlJSUcO7oSHh4OE6fPo3s7GyYmJjA3t4eISEhKrt2NKU5w4SaiIiI\niEgNXENNRERERKQGJtRERERERGpgQk1EREREpAYm1EREREREamBCTURERESkBibURERERERqYEJN\nRERERKQGJtRERERERGpgQk1EREREpAYm1ETUqE6cOIHg4GD06dMHPXr0gJ+fHxYuXIjbt2/rLKZr\n164hPj4eJSUlGqvz/v37GD9+PNzc3CCTyXDt2rVqywUGBkIqlSIuLq7KOX9/f4SFhWksprqEhYVB\nKpXW+vjll1+0Fk919u3bV21cMpkMERERynIDBgzA0qVLdReoGgoLCxEfH4+srCxdh0JEDdRK1wEQ\nUfO1cuVKJCQkYOjQoVi6dClMTU1x7949pKSkYMaMGdi7d69O4rp69SrWrVuHsWPHonXr1hqpc+3a\ntXjw4AHi4+NhbGwMGxubGssKgoDt27djwoQJMDY21kj7DTF58mSMGTOmyvG8vDx88sknsLGxgZWV\nlQ4iUyUIAhITE6u8V+bm5jqKSLMKCgoQHx8POzs7dOvWTdfhEFEDMKEmokZx6tQpJCQkYMqUKZgy\nZYryeK9evfCnP/0Jp06d0llsoiiq/FcTbt68iV69esHT07POss7Ozvj555+xfft2fPTRRxqL4VVZ\nW1vD2tq6yvGpU6dCEASsXr0arVqp92OipKREI19aHBwc0L59e7XraYo0+TkkIt3gkg8iahSbN2+G\nhYVFjQmjr6+v8t8KhQJRUVHw8fGBs7Mz/P39cfz4cZXygYGBmDRpksqxa9euQSqV4syZM8pjUqkU\nCQkJiI+Ph5eXF/r27YuwsDA8f/4cwG9LCObPnw8A8PDwgFQqhZ+fX619OXPmDEaPHg0XFxf07dsX\n8+fPR35+PgDgwYMHkEqluHLlCvbv31+v+kxNTTF69Ghs27YNRUVFDW67cvsHDx5EZGQk3nnnHXh7\neyM6Ohrl5eW11l2df/7znzh27BgWLlyILl26qJzLyMjA+PHj4erqil69emHmzJn49ddfq8Syb98+\nfPrpp+jTpw9GjhypUveQIUPg5OSEAQMG4PPPP2/UZLK+8R44cACLFi1C79694enpia1btwIAUlNT\nMWTIELi7u2Pq1Kl4+vSpSv2FhYWIiIiAt7c3nJycEBAQgO+//16lTMXn9ujRoxgyZAhcXV0xfvx4\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(8,6))\n", + "sns.set_style(\"whitegrid\")\n", + "plt.hist(X.astype(bool).sum(axis=0), color=\"gray\", bins=20)\n", + "plt.ylabel(\"Number of Features\")\n", + "plt.xlabel(\"Count of Non-Zero Elements\")\n", + "plt.title(\"Sparsity of Features\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from midi_ml.models.decomposition import PrincipalComponents" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "pc = PrincipalComponents(X)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "pc.fit()" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "681" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.where(cumulative_var_explained > 0.95)[0][0]" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.5/site-packages/numpy/core/numeric.py:474: ComplexWarning: Casting complex values to real discards the imaginary part\n", + " return array(a, dtype, copy=False, order=order)\n" + ] + }, + { + "data": { + "image/png": "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\nD8dLL72E3377Tex53LdvH9599134+vrirbfeQkFBAbZv347Lly/jwIEDMDY2VtjHvr6+WLZsGWJi\nYhAeHg4XFxfMmDFDfN33338fBw4cwNSpU/H8888jIyMDO3fuxLVr17Bnzx65r6Afdlz0798fs2bN\nwg8//IDXXnsNPXr0AAC4ubmhsLAQL7/8MiwtLTFv3jyYmJggMzMTR48eVern+DDjxo1DWFgYbt26\nJR6rAHD69GmUlJRg/PjxYltaWhpOnTqF0aNHw9HREfn5+dizZw9mzZqFyMhIhXH33377LfT19fHy\nyy+juroaOjo6jX6GDh06hNraWsycORPm5ua4cuUKduzYgdzcXGzYsEFcTyKRoL6+HrNnz0b//v2x\nbNkynD17Ftu2bYOLiwueeuopcd23334bf/zxB0JDQzF9+nTU1dXh0qVLiIuLg6enp1jfpk2bMG7c\nODz99NMoKCjAjh07kJCQgP3798PIyOih+6+srAxFRUVybRKJRPw8L1y4EKdOncLy5cvx+++/w8DA\nAKdOncL+/fuxZMkS9OzZU+65mzZtgo6ODubNm4e8vDxs374dc+bMwb59+x7Yo75z506MHj1a/OxH\nRETg9ddfx5YtWzBkyBC52hqzevVqWFhY4I033kB6ejp27NgBfX19rF+/Xlxn3759eO+99xASEoIl\nS5agqqoKu3fvxsyZM3HgwAHY2dkBAKKjo7F48WL07t0bb731FoqKivDOO++Iy4lalUBEon379gke\nHh7CuXPnhMLCQiE7O1s4ePCgMGjQIMHPz0/IyckR13N3dxeee+45QSaTNbqNzMxMsS00NFTw8PAQ\nYmNjxbaCggLB29tbWLdundj29ddfCx4eHsKxY8earDEjI0Nwd3cX9u/fL7YtW7ZM8PDwENauXSu3\n7rx58wRvb2+hqKhIbKupqZFbp76+Xhg3bpzw4osvyrWHhoYKy5Yta7IOQRCEhQsXCh4eHkJZWdkD\n12swceJEITg4WCgtLRXbrl27Jnh6esq91saNGwV3d3dh5cqVYptUKhVCQkIET09PYevWrWJ7aWmp\n4OvrK/f8CxcuCO7u7kJISIhQWVkpth86dEhwd3cXdu7cKQiCINTV1QmDBw8WJkyYILdfTp06Jbi7\nuwsbN24U2xr28X//+1+59zR58mRh6tSp4uNLly4J7u7uwsGDB+XW+/PPPwV3d3chIiJCbGvucXH4\n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\n1atX49SpU9i7dy/mzp2rsH5cXBwcHR0xc+ZMAICDgwOmT5+OrVu3Kv3aRKQaZWVliIuLw+XLl1FY\nWCi3zNTUFD4+PvDx8YGNjY2GKiQiIpLXrDA8e/Zs8ZfX7NmzHxqGlVVXV4d//vkH8+bNE9skEgkG\nDx6MK1euNPocPz8/fPnll4iOjkZISAjy8/Nx+PBhhISEqLQ2InowmUyGGzdu4PLly7h+/brcMAg9\nPT306dMHvr6+cHFxUfn/HURERI+qWWF44cKF4v3XX39d5UUUFRVBKpXC2tpart3KygrJycmNPqdf\nv35Yv349Fi9ejNraWtTX12PEiBH44IMPlH79mpoaVFZWtqh2alpVVZXcv6R6mtzHRUVFuHr1KhIS\nEhSmQ3NycoK3tzd69+4tXg2uvR4HPI7Vi/tX/biP1Yv7V/3uH2qnam1mzLCybt68ibVr1+L1119H\ncHAw8vLysG7dOnzwwQdYu3atUtvKyspCVlaWmiqllJQUTZfQ4bXWPpZKpcjOzkZaWhoKCgrklunr\n68PR0RFOTk7iOOCbN2+2Sl2tgcexenH/qh/3sXpx/7ZfLQrDqamp2LdvH1JSUhpN65s3b1ZqexYW\nFtDW1kZ+fr5ce0FBgUJvcYOwsDD069cPL730EgCgd+/eWLlyJWbOnInFixc3+bzG2NvbcwYKNaiq\nqkJKSgq6d+8OAwMDTZfTIbXWPi4oKMCVK1fw77//yl0VTiKRoEePHvD29kaPHj065HzAPI7Vi/tX\n/biP1Yv7V/2Ki4vV2mmpdBiOj4/HrFmz0K1bN6SkpMDd3R1lZWXIzMyEnZ0dnJ2dlS5CV1cXffv2\nxblz5zBy5EgAd89GP3fuHGbNmtXoc6qrq8WvXxtoaWlBIpHIjVlsDn19fRgaGipdNzWPgYEB96+a\nqWMfS6VSXLt2DX/99ZdCj4eFhQX8/f3h6+vb6FUoOyIex+rF/at+3Mfqxf2rPuoegqJ0GF6/fj2e\neOIJrF27Fn379hX//fvvv/HWW281OvNDc7z44otYvnw5vLy8xKnVqqurMWXKFADAhg0bkJubi3Xr\n1gEAQkND8f7776N///4YMmQIcnNz8cknn8DX15dnqhM9gpKSEsTGxuLy5csoLy8X27W0tNCnTx/0\n69cP3bt358lwRETUISgdhpOSkvDKK69AS0sLwP8GNffr1w8LFy7Ehg0bMHToUKULefLJJ1FUVIRv\n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\n8SKcnJyKmqlEyZkZrlatGhQKhcxpiIiIiMiQJJfhvn374quvvsL27duRnJwMIPtDZr///jvWj6zl\nMgAAIABJREFUrl2Lfv36GTykXIQQujLMJRJEREREpkfymuH3338f0dHR+PzzzzFjxgwAwIABAwAA\nAwcOREBAgGETyigpKQmpqakAWIaJiIiITFGhriARFBSEIUOG4MSJE4iPj0fFihXh6elpckskXr0M\nM8swERERkemRXIaTk5NhY2OD2rVrm9SSiLzkLJGwsLDgZZiJiIiITJDkNcNt2rTBf//7X/zyyy9I\nT083RqYS49mzZwCyL8OsVCplTkNEREREhia5DE+aNAlPnz7FmDFj4OXlhalTpyI8PBxardYY+WSV\nU4YdHR1lTkJERERExiB5mcSgQYMwaNAgPHr0CGFhYThw4AB27doFBwcHdOnSBW+//TaaNWtmjKzF\nSqvV6i7DXLlyZZnTEBEREZExSJ4ZzlGjRg18+OGH2LVrF3766ScMGDAAP//8MwYNGmTIfLJJSEhA\nZmYmAHC9MBEREZGJKnQZzhEbG4vw8HAcP34cz549Q/ny5Q2RS3Y5SyQAlmEiIiIiU1WordWeP3+O\nQ4cO4cCBAzh9+jRUKhXefPNNhIaGol27dobOKIucMmxhYQF7e3uZ0xARERGRMUguw5988gnCw8Mh\nhECbNm0wf/58+Pn5mcyMcI6c9cIODg7cSYKIiIjIREkuwy9evEBQUBA6d+6MSpUqGSNTiZAzM8wl\nEkRERESmS3IZ3rhxozFylChCCL09homIiIjINBWoDEdGRsLZ2Rlly5ZFZGTkv57v6upa5GBySkxM\nREZGBgDODBMRERGZsgKV4V69emHbtm3w8PBAr169oFAo8jxPCAGFQoGrV68aNGRx404SREREROah\nQGX4u+++g7OzMwDg22+/zbcMm4q4uDjdn7mTBBEREZHpKlAZbtmype7PrVq1MlqYkiKnDFeoUAEq\nlUrmNERERERkLJIvutGoUSNcunQpz9uuXLmCRo0aFTmU3OLj4wEAdnZ2MichIiIiImOSXIaFEPne\nlpWVZRJ78ubMDLMMExEREZm2Ai2TePbsGZ4+far7+vbt27lKb1paGnbu3IkaNWoYNmEx02q1uplh\nrhcmIiIiMm0FKsNbt25FaGgoFAoFFAoFpk6dmuscIQSUSiVmzJhh8JDF6fnz59BqtQBYhomIiIhM\nXYHK8LvvvouWLVtCCIEhQ4bg888/R/369fXOUalUcHJyKvVLC3JmhQEukyAiIiIydQUqwzVr1kTN\nmjUBZG+z1rhxY9jY2Bg1mFy4rRoRERGR+ZB8OeZXt1kzRTll2NraGmXLlpU5DREREREZk+QyDAC7\nd+/G1q1bERUVhbS0tFy3//nnn0UOJhd+eI6IiIjIfEjeWm3Pnj347LPP0KBBA8THx+Ott95C586d\noVKp4ODggGHDhhkjZ7HJmRlmGSYiIiIyfZLL8Pr16zFixAjdrhEDBw7E/PnzcfjwYdjb26N8+fIG\nD1lchBC84AYRERGRGZFchu/evYtmzZpBqVRCqVQiOTkZAGBjY4MPP/wQGzduNHjI4pKSkoL09HQA\nLMNERERE5kByGbaxscHLly8BAFWrVsXNmzd1t2VlZeltTVbaJCYm6v5cqVIlGZMQERERUXGQ/AE6\nNzc3/P333/Dx8YGvry9WrlwJIQQsLS2xevVqNG3a1Bg5i8WrZbhChQoyJiEiIiKi4iC5DH/88cd4\n+PAhAGDMmDF4+PAh5s2bB61WC3d3d8yePdvgIYvL8+fPdX9mGSYiIiIyfZLLcNOmTXWzvxUqVMBX\nX32F9PR0pKenl/oLceSU4fLly8PSslC7zhERERFRKWKQxlemTBmUKVPGEA8lq5wyzFlhIiIiIvNQ\noDI8d+5cSQ8aFBRUqDByYxkmIiIiMi8FKsO//fZbgR9QoVCU2jKc8wE6lmEiIiIi82DwMlxaCSGQ\nlJQEAKhYsaLMaYiIiIioOEjeZ9hUpaSkQKvVAgBsbW1lTkNERERExUHyB+h27979r+f4+/sXKoyc\ncq6kB6DU74pBRERERAUjuQxPmTIlz+MKhUL358KW4c2bN2Pt2rWIiYmBWq1GUFAQPDw88jz3l19+\nwZYtW3D16lWkp6ejQYMGGDVqFLy9vQv13CzDREREROZHchk+c+ZMrmOJiYk4fvw4Nm/ejEWLFhUq\nyIEDBxAcHIw5c+bA3d0d3377LT744AMcPHgQ9vb2eeZo06YNxo8fjwoVKmDnzp345JNPsGPHDqjV\nasnPzzJMREREZH4kl+G81tPa2tqif//+SEtLw8KFC7FmzRrJQTZs2IB+/frpZpVnzZqF33//HTt3\n7sSHH36Y6/xp06bpfT1u3DgcPnwYv/32W5HKsIWFBaytrSXfn4iIiIhKH4N+gK5BgwY4d+6c5Ptl\nZGQgMjISnp6eumMKhQJeXl64cOFCgR5DCIEXL14UeieInDJsY2Ojt+SDiIiIiEyXwa45nJqaim3b\ntsHR0VHyfePj45GVlYXKlSvrHXdwcMCdO3cK9Bhr1qxBSkoK3nrrLcnPn5aWhoSEBABAuXLlkJKS\nIvkxKLfU1FS9/yXD4xgbH8fYuDi+xscxNi6Or/GlpaUZ9fEll+Hu3bvnOpaRkYEnT57g5cuXWLBg\ngUGCSbFv3z6sWrUKX331VZ7ri/9NdHQ0nj17BiB7hvnq1auGjmjWoqKi5I5g8jjGxscxNi6Or/Fx\njI2L41t6SS7Drq6uuZYRlClTBtWqVUOnTp3g7OwsOYSdnR2USiViYmL0jsfGxuaaLf6nsLAwfP75\n51i+fDlat24t+bkBoHr16hBCAACqVq2KRo0aFepxSF9qaiqioqLg5OTEddhGwjE2Po6xcXF8jY9j\nbFwcX+NLSEhAdHS00R5fchkODg42eAiVSgVXV1dERETAz88PQPYMbUREBAYPHpzv/fbv34+goCAs\nXboU7dq1K/TzW1lZ6ZZGVKpUCeXKlSv0Y1Fu1tbWHFMj4xgbH8fYuDi+xscxNi6Or/EYewmKwdYM\nF1VgYCCmTp0KNzc33dZqL1++RM+ePQEAixcvxtOnT3XLMPbt24epU6di+vTpcHd3180qly1bVvLW\naJmZmXj58iUAbqtGREREZE4KVYbDwsJw8OBBREdH51rUrFAosHfvXsmP2bVrV8THxyMkJAQxMTFo\n1KgR1qxZo1sDHBMTozdFvm3bNmRlZWH27NmYPXu27ri/vz/mz58v6blzijDAMkxERERkTiSX4SVL\nlmD16tVwdXWFk5MTypQpY7AwAQEBCAgIyPO2fxbcjRs3Gux5WYaJiIiIzJPkMrxz506MGTMGI0aM\nMEYeWby6FoVlmIiIiMh8FOqiG02aNDF0Dlm9uq8wyzARERGR+ZBchnv37o39+/cbI4tscmaGrays\noFKpZE5DRERERMVF8jKJsWPH4osvvkD//v3h6emJChUq6N2uUCgQGBhoqHzFIqcMc1aYiIiIyLxI\nLsMnT57Erl278OLFC1y4cCHX7aWxDHNbNSIiIiLzJLkMz5o1C25ubggKCoKTk5NJLCvgzDARERGR\neZK8Zvjx48f46KOP0KBBA5MowgB0eyXzyjFERERE5kVyGW7evDnu3LljjCyyYRkmIiIiMk+Sl0mM\nGzcOU6ZMgUqlgpeXF2xtbXOdU6lSJYOEKy7p6ekAWIaJiIiIzI3kMty7d28AwIwZM6BQKPI85+rV\nq0VLJROWYSIiIiLzIrkMz5s3L98SXNpZW1vLHYGIiIiIipHkMtyzZ09j5CgRODNMREREZF4KdTlm\nU8UyTERERGReJM8M+/r6/usyicOHDxc6kJxYhomIiIjMi+Qy7Ofnl6sMP3/+HKdPnwYAdOzY0TDJ\niplKpTKZfZOJiIiIqGAkl+Hp06fneTw9PR0jR45ErVq1ihxKDpwVJiIiIjI/BlszXKZMGQwaNAhr\n16411EMWK+4kQURERGR+DPoBuvj4eLx48cKQD1lsWIaJiIiIzI/kZRI///xzrmMZGRm4desWNm/e\njNatWxskWHErW7as3BGIiIiIqJhJLsNjxozJ+4EsLdGpUycEBQUVOZQcrKys5I5ARERERMVMchnO\na9s0KysrODg4lOor03FmmIiIiMj8SC7DNWvWNEYO2bEMExEREZmfAn2ALioqCj179sTRo0fzPefo\n0aPo2bMn7t+/b7BwxYllmIiIiMj8FKgMr1u3DuXKlYOPj0++5/j4+KB8+fKldms1rhkmIiIiMj8F\nKsPh4eHo1avXv57Xq1cvHD9+vMih5MCZYSIiIiLzU6Ay/OTJE9SuXftfz6tVqxaePHlS5FByYBkm\nIiIiMj8FKsPly5dHfHz8v56XkJBQai9rzDJMREREZH4KVIbd3Nxw4MCBfz0vLCwMbm5uRQ4lB5Zh\nIiIiIvNToDI8cOBA/PTTTwgNDUVWVlau27VaLUJDQ3Hw4EEEBAQYPGRx4AfoiIiIiMxPgfYZ9vPz\nwwcffIDQ0FD88MMP8PT0RI0aNQAA0dHRiIiIQExMDN5//334+voaNbCxsAwTERERmZ8CX3Rj4sSJ\naNGiBdatW4dDhw4hPT0dQHaJbNasGebOnfvarddKMpVKBQuLAk2SExEREZEJkXQFOh8fH/j4+CAr\nKwsJCQkAgEqVKkGpVBolXHEpU6aM3BGIiIiISAaSL8cMAEqlEg4ODobOIhtLy0INAxERERGVclwb\nAJZhIiIiInPFMgyWYSIiIiJzxTIMlPo1z0RERERUOCzD4MwwERERkbliGQbLMBEREZG5YhkGyzAR\nERGRuWIZBsswERERkbliGQbLMBEREZG5YhkGyzARERGRuWIZBsswERERkbliGQb3GSYiIiIyVyzD\nAFQqldwRiIiIiEgGLMPgMgkiIiIic8UyDJZhIiIiInPFMgyWYSIiIiJzxTIMfoCOiIiIyFyxDIMz\nw0RERETmimUYLMNERERE5oplGCzDREREROaKZRgsw0RERETmimUYgEKhkDsCEREREcmAZZiIiIiI\nzBbLMBERERGZLZZhIiIiIjJbLMNEREREZLZYhomIiIjIbLEMExEREZHZYhkmIiIiIrPFMkxERERE\nZotlmIiIiIjMFsswEREREZktlmEiIiIiMlssw0RERERktliGiYiIiMhssQwTERERkdliGSYiIiIi\ns8UyTERERERmi2WYiIiIiMwWyzARERERmS2WYSIiIiIyWyzDRERERGS2WIaJiIiIyGyxDBMRERGR\n2WIZJiIiIiKzxTJMRERERGaLZZiIiIiIzBbLMBERERGZLZZhIiIiIjJbLMNEREREZLZKVBnevHkz\nfH194eHhgb59++LSpUuvPf/UqVPo2bMn3N3d0blzZ+zatauYkhIRERGRKSgxZfjAgQMIDg7GmDFj\nsGvXLqjVanzwwQeIi4vL8/wHDx7gk08+QevWrbFnzx689957CAoKQnh4eDEnJyIiIqLSqsSU4Q0b\nNqBfv37w9/eHs7MzZs2ahbJly2Lnzp15nr9lyxbUqlULn376KerVq4eAgAB07twZGzZsKN7gRERE\nRFRqlYgynJGRgcjISHh6euqOKRQKeHl54cKFC3ne5+LFi/Dy8tI75u3tne/5RERERET/ZCl3AACI\nj49HVlYWKleurHfcwcEBd+7cyfM+z549g4ODQ67zk5OTkZ6ejjJlyvzr82q1WgBAcnJyIZPT66Sl\npQEAEhISkJqaKnMa08QxNj6OsXFxfI2PY2xcHF/jy+lpOb3N0EpEGZZLzhs4JiYGMTExMqcxXdHR\n0XJHMHkcY+PjGBsXx9f4OMbGxfE1vrS0NNjY2Bj8cUtEGbazs4NSqcxVSGNjY3PNFueoUqUKYmNj\nc51vY2NToFlhAKhYsSKcnJxgZWUFC4sSsWKEiIiIiF6h1WqRlpaGihUrGuXxS0QZVqlUcHV1RURE\nBPz8/AAAQghERERg8ODBed6nadOmOHbsmN6x8PBwNG3atMDPa2lpmWupBRERERGVLMaYEc5RYqZD\nAwMDsX37duzevRu3bt3CjBkz8PLlS/Ts2RMAsHjxYkyePFl3fv/+/XH//n0sXLgQt2/fxubNm3Ho\n0CEMHTpUrpdARERERKVMiZgZBoCuXbsiPj4eISEhiImJQaNGjbBmzRrY29sDyF7X++p6nFq1amH1\n6tWYP38+Nm7ciGrVqmHu3Lm5dpggIiIiIsqPQggh5A5BRERERCSHErNMgoiIiIiouLEMExEREZHZ\nYhkmIiIiIrPFMkxEREREZotlmIiIiIjMFsswEREREZktsy3Dmzdvhq+vLzw8PNC3b19cunRJ7kil\nxtmzZ/HJJ5+gbdu2UKvVOHz4cK5zli9fDm9vbzRp0gRDhw7F3bt39W5PT0/HrFmz0KpVK2g0GowZ\nMybX5bXN1ddff43evXujWbNm8PLywsiRI3Hnzp1c53GMC2fLli3o0aMHmjdvjubNm6N///65rmbJ\nsTWc1atXQ61WY/78+XrHOcaFFxoaCrVarfdf165d9c7h+BbdkydPMGnSJLRq1QpNmjRBjx49EBkZ\nqXcOx7nwfH19c72P1Wo15syZozun2MZXmKGwsDDh5uYmdu3aJW7evCk+++wz0aJFCxEbGyt3tFLh\n6NGjYtmyZeKXX34RarVa/Prrr3q3f/3116JFixbit99+E3///bcYPny48PPzE2lpabpzPv/8c9G+\nfXtx6tQpERkZKfr16ycGDBhQ3C+lRPrggw90781r166Jjz76SLRv316kpqbqzuEYF96RI0fE0aNH\nxd27d0VUVJRYsmSJcHV1FTdv3hRCcGwN6eLFi8LX11e88847Yt68ebrjHOOiWbFihejWrZuIjY0V\nMTExIiYmRsTHx+tu5/gWXWJiomjfvr2YNm2auHz5snjw4IEIDw8X9+7d053DcS6auLg43fs3JiZG\nnDhxQqjVanHmzBkhRPGOr1mW4T59+og5c+bovtZqtaJt27Zi9erVMqYqnVxcXHKV4TZt2oj169fr\nvk5KShLu7u4iLCxM97Wrq6v4+eefdefcunVLuLi4iIsXLxZL7tIkNjZWuLi46H5ACMExNrSWLVuK\nHTt2CCE4toaSnJwsOnXqJE6cOCEGDRqkV4Y5xkWzYsUK4e/vn+/tHN+iW7hwoQgICHjtORxnw5o7\nd67o1KmT7uviHF+zWyaRkZGByMhIeHp66o4pFAp4eXnhwoULMiYzDffv30dMTAxat26tO2ZjY4Mm\nTZroxvfy5cvIysrS+x7Uq1cPNWrUwPnz54s9c0mXlJQEhUKBSpUqAeAYG5JWq0VYWBhSU1Oh0Wg4\ntgY0e/Zs+Pr66o0TwPevoURFRaFt27bo0KEDJk6ciOjoaAAcX0M5cuQI3Nzc8N///hdeXl549913\nsX37dt3tHGfDysjIwL59+9CrVy8AxT++lgZ4DaVKfHw8srKyULlyZb3jDg4Oea7LJGliYmKgUCjy\nHN+YmBgAQGxsLFQqFWxsbPI9h7IJITBv3jw0b94c9evXB8AxNoTr16+jX79+SE9PR/ny5REaGop6\n9erh/PnzHFsDCAsLw9WrV7Fz585ct/H9W3RNmjRBcHAw6tati2fPnmHFihUICAjA/v37Ob4Gcv/+\nfWzZsgVDhw7F8OHDcenSJcydOxcqlQr+/v4cZwP75ZdfkJycjHfffRdA8f+cMLsyTFSazJw5Ezdv\n3sSWLVvkjmJS6tWrh7179yIpKQmHDh3C5MmTsWnTJrljmYTHjx9j3rx5WL9+PVQqldxxTFLbtm11\nf27YsCE8PDzQvn17/PTTT6hXr56MyUyHVquFh4cHxo4dCwBQq9W4fv06fvjhB/j7+8uczvTs3LkT\nbdu2RZUqVWR5frNbJmFnZwelUpnrXw2xsbG5/gVC0lWuXBlCiNeOb+XKlZGRkYHk5OR8z6HsXzMf\nO3YMGzduhKOjo+44x7joLC0tUbt2bTRu3Bjjxo2DWq3Gd999x7E1gCtXriAuLg49e/aEq6srXF1d\ncebMGXz33Xdwc3PjGBuBra0tnJyccO/ePY6vgTg6OsLZ2VnvmLOzs245CsfZcB49eoSIiAj07dtX\nd6y4x9fsyrBKpYKrqysiIiJ0x4QQiIiIgEajkTGZaahduzYqV66MkydP6o4lJyfj4sWLuvF1c3OD\nUqnU+x7cvn0bjx494vfg/8yePRuHDx/Gd999hxo1aujdxjE2PK1Wi/T0dI6tAXh5eWHfvn3YvXs3\n9uzZgz179sDNzQ09evTAnj17OMZG8OLFC9y7dw+Ojo4cXwPRaDS5lk7euXNH9/OY42w4O3fuhIOD\nA3x8fHTHint8lTNnzpxZtJdR+pQvXx4hISGoXr06VCoVli1bhr///htffPEFrK2t5Y5X4qWkpODW\nrVt49uwZtm7dCg8PD5QtWxYZGRmwtbVFVlYWVq9eDWdnZ6Snp2Pu3LlIT09HUFAQlEolypQpg6dP\nn2Lz5s1Qq9VISEjAjBkzUKNGDYwYMULulye7mTNnYv/+/QgJCUGVKlWQkpKClJQUKJVKWFpmr2zi\nGBfekiVLoFKpIITA48ePsWHDBuzfvx+ffvopateuzbEtIpVKBXt7e73/9u3bh9q1a6NHjx4A+P4t\nqgULFsDKygoAcPPmTcycORPx8fGYOXMmrK2tOb4GUKNGDaxcuRJKpRKOjo44duwYVq5cibFjx6Jh\nw4YA+D42BCEEpk6dCn9/f3h5eendVqzjW4jdL0zCpk2bRPv27YW7u7vo27evuHTpktyRSo1Tp04J\nFxcXoVar9f6bMmWK7pyQkBDRpk0b4eHhIYYNGyaioqL0HiMtLU3Mnj1btGzZUjRt2lSMHj1axMTE\nFPdLKZHyGlu1Wi127dqldx7HuHCmTZsmfH19hbu7u/Dy8hJDhw4VJ06c0DuHY2tYgwcP1ttaTQiO\ncVGMGzdOtG3bVri7uwsfHx8xfvx4vf1vheD4GsLvv/8uunXrJjw8PETXrl3F9u3bc53DcS6a48eP\nC7VanWvcchTX+CqEEMKAJZ+IiIiIqNQwuzXDREREREQ5WIaJiIiIyGyxDBMRERGR2WIZJiIiIiKz\nxTJMRERERGaLZZiIiIiIzBbLMBERERGZLZZhIiIiIjJbLMNEREREZLZYhkk2oaGhUKvVuv88PT0x\nZMgQnD17tkD3V6vVWL9+vcFzTZ06Fd27dzf44wLA6dOnoVarERkZ+a/nxsXFITg4GJ07d4aHhwea\nN2+OwYMHY8eOHdBqtUbJZ2quXbuG0NBQpKWlyR2lQB4+fAi1Wo2ff/7ZKI9/7do1qNVqnDlzRrYM\nBWWsv99yWLFiBTQajdwxMGLECLz33ntyxzAKf39/TJ06Vfe1MX+Ok+mxlDsAmTdra2t8++23AIDH\njx9j1apVGDp0KHbt2oX69eu/9r7btm1DjRo1DJ5pxIgRSE1NNfjj5lAoFP96zt27d/Hee+9BCIFh\nw4ahcePGSE9Px8mTJxEcHAx7e3v4+voaLaOpuHr1KlauXIlBgwbByspK7jglQkHefyWBsf5+y0Gh\nUJSIcS8JGYqLsX+Ok2lhGSZZKRQKeHh4AAA8PDzg7u4OX19f/PDDDwgKCsrzPmlpabCystLdz9Bq\n165tlMeVYuLEidBqtfjxxx9RpUoV3XFvb28MGjQISUlJMqYrPYQQev9raDnvxdLEWGNhaMb6+03m\noST8HKfSg8skqESpXr067Ozs8ODBAwDAjz/+CLVajQsXLmDYsGHQaDRYuHAhgNy/Rh08eDA++eQT\nHDp0CF26dIFGo8GQIUNw//59vedIT0/H0qVL0aFDB7i7u8PHx0fv12tTpkzR+/VaToaLFy9iyJAh\naNq0KXx9fbFz5069x71w4QKGDx+Otm3bQqPRwN/fH3v27JE8BmfPnsXly5fxySef6BXhHNWqVUOD\nBg10X585cwb9+/dHkyZN0Lp1a0ybNg2JiYm623N+7b1nzx7MmDEDLVq0gJeXFzZs2AAACAsLQ5cu\nXdC8eXOMHj0aycnJuvvmLOs4evQoRo8eDY1GA29vb3z99de5chU0x969ezFnzhy0bNkS3t7eWLBg\nQa5lH7du3cLw4cPxxhtvQKPR4OOPP871fVSr1VizZg1CQ0PRpk0btG7dGlOnTsXLly8BALt27cK0\nadMAAJ6enlCr1fDz8wMAJCUlISgoCO3atYOHhwfefPNNTJgw4bXfl5xfdV+6dEn3Or///nsAwKJF\ni9C9e3doNBq0a9cOEyZMwLNnz/TuX9D35z9FRkbC09MT06dP1x1LSkrCzJkz4e3tDXd3d/Ts2RPh\n4eG57rtq1Sp4e3tDo9FgzJgxiI2Nfe1zvSolJQXTp0/HG2+8gVatWiE4OFj3fYqPj4e7uzu2b9+e\n6359+vTBuHHjXvvYBf3+/nOZRGhoqO71jB07FhEREXku+1i7di06d+4Md3d3dOjQQfdez5Hzvbx+\n/ToGDhyIpk2bonv37jh+/LjunPx+zX7kyBGo1WpERUUBAHbv3o2BAweiVatWaNmyJQYPHoxLly69\n9vXn/ExJSEjQO/7PX/UDwPnz5zFkyBBoNBq88cYbmDBhAuLi4l77+ED2GA8aNAgeHh7o1KkTdu/e\nne95//a92LFjB7p164YmTZqgVatWCAgIwJUrV3S3CyGwfv16dO3aFe7u7vD29sbYsWP1fpYY4u90\njj///BM9e/aEh4cHunfvjmPHjuV6Xfn9HL969So+/PBDaDQadO7cOc9xKej7jEwHyzCVKMnJyUhM\nTISjoyOA//9rvYkTJ6J169b4+uuv0aNHj3zvf/XqVaxbtw4TJ07EggULcO/ePUyaNEnvnNGjR+O7\n775Dnz59sHr1akyePFnv12n//FViztfjx49HmzZtsHLlSrRu3RpBQUF6/+f58OFDaDQazJ07F//7\n3//QuXNnBAUF5ft/Qvk5c+YMFAoF2rZt+6/nXrlyBcOGDYOtrS1CQkIwadIkHDlyBB999FGuGcDl\ny5fD2toaISEheOuttxAcHIwlS5Zg48aNmDx5MmbMmIGTJ0/iyy+/zPU8M2bMQJ06dRBSslSyAAAT\nHUlEQVQaGop33nkHS5cuxdatWwuVY9myZbCwsMDy5csxYMAArF+/Xq9U3b9/HwMGDEBSUhIWLFiA\nxYsXIy4uDoGBgcjIyNB7rO+//x53797FggULMGrUKOzfvx+rVq0CAPj4+GD48OEAgHXr1mHbtm1Y\nuXIlAGDevHk4evQoJkyYgHXr1uHTTz9FmTJlXjvWCoUCGRkZmDRpEnr06IFvvvkGbdq0AQDExsbi\n448/xurVqxEUFISHDx9i8ODBuUp+Qd6frzp37hwCAwPRvXt3fPHFFwCAjIwMBAYG4tixY5gwYQL+\n97//oX79+vj4449x48YN3X03bdqEkJAQ+Pv7IzQ0FLVq1cL06dML/KvypUuXQgiB5cuX4/3338em\nTZuwbNkyAICdnR06duyY6x+EN27cwOXLl9GnT598H1fK9/dV3333HVauXIlevXph5cqVqFOnTp6v\nZ+7cuQgNDUWvXr2wevVq9OzZE4sWLdJ7vyoUCmRmZmLSpEno2bMnVq5cCXt7e4wZM0b3D7i3334b\nN2/exM2bN/UePywsDK6urnBycgKQ/fe+R48eWLZsGRYvXoyaNWti8ODBuHv3br6vpaDLJs6fP4/3\n3nsPFStWxLJlyzBnzhxcuXIFI0aMeO390tPTMWzYMMTFxWHRokWYMGECVq9ejcuXL+udV5DvxZkz\nZxAUFIQ333wT33zzDb788kt4enrq/XZq9uzZWLx4MXx9ffH1119jxowZKF++PFJSUgr8PDle93ca\nAGJiYvDBBx+gbNmyCAkJwfvvv4+ZM2fiyZMnucY4r68nTZoEb29vrFq1Co0bN8a0adNw+/Zt3XkF\nfZ+RiRFEMlmxYoXQaDQiMzNTZGZmivv374tRo0YJtVotwsPDhRBC/Pjjj8LFxUWsWbMm1/1dXFzE\nunXrdF8PGjRIaDQaER8frzv2448/CrVaLR4/fiyEEOL48ePCxcVFhIWF5ZtrypQpolu3bnqP4eLi\nIlasWKF33qBBg0S/fv3yfZzMzEzx2Wefif79++uOnTp1SqjVanHlypV87zdjxgyhVqtFenp6vufk\nGDlypGjfvr3IzMzUHct5jUeOHBFCCPHgwQPh4uIixo8frzsnKytLtGnTRmg0GpGYmKg7HhwcLFq2\nbKmX18XFRUyZMkXveT/99FPh4+NTqBzjxo3Te6xBgwaJoUOH6j12x44d9V5/bGys0Gg04vvvv9cd\nc3FxyTX+U6ZMEZ06ddJ9nfP9f/U9IYQQ3bp1E8HBwUKKFStWCLVaLX766afXnpeVlSUeP34sXFxc\ndO/jnNf5b+/PnDE6dOiQCA8PF02bNhVLly7Ve/wdO3YIV1dXcevWLb3jffv2FWPHjtVlaNu2bZ7f\nN7VaLU6fPp1v/pwMgwYN0ju+fPly0bRpU/H8+XMhhBAnTpwQarVaL8f8+fNF+/btXzs+Ur6/OX+/\ns7KyhLe3twgKCtJ7rOnTp+u9nnv37gm1Wi22bdumd96iRYuEt7e37uuc7+WxY8dyve69e/cKIbL/\n/np6euqNf2pqqtBoNGL9+vV5vjatVisyMzNFly5dxJIlS/SeT6PR6L7O7335zjvv6H3PAgICxMCB\nA/XOuXnzplCr1eLo0aN5ZhBCiO+//140btxY3Lt3T3fs7t27olGjRmLw4MG6YwX5Xqxdu1a0atUq\n3+e6c+eOUKvVYvXq1fmeY8i/0wsXLhTNmzcXycnJumMRERG5fk7l93N8y5YtumMpKSmiadOm4quv\nvhJCFPx9RqaHM8Mkq5SUFLi6usLV1RUdOnTA6dOn8fnnn8PLy0t3jkKhgI+PT4Eer1GjRqhUqZLu\na2dnZwDQzRqcPHkS1tbW6Nq1q6ScCoUCHTp00DvWqVMnREZG6mY+nz9/jrlz58LX11f3mrZt26b7\ndapUBZmJOHfuHPz8/KBUKnXH2rRpgwoVKuDcuXN653p6eur+bGFhgVq1aqFRo0aoUKGC7njdunXx\n/PnzXB88yVlekKNz58548uQJHj9+LDnHq99bAKhfv77ucQAgPDwcvr6+sLCwQFZWFrKyslChQgU0\nbtz4/7V390FRVX0cwL8X5GUBYWF3ZdFCaGKTZUBy5d3UJhQLnCYIB0QkgRZGHANLZdFSJHEkIxK0\nZBUHDBA1LJ18KV7GSAmainTKjGF86QWGDVlAkkFgnz+YvcNlX1yQnmbk95lxxj1777nnnpd7z557\n7kFnZGvsOQGj5T02LkOkUilOnz6NkpISzmiqKfTVxUuXLiEmJgYLFy6EVCrFkiVLwDAMbt68ydnu\nYfVTq76+HqmpqVi/fj3S09M53125cgUSiQRz585l82doaAjBwcFs/nR0dKCzs1NvuZlqfH0PCwvD\n/fv3cePGDQCjef/EE0+wo8PDw8M4e/YsIiMjjcY7kfLV6ujogEqlwvPPP88JH39+ly9fBsMwWL58\nORv38PAwgoKCoFKp0N7ezm5rZmbGqT9z5syBtbU1W3/Mzc2xYsUKnD9/nt2mrq4OAwMDePHFF9mw\ntrY2pKWlISQkBJ6envDy8sKtW7cm3e61BgYG8OOPPyIsLIxzLnPnzoWLi4vBvAKAq1evwsPDgzNv\n1tXVFfPmzeNsZ0pZSKVS9PT0QKFQ4MqVKzpTFr799lsAQFRUlMH0TGWbvnr1KgICAmBra8uGBQYG\nwsHBweDxtRiGYZ/mAKMvcM+ePZuN39R6Rh4/9AId+U/xeDyUl5cDGH306uLionc7gUBgUnwzZ87k\nfLa0tIRGo2GX1lKr1ewUjIlycnLSSdPQ0BC6u7vh5OSErVu34qeffkJaWhqefvpp2NnZoaKignMz\nNYWzszMAoL29/aEvgfT29kIoFOqECwQCznxdAJxOLwBYWFhwbijaMGD0xTAejwdg9AYyPv+FQiE0\nGg06OzshFosfOR1jlz5Tq9UoLS3VmefJMIzOVAZ9cQ0ODuqkY7y3334bfD4fR48eRV5eHlxcXCCX\nyxEbG2t0P2trazZftK5du4a0tDSEhoYiJSWFzatVq1bppOVh9VOrvr7e4I+27u5u/PLLL/Dy8tL5\nbsaM0Uu6SqUyWm6m0LevNm6t6OholJWV4c0330R9fT26u7vxyiuvGI13IuWrpT0ffW1w7Pmo1WqM\njIwgICBAJw6GYdDe3s5eY6ysrNj80hpfF8PDw1FRUYFr167B29sb586dg0wmY9tof38/EhMTIRAI\noFAoMHv2bFhZWWHbtm2PvJxfT08PhoeHsWfPHuTm5uqci7EffSqVSu81UyAQTLitBQYGIi8vD2Vl\nZUhOToalpSXCwsKwbds22NvbQ61Ww9zcXKdsxprKNq1SqdgpKuPPzRTj2+DYMje1npHHD3WGyX+K\nYRhIpVKTtpsKfD4fnZ2dk9r37t27nI50V1cXZsyYAUdHRwwODuLSpUvIyspCXFwcu81k1gP29/eH\nRqNBQ0MDVq9ebXRbBwcHvS9FdXV1mTRSYgqNRqNzjL///hsMw7CdgqlMh4ODA5YuXYq4uDidG9D4\nzvtk2dnZQaFQQKFQoLW1FWVlZcjOzoZEIoFMJjO4n756WFNTg5kzZ7LzaQHgr7/+eqT0ZWZm4uTJ\nk0hISEB5eTmbz8Bo/sybNw+5ubkGb9AikchouZlC377auLUiIyOxf/9+1NXV4dNPP0VAQADmzJlj\nNN7JlK/2fMa/ONbV1cU5HwcHB5iZmaGyslKnowuMPvmYCJlMBhcXF5w7dw7u7u74+uuvOavctLS0\noLOzE0qlEhKJhA3v6+uDWCw2GK92BZLx82V7e3vZ/9vb24NhGKSmpuqM0gOjgweGiEQiXL9+XSe8\nq6sLdnZ27GdTy2LlypVYuXIl1Go1amtrkZubCwsLC7z77rvg8/kYHh7G3bt3DXaIp7JNi0Qig9ea\nR2VqPSOPH5omQaaV4OBgDAwMTHi0VqPR4KuvvuKEXbx4EV5eXmAYBoODgxgZGeHcgO/du4e6uroJ\np1Emk8HHxweHDh3SWZEAGH2U99tvv7Hb1tTUcDrdly9fRm9vLxYuXDjhYxtSU1PD+XzhwgXMmjWL\n7aRNZTqCgoLQ2trKPnIe+0/fiJAxY0e6DfHw8EBmZiYAcF6kMdXAwIBOx+vMmTOPdPO0sbFBcXEx\n+Hw+EhISODfn4OBg/P777xCJRDr5ox0tFovFEIlEesvNVPr25fF4eOaZZ9gwoVCIpUuX4vDhw2ho\naMCrr7760HgnU75isRhCoRC1tbWc8PFtUvuIvbu7W2/e2NjYmHLqHC+99BLOnz+PixcvYmRkBMuX\nL2e/004ZGFv+P/zwA/7880+jcTo7O0Oj0aCtrY0Na2tr40zj4PF48PX1RVtbm95zMbYGs4+PD1pb\nWzmrNdy+fRu//vorZ7uJlgWfz0dUVBRCQkLYtAcGBgIYXa3BkKls0z4+PmhqauKsVNHY2KjzBGoy\nTK1n5PFDI8NkWgkKCsLixYuRlZWFO3fuwMfHB2q1Gl9++SU++OADo/t+9tlnsLKyglQqxRdffIHv\nv/8excXFAEZHGr29vVFcXAxHR0eYm5tDqVTC3t5eZ8TClMdt+/btw9q1axEVFYV169bBy8sLg4OD\naG5uRkVFBfLy8iCRSJCamorY2FjI5XLEx8dDpVIhPz8fvr6+WLx48eQzahztKhMhISH45ptvcPbs\nWezYsYP9firTsXHjRkRHRyMxMRGrVq2CUCiESqXCd999Bz8/vwnN99bOyS0vL0doaCisra0hkUgQ\nGxuLZcuWwcPDA+bm5jh9+jQsLS2NjgobEhwcjLKyMuTk5CA0NBQtLS2TWlJvPFtbW5SUlGDt2rVI\nSEjAsWPHwOfz8fLLL6Oqqgpr1qxBUlIS3Nzc0Nvbi+vXr2NoaAgZGRkwMzODXC5Hbm4unJyc2HJr\nbm42+fh37tyBQqFAeHg4fv75ZyiVSqxbt07nMXN0dDRSUlLg4OCAZcuWPTTeyZSvmZkZUlJSkJub\nC4FAgICAADQ1NbHzVbU/PNzc3LB69Wps3rwZSUlJmD9/Ph48eICbN2+iubmZXU1kIiIiInDkyBF8\n+OGHWLRoEWfOt6+vL3g8HrKzsyGXy9HR0YGioiKjo8IAMH/+fLi4uGDPnj3YtGkT+vr6oFQqdUZ7\nt2zZgtdeew0ZGRkIDw+Hvb092tvb0djYiKioKPj5+emNPzIyEh999BHkcjneeOMNaDQaFBYW6izV\naEpZFBYWQq1Ww9/fHwKBADdu3EBDQwMSExPZPI+JiUFBQQHUajWCgoJw//59djnGWbNmTWmb1j4t\nSU5OhlwuR09PDwoLC42OlJvK1HpGHj/UGSb/qUe5uOhbnkhffOPDCgsLceDAAVRVVaGoqAhCoRCL\nFi0yug/DMMjPz8e+fftw8OBBODk5IScnh7P8WX5+Pt555x1kZmbC0dER8fHx6O/vR0lJyUPTOJ6r\nqyuqq6uhVCpx/PhxtLe3w9LSEp6enti+fTv7goeXlxdKSkrw/vvvY+PGjeDxeHjhhRewdetWznEM\nHdOUtDAMg+zsbFRVVaGyshK2trZIT09HTEwMu81UpsPV1RUnT55EQUEBdu3ahX/++QcikQh+fn6c\nUUlTlqfy9PTEhg0bcOrUKRw5cgRisRi1tbVYsGABPv/8c/zxxx8wMzODRCLBoUOH8NRTTz00L8Zb\nsmQJ3nrrLXzyySeorq6GTCZDcXGx3pfVTKmfYz/b29uzHeKkpCSUlpbCzs4OpaWlKCoqwscffwyV\nSgVHR0dIpVLOnOf4+Hj09fWhoqIClZWVCAkJwe7du5GcnGz0HLVpyMjIQFNTE9LT02Fubo41a9bo\nvMwHAM899xx4PB4iIiIeujwdMPnyjY+PR29vLyorK3Hs2DGEhIRg8+bN2LRpE6eDvn37dri7u6Oq\nqgoHDx6EjY0N3N3dsWLFCoP5bOiYwGgdcnd3x61btxAREcH5TiAQYP/+/di7dy/S0tLg5uaGXbt2\nQalU6o1ba8aMGThw4AB27tyJ9PR0uLq6QqFQYO/evZx9nn32WVRUVKCwsBBZWVl48OABnJ2dERQU\nBFdXV4N5bGVlhaNHj2Lnzp3YsmULnJ2dsX79etTW1nKmYphSFt7e3igrK8OFCxdw7949iMViJCcn\ns8sWAqNLLz755JM4ceIESktLwefz4e/vz06BmMo2LRKJcPjwYezevZvNux07dnCmKenLc0MmW8/I\n44XR0KxwQozS/vGGxsZGzqjQdNDc3IyEhAScOnVK7wtbhDQ2NiIxMRHV1dXw9PT8vx67oKAApaWl\naGpqMqkjTshkUD17/NHIMCHEKPq9TPTp7OzE7du38d5770Emk/3rHeG2tjacOXMGCxYsgIWFBZqa\nmlBSUoK4uDjqoJApQ/VseqLOMCHEKJonR/Q5ceIE+1e8cnJy/vXj8Xg8tLS04Pjx4+jv74ezszNe\nf/11bNiw4V8/Npk+qJ5NTzRNghBCCCGETFu0tBohhBBCCJm2qDNMCCGEEEKmLeoME0IIIYSQaYs6\nw4QQQgghZNqizjAhhBBCCJm2qDNMCCGEEEKmLeoME0IIIYSQaYs6w4QQQgghZNr6H2oESZoEX62N\nAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "cumulative_var_explained = pc.eigenvalues_.cumsum() / pc.eigenvalues_.sum()\n", + "plt.figure(figsize=(8,6))\n", + "sns.set_style(\"whitegrid\")\n", + "plt.plot(cumulative_var_explained[:np.where(cumulative_var_explained > 0.95)[0][0]], color=\"gray\")\n", + "plt.ylim(0,1)\n", + "plt.ylabel(\"Cumulative percentage of variance explained\")\n", + "plt.xlabel(\"Principal Components ranked by eigenvalue descending\")\n", + "plt.title(\"Principal Components - Variance Explained\")\n", + "plt.show()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/nbs/L1Results.ipynb b/nbs/L1Results.ipynb new file mode 100644 index 0000000..6a7cd7f --- /dev/null +++ b/nbs/L1Results.ipynb @@ -0,0 +1,654 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os\n", + "import pickle\n", + "import numpy as np\n", + "from scipy import sparse\n", + "from functools import partial\n", + "from sklearn.externals import joblib\n", + "from sklearn.cross_validation import KFold\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.cross_validation import train_test_split\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from sklearn.linear_model import LogisticRegression" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "labels = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_labels.pkl\")\n", + "features = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_matrix.pkl\")\n", + "features = features.todense()\n", + "mozart_labels = [k for k in range(len(labels)) if labels[k] == \"mozart\"]\n", + "bach_labels = [k for k in range(len(labels)) if labels[k] == \"bach-js\"]\n", + "schubert_labels = [k for k in range(len(labels)) if labels[k] == \"schubert\"]\n", + "chopin_labels = [k for k in range(len(labels)) if labels[k] == \"chopin\"]\n", + "tchaikovsky_labels = [k for k in range(len(labels)) if labels[k] == \"tchaikovsky\"]\n", + "X = features[mozart_labels + bach_labels + schubert_labels + chopin_labels + tchaikovsky_labels].A\n", + "y = np.array([0 for i in range(len(mozart_labels))] + [1 for i in range(len(bach_labels))] + \n", + " [2 for i in range(len(schubert_labels))] + [3 for i in range(len(chopin_labels))] +\n", + " [4 for i in range(len(tchaikovsky_labels))])\n", + "y = y.reshape((y.shape[0],))\n", + "del features" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X = X[:,X.sum(axis=0).nonzero()[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(3776, 7616)" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# mkdir dumps/logistic/l1" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "regularization_parameter = 1.0\n", + "predicted = []\n", + "actuals = []\n", + "lr_models = []\n", + "i = 0\n", + "for train_idx, test_idx in KFold(n=X.shape[0], n_folds=10, shuffle=True):\n", + " X_train = X[train_idx]\n", + " y_train = y[train_idx]\n", + " X_test = X[test_idx]\n", + " y_test = y[test_idx]\n", + " lr = LogisticRegression(penalty='l1', C=regularization_parameter)\n", + " \n", + " try:\n", + " lr.fit(X_train, y_train)\n", + " except:\n", + " continue\n", + " preds = lr.predict(X_test)\n", + " predicted.append(preds)\n", + " actuals.append(y_test)\n", + " lr_models.append(lr)\n", + " pickle.dump(lr_models, open(\"./dumps/logistic/l1/model_fold_{fold}_reg_{reg}.pkl\"\n", + " .format(fold=str(i), reg=str(regularization_parameter)), 'wb'))\n", + " pickle.dump(predicted, open(\"./dumps/logistic/l1/predicted_fold_{fold}_reg_{reg}.pkl\"\n", + " .format(fold=str(i), reg=str(regularization_parameter)), 'wb'))\n", + " pickle.dump(actuals, open(\"./dumps/logistic/l1/actuals_fold_{fold}_reg_{reg}.pkl\"\n", + " .format(fold=str(i), reg=str(regularization_parameter)), 'wb'))\n", + " i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "confusion matrix\n", + "[[ 45 15 1 1 2]\n", + " [ 6 242 1 1 0]\n", + " [ 5 7 7 1 4]\n", + " [ 2 4 3 9 1]\n", + " [ 3 2 1 1 14]]\n", + "\taccuracy\n", + "\t\t 0.838624338624\n", + "\tf1\n", + "\t\t 0.826827748078\n", + "\trecall\n", + "\t\t 0.838624338624\n", + "\tprecision\n", + "\t\t 0.82371458176\n", + "confusion matrix\n", + "[[ 49 17 0 0 1]\n", + " [ 2 216 1 1 2]\n", + " [ 3 0 26 2 5]\n", + " [ 1 2 1 14 2]\n", + " [ 1 3 6 2 21]]\n", + "\taccuracy\n", + "\t\t 0.862433862434\n", + "\tf1\n", + "\t\t 0.858801989007\n", + "\trecall\n", + "\t\t 0.862433862434\n", + "\tprecision\n", + "\t\t 0.859061069249\n", + "confusion matrix\n", + "[[ 51 19 1 0 1]\n", + " [ 7 222 1 0 1]\n", + " [ 1 0 13 3 5]\n", + " [ 3 2 2 15 0]\n", + " [ 3 3 7 1 17]]\n", + "\taccuracy\n", + "\t\t 0.84126984127\n", + "\tf1\n", + "\t\t 0.836827215049\n", + "\trecall\n", + "\t\t 0.84126984127\n", + "\tprecision\n", + "\t\t 0.836505670315\n", + "confusion matrix\n", + "[[ 55 14 1 1 0]\n", + " [ 3 238 0 1 2]\n", + " [ 2 2 15 1 3]\n", + " [ 0 2 1 17 1]\n", + " [ 3 4 1 0 11]]\n", + "\taccuracy\n", + "\t\t 0.888888888889\n", + "\tf1\n", + "\t\t 0.885140317683\n", + "\trecall\n", + "\t\t 0.888888888889\n", + "\tprecision\n", + "\t\t 0.885314173153\n", + "confusion matrix\n", + "[[ 59 8 0 0 1]\n", + " [ 11 225 0 1 0]\n", + " [ 9 1 17 1 5]\n", + " [ 0 2 1 11 0]\n", + " [ 5 1 4 3 13]]\n", + "\taccuracy\n", + "\t\t 0.859788359788\n", + "\tf1\n", + "\t\t 0.85576286395\n", + "\trecall\n", + "\t\t 0.859788359788\n", + "\tprecision\n", + "\t\t 0.861577720757\n", + "confusion matrix\n", + "[[ 55 14 1 0 0]\n", + " [ 5 227 0 1 1]\n", + " [ 4 3 12 2 4]\n", + " [ 2 3 1 17 2]\n", + " [ 4 4 4 2 10]]\n", + "\taccuracy\n", + "\t\t 0.849206349206\n", + "\tf1\n", + "\t\t 0.840712197876\n", + "\trecall\n", + "\t\t 0.849206349206\n", + "\tprecision\n", + "\t\t 0.837904744846\n", + "confusion matrix\n", + "[[ 52 18 2 0 3]\n", + " [ 11 205 3 2 1]\n", + " [ 6 3 6 4 6]\n", + " [ 0 2 0 19 3]\n", + " [ 3 2 3 2 21]]\n", + "\taccuracy\n", + "\t\t 0.803713527851\n", + "\tf1\n", + "\t\t 0.795857654562\n", + "\trecall\n", + "\t\t 0.803713527851\n", + "\tprecision\n", + "\t\t 0.792537043265\n", + "confusion matrix\n", + "[[ 52 16 1 0 0]\n", + " [ 5 220 2 0 2]\n", + " [ 2 1 16 1 7]\n", + " [ 1 3 3 19 2]\n", + " [ 4 3 3 1 13]]\n", + "\taccuracy\n", + "\t\t 0.848806366048\n", + "\tf1\n", + "\t\t 0.845514943817\n", + "\trecall\n", + "\t\t 0.848806366048\n", + "\tprecision\n", + "\t\t 0.84615632948\n", + "confusion matrix\n", + "[[ 58 13 4 0 1]\n", + " [ 8 217 1 1 0]\n", + " [ 4 2 11 2 4]\n", + " [ 2 4 0 21 3]\n", + " [ 3 1 3 0 14]]\n", + "\taccuracy\n", + "\t\t 0.851458885942\n", + "\tf1\n", + "\t\t 0.848177063151\n", + "\trecall\n", + "\t\t 0.851458885942\n", + "\tprecision\n", + "\t\t 0.847603822353\n", + "confusion matrix\n", + "[[ 60 16 2 1 0]\n", + " [ 4 216 0 0 0]\n", + " [ 3 1 19 5 5]\n", + " [ 0 0 2 19 1]\n", + " [ 1 4 2 3 13]]\n", + "\taccuracy\n", + "\t\t 0.867374005305\n", + "\tf1\n", + "\t\t 0.862158010267\n", + "\trecall\n", + "\t\t 0.867374005305\n", + "\tprecision\n", + "\t\t 0.864609084882\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n" + ] + } + ], + "source": [ + "model_folder = \"/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/dumps/logistic/l1/\"\n", + "accuracy = []\n", + "precision = []\n", + "recall = []\n", + "f1 = []\n", + "mcc = []\n", + "predicted = pickle.load(open(model_folder + \"predicted_fold_9_reg_{reg}.pkl\".format(reg=regularization_parameter), 'rb'))\n", + "actuals = pickle.load(open(model_folder + \"actuals_fold_9_reg_{reg}.pkl\".format(reg=regularization_parameter), 'rb'))\n", + "for preds, actual in zip(predicted, actuals):\n", + " pred = preds\n", + " print(\"confusion matrix\")\n", + " print(metrics.confusion_matrix(actual, pred))\n", + " print(\"\\taccuracy\")\n", + " acc = metrics.accuracy_score(actual, pred)\n", + " accuracy.append(acc)\n", + " print(\"\\t\\t\", acc)\n", + " print(\"\\tf1\")\n", + " f = metrics.f1_score(actual, pred)\n", + " f1.append(f)\n", + " print(\"\\t\\t\", f)\n", + " print(\"\\trecall\")\n", + " r = metrics.recall_score(actual, pred)\n", + " recall.append(r)\n", + " print(\"\\t\\t\", r)\n", + " print(\"\\tprecision\")\n", + " p = metrics.precision_score(actual, pred)\n", + " precision.append(p)\n", + " print(\"\\t\\t\", p)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.88888888888888884" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.max(accuracy)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "from scipy.stats.distributions import beta\n", + "def posterior_overlap_eval(actual, pred, labels, granularity=10000):\n", + " colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k')\n", + " tp_fn = []\n", + " confusion = metrics.confusion_matrix(actual, pred)\n", + " for i in range(confusion.shape[0]):\n", + " tp = confusion[i,i]\n", + " fn = np.delete(confusion[i,:], i).sum()\n", + " tp_fn.append((tp, fn))\n", + " betas = [beta(a=1 + tp, b = 1 + fn) for tp, fn in tp_fn]\n", + " for i, beta_dist in enumerate(betas):\n", + " random_draws = beta_dist.rvs(granularity)\n", + " plt.hist(random_draws, alpha=0.2, color=colors[i], bins=np.linspace(0,1, 100))\n", + " plt.vlines(random_draws.mean(), 0, 4000, label=labels[i], color=colors[i], linestyles=\"dotted\")\n", + " plt.legend(loc=\"upper left\")\n", + " plt.show()\n", + "labs = [\"mozart\", \"bach\", \"schubert\", \"chopin\", \"tchaikovsky\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mymodel = \"L1-Regularized Logistic Regression\"\n", + "sns.set_style(\"whitegrid\")\n", + "plt.title(\"Posterior Probability of Within-Class Error\\n{model}\".format(model=mymodel))\n", + "plt.xlabel('P(actual=predicted)\\n' + r'Beta($\\alpha, \\beta$)')\n", + "plt.ylabel(\"Density\")\n", + "plt.yticks([])\n", + "ax = plt.gca()\n", + "ax.grid(False)\n", + "posterior_overlap_eval(actual, pred, labels=labs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['mozart', 'bach', 'schubert', 'chopin', 'tchaikovsky']" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "labs" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "betas = lr.coef_[0].copy()\n", + "sorted_b = np.argsort(betas)" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k')" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nVfXnYxiGXn31VbVu3VrNmjWTRG+8weHDh9WnTx/l5eWpUqVKmj9/vpo0aaJvvvmG3phs8+bNSkxM\n1Nq1awtt42vHXC1bttTUqVPVuHFjJScna968eYqJidGmTZvojclOnTqlt99+W4MHD9ZTTz2lffv2\n6ZVXXpG/v7+io6M91h/CMYCrNmnSJB09elRvv/222aXgd5o0aaL3339fmZmZ2rp1q8aNG6cVK1aY\nXdaf3q+//qpXX31VS5Yskb+/v9nl4A86dOjg/PeNN96o8PBwderUSR988IGaNGliYmWw2+0KDw/X\n3//+d0mS1WrV4cOHtWrVKkVHR3vsOCyrKEKNGjXk6+tb6F1GampqoXcjMFetWrVkGAa9MtHkyZP1\n2Wefafny5apdu7ZznN6Yz8/PT/Xr19dNN92kUaNGyWq1atmyZfTGZN99953S0tLUq1cvhYaGKjQ0\nVLt27dKyZcvUokUL+uNlqlSpokaNGunHH3+kNyarXbu2mjZt6jLWtGlT57IXT/WHcFwEf39/hYaG\nKiEhwTlmGIYSEhLUqlUrEyvDH9WvX1+1atXSF1984Rw7f/68vv32W3pVBiZPnqxt27Zp2bJlqlev\nnss2euN97Ha78vLy6I3JIiMjtXHjRm3YsEHvvfee3nvvPbVo0UI9evTQe++9R3+8zIULF/Tjjz+q\ndu3a9MZkrVq1KrS89cSJE87vP57qj++kSZMmeaTi60ylSpU0d+5c1a1bV/7+/po9e7a+//57/eMf\n/1BAQIDZ5f2pZGVl6dixY0pOTtbq1asVHh6uChUqKD8/X1WqVJHNZtPixYvVtGlT5eXl6ZVXXlFe\nXp7Gjx8vX19fs8u/bk2aNEmbNm3S3LlzFRQUpKysLGVlZcnX11d+fr+t2KI35pk5c6b8/f1lGIZ+\n/fVXLV26VJs2bdJzzz2n+vXr0xsT+fv7q2bNmi5/Nm7cqPr166tHjx6S+Nox07Rp01S+fHlJ0tGj\nRzVp0iSlp6dr0qRJCggIoDcmqlevnhYsWCBfX1/Vrl1bn332mRYsWKC///3vuvHGGyV55muHNcfF\niIqKUnp6uubOnauUlBSFhIQoPj5eNWvWNLu0P53vvvtOAwYMkMVikcVi0bRp0yRJ0dHRiouL05Ah\nQ5STk6MJEyYoMzNTbdq00b///W+VK1fO5Mqvb6tWrZLFYlH//v1dxuPi4pxrv+iNeVJTUzVu3Dgl\nJyerSpUqCg4O1htvvOG8MgK98S5/vIY7/THP6dOnNWbMGGVkZKhmzZpq3bq1Vq9erRo1akiiN2YK\nCwvTggULNH36dC1cuFA33HCDXnzxRd17773OOZ7oj8UwDKM0HgAAAABwrWHNMQAAAOBAOAYAAAAc\nCMcAAACAA+EYAAAAcCAcAwAAAA6EYwAAAMCBcAwAAAA4EI4BAAAAB8IxAAAA4EA4BrzEtm3b9Nhj\nj+m2225TixYt1KVLF02YMEEnT540raZDhw5p/vz5ys3N9dg+f/rpJw0cOFA333yzQkJCdOjQoWLn\n5ubmauHChbr33nsVHh6u2267TUOHDtW3337rsXpw5TZu3KiuXbuqRYsW6tmzZ5FzTpw4oUmTJqlb\nt26KiIhQly5dNGnSJKWnp5foGJ07d5bVatW6desKbbvllls0f/58t2r++eefNX/+fCUnJ7t1v0vJ\nycnR/Pnzde+99yoiIkK33XabHnzwQc2aNctjxwBQdvzMLgCANH36dMXHx6t79+565ZVXVKNGDZ06\ndUpr167V6NGjiwwGZSExMVELFixQv379VL58eY/sc86cOc6AUrlyZTVu3LjIednZ2Ro4cKCOHj2q\nJ554Qq1bt1ZGRoZWrFihRx55RDNmzFC3bt08UhPcl5WVpRdffFH333+/pk2bpkqVKhU5b+fOndq7\nd6/69eun4OBg/fzzz5o7d6527dqlDRs2yN/f/7LHslgsev3119WzZ09ZLJarqvvia69Tp04KCgq6\nqn1d9Mwzz2j//v0aOnSoQkJCdO7cOe3fv18ff/yxRo0a5ZFjACg7hGPAZNu3b1d8fLyefvppPf30\n087xNm3aqGfPntq+fbtptRmG4fK3Jxw/flxt2rRRZGTkJefNnj1b+/fv17Jly3TLLbc4x++66y4N\nHjxYL774otq0aaNatWp5rLYrlZub67E3D9eKn376Sfn5+erRo4ciIiKKnXffffcpJibGefuWW25R\nw4YN1bdvX3366ae6++67L3usW2+9Vbt27dLGjRvVo0ePq6rbMIyrDti/9+OPP+rzzz/XP//5T5fa\n7r77bo0ePdpjxwFQdlhWAZjszTffVK1atfTUU08Vub1jx47Of+fl5SkuLk4dOnRQeHi4oqOj9dFH\nH7nM79+/v4YOHeoydujQIVmtVu3atcs5ZrVaFR8fr/nz56t9+/Zq27atYmNjlZOTI0lav369Xnjh\nBUlSu3btZLVa1aVLl0s+ll27dunhhx9Wy5Yt1bZtW73wwgs6e/aspN/O2FmtVh08eFAbNmy45P5y\nc3P1zjvvqH379i7BWPrtLOKIESN04cIFrVmzxmXbhg0b1LNnT4WHh6tt27Z68sknlZSU5Nx++vRp\nPffcc2rfvr1atmyp7t27a/ny5S7PyZIlS1z2uXTpUlmtVuftr776SlarVdu3b9eIESPUunVrjRw5\n0rl93bp16tGjh8LDw3XHHXdo1qxZstvtLtutVqsSExM1ZMgQtWrVSl27dtWGDRsKPQ+ffvqp+vbt\nq4iICN16660aMGCAyzKUzMxMTZo0SbfffrvCwsLUq1cv7dixw2Ufu3fvVr9+/dSmTRvdfPPNuv/+\n+4s81u8ZhqGFCxeqc+fOCgsLU/fu3bV69Wrn9vnz5zuD4MCBAxUSElLs8oZq1aoVGrvpppskSWfO\nnLlkHRc1b95cd999t/71r39ddu7//d//KTo6WuHh4erQoYOmTp2qvLw8Sb/1buDAgZKkBx54QFar\nVSEhIc77luT5/KOLr++SnIXOy8vTzJkznc9rVFSUNm3aVGjeO++8o86dOysiIkKDBw/Wd999J6vV\n6tK3krxWS/qYLv6fsXXrVnXr1k2tWrXSwIEDderUqUL1z5o1S3fddZfCwsLUsWNHxcbGusz55ptv\nNHDgQLVq1Upt2rTRmDFjlJaWdtnnBvAmnDkGTGSz2fTNN9+oa9eu8vX1vez8MWPG6L///a9Gjx6t\nxo0ba8OGDXrmmWe0cOFCderU6ZL3Leps2X/+8x+1bt1a06ZN08mTJzVt2jQFBQVp9OjR6tixo556\n6in961//0ptvvqnKlSurXLlyxe7/u+++06OPPqq2bdtq7ty5SklJ0fTp03Xs2DGtWrVKQUFBeued\nd/Tss8+qcePGGjZsWLH7279/v7Kzs4t9TDfffLOqVaumr7/+2jkWHx+v6dOnq3fv3ho1apQKCgr0\nxRdfKC0tTXXr1lVGRob69OkjHx8fjR49WjfccIN++OEH/fjjj5d93op67iZMmKAePXrokUcecfZu\nyZIlmj59ugYPHqzY2FgdO3ZMM2fOlGEYzrOIF/f17LPP6qGHHtKjjz6qd955Ry+88ILCw8PVpEkT\nSdKWLVs0ZswY3X333Xr88cfl7++vPXv26PTp07JarcrPz9egQYOUnp6uMWPGqHbt2nrvvff05JNP\nav369WrevLnOnz+voUOHqk2bNpo1a5b8/f117NgxZWZmXvIxT5s2TStWrNBTTz2lVq1a6ZNPPtHE\niRNVUFCgmJgYPfTQQ6pfv77GjRunSZMm6aabblKdOnUuuc/f+/rrr2WxWJyPtSSeeuopRUdHa8uW\nLYqKiipyzrZt2zRy5Ejdd999Gjt2rI4fP66ZM2cqKSlJc+bM0U033aQJEyZoypQpmjp1qsvxS/J8\nFqVx48aqWLGi4uLiNHr0aN16662qWLFikXNHjhypb775Rs8884yaNGmi7du369lnn1W1atXUoUMH\nSdInn3yiCRMm6IEHHlBUVJQOHDigkSNHluhs9x9fq+48psTERKWnp2vs2LGy2+2Ki4vTs88+q1Wr\nVjnnPPPMM/rqq680dOhQhYeHKz09Xf/3f//n3P7NN99owIAB6tSpk2bPnq2srCzNnj1bw4YNc9kP\n4PUMAKZJSUkxgoODjZkzZ1527qFDh4zg4GDjnXfecRnv06eP0atXL+ftfv36GU8++aTLnMTERCM4\nONj46quvnGPBwcFGnz59XOY9//zzxj333OO8vW7dOsNqtRrp6emXrW/48OFGp06djIKCAufYf//7\nXyM4ONj45JNPnGN/+9vfjOeff/6S+9q8ebNhtVqNbdu2FTsnOjraiIqKMgzDMDIzM42IiAhj4sSJ\nxc6fOXOmER4ebvzyyy/FzgkODjbefPNNl7GlS5caVqvVefvLL780goODjZdfftll3vnz541WrVoZ\ns2bNchl/++23jYiICCMjI8MwjN+e0+DgYOPtt992zsnKyjIiIiKMRYsWOcc6duxoDBkypNha3333\nXSM0NNQ4duyYy3jv3r2Nv//974ZhGMb+/fsNq9VqHD58uNj9/FFaWpoRGhpa6DU5evRoIzIy0rDb\n7YZhFP2aKonc3Fzj/vvvd3nNXkqnTp2MKVOmGIZhGEOHDjXuu+8+57Y2bdoY8+bNc97u2bOn0bdv\nX5f7r1692uU5+PLLLw2r1Wp89913LvNK8nwWZ8uWLUbr1q2N4OBg46abbjJ69uxpLFq0yMjKynLO\nSUhIMIKDg42dO3e63HfUqFHGQw895HK8fv36ucyZM2eOYbVajfXr1zvHSvJaLelj6tevn9GqVSuX\nr/OLX/u//vqrYRj/+1revHlzsc9DTEyM8cgjj7iMHT161LBarcb27duLvR/gbVhWAVwjLp5t69q1\n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\nCCFk29/fO6BWlRvKtAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "i = -1\n", + "plt.figure(figsize=(8,6))\n", + "sns.set_style(\"whitegrid\")\n", + "plt.hist(X[np.where(y == 0), sorted_b[i]][0], bins=np.linspace(0,60,20),\n", + " color='b',\n", + " alpha=0.4, label=\"Mozart\", normed=True)\n", + "plt.hist(X[np.where(y == 1), sorted_b[i]][0], bins=np.linspace(0,60,20),\n", + " color='g',\n", + " alpha=0.4, label=\"Bach\", normed=True)\n", + "plt.hist(X[np.where(y == 2), sorted_b[i]][0], bins=np.linspace(0,60,20),\n", + " color='r',\n", + " alpha=0.4, label=\"Schubert\", normed=True)\n", + "plt.hist(X[np.where(y == 3), sorted_b[i]][0], bins=np.linspace(0,60,20),\n", + " color='c',\n", + " alpha=0.4, label=\"Chopin\", normed=True)\n", + "\n", + "plt.hist(X[np.where(y == 4), sorted_b[i]][0], bins=np.linspace(0,60,20),\n", + " color='m',\n", + " alpha=0.4, label=\"Tchaikovsky\", normed=True)\n", + "\n", + "\n", + "plt.legend()\n", + "plt.title(\"Histograms of 2-Note Sequence Most Representative of Mozart\")\n", + "plt.xlabel(\"Count of Occurences of 2-Note Sequence\")\n", + "plt.ylabel(\"Number of Pieces\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/nbs/L2Results.ipynb b/nbs/L2Results.ipynb new file mode 100644 index 0000000..4276ae5 --- /dev/null +++ b/nbs/L2Results.ipynb @@ -0,0 +1,522 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os\n", + "import pickle\n", + "import numpy as np\n", + "from scipy import sparse\n", + "from functools import partial\n", + "from sklearn.externals import joblib\n", + "from sklearn.cross_validation import KFold\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.cross_validation import train_test_split\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from sklearn.linear_model import LogisticRegression" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "labels = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_labels.pkl\")\n", + "features = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_matrix.pkl\")\n", + "features = features.todense()\n", + "mozart_labels = [k for k in range(len(labels)) if labels[k] == \"mozart\"]\n", + "bach_labels = [k for k in range(len(labels)) if labels[k] == \"bach-js\"]\n", + "schubert_labels = [k for k in range(len(labels)) if labels[k] == \"schubert\"]\n", + "chopin_labels = [k for k in range(len(labels)) if labels[k] == \"chopin\"]\n", + "tchaikovsky_labels = [k for k in range(len(labels)) if labels[k] == \"tchaikovsky\"]\n", + "X = features[mozart_labels + bach_labels + schubert_labels + chopin_labels + tchaikovsky_labels].A\n", + "y = np.array([0 for i in range(len(mozart_labels))] + [1 for i in range(len(bach_labels))] + \n", + " [2 for i in range(len(schubert_labels))] + [3 for i in range(len(chopin_labels))] +\n", + " [4 for i in range(len(tchaikovsky_labels))])\n", + "y = y.reshape((y.shape[0],))\n", + "del features" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X = X[:,X.sum(axis=0).nonzero()[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# mkdir dumps/logistic/l2" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "regularization_parameter = 1.0\n", + "predicted = []\n", + "actuals = []\n", + "lr_models = []\n", + "i = 0\n", + "for train_idx, test_idx in KFold(n=X.shape[0], n_folds=10, shuffle=True):\n", + " X_train = X[train_idx]\n", + " y_train = y[train_idx]\n", + " X_test = X[test_idx]\n", + " y_test = y[test_idx]\n", + " lr = LogisticRegression(penalty='l2', C=regularization_parameter)\n", + " \n", + " try:\n", + " lr.fit(X_train, y_train)\n", + " except:\n", + " continue\n", + " preds = lr.predict(X_test)\n", + " predicted.append(preds)\n", + " actuals.append(y_test)\n", + " lr_models.append(lr)\n", + " pickle.dump(lr_models, open(\"./dumps/logistic/l2/model_fold_{fold}_reg_{reg}.pkl\"\n", + " .format(fold=str(i), reg=str(regularization_parameter)), 'wb'))\n", + " pickle.dump(predicted, open(\"./dumps/logistic/l2/predicted_fold_{fold}_reg_{reg}.pkl\"\n", + " .format(fold=str(i), reg=str(regularization_parameter)), 'wb'))\n", + " pickle.dump(actuals, open(\"./dumps/logistic/l2/actuals_fold_{fold}_reg_{reg}.pkl\"\n", + " .format(fold=str(i), reg=str(regularization_parameter)), 'wb'))\n", + " i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false, + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "confusion matrix\n", + "[[ 62 17 1 0 1]\n", + " [ 5 221 0 0 1]\n", + " [ 7 3 10 0 3]\n", + " [ 1 1 1 16 1]\n", + " [ 2 3 5 2 15]]\n", + "\taccuracy\n", + "\t\t 0.857142857143\n", + "\tf1\n", + "\t\t 0.850155448187\n", + "\trecall\n", + "\t\t 0.857142857143\n", + "\tprecision\n", + "\t\t 0.848087164961\n", + "confusion matrix\n", + "[[ 47 11 1 0 1]\n", + " [ 6 227 0 2 2]\n", + " [ 3 5 22 5 4]\n", + " [ 0 2 0 22 1]\n", + " [ 0 1 2 2 12]]\n", + "\taccuracy\n", + "\t\t 0.873015873016\n", + "\tf1\n", + "\t\t 0.87003507979\n", + "\trecall\n", + "\t\t 0.873015873016\n", + "\tprecision\n", + "\t\t 0.876492593366\n", + "confusion matrix\n", + "[[ 60 12 1 0 1]\n", + " [ 3 226 1 0 2]\n", + " [ 4 4 7 2 7]\n", + " [ 0 3 1 19 0]\n", + " [ 4 2 5 1 13]]\n", + "\taccuracy\n", + "\t\t 0.859788359788\n", + "\tf1\n", + "\t\t 0.851173038507\n", + "\trecall\n", + "\t\t 0.859788359788\n", + "\tprecision\n", + "\t\t 0.846572978988\n", + "confusion matrix\n", + "[[ 69 14 2 0 1]\n", + " [ 3 209 1 0 0]\n", + " [ 1 2 15 0 6]\n", + " [ 3 5 1 14 0]\n", + " [ 2 6 3 3 18]]\n", + "\taccuracy\n", + "\t\t 0.859788359788\n", + "\tf1\n", + "\t\t 0.853498784456\n", + "\trecall\n", + "\t\t 0.859788359788\n", + "\tprecision\n", + "\t\t 0.854637809109\n", + "confusion matrix\n", + "[[ 54 19 1 0 1]\n", + " [ 12 218 0 1 0]\n", + " [ 2 3 16 0 3]\n", + " [ 0 4 0 18 1]\n", + " [ 1 5 3 0 16]]\n", + "\taccuracy\n", + "\t\t 0.851851851852\n", + "\tf1\n", + "\t\t 0.84824109925\n", + "\trecall\n", + "\t\t 0.851851851852\n", + "\tprecision\n", + "\t\t 0.849136795664\n", + "confusion matrix\n", + "[[ 49 16 3 0 1]\n", + " [ 4 226 0 0 1]\n", + " [ 5 1 12 2 6]\n", + " [ 1 2 1 14 0]\n", + " [ 3 5 4 1 21]]\n", + "\taccuracy\n", + "\t\t 0.851851851852\n", + "\tf1\n", + "\t\t 0.844769761221\n", + "\trecall\n", + "\t\t 0.851851851852\n", + "\tprecision\n", + "\t\t 0.842329304581\n", + "confusion matrix\n", + "[[ 55 19 1 0 0]\n", + " [ 5 219 1 1 2]\n", + " [ 4 0 26 0 2]\n", + " [ 2 2 0 12 2]\n", + " [ 3 4 4 0 13]]\n", + "\taccuracy\n", + "\t\t 0.862068965517\n", + "\tf1\n", + "\t\t 0.857599601143\n", + "\trecall\n", + "\t\t 0.862068965517\n", + "\tprecision\n", + "\t\t 0.857979814867\n", + "confusion matrix\n", + "[[ 49 14 0 0 1]\n", + " [ 8 219 1 0 1]\n", + " [ 1 3 17 3 2]\n", + " [ 1 2 3 21 0]\n", + " [ 3 4 5 3 16]]\n", + "\taccuracy\n", + "\t\t 0.854111405836\n", + "\tf1\n", + "\t\t 0.849294886426\n", + "\trecall\n", + "\t\t 0.854111405836\n", + "\tprecision\n", + "\t\t 0.850440801993\n", + "confusion matrix\n", + "[[ 52 21 0 0 1]\n", + " [ 8 229 0 0 1]\n", + " [ 4 1 13 1 3]\n", + " [ 2 5 1 17 0]\n", + " [ 1 1 3 0 13]]\n", + "\taccuracy\n", + "\t\t 0.859416445623\n", + "\tf1\n", + "\t\t 0.854710264777\n", + "\trecall\n", + "\t\t 0.859416445623\n", + "\tprecision\n", + "\t\t 0.856598183698\n", + "confusion matrix\n", + "[[ 45 7 1 0 0]\n", + " [ 4 241 2 0 3]\n", + " [ 6 0 19 1 5]\n", + " [ 1 6 2 13 1]\n", + " [ 4 4 1 1 10]]\n", + "\taccuracy\n", + "\t\t 0.870026525199\n", + "\tf1\n", + "\t\t 0.865904722646\n", + "\trecall\n", + "\t\t 0.870026525199\n", + "\tprecision\n", + "\t\t 0.868161222562\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n" + ] + } + ], + "source": [ + "model_folder = \"/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/dumps/logistic/l2/\"\n", + "accuracy = []\n", + "precision = []\n", + "recall = []\n", + "f1 = []\n", + "mcc = []\n", + "predicted = pickle.load(open(model_folder + \"predicted_fold_9_reg_{reg}.pkl\".format(reg=regularization_parameter), 'rb'))\n", + "actuals = pickle.load(open(model_folder + \"actuals_fold_9_reg_{reg}.pkl\".format(reg=regularization_parameter), 'rb'))\n", + "for preds, actual in zip(predicted, actuals):\n", + " pred = preds\n", + " print(\"confusion matrix\")\n", + " print(metrics.confusion_matrix(actual, pred))\n", + " print(\"\\taccuracy\")\n", + " acc = metrics.accuracy_score(actual, pred)\n", + " accuracy.append(acc)\n", + " print(\"\\t\\t\", acc)\n", + " print(\"\\tf1\")\n", + " f = metrics.f1_score(actual, pred)\n", + " f1.append(f)\n", + " print(\"\\t\\t\", f)\n", + " print(\"\\trecall\")\n", + " r = metrics.recall_score(actual, pred)\n", + " recall.append(r)\n", + " print(\"\\t\\t\", r)\n", + " print(\"\\tprecision\")\n", + " p = metrics.precision_score(actual, pred)\n", + " precision.append(p)\n", + " print(\"\\t\\t\", p)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.85990624956142203" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.mean(accuracy)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "from scipy.stats.distributions import beta\n", + "def posterior_overlap_eval(actual, pred, labels, granularity=10000):\n", + " colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k')\n", + " tp_fn = []\n", + " confusion = metrics.confusion_matrix(actual, pred)\n", + " for i in range(confusion.shape[0]):\n", + " tp = confusion[i,i]\n", + " fn = np.delete(confusion[i,:], i).sum()\n", + " tp_fn.append((tp, fn))\n", + " betas = [beta(a=1 + tp, b = 1 + fn) for tp, fn in tp_fn]\n", + " for i, beta_dist in enumerate(betas):\n", + " random_draws = beta_dist.rvs(granularity)\n", + " plt.hist(random_draws, alpha=0.2, color=colors[i], bins=np.linspace(0,1, 100))\n", + " plt.vlines(random_draws.mean(), 0, 3000, label=labels[i], color=colors[i], linestyles=\"dotted\")\n", + " plt.legend(loc=\"upper left\")\n", + " plt.show()\n", + "labs = [\"mozart\", \"bach\", \"schubert\", \"chopin\", \"tchaikovsky\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n8Nlnn6Gurg5lZWW+r69duxb79u1DSUkJDh06hLvuugv/+Mc/Jvz5q1atwv79+9HX14d3330Xd911\nF7Ra7aTzJCI/HI6hM3ki8H/ak+VxeGA/aof9qB0eh8f/N0iM1KeDw+PBUbsdR+12ODzyGx9/XG4X\nWi61oOVSC1xu6W5KAiS4O95YaBzxmjZFC23KyOIlNn/kimt1ghrqBPWI1w05IwvOqS5I12g0w9Z7\nzp07F3v27MHAwMC4V0PH0tLSgsuXL+PJJ5/EzJkzAQCNjY1+vy8qKgq/+tWv8MQTT+Dhhx/Gjh07\nkJycDACYPXs2/v73vw97f319PQwGA6677jrfn+Pf/u3fsHfvXrS1tWH27NnIysoa9j1paWl45JFH\n8Mgjj+DJJ5/Eu+++izvuuGPUz//jH/+IpKQk3/cWFxcjOjoab731FqqqqvDWW29N+u+GiCYgJwf4\n6COxs5AMQ44BBR8ViJ3GtJH6dMgxGPBRgXzHx5858XOwrWxoY6+lyzLOu8Ob5K6ESsGsWbPQ2NiI\nTz/9FJcuXcJDDz0Eq9WKxx9/HEeOHMGZM2ewZ88etLW1TejnpaSkQK1W44033sDZs2fx/vvv4+WX\nXx7xPq/XO+I1hUKB5557DllZWXjkkUfQ1SWsp33wwQfR0dGBjRs3oqWlBf/4xz/w4osvYs2aNcO+\nf/ny5fjnP/+JXbt24Utf+pLvdZfLhY0bN6Kmpgbnzp1DfX09mpqakJmZOebnP/zww77PBwClUokV\nK1bg17/+NdLT07Fw4cIJ/X0QERGR9LEInQZf//rXoVQqcffdd2Px4sWw2+14/fXXYbfb8bWvfQ0r\nV67EO++8M+pO8tHEx8fj2WefxV//+lfcc8892Lp1K5566qkR7xtrd3xUVBR+85vf4KabbsKjjz4K\ni8WCmTNn4g9/+AOampqwYsUK/PSnP8Xq1avxrW99a9j3FhUVwWQy4cyZM7jnnnt8ryuVSnR3d+Op\np57CsmXL8MQTT6C4uHjUzk+jff4V9913H/r7+7Fy5coJ/V0QERGRPCi8o10+CxG73Y7jx49j/vz5\n0EfggbME1NXVYc2aNfjXv/6F+Ph4sdMhkie3e6g/o14PRODZipPhcXt8J6go9UooVfK6XiP16eD2\neGAfXAuqVyqhUsprfMZis9lwuOMw1Dq1r12nTqVDj6UHUADxCcP/H+qwO5Cfkg+DIfD9LdNVr0XG\n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\nTp5C0ShUZJ5gp20jAJ2OtSGhKhlTx2pKHd7/T2zlVagaKK0z9OV0ebVS6nOM2oclhycAABnYSURB\nVFPV/K90L2l1vlt0LhcXp6V54rZgUdRwtrvWUV5ezpEjRyJ1eCGEEEIIUU9dunShRYsWQdtfRINQ\nh8NBVVUVcXFxfrschRBCCCFEZLlcLqxWK2lpaT69jxciokGoEEIIIYRonqT5UQghhBBChJ0EoUII\nIYQQIuwkCBVCCCGEEGEnQagQQgghhAg7CUKFEEIIIUTYSRAqhBBCCCHCToJQIYQQQggRdhKECiGE\nEEKIsAt5EPrGG28watQosrOz+e1vf8t33313zufv3LmTG264gaysLMaOHcu7774b6iqKIGrI+d6y\nZQtTp04lJyeHSy65hMmTJ/P555+HsbbiQjX0+j7tm2++oV+/flx//fUhrqEIpoaeb5vNxgsvvMCo\nUaPIysriqquuYv369WGqrbhQDT3f//3vf7nuuusYMGAAw4cP59FHH8VoNIaptqKxdu3axbRp0xgx\nYgS9e/fmo48+Ou82QYvV1BDatGmT2r9/f/Xdd99V8/Ly1FmzZqmXXnqpWl5e7vf5BQUF6oABA9SF\nCxeq+fn56r/+9S+1b9++6ueffx7Kaoogaej5fuqpp9QVK1ao+/btU48ePao+//zzar9+/dQDBw6E\nueaiMRp6vk87deqUOnr0aPX2229XJ06cGKbaigvVmPM9bdo09aabblJ37NihFhUVqXv27FF3794d\nxlqLxmro+d61a5fap08f9V//+pdaWFiofvPNN+qECRPU6dOnh7nmoqG2bdumLlq0SN2yZYvau3dv\ndevWred8fjBjtZAGoZMmTVLnzp3rue9yudQRI0aoy5Yt8/v8Z555Rp0wYYJX2YwZM9Q77rgjlNUU\nQdLQ8+3P+PHj1ZdeeikU1RNB1tjzPWPGDHXx4sXqiy++KEFoFGno+d62bZt66aWXqlVVVeGqogii\nhp7vlStXqmPGjPEqe/3119XLL788lNUUQdarV6/zBqHBjNVC1h1vt9vZv38/OTk5njJFURg2bBh7\n9uzxu83evXsZNmyYV9nw4cMDPl80HY0533WpqkptbS1paWmhqqYIksae73Xr1lFYWMi9994bjmqK\nIGnM+f7kk0/o378/y5cvZ+TIkYwdO5aFCxditVrDVW3RSI053wMGDKCkpIRt27YBUFZWxgcffMDl\nl18eljqL8AlmrKYLVqXqqqysxOl00rJlS6/yFi1acPjwYb/blJaW0qJFC5/n19TUYLPZMBgMoaqu\nuECNOd91rVixApPJxDXXXBOKKoogasz5PnLkCC+88AJr1qxBo5E5kdGkMee7oKCAXbt2YTAYeOml\nl6isrORvf/sbVVVVzJ8/PxzVFo3UmPM9aNAg/v73vzNjxgxsNhsOh4NRo0bxxBNPhKPKIoyCGavJ\nN4FoEjZu3MjLL7/M4sWLyczMjHR1RJC5XC4efPBBpk+fTufOnQF3y7eIXaqqotFoeO6558jKymLk\nyJHMnDmT//znP9hstkhXTwRZXl4eTz31FNOnT2f9+vWsXLmSwsJCCULFOYUsCM3IyECr1VJWVuZV\nXl5e7vPr6rRWrVpRXl7u8/zk5GRpBW3iGnO+T9u0aRNPPPEEixcvZujQoaGspgiShp7v2tpacnNz\nmTt3Lv369aNfv368/PLLHDhwgP79+7Nz585wVV00QmP/n7dp04akpCRPWbdu3VBVlePHj4e0vuLC\nNOZ8L1u2jEGDBvH//t//o2fPnvzyl79k9uzZrFu3zmc/IroFM1YLWRCq1+vp168fO3bs8JSpqsqO\nHTsYOHCg320GDBjg9XyAL774ggEDBoSqmiJIGnO+Ad577z0ee+wxnn/+eUaOHBmOqoogaOj5Tk5O\n5r333uM///kPGzZsYMOGDUyePJlu3bqxYcMGfvGLX4Sz+qKBGnN9Dxo0iJMnT2I2mz1lhw8fRqPR\n0LZt25DXWTReY863xWJBp/Me4afRaFAURXo9YkwwYzXt3/72t78FqV4+kpKSWLJkCe3atUOv17No\n0SIOHjzIU089RUJCAs899xwbNmxgzJgxAHTu3JlXXnmF6upq2rVrx/vvv8/q1at54okn6NSpU6iq\nKYKkoed748aNzJw5k5kzZ5KTk4PJZMJkMuFyuaTlOwo05HwrikJmZqbXX25uLseOHeOuu+7y+fIS\nTU9Dr++uXbuyfv16cnNz6dGjB/n5+cybN48xY8YwevToCL8acT4NPd8Wi4Xly5eTkZFBeno6eXl5\nzJ8/n/bt23PbbbdF+NWIczGZTOTn51NaWspbb71FdnY28fHx2O12UlJSQhqrhfQ//7hx46isrGTJ\nkiWUlZXRp08fVqxY4RnzV1ZWRklJief5HTt2ZNmyZSxYsIDXX3+dtm3bMm/ePJ9ZWKJpauj5fvvt\nt3E6ncyZM4c5c+Z4yidOnMiCBQvCXn/RMA093yK6NfR8JyYm8uqrrzJv3jxuvPFG0tPTueaaa7jv\nvvsi9RJEAzT0fF9//fWYTCbWrFnDM888Q0pKCjk5OTzwwAORegminnJzc7n11ltRFAVFUVi4cCFw\n5rs4lLGaoko7uRBCCCGECDOZHS+EEEIIIcJOglAhhBBCCBF2EoQKIYQQQoiwkyBUCCGEEEKEnQSh\nQgghhBAi7CQIFUIIIYQQYSdBqBBCCCGECDsJQoUQ57V06VJ69+7t+cvJyeG2225j165dXs9buHBh\nSBYj37p1K2vWrAn6fs/2yCOPcO2114b0GKG0evVqevfu7bn/1Vdf0bt3b/bv31/vfXz11Vf83//9\nX0jrtXv3boYOHUptbW1QjyOEiD4ShAoh6iUhIYG3336bt99+myeffJKqqiqmTJlCXl4eACdOnGDt\n2rX86U9/CvqxP/roI9auXRv0/Z5NUZSQ7j/UTmc7Oa1fv368/fbbdO/evd77CEUQWrdegwYNokeP\nHqxatSqoxxFCRB8JQoUQ9aIoCtnZ2WRnZ/OrX/2Kf/zjHzidTt58800A3nrrLbp06UKfPn0iXNPo\nY7PZCHbyuqSkJE8O6PoKVwK93/zmN6xduxan0xmW4wkhmiYJQoUQjdKuXTsyMjIoLCwEYMOGDYwd\nO9brOT/99BP3338/V1xxBQMGDGD8+PGsWrXKJ9ix2Wy88MILjB49mqysLC6//HJmzpwJwMyZM3n3\n3XfJy8vzDAc4/dgf/vAHpk2b5rWvH374gd69e/P11197ylatWsWNN97I4MGDGTZsGNOmTePIkSPB\nfks8XfqfffYZ1157LdnZ2dxwww3s3bvX63mjRo1i7ty5rFixglGjRjFgwACqqqoAyM/P56677mLw\n4MEMHDiQP/3pTxQUFHhtX1NTw8MPP8ygQYMYNmwYf//7330COn/d8aqqsmrVKsaNG0dWVhbDhw/n\nvvvuo6amhqVLl/LSSy9hNps97/Ott97q2TZY9QIYPXo0VVVVbNu2rXFvtBAiJugiXQEhRHSqqamh\nqqqK1q1bc+zYMYqKihg0aJDXc06cOEGXLl249tprSU5O5sCBA7z44ouYTCbuuecez/OmT5/OV199\nxbRp08jOzqayspLNmzcDcPfdd1NRUcHhw4d59tlnAcjIyDhn3ep2rR8/fpxbbrmFDh06YDKZePPN\nN5k8eTKbN28mNTU14H7q01Kn1Wq9jnvy5EnmzJnD9OnTSU1NZdmyZdxxxx18+OGHZGZmep774Ycf\n0rVrVx577DG0Wi2JiYkUFBRw880307NnTxYuXIiiKPzjH/9gypQpfPDBB+j1egAeffRRvvjiCx56\n6CE6dOjAmjVreO+99877PsyZM4d33nmHKVOmMGzYMGpra/n0008xmUxMmjSJ48ePs2nTJl577TXA\n3ZoKBL1eycnJ9OjRg+3btzNq1KjzvsdCiNgkQagQot5OB2UlJSUsXLgQl8vF2LFj2bdvH4qi0KtX\nL6/n5+TkkJOT47k/aNAgzGYzb7zxhicI/eKLL9i2bRvPP/8848aN8zz39O1OnTqRmZlJcXEx2dnZ\n9apn3ZbW0y2nAC6Xi5ycHIYNG8aHH37IpEmT/O6jqKiIq6666pzHURSFBQsWMHHiRE/ZqVOnePHF\nFxkyZAgAl156KZdffjmvvfYaM2bM8DzP6XSyYsUK4uLiPGVLly4lPT2dVatWeQK7AQMGMHr0aP79\n739z8803k5+fz5YtW5g/fz7XX389AMOHD+dXv/rVOet65MgR3nzzTe6//37uvPNOT/mYMWM8t9u2\nbesZdnG2UNSrd+/ePi3EQojmRYJQIUS9mEwm+vXr57mflpbGE088wS9/+UtWr16NRqMhPT3daxub\nzcYrr7zCe++9R3FxMQ6HA3AHb2azmYSEBL788ksSEhK8AtBg27NnD4sXL+b777/3dHsrisLhw4cD\nbtO6dWvWrVt33n137NjR635KSoonAAV3q9+wYcN8Aq4hQ4Z4BaDgDsgnTJiARqPxBPypqan07duX\nffv2cfPNN/Pdd98B7i7t0zQaDaNHj/a0YPrz5ZdfAu7xmA0Vinqlp6dTWlra4LoIIWKHBKFCiHpJ\nSEjgjTfeANzd4e3atfM8ZrVa0el8/50888wzrFu3jnvvvZe+ffuSmprK1q1beeWVV7BarSQkJGA0\nGmndunXI6l1SUsLtt99OVlYWc+fOpXXr1uj1ev74xz9is9kCbqfX672WFgrk7O548D9UoEWLFvz0\n009eZS1btvR5ntFo5LXXXmP16tVe5YqiYDAYACgtLUWn05GSkuJzjHMxGo1otVqvIQH1FYp6GQwG\nLBZLg+sihIgdEoQKIepFURT69u3r97G0tDRsNhs2m80TlIB73OPkyZO5/fbbPWWffPKJ17bp6emc\nPHmyUXWKi4vDbrd7lVVVVXmNhfzss88wm80sXbqU5ORkwN0VfrpFNJDGdsdXVlb6PK+8vJxWrVr5\nbFtXWloaV1xxBb/73e98hhScHp/ZunVrHA4H1dXVXgFfWVnZOeuanp6O0+mkoqKiwYFoKOpVXV3t\n03IuhGheJAgVQlywrl27AlBYWEi3bt085XVbSF0uF5s2bfLadtiwYaxYsYL//e9/XHPNNX73r9fr\n/bZatm3blu3bt3uVff755173rVYriqJ41eP999/3DA0IpLHd8dXV1ezcuZPLLrvMc3/79u38/ve/\nP+++cnJyOHToEH369Am4bmlWVhaqqrJlyxZuuOEGwP2+bt269Zz7Hjp0KADr16/njjvu8PucQO9z\nKOpVVFTk+dwIIZonCUKFEBcsOzsbrVbL/v37vYLQYcOGeRZMz8jIYM2aNT4tlzk5OYwcOZJHH32U\nY8eOkZ2djdFoZPPmzbzwwgsAdOvWjfXr17Np0yYuuugiMjIy6NChA2PHjmXdunXMnTuX0aNHs3v3\nbs+s+tOGDh2Kqqo88sgj3HTTTRw6dIjVq1eTlpZ2ztek1+u9xsDWV2pqKo899hj33nsvKSkpLF++\nHIDbbrvtvNv++c9/ZtKkSUydOpXf/va3tGzZktLSUr7++msuvfRSxo0bR/fu3RkzZgzz58/HYrHQ\noUMH1q5d6zeoPrvVskuXLkyePJlFixZhNBrJycnBbDazbds2pk+fTuvWrenevTtOp5N//vOfDBw4\nkOTkZLp27Rr0egHk5uYyderUBr+/QojYIeuECiHq5VwZhRISEhgxYgSfffaZV/msWbMYMmQI8+bN\n47HHHqNXr14+63oCvPjii9x666289dZb/PGPf+SZZ57xdJ0D3HjjjYwdO5Z58+YxadIkli5dCsCI\nESN46KGH+OSTT7jnnnvIy8vjySef9Np3z549efrpp/n++++56667eP/991myZInX/uvzGuurdevW\nzJo1i+XLlzNjxgzsdjuvvvqqVxd4oON07tyZd955h4yMDObMmcMdd9zB888/j8Vi8Vp5YMGCBYwa\nNYpnn32WRx55hK5duzJlypTzvp7Zs2dz//33s3XrVqZNm8aTTz6JyWTydKlfeeWV3HLLLSxbtoyb\nbrqJ2bNnh6Re+/fvp7Ky8rwz+oUQsU1Rw5UiQwgR0z755BMefPBBtm/f7jPru7mYOXMmubm5bNy4\n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\n/ye4YWM4jU1KAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mymodel = \"L2-Regularized Logistic Regression\"\n", + "sns.set_style(\"whitegrid\")\n", + "plt.title(\"Posterior Probability of Within-Class Error\\n{model}\".format(model=mymodel))\n", + "plt.xlabel('P(actual=predicted)\\n' + r'Beta($\\alpha, \\beta$)')\n", + "plt.ylabel(\"Density\")\n", + "plt.yticks([])\n", + "ax = plt.gca()\n", + "ax.grid(False)\n", + "posterior_overlap_eval(actual, pred, labels=labs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/nbs/LDAResults.ipynb b/nbs/LDAResults.ipynb new file mode 100644 index 0000000..1239c7a --- /dev/null +++ b/nbs/LDAResults.ipynb @@ -0,0 +1,790 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os\n", + "import pickle\n", + "import numpy as np\n", + "from scipy import sparse\n", + "from functools import partial\n", + "from sklearn.externals import joblib\n", + "from sklearn.cross_validation import KFold\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.cross_validation import train_test_split\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from midi_ml.models.linear_decision_rules import LinearDiscriminantAnalysis" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "labels = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_labels.pkl\")\n", + "features = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_matrix.pkl\")\n", + "features = features.todense()\n", + "mozart_labels = [k for k in range(len(labels)) if labels[k] == \"mozart\"]\n", + "bach_labels = [k for k in range(len(labels)) if labels[k] == \"bach-js\"]\n", + "schubert_labels = [k for k in range(len(labels)) if labels[k] == \"schubert\"]\n", + "chopin_labels = [k for k in range(len(labels)) if labels[k] == \"chopin\"]\n", + "tchaikovsky_labels = [k for k in range(len(labels)) if labels[k] == \"tchaikovsky\"]\n", + "X = features[mozart_labels + bach_labels + schubert_labels + chopin_labels + tchaikovsky_labels].A\n", + "y = np.array([0 for i in range(len(mozart_labels))] + [1 for i in range(len(bach_labels))] + \n", + " [2 for i in range(len(schubert_labels))] + [3 for i in range(len(chopin_labels))] +\n", + " [4 for i in range(len(tchaikovsky_labels))])\n", + "y = y.reshape((y.shape[0],))\n", + "del features" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X = X[:,X.sum(axis=0).nonzero()[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# mkdir dumps/lda" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "regularization_parameter = 0.01\n", + "predicted = []\n", + "actuals = []\n", + "i = 0\n", + "for train_idx, test_idx in KFold(n=X.shape[0], n_folds=10, shuffle=True):\n", + " X_train = X[train_idx]\n", + " X_test = X[test_idx]\n", + " y_train = y[train_idx]\n", + " y_test = y[test_idx]\n", + " lda = LinearDiscriminantAnalysis(X_train, y_train, regularization=regularization_parameter, keep_copy_of_X=False)\n", + " lda.fit()\n", + " preds = lda.predict(X_test)\n", + " predicted.append(preds)\n", + " actuals.append(y_test)\n", + " del lda\n", + " pickle.dump(predicted, open(\"./dumps/lda/predicted_fold_{fold}_reg_{reg}.pkl\"\n", + " .format(fold=str(i), reg=str(regularization_parameter)), 'wb'))\n", + " pickle.dump(actuals, open(\"./dumps/lda/actuals_fold_{fold}_reg_{reg}.pkl\"\n", + " .format(fold=str(i), reg=str(regularization_parameter)), 'wb'))\n", + " i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.74603174603174605" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "metrics.accuracy_score(y_test, lda.predict(X_test))" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "confusion matrix\n", + "[[ 31 31 5 8 1]\n", + " [ 3 223 0 8 4]\n", + " [ 0 1 7 4 9]\n", + " [ 1 7 4 9 3]\n", + " [ 0 2 3 7 7]]\n", + "\taccuracy\n", + "\t\t 0.732804232804\n", + "\tf1\n", + "\t\t 0.726552106257\n", + "\trecall\n", + "\t\t 0.732804232804\n", + "\tprecision\n", + "\t\t 0.760927707074\n", + "confusion matrix\n", + "[[ 30 33 10 2 1]\n", + " [ 3 207 0 4 1]\n", + " [ 2 0 15 5 12]\n", + " [ 1 11 0 9 2]\n", + " [ 0 5 8 12 5]]\n", + "\taccuracy\n", + "\t\t 0.703703703704\n", + "\tf1\n", + "\t\t 0.683409216136\n", + "\trecall\n", + "\t\t 0.703703703704\n", + "\tprecision\n", + "\t\t 0.704357518997\n", + "confusion matrix\n", + "[[ 26 29 8 2 1]\n", + " [ 4 238 0 3 0]\n", + " [ 2 0 14 3 7]\n", + " [ 1 6 1 15 1]\n", + " [ 0 3 8 3 3]]\n", + "\taccuracy\n", + "\t\t 0.783068783069\n", + "\tf1\n", + "\t\t 0.765065104401\n", + "\trecall\n", + "\t\t 0.783068783069\n", + "\tprecision\n", + "\t\t 0.77541324146\n", + "confusion matrix\n", + "[[ 28 33 10 1 1]\n", + " [ 7 215 0 4 0]\n", + " [ 1 0 12 7 3]\n", + " [ 0 11 0 10 1]\n", + " [ 1 8 6 13 6]]\n", + "\taccuracy\n", + "\t\t 0.716931216931\n", + "\tf1\n", + "\t\t 0.692838111492\n", + "\trecall\n", + "\t\t 0.716931216931\n", + "\tprecision\n", + "\t\t 0.719356014969\n", + "confusion matrix\n", + "[[ 41 24 5 2 3]\n", + " [ 3 211 0 5 0]\n", + " [ 3 2 17 9 11]\n", + " [ 0 4 3 8 2]\n", + " [ 0 1 7 12 5]]\n", + "\taccuracy\n", + "\t\t 0.746031746032\n", + "\tf1\n", + "\t\t 0.742716604433\n", + "\trecall\n", + "\t\t 0.746031746032\n", + "\tprecision\n", + "\t\t 0.763001247716\n", + "confusion matrix\n", + "[[ 30 29 13 0 0]\n", + " [ 6 213 0 5 2]\n", + " [ 3 1 16 4 7]\n", + " [ 0 8 1 8 3]\n", + " [ 0 2 9 13 5]]\n", + "\taccuracy\n", + "\t\t 0.719576719577\n", + "\tf1\n", + "\t\t 0.705789503356\n", + "\trecall\n", + "\t\t 0.719576719577\n", + "\tprecision\n", + "\t\t 0.720195989164\n", + "confusion matrix\n", + "[[ 34 28 4 1 0]\n", + " [ 2 220 0 5 1]\n", + " [ 6 3 9 8 6]\n", + " [ 0 8 0 18 0]\n", + " [ 1 3 7 8 5]]\n", + "\taccuracy\n", + "\t\t 0.758620689655\n", + "\tf1\n", + "\t\t 0.737608179366\n", + "\trecall\n", + "\t\t 0.758620689655\n", + "\tprecision\n", + "\t\t 0.744103782136\n", + "confusion matrix\n", + "[[ 27 25 5 4 1]\n", + " [ 0 240 0 3 0]\n", + " [ 1 1 16 2 2]\n", + " [ 0 7 3 13 2]\n", + " [ 1 3 9 7 5]]\n", + "\taccuracy\n", + "\t\t 0.798408488064\n", + "\tf1\n", + "\t\t 0.778543733061\n", + "\trecall\n", + "\t\t 0.798408488064\n", + "\tprecision\n", + "\t\t 0.804779970757\n", + "confusion matrix\n", + "[[ 34 27 5 0 1]\n", + " [ 4 223 1 8 0]\n", + " [ 1 1 6 5 6]\n", + " [ 0 8 0 14 1]\n", + " [ 2 2 5 10 13]]\n", + "\taccuracy\n", + "\t\t 0.769230769231\n", + "\tf1\n", + "\t\t 0.76056408816\n", + "\trecall\n", + "\t\t 0.769230769231\n", + "\tprecision\n", + "\t\t 0.775647032409\n", + "confusion matrix\n", + "[[ 38 31 8 0 0]\n", + " [ 1 233 0 5 1]\n", + " [ 2 1 6 7 5]\n", + " [ 0 7 1 12 1]\n", + " [ 0 0 1 10 7]]\n", + "\taccuracy\n", + "\t\t 0.785145888594\n", + "\tf1\n", + "\t\t 0.774217950964\n", + "\trecall\n", + "\t\t 0.785145888594\n", + "\tprecision\n", + "\t\t 0.799047357184\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n" + ] + } + ], + "source": [ + "regularization_parameter=0.01\n", + "model_folder = \"/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/dumps/lda/\"\n", + "accuracy = []\n", + "precision = []\n", + "recall = []\n", + "f1 = []\n", + "mcc = []\n", + "predicted = pickle.load(open(model_folder + \"predicted_fold_9_reg_{reg}.pkl\".format(reg=regularization_parameter), 'rb'))\n", + "actuals = pickle.load(open(model_folder + \"actuals_fold_9_reg_{reg}.pkl\".format(reg=regularization_parameter), 'rb'))\n", + "for preds, actual in zip(predicted, actuals):\n", + " pred = preds\n", + " print(\"confusion matrix\")\n", + " print(metrics.confusion_matrix(actual, pred))\n", + " print(\"\\taccuracy\")\n", + " acc = metrics.accuracy_score(actual, pred)\n", + " accuracy.append(acc)\n", + " print(\"\\t\\t\", acc)\n", + " print(\"\\tf1\")\n", + " f = metrics.f1_score(actual, pred)\n", + " f1.append(f)\n", + " print(\"\\t\\t\", f)\n", + " print(\"\\trecall\")\n", + " r = metrics.recall_score(actual, pred)\n", + " recall.append(r)\n", + " print(\"\\t\\t\", r)\n", + " print(\"\\tprecision\")\n", + " p = metrics.precision_score(actual, pred)\n", + " precision.append(p)\n", + " print(\"\\t\\t\", p)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.79840848806366049" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.max(accuracy)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "from scipy.stats.distributions import beta\n", + "def posterior_overlap_eval(actual, pred, labels, granularity=10000):\n", + " colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k')\n", + " tp_fn = []\n", + " confusion = metrics.confusion_matrix(actual, pred)\n", + " for i in range(confusion.shape[0]):\n", + " tp = confusion[i,i]\n", + " fn = np.delete(confusion[i,:], i).sum()\n", + " tp_fn.append((tp, fn))\n", + " betas = [beta(a=1 + tp, b = 1 + fn) for tp, fn in tp_fn]\n", + " for i, beta_dist in enumerate(betas):\n", + " random_draws = beta_dist.rvs(granularity)\n", + " plt.hist(random_draws, alpha=0.2, color=colors[i], bins=np.linspace(0,1, 100))\n", + " plt.vlines(random_draws.mean(), 0, 5000, label=labels[i], color=colors[i], linestyles=\"dotted\")\n", + " plt.legend(loc=\"upper left\")\n", + " plt.show()\n", + "labs = [\"mozart\", \"bach\", \"schubert\", \"chopin\", \"tchaikovsky\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqEAAAIoCAYAAABZHTJOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3XdYFMcbB/Dv0TsKiCIoxcIp0lGwIAg2BAQ1WEEs2Ika\nNb+AmmiixqjRxKjBgoiSWIiKgAVrihUVEZWIDTQIilKk99vfH4SV5agKHFzez/Pc8+zNzs6+uzcH\nc7OzszyGYRgQQgghhBDSgiREHQAhhBBCCPnvoUYoIYQQQghpcdQIJYQQQgghLY4aoYQQQgghpMVR\nI5QQQgghhLQ4aoQSQgghhJAWR41QQgghhBDS4qgRSgghhBBCWhw1QgkhhBBCSIujRighIuTl5QUv\nLy9Rh9HkHBwcMHfu3CYr7+bNm+Dz+Th37ly9ef38/ODg4MBJ4/P52L59O/v++PHj4PP5SE1NbbIY\nP1ZBQQFWrFiBQYMGgc/nY/369c22r8Ycf1hYGPh8PuLj4+vNK+r6XFlPbt26JbIYCCENJyXqAAhp\nqLCwMPj7+7PvZWRkoKWlhUGDBmH+/PlQV1dv8n3Gxsbi6tWrmDZtGpSUlJq8fACQkGiZ34IODg6c\nRoeamhr09fUxffp0DB06tEVi+Bg8Hq/B+eo7pzweT6i8gwcPQl5eHmPGjPngGD/Gzp07ER4ejvnz\n56NLly7o1q1bjflGjRoFGRkZnDhxgpN+4cIF+Pr6om/fvggJCeGsO3r0KFauXImgoCAMGDCg0cff\n0HMPNF99Pn/+PEJDQ3H//n3k5eWhffv2sLS0xMSJE2FjY8Pma0ysLcXLy6vWhrGBgQFOnz7dwhER\n0jpQI5S0KTweD4sWLYK2tjaKi4sRExODQ4cO4a+//sLJkychKyvbpPuLjY3Fjh07MHbs2GZphO7b\nt6/Jy6xL7969MWPGDDAMgzdv3uDIkSPw9fXF119/jQkTJrRoLI3FMEyD8q1duxYCgaDOPO7u7nB2\ndoaMjAybdujQIbRv315kjdDo6GiYmppi/vz5deazsrLCsWPHkJeXx6mTMTExkJKSwoMHD1BeXg5J\nSUl2XWxsLKSkpGBmZgag+Y6/ueqzv78/wsLC2PqroaGBt2/f4vz585g+fToOHTrEHltrpaWlhaVL\nlwrVY2VlZRFFRIjoUSOUtDm2trYwMjICAHzyySdo164dgoODcfHiRYwaNapJ99XQhk9jFRUVQU5O\nDlJSTfcVLC8vh0AggLS0dK15NDU14eLiwr53c3PDsGHDEBwcXGcjtLi4uMkb+M1FUlKS0wCrCY/H\n4zTAWoOMjAx079693nwWFhb47bffEBsbC1tbWzY9NjYWTk5OOHnyJOLj42FiYsKui4mJQc+ePaGg\noACg+Y6/Ketzpb179yIsLAzTp0/HF198wVk3Z84cRERE1Pt5twZKSkqc715DFRYWQl5evtHrmqJ8\nQpobjQklbZ6NjQ0YhsHLly/ZtOTkZCxcuBDW1tYwMzPDhAkT8OeffwptGxISAhcXF5iZmaFfv34Y\nN24cTp06BQDYvn07Nm3aBKDiUjafz0evXr04l7TDw8MxduxYmJqawtraGkuWLMHr1685+/Dy8oKr\nqyvi4+MxZcoUmJmZ4YcffmDXTZ06lZM/MzMTy5cvx8CBA2FiYgI3NzehS68pKSng8/nYt28f9u/f\nj2HDhsHExATPnj1r1LnT0NBAt27dOOeucjznlStXMG7cOJiYmODIkSMAKhq6O3bswLBhw2BsbAwH\nBwf88MMPKCkpqbH8q1evwt3dHSYmJnB2dsb58+c567Ozs7Fhwwa4urrC3NwclpaWmDVrFhISEoTK\n4vF4KC8vx5YtWzBo0CCYm5tj3rx5Que7pjGh1VUfE+ng4IAnT56wYwr5fD6mTp2K5ORk8Pl87N+/\nX6iMO3fugM/n13sptb7Ps3KfKSkp+OOPP2qsZ1VZWlqCYRjcuXOHTSspKUF8fDyGDx8OHR0dzrrM\nzEw8f/4clpaWjT7+qkpKSrB+/Xr0798f5ubm8PX1RVZWFidP9fpcWd6ZM2cQEBAAOzs7mJiYYNq0\nafjnn3/qPG9AxY+f3bt3o3v37vjf//5XY57Ro0fD2Ni41jJu376NRYsWYciQITA2Noa9vT3Wr1+P\n4uJiTr709HT4+/vDzs4OxsbG7DCfqp/D/fv3MXPmTNjY2MDU1BSOjo5Yvnx5vcfRUNu2bQOfz8ez\nZ8+wdOlS9OvXD1OmTAFQUa/Nzc2RnJyMWbNmwcLCAp9//jm77ZkzZ9i/RTY2Nvj888+RlpbGKb++\nMghpadQTStq8Fy9eAADatWsHoKJHaeLEiSguLsbUqVOhqqqKEydOYN68efjpp5/Y8Y+hoaFYt24d\nnJyc4O3tjeLiYjx69AhxcXFwdnbGsGHDkJSUhNOnT2PFihVs+WpqagCAgIAA/PTTTxg1ahTGjx+P\nzMxMhISEwNPTEydOnOBcKs3KysLs2bMxatQouLu71zp+tbi4GJ6enkhOToanpyd0dHQQFRUFPz8/\n5ObmCt30cezYMZSUlGDChAmQkZFhY2yosrIyvH79Wmi7pKQkLF26FBMnTsSECROgr68PAFixYgVO\nnDgBJycnzJgxA/fu3cOuXbuQmJiIbdu2ccp4/vw5lixZgokTJ2LMmDE4fvw4Fi1ahL1796J///4A\nKn4sXLp0CSNHjoSOjg7S09Nx5MgRTJ06FadOnUKHDh3Y8hiGQUBAACQkJDBr1ixkZmYiODgY06dP\nR3h4ONuzV9N4x+qq51mxYgXWrFkDRUVFzJs3DwzDQENDA126dIGFhQUiIyPh7e3NKSMyMhJKSkpw\ndHSsdT8N+Ty7d++OTZs24dtvv4WWlhamT58O4H09q65Lly7Q1NRETEwMm3bv3j2UlZXB3Nwc5ubm\nuHPnDqZNmwagoocUAKcR2tDjr3ru16xZA1VVVfj6+iIlJQX79+/HmjVrsGXLljrPNQDs2bMHEhIS\nmDlzJnJzcxEYGIjPP/+c/XFTm5iYGGRnZ2P69OkfPNYzKioKxcXFmDRpEtq3b4979+7hl19+QVpa\nGn788Uc2n6+vLxITE+Hl5YXOnTsjIyMD165dQ2pqKjp37ozMzEz4+PhATU0Nc+bMgbKyMlJSUoR+\nWNVGIBAINdoBQE5Oju2JrDzGRYsWQU9PD0uWLGGvxlT+CJs5cyYsLS3h5+cHOTk5ABU/KpYvXw5T\nU1MsXboUGRkZ2L9/P2JjYzl/i+oqgxCRYAhpI44fP87w+Xzm+vXrTGZmJvP69Wvm1KlTjLW1NWNm\nZsakpaUxDMMw69atY/h8PnPnzh122/z8fMbR0ZFxdHRk0+bPn8+4uLjUuc+9e/cyfD6fSUlJ4aSn\npKQwvXv3Znbt2sVJf/LkCWNkZMRJ9/T0ZPh8PhMaGipUvqenJ+Pl5cW+Dw4OZvh8PnPy5Ek2rays\njJkwYQJjYWHB5OfnMwzDMC9fvmQMDQ0ZKysrJisrq85jqDRkyBBm5syZTGZmJpOZmck8fPiQ+eyz\nzxg+n8+sW7eOk4/P5zNXr17lbP/w4UPG0NCQ+fLLLznpGzZsYPh8PhMdHS1Uxvnz59m03NxcZtCg\nQcyYMWPYtJKSEqE4U1JSGGNjY+bnn39m06KjoxlDQ0PGzs6OKSgoYNPPnDnDGBoaMiEhIWyan58f\n4+DgwCnT0NCQ2bZtG/u+si5V/VxdXFw4n0WlI0eOMHw+n0lMTGTTSktLGRsbG8bf318of1UN/TwZ\npuKczZkzp87yKi1atIgxMzNjysrKGIZhmF27djFDhw5lGIZhDh48yAwcOJDN+9133zF8Pp958+bN\nBx3/8ePHGUNDQ2bGjBmc9PXr1zNGRkZMbm4um1a9Pld+bs7OzmysDMMwBw4cYPh8PvPkyZM6j7My\n34ULF+rMV3V/fD6fuXnzJptWXFwslG/Xrl1Mr169mFevXjEMwzA5OTmMoaEhExQUVGvZ58+fZ/h8\nPhMfH9+gWKry9PRkDA0NhV58Pp9ZtWoVm2/btm2MoaEhs2zZMqEy/Pz8GD6fz2zZsoWTXlpaygwY\nMIAZPXo051j/+OMPoXpfWxmEiApdjidtCsMwmDZtGvr37w87OzssXboUSkpK2LFjBzQ1NQEAf/31\nF0xMTGBubs5up6CggPHjxyMlJQVPnz4FAKioqCAtLQ33799vdBznzp0DwzBwcnJCVlYW+1JTU4Ou\nri6io6M5+WVkZBp0w8dff/0FDQ0NODs7s2mSkpKYOnUqCgoKhO6wHTFiRKN6P69cuYL+/fujf//+\ncHd3x7lz5+Du7o5ly5Zx8uno6GDAgAFCsfF4PLaHrVLljU5//PEHJ11TU5Nz172SkhLc3d3x8OFD\nZGRkAABn/KpAIMC7d+8gJycHfX19/P3330Lxu7u7c8avjRw5Eh06dKhxqEVTcXJygoyMDCIjI9m0\ny5cv4927dxg9enSd2zb282woS0tLFBUVsdMm3blzh63vFhYWyMjIYC93x8bGQkdHh9Or3Fg8Hk9o\nzLCVlRXKy8sbNM3TuHHjOOM2rayswDAMkpOT69wuLy8PAKCoqPgBUVeoOva1sLAQWVlZMDc3h0Ag\nYOuYrKwspKWlER0djZycnBrLUVFRAcMwuHTpEsrKyhodh46ODoKDg7Fv3z72FRQUJNTDXtO5rmrS\npEmc9w8ePEBGRgYmT57MOVY7OzsYGBgIfS9rKoMQUaHL8aRN4fF4WLVqFXR1dSElJQV1dXUYGBhw\n8qSmptZ4p2zllDcpKSno3r07fHx8cP36dXh4eEBXVxcDBw6Ei4sLLCws6o3jxYsXEAgEGDZsWI0x\nVr85qGPHjg26aSM1NRV6enpC6QYGBmAYBikpKZx0bW3tesusyszMDIsXLwYAyMvLo1u3bjXe9a+j\noyOUlpKSAgkJCejq6nLSNTQ0oKKiItQY6dq1q1AZlceWkpICdXV1MAyD/fv349ChQ3j58iXKy8sB\nVJzD9u3bC21ffd+VadXPS1NSVlbGkCFDcPLkSSxcuBBAxaX4jh07cqYGqkljP8+Gqjou1MTEBLGx\nsfjss88AAD179oSioiLu3LmDTp06IT4+ntMI/lCdOnXivFdRUQGAWhttDdk2OzsbQMUcqQUFBex6\nCQkJqKmpsXUzPz//g+N+9eoVtm7dit9//53dH1BRx3JzcwFUNFSXLVuGjRs3YsCAATAzM4O9vT3c\n3d3ZYQn9+vXDiBEjsGPHDgQHB6Nfv34YOnQoXFxcGnSTl7y8fL31pVKXLl1qTJeUlBQ6l6mpqeDx\neLXWs6rjg2srgxBRoUYoaXOMjY3Zu+M/Rrdu3RAVFYXff/8dly9fxrlz53Dw4EH4+vrC19e3zm0F\nAgEkJCQQGBhY41i16j03zXVneWPHc7Vr165B/wjrircp52GsHFfr4eGBRYsWoV27duDxePj222/r\nnWapJbm7u+Ps2bO4e/cuevTogd9//529YUQU+Hw+FBUVERMTA1tbW2RnZ7M9oTweD6ampoiJiYGO\njg5KS0s540E/VG13oDMNmEGivrvXg4KCOA8T0NbWxsWLF9nG+uPHj+sce1sbgUCAadOmITc3F7Nn\nz4a+vj7k5eWRlpYGPz8/Tuze3t5wcHDAxYsXcfnyZfz000/YvXs3Dhw4AD6fDwDYunUr7t27h0uX\nLuHKlStYvnw59u3bh9DQ0Ca9w7y2719TzGjQ2maFIP9t1AglYqdz585ISkoSSq+8c7xq76GcnByc\nnJzg5OSEsrIy+Pr6YufOnZg9ezZkZGRqbXB17doVDMNAW1u7xt65j4n98ePHQumJiYlCsbc0bW1t\nCAQCPH/+nNP7nJGRgZycHHTu3JmTv6a7nys/l8rjOHfuHGxsbLBmzRpOvpycnBp7Qp8/fy6U9uLF\nC7aR0FxsbW3Rvn17REZGwtjYGEVFRfVeigea7/OUkJCAmZkZ7ty5gzt37kBZWRmGhobsenNzc5w5\ncwZdunQBj8drUO++KLm7u3MaypU/riwtLaGqqopTp05h7ty5jf4B9PjxY7x48QIbN27kfF7Xrl2r\nMX+XLl0wbdo09u59Nzc3BAUFYePGjWweExMTmJiYYPHixTh58iSWLVuGU6dO4ZNPPmlUbE2lc+fO\nYBgGSUlJsLa25qxLSkoS+l4S0prQmFAiduzs7HDv3j3ExcWxaQUFBQgNDYWOjg47F+O7d+8420lJ\nSbE9L5Vjvip7N6pfchw+fDgkJCQ4vTdVVS+7MbGnp6dzpv0pLy9HSEgIFBUV0bdv3w8qtykMHjyY\nvXxeVVBQEHg8Huzt7Tnpb9684dw5nJeXh/DwcPTq1YudHUBCQkKoJ+3MmTNCU8tUCg8P51yaPXPm\nDN6+fQs7O7uPOTQAFeOGKy/PVicpKQlnZ2ecPn0aYWFh6NmzJ3r27Flvmc35eVaO/Tx27BhnTlCg\nohGamJiIS5cuoV27drU+famquo6/ueno6LBjlSungAIqGqM+Pj54+vQppyFYVURERK3juiuf3lS9\nV33//v2cBm1RUZHQNGM6OjpQVFRk02sadlD546e2KcpaQp8+faCuro7Dhw+jtLSUTf/zzz/x7Nkz\noe8lIa0J9YSSNqUhl/5mz56NU6dOwcfHB15eXlBVVUVYWBhSU1M50wjNmDEDHTp0gIWFBdTV1fHs\n2TP8+uuvsLe3Zyf1NjIyAsMw+OGHHzBq1ChIS0vDwcEBXbp0waJFi/DDDz/g5cuXGDp0KBQVFZGc\nnIwLFy5g4sSJ7FQ7jTFhwgQcOXIEfn5+uH//Pjulz927d7FixQo2LlHg8/kYM2YMQkNDkZOTg759\n++LevXs4ceIEhg8fjn79+nHy6+npYeXKlbh//z7U1dVx9OhRZGZmYsOGDWyeIUOG4Oeff4a/vz8s\nLCzw6NEjREZG1jieFABUVVUxefJkjB07Funp6Thw4AD09PTg4eHx0cdnZGSEw4cPIyAgALq6ulBT\nU+MMXXB3d0dISAhu3rzZ4LkVm/PzrOw5jIuLExo+YmpqCh6Ph7t379Y7Z2qluo6/tu9dQ76PH8vH\nxwfPnj1DcHAwoqOjMXLkSGhoaCA9PR0XLlzA/fv3cfjw4RpjMjAwQNeuXbFhwwakpaVBSUkJZ8+e\nFWpsP3/+HN7e3nByckL37t0hKSmJ8+fPIyMjg51gPiwsDAcPHsSwYcPQtWtX5OfnIzQ0FMrKyg36\nEZSXl4eIiIga1zWkV702UlJSWLZsGZYvXw5PT084OzsjPT0dISEhbM8uIa0VNUJJm9KQy3GVvQLf\nf/89fv31VxQXF8PQ0BA7d+7E4MGD2XyTJk1CREQEgoODUVBQgE6dOsHb2xtz585l8xgbG2Px4sU4\nfPgwrly5AoFAgIsXL6Jz586YPXs2DAwMEBwcjB07dgCoeDSfra2t0D/+uuKuuk5WVhYhISHYvHkz\nwsPDkZeXB319faxfvx7u7u5C2zXm8mRD89eVb926dejSpQvCwsJw4cIFdOjQAXPnzsWCBQuEytDT\n08OXX36JDRs24Pnz59DR0cGPP/7Iuet+zpw5KCwsxMmTJxEVFQUjIyPs2bMH33//vVAMPB4Pc+bM\nwaNHj7Bnzx7k5+djwIABWLVqldAYupq2re/YFyxYgNTUVOzduxf5+fno27cvpxFqZGSEHj16IDEx\nscFPvmnOz9PMzAxSUlIQCARCl9uVlJTQo0cPPH78GFZWVg0qr67jry2umtJrOvcN3ba2fN999x0c\nHR1x5MgRBAUFsc+Or5xs3dTUtMZypaSksHPnTqxbtw67d++GrKwshg0bhilTpsDNzY3N16lTJ7i6\nuuL69euIiIhgr4ps3bqVneGhX79+uH//Pk6fPo2MjAwoKyvDxMQEmzdvbtCwitevXws98alSQxuh\ntZ2zMWPGQF5eHrt378bmzZshLy+P4cOHs7OHNKQMQkSBx7TET1lCCBEDY8aMQbt27ZrtGemEEPJf\nQmNCCSGkAe7fv4+HDx8K9WASQgj5MNQTSgghdXjy5AkePHiAffv2ITs7G+fPn6dpbgghpAlQTygh\nhNTh7NmzWLFiBQQCATZv3kwNUEIIaSLUE0oIIYQQQloc9YQSQgghhJAWR41QQgghhBDS4qgRSkgz\n2rZtW7M8UtLBwQH+/v5NXm5djh8/Dj6fj9TU1I8u6+bNm+Dz+bh161YTRNY2eHl5wcvLq0X32ZSf\nWaXmqtP/FXw+v9YnrX0sUdQxQj4GNUJJmxMWFgY+n8++jIyMMHjwYPj7+9f6uEdRaewE5KIutyn2\nWdlIqe/RpW150mx/f39OHTQ3N8fQoUOxcOFCnDt3rtYnCVU+RrKlNEc94fF4LX4cdTl48CDCwsIa\nvV1ubi6MjY3Rq1cvJCYmNkNkotGaPhtC6kNPTCJtEo/Hw6JFi6CtrY3i4mLExcXh+PHjuHPnDiIj\nI8X+DuaoqKhW+8+mIQ2ffv36IS4urk1/TrKysli3bh0YhkFRURFSU1Px+++/Y+HChejXrx8CAgKg\nqKjI5hfFBPfu7u5wdnZu0vM8f/58zJ49u8nK+1iHDh1C+/btMWbMmEZtV/kd0tDQQGRkJBYtWtRM\nEbYceogCaWuoEUraLFtbWxgZGQEAPvnkE7Rr1w6BgYG4dOkSRo4cKeLomkdxcTFkZWUhLS0t6lA+\nWmtvgFae69pISkoKPb5z0aJF2LNnDzZv3owvv/wSW7ZsYddJSbXcn9vCwkLIy8uDx+M1+XmWkJBo\n9Z9dQ0RERMDOzg7a2to4efKkWDRCW7KOEdIUWmdXCiEfwMrKCgzD4J9//hFa9+eff2LKlCkwNzeH\nhYUF5syZg6dPnwrlO3PmDJydnWFiYgJXV1dcuHABfn5+nGfB1zaeMSUlBXw+HydOnKgzzmPHjsHb\n2xsDBgyAsbExnJ2dcejQIaF8Dg4OmDt3Lq5cuYJx48bBxMQER44cYddVHRNa9dJw9VfV8YCJiYlY\nuHAhrK2tYWJignHjxuHSpUtC+3769CmmTp0KU1NT2NnZISAgAAKBoM7jaoyazqGXlxdcXV3x7Nkz\neHl5wczMDIMHD0ZgYKDQ9iUlJfjpp58wfPhwGBsbw97eHps2bUJJSQknX1Oc68aaNWsWBg4ciKio\nKLx48YJzfFOnTuXkDQkJgYuLC8zMzNCvXz+MGzcOp06d4uRJS0vD8uXLYWtrC2NjYzg6OmL16tUo\nKysD8H54yq1bt7B69WoMGDAA9vb2AGoeE1p5rDdv3sS4ceNgamoKV1dX3Lx5EwBw7tw5uLq6wsTE\nBGPHjsXDhw858dQ0JpTP52Pt2rW4cOECXF1dYWxsDBcXF1y+fJmTLzU1FatXr8bIkSNhamoKa2tr\nLFq0CCkpKZx8lcd0584drF+/Hv3794e5uTl8fX2RmZnJOZYnT56w9YnP5wud45q8evUKt2/fhouL\nC5ycnJCcnIy7d+8K5WtonSwtLcXWrVsxduxYWFlZwdzcHFOmTEF0dHSdcURHR4PP5+PChQtC6yIj\nI8Hn8xEXFwcASE9Ph7+/P+zs7GBsbIxBgwZh/vz5nM/2Q+sYIaJCP5uI2Hj58iUAQFVVlZN+4sQJ\n+Pv7w9bWFsuWLUNRUREOHTqEKVOmICwsDJ07dwYA/PHHH1iyZAn4fD6WLl2KnJwcrFixApqamkKX\nlz9mnN3hw4fRo0cPODo6QlJSEr///ju+/vprMAyDyZMnc/ImJSVh6dKlmDhxIiZMmAB9ff0ay9y0\naZNQ2g8//ICsrCwoKCgAqHjyz+TJk9GpUyfMnj0b8vLyOHPmDBYsWIBt27Zh6NChACr+2Xl5eUEg\nEGDOnDmQl5fHkSNH6uwV/BA1ncPs7GzMmjULw4YNg7OzM86ePYvNmzfD0NAQtra2AACGYTBv3jzc\nuXMHEydOhIGBAR49eoT9+/fjxYsXnJs+muNcN4SbmxuuXr2Kq1evQldXt8Y8oaGhWLduHZycnODt\n7Y3i4mI8evQIcXFxcHZ2BgC8efMGn3zyCfLy8jBx4kTo6+sjLS0NZ8+eRVFREZSUlNjyvv76a6ip\nqWHBggUoLCxkz3FN5/nFixdYtmwZJkyYADc3N+zduxfz5s3D6tWr8cMPP2DKlClgGAa7du3C4sWL\ncfbsWXbb2sq8ffs2zp07h8mTJ0NRUREhISFYuHAh/vjjD/Y7ef/+fcTFxcHFxQUdO3ZESkoKDh06\nhKlTp+L06dNCdWzt2rVQVVWFr68vUlJSsH//fqxdu5btYV6xYgXWrFkDRUVFzJs3DwzDQENDo97P\nJzIyEgoKCrC3t4eMjAy6du2KyMhImJmZCeVtSJ3My8vDsWPH4OzsjAkTJiA/Px9Hjx6Fj48Pfvvt\nt1pv5LK2toaWlhYiIyPZ71/VGHV1dWFqagoA8PX1RWJiIry8vNC5c2dkZGTg2rVrSE1NZf+GVdeQ\nOkaISDGEtDHHjx9n+Hw+c/36dSYzM5N5/fo1ExUVxfTv358xNTVlXr9+zebNz89n+vbty3z11Vec\nMjIyMhgrKyvmyy+/ZNNcXFwYe3t7prCwkE27desWY2hoyDg4OLBp0dHRDJ/PZ27evMkp8+XLl4yh\noSETFhbGpm3bto3h8/mcfMXFxULHNHPmTGbYsGGctCFDhjB8Pp+5evWqUP4hQ4Ywfn5+NZ4fhmGY\nPXv2MHw+n4mIiGDTvL29GTc3N6a0tJSTd+LEicyIESPY9+vWrWP4fD5z//59Ni0zM5OxsrJi+Hw+\nk5KSUut+Geb9MWdlZdWap6Zz6OnpKRRzSUkJM3DgQGbhwoVs2okTJ5jevXszd+7c4ZR5+PBhhs/n\nM7GxsWxaU5zrmvj5+THm5ua1rn/48CFjaGjIfPfdd5zj8/LyYt/Pnz+fcXFxqXM///vf/5jevXsz\n8fHxteY5fvw4Y2hoyHh6ejICgUBoXfXPrPJY4+Li2LQrV64whoaGjJmZGef7c+TIEaHPqaY6bWho\nyBgbGzPJyclsWkJCAmNoaMj88ssvbFpNn0dcXBxjaGjIhIeHCx3TjBkzOHnXr1/PGBkZMbm5uWya\n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\n7fTfPrmFF85RWqIQGdXG6ZiiiwUoioaYNq5LkHnaVle5ThtEca15NIuUQnSaYMz/Wff753StTKhq\nNcWlx53K7ZSgUXVXXO7Lc9V1jerqIvSVZRhPOX+w6irOYYtq63KMp/2VijNoFI1LeV3blIozBCsa\n7OedA8Qg4xkM5Ra++LrmS6Br2AH0bUpr6mU8Q1CYHrvO+VwhkTq0GhWD3fleqa3MhJdrsJ8odipv\ndbEajVbBrjqX17WtptyGwVbgVB5cXI0ltpTColNO5RZLOa1L9FwMLeLzm9oBcM3eQvRlVo/H2GxV\nqBrNFZf78lw2WxUajYbyCtfPhurqSk6egsrKM07lF4suoihaios0V1QONZmpdm211P66LikrcykD\nuFBYSEkJPjmXp3IKCuizYwcAx9u2pfSaaxp8rsuVnyssdNlWVFLCp9XVxFRXO5eXlqIoCjGVlVdU\n3pBjKqqqiFNVYkpLncsNBjSqSmhJrT8269jmbbkvz3W5a1i//56wWsF/hcGAAvUuLy4r43z5OUJD\nXQPdqioj1T2uITLKORNrqDKAAiXnSrwqL6aYdT+tAyC6Ipourbt4PEaLlm4x3XwaBAMoaiOOtCkq\nKuLEiRONdXkhhBBCCFFP3bp1o02bNpffsZ4aNQitrq6mrKyM4OBgNBoZeSmEEEII0dTY7XbMZjOR\nkZEuLctXolGDUCGEEEIIcXWS9KMQQgghhAg4CUKFEEIIIUTASRAqhBBCCCECToJQIYQQQggRcBKE\nCiGEEEKIgJMgVAghhBBCBJwEoUIIIYQQIuAkCBVCCCGEEAHn9yB09erVDBs2jKSkJH73u9/x7bff\n1rn/3r17GTt2LImJiYwYMYKNGzf6u4rCh7y539u2bWPixImkpqZy4403Mn78eD7//PMA1lZcKW9/\nvy/5+uuvSUhI4I477vBzDYUveXu/LRYLr7zyCsOGDSMxMZFbbrmFDRs2BKi24kp5e7//7//+j9/8\n5jckJyczaNAgnnzySUprrRcvmp79+/eTmZnJ4MGDiY+P55NPPrnsMT6L1VQ/2rx5s3rDDTeoGzdu\nVI8fP67OnDlT7d+/v1pUVOR2//z8fDU5OVnNyspSc3Nz1X/9619qnz591M8//9yf1RQ+4u39fu65\n59Tly5erhw8fVk+ePKm+/PLLakJCgnr06NEA11w0hLf3+5Ly8nI1IyNDvf/++9UxY8YEqLbiSjXk\n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\nD2xs5HwAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mymodel = \"Regularized Linear Discriminant Analysis\"\n", + "sns.set_style(\"whitegrid\")\n", + "plt.title(\"Posterior Probability of Within-Class Error\\n{model}\".format(model=mymodel))\n", + "plt.xlabel('P(actual=predicted)\\n' + r'Beta($\\alpha, \\beta$)')\n", + "plt.ylabel(\"Density\")\n", + "plt.yticks([])\n", + "ax = plt.gca()\n", + "ax.grid(False)\n", + "posterior_overlap_eval(actual, pred, labels=labs)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "regularization_parameter = 0.001\n", + "predicted = []\n", + "actuals = []\n", + "i = 0\n", + "for train_idx, test_idx in KFold(n=X.shape[0], n_folds=10, shuffle=True):\n", + " X_train = X[train_idx]\n", + " X_test = X[test_idx]\n", + " y_train = y[train_idx]\n", + " y_test = y[test_idx]\n", + " lda = LinearDiscriminantAnalysis(X_train, y_train, regularization=regularization_parameter, keep_copy_of_X=False)\n", + " lda.fit()\n", + " preds = lda.predict(X_test)\n", + " predicted.append(preds)\n", + " actuals.append(y_test)\n", + " del lda\n", + " pickle.dump(predicted, open(\"./dumps/lda/predicted_fold_{fold}_reg_{reg}.pkl\"\n", + " .format(fold=str(i), reg=str(regularization_parameter)), 'wb'))\n", + " pickle.dump(actuals, open(\"./dumps/lda/actuals_fold_{fold}_reg_{reg}.pkl\"\n", + " .format(fold=str(i), reg=str(regularization_parameter)), 'wb'))\n", + " i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "confusion matrix\n", + "[[ 27 31 8 3 6]\n", + " [ 2 233 1 3 1]\n", + " [ 1 0 10 6 6]\n", + " [ 0 7 1 10 1]\n", + " [ 1 2 8 8 2]]\n", + "\taccuracy\n", + "\t\t 0.746031746032\n", + "\tf1\n", + "\t\t 0.728212230768\n", + "\trecall\n", + "\t\t 0.746031746032\n", + "\tprecision\n", + "\t\t 0.760133239492\n", + "confusion matrix\n", + "[[ 26 30 12 2 0]\n", + " [ 4 217 0 7 1]\n", + " [ 1 1 9 4 8]\n", + " [ 2 17 2 11 3]\n", + " [ 1 1 5 8 6]]\n", + "\taccuracy\n", + "\t\t 0.71164021164\n", + "\tf1\n", + "\t\t 0.692728891041\n", + "\trecall\n", + "\t\t 0.71164021164\n", + "\tprecision\n", + "\t\t 0.705738911062\n", + "confusion matrix\n", + "[[ 29 39 10 2 0]\n", + " [ 4 216 2 5 0]\n", + " [ 0 2 8 7 7]\n", + " [ 0 8 0 7 3]\n", + " [ 0 7 6 10 6]]\n", + "\taccuracy\n", + "\t\t 0.703703703704\n", + "\tf1\n", + "\t\t 0.682907882177\n", + "\trecall\n", + "\t\t 0.703703703704\n", + "\tprecision\n", + "\t\t 0.721936157934\n", + "confusion matrix\n", + "[[ 26 38 8 5 3]\n", + " [ 3 209 0 6 1]\n", + " [ 2 1 10 7 9]\n", + " [ 0 8 1 12 2]\n", + " [ 0 7 5 14 1]]\n", + "\taccuracy\n", + "\t\t 0.68253968254\n", + "\tf1\n", + "\t\t 0.655652527654\n", + "\trecall\n", + "\t\t 0.68253968254\n", + "\tprecision\n", + "\t\t 0.690937977069\n", + "confusion matrix\n", + "[[ 26 23 8 3 0]\n", + " [ 2 240 0 6 0]\n", + " [ 1 0 15 9 3]\n", + " [ 0 7 1 4 1]\n", + " [ 0 4 7 12 6]]\n", + "\taccuracy\n", + "\t\t 0.769841269841\n", + "\tf1\n", + "\t\t 0.763162137045\n", + "\trecall\n", + "\t\t 0.769841269841\n", + "\tprecision\n", + "\t\t 0.802902591751\n", + "confusion matrix\n", + "[[ 28 29 7 11 4]\n", + " [ 2 198 0 10 1]\n", + " [ 4 3 17 8 10]\n", + " [ 0 6 4 11 1]\n", + " [ 0 4 8 6 6]]\n", + "\taccuracy\n", + "\t\t 0.687830687831\n", + "\tf1\n", + "\t\t 0.677526307123\n", + "\trecall\n", + "\t\t 0.687830687831\n", + "\tprecision\n", + "\t\t 0.716331960247\n", + "confusion matrix\n", + "[[ 28 23 5 7 3]\n", + " [ 3 220 0 4 0]\n", + " [ 2 1 9 11 6]\n", + " [ 0 11 2 13 3]\n", + " [ 0 4 7 10 5]]\n", + "\taccuracy\n", + "\t\t 0.729442970822\n", + "\tf1\n", + "\t\t 0.713851190931\n", + "\trecall\n", + "\t\t 0.729442970822\n", + "\tprecision\n", + "\t\t 0.732602640602\n", + "confusion matrix\n", + "[[ 19 24 5 5 1]\n", + " [ 7 226 1 5 0]\n", + " [ 3 2 11 4 9]\n", + " [ 1 13 1 11 3]\n", + " [ 1 2 9 10 4]]\n", + "\taccuracy\n", + "\t\t 0.718832891247\n", + "\tf1\n", + "\t\t 0.699825103613\n", + "\trecall\n", + "\t\t 0.718832891247\n", + "\tprecision\n", + "\t\t 0.696135669097\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n" + ] + } + ], + "source": [ + "regularization_parameter=0.001\n", + "model_folder = \"/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/dumps/lda/\"\n", + "accuracy = []\n", + "precision = []\n", + "recall = []\n", + "f1 = []\n", + "mcc = []\n", + "predicted = pickle.load(open(model_folder + \"predicted_fold_7_reg_{reg}.pkl\".format(reg=regularization_parameter), 'rb'))\n", + "actuals = pickle.load(open(model_folder + \"actuals_fold_7_reg_{reg}.pkl\".format(reg=regularization_parameter), 'rb'))\n", + "for preds, actual in zip(predicted, actuals):\n", + " pred = preds\n", + " print(\"confusion matrix\")\n", + " print(metrics.confusion_matrix(actual, pred))\n", + " print(\"\\taccuracy\")\n", + " acc = metrics.accuracy_score(actual, pred)\n", + " accuracy.append(acc)\n", + " print(\"\\t\\t\", acc)\n", + " print(\"\\tf1\")\n", + " f = metrics.f1_score(actual, pred)\n", + " f1.append(f)\n", + " print(\"\\t\\t\", f)\n", + " print(\"\\trecall\")\n", + " r = metrics.recall_score(actual, pred)\n", + " recall.append(r)\n", + " print(\"\\t\\t\", r)\n", + " print(\"\\tprecision\")\n", + " p = metrics.precision_score(actual, pred)\n", + " precision.append(p)\n", + " print(\"\\t\\t\", p)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/nbs/NTupleResults.ipynb b/nbs/NTupleResults.ipynb new file mode 100644 index 0000000..58211fd --- /dev/null +++ b/nbs/NTupleResults.ipynb @@ -0,0 +1,567 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import os\n", + "import pickle\n", + "import numpy as np\n", + "from scipy import sparse\n", + "from functools import partial\n", + "from sklearn.externals import joblib\n", + "from sklearn.cross_validation import KFold\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.cross_validation import train_test_split\n", + "from midi_ml.models.n_tuple import NTupleClassifier" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "labels = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_labels.pkl\")\n", + "features = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_matrix.pkl\")\n", + "features = features.todense()\n", + "mozart_labels = [k for k in range(len(labels)) if labels[k] == \"mozart\"]\n", + "bach_labels = [k for k in range(len(labels)) if labels[k] == \"bach-js\"]\n", + "schubert_labels = [k for k in range(len(labels)) if labels[k] == \"schubert\"]\n", + "chopin_labels = [k for k in range(len(labels)) if labels[k] == \"chopin\"]\n", + "tchaikovsky_labels = [k for k in range(len(labels)) if labels[k] == \"tchaikovsky\"]\n", + "X = features[mozart_labels + bach_labels + schubert_labels + chopin_labels + tchaikovsky_labels].A\n", + "y = np.array([0 for i in range(len(mozart_labels))] + [1 for i in range(len(bach_labels))] + \n", + " [2 for i in range(len(schubert_labels))] + [3 for i in range(len(chopin_labels))] +\n", + " [4 for i in range(len(tchaikovsky_labels))])\n", + "y = y.reshape((y.shape[0],))\n", + "del features" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(3776, 16384)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "plot_df = pd.DataFrame({\n", + " \"composer\": [\"mozart\", \"bach\", \"schubert\", \"chopin\", \"tchaikovsky\"],\n", + " \"num_records\": [len(mozart_labels), len(bach_labels), len(schubert_labels), len(chopin_labels), len(tchaikovsky_labels)]\n", + "})" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsMAAAInCAYAAAB9WVTWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xl8TPf+x/H3SBOJIJZQoghKJpZEovaEohq1V1FFLVWl\nti7aq0otsV9UlXJVKUpRW9VWamlray0l+KFVa65ENUEikpiI8/vDzTxME2Q0k0Tn9Xw8PB7me75z\n5nMmZ+LtO9/zPSbDMAwBAAAATihPThcAAAAA5BTCMAAAAJwWYRgAAABOizAMAAAAp0UYBgAAgNMi\nDAMAAMBpEYYBAADgtAjDAAAAcFqEYQAAADgtwjCAXO/777+X2WzW//3f/9n93EGDBikkJOSB/RIT\nE2U2m/X5558/TIlOr3bt2ho8eHBOl5FpM2fOVOPGjVW5cmV16dIlS/fdrl07derUKUv3+aho166d\n+vbtm9NlAHZ5LKcLAB51ZrP5gX1MJpMWLVqkmjVrZkNF9jtw4IB++ukn9erVSx4eHvfsZ7FYVK9e\nPQUEBGj+/PkZ9rl9+7ZCQkJUtmxZLV26NMtqNJlMWbavR1FiYqKCg4MlSeHh4erYsaPN9sWLF2vs\n2LHatGmTypUrl+31PUo/ny1btmjmzJnq2LGjnnrqKXl7ez/wOZs3b9ayZct0/PhxJScny8fHR02b\nNlXv3r1VoEABm76P0nvxME6ePKmtW7fqxRdfVLFixWy25cmT5x9//PjnIQwDf9PkyZNtHn/99dfa\ns2ePJk+eLMMwrO0VKlTI7tIybf/+/frkk0/00ksv3TcMu7m5qWnTpvrmm28UGxurokWLpuuze/du\nXblyRYMGDcqy+p5++mlFRETIzc0ty/b5qDKZTPrPf/6jF154QS4uLjbthJDM+fnnn+Xh4aHw8PBM\n9R85cqSWL1+uatWq6fXXX5enp6eOHj2q+fPna+PGjVq4cKFKlSrl4KpzjxMnTmjmzJlq1KhRujC8\nbNkyzkM8cgjDwN/UqlUrm8eHDx/Wnj171LJlyyx9nVu3bkmSHnss6z+2d4f2B2ndurXWrFmjDRs2\nqFu3bum2r1+/Xo899piaNWv2t+tKTk6Wu7u7JBGE/8ff318nTpzQ6tWr1aFDh5wuJ1ulpKQoT548\nNv8JeBixsbHy9PTMVN+vvvpKy5cvV/v27TV27Fhre4cOHdS6dWv17NlTb7/9tpYvX/63anKEuz8/\nWckwjHsGXkf8fgIcjTnDQDa6efOmpk2bpnbt2qlGjRoKCgrSyy+/rIMHD9r0O3PmjMxms5YsWaJ5\n8+apSZMmCgwMVGRkpCQpMjJSvXv3VvXq1VW/fn39+9//1o4dO2Q2m3XkyBGbfR08eFA9e/a0vl73\n7t1t+kydOlUff/yxJKl+/foym83y9/dXbGxshsdQp04dFS9eXOvXr0+3zWKxaOvWrQoNDVWhQoUk\n3Qke48aNU8uWLRUUFKSaNWuqb9++On36tM1z0+YFb9u2TZMmTVJISIiCg4N1+/Zt67HdPWd47969\nGjhwoBo2bKhq1aqpcePGmjp1qiwWS4Z1nzlzRt26dVP16tX19NNP67PPPsuw319FRUXpnXfeUd26\ndRUQEKDWrVtr3bp16frNmzdPzz33nAIDA1W7dm117NhRW7duzdRr2CMkJEQBAQH6z3/+o9TU1Pv2\nvdf8zUGDBtn8J+7UqVMym81avny5FixYoMaNGysoKEh9+vRRbGysbt++rWnTpik0NFTVq1fXm2++\nqcTExAxfc/v27WrVqpUCAgLUqlUr/fDDD+n6XL16VaNGjVKDBg1UrVo1hYWFaeHChTZ90mpaunSp\nPv30UzVu3FjVq1dXVFTUPY83JSVF06ZNU5MmTVStWjU988wzmjlzpvV9SpsXvnnzZsXExFjP9S1b\ntmS4P8MwNHv2bBUrVkwffPBBuu1PPfWUunXrpiNHjmR4nIcOHVLHjh0VGBioZ599VmvWrEnXJzPn\nTWbOwXt9fvbu3Suz2azvvvsu3Wtv3rxZZrNZ+/fvlySdP39eH3zwgcLCwhQYGKi6detq8ODB+uOP\nP6zPWbJkid5//31J0gsvvGB9D9M+mxmdc5cvX9a//vUva/3t2rXTxo0bbfrcfQ4uWrRIjRs3VkBA\ngDp16qRff/3Vpu+lS5f0zjvvKDQ0VNWqVVNoaKgGDhyomJiYdMcIZAb/hQOy0bVr17R27Vo1b95c\nnTp1Unx8vFasWKFXXnlFq1evTjeVYunSpUpNTVXnzp3l4uKiAgUKKCEhQS+//LLi4+PVs2dPFS5c\nWGvXrtWePXvSjdb8+OOP6tevn4KCgqzTFlauXKmXX35Zy5cvl9lsVosWLXThwgVt2bJFI0eOVP78\n+SUp3TzINCaTSS1atNCCBQsUGRmp0qVLW7dt27ZNN27csAlap0+f1u7duxUWFiYfHx9dvnxZS5cu\nVbdu3bRhwwZraE4zbdo0eXp6qk+fPrpx44Z1DuJfj239+vUyDEMvv/yyChYsqEOHDmnevHmKjY3V\n+PHjbfrevHlTr776qurXr69mzZpp+/btmjJlikwmk3r16nXPn1d0dLTat2+v/Pnzq2fPnipYsKC2\nb9+ud999Vzdv3lT79u0lSQsWLNDkyZPVpk0bvfLKK0pKStKJEyd09OhRPfPMM/fc/8MaMGCAevfu\n/cDRYXu/rl62bJkkqUePHoqJidH8+fP17rvvqkKFCvr111/Vt29f/f7771q6dKmKFSumYcOG2Tz/\n5MmT2rVrl7p06aKCBQtqxYoV6t+/v7744gsFBQVJkhISEvTSSy8pISFBnTp1UvHixfXzzz9rwoQJ\nunbtmt544w2bfS5ZskS3b99W165dlSdPnvuO6A4ePFjfffedWrVqperVq+vgwYOaOXOmIiMjNWnS\nJOXNm1eTJ0/WokWLdP78eY0YMUKGYSggICDD/Z08eVLR0dF6+eWXlTdv3gz7tG3bVvPmzdOOHTvU\nsGFDa/vly5fVr18/tW3b1hpehw4dKnd3dz333HOSMnfeZPYcTHP35ycxMVF16tRRsWLFtGnTJjVt\n2tSm78aNG1W8eHHrtQy//PKLTp48qdatW6t48eK6cOGCvvzyS504cULffPONHnvsMYWEhKhjx45a\nsWKF3nzzTev0kLTfA3895xISEtS5c2fFxMTo5Zdf1uOPP67169fr7bffVlJSkl544QWb/suXL1dK\nSoq6desmi8Wizz77TG+88Ya+/fZba58+ffro8uXL6tq1q0qUKKGYmBjt3LlTly9fztT8byAdA0CW\nCg8PN8xmc4bbUlNTjVu3btm0Xbt2zahVq5YRHh5ubTt9+rTh5+dn1K5d27h+/bpN/9mzZxtms9nY\nvXu3tS05Odl45plnDLPZbERERFhfq1GjRkb//v1tnp+YmGg0bNjQeP31161ts2bNMsxmsxETE5Op\nY/y///s/w8/Pz/jkk09s2vv162cEBwcbycnJ1rabN2+me/6ZM2eMypUrGwsWLLC27dixw/Dz8zNa\ntmxppKSk2PTfsWOHYTabjWPHjt13v9OmTTOqVKliXL161do2cOBAw2w2G9OmTbPp261bNyMoKMi4\nceOGYRiGcePGDcPPz8+YP3++tc+bb75pNGnSxNonTZ8+fYz69esbqamphmEYRo8ePYwXX3wxXT1Z\n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\nhuvWrVNsbKz8/f21fft27d+/X2+//fZ9L4567733dOjQIT3//PPq2LGjypcvr6tXr+ro0aM6duyY\n9YKkl156SeXLl1dgYKCKFCmiX3/9VStXrtRzzz3n8JsQpI0OHzt2LN1/BDp06KBly5apV69eatOm\njf744w+tXLlSFStWzPT+7fl6vEKFCnr77bfVuXNneXl5afny5bpx44bNSGO/fv30448/qkePHmrf\nvr3MZrMSEhJ04sQJbd26Vfv27XuoeezBwcF69tlntWDBAsXGxlqXVtuwYYPatm2rqlWr2r1PSXrx\nxRd17NgxrVy5Ur/++quaN29uvQPd6tWrVbJkSX344YfpnleyZElNmzZNZ86cUalSpfTNN9/o/Pnz\nmjp1qrVPZs6bzJ6D0oN/Vmmjw9KdCwvvZjKZ1KBBAy1fvlxubm4qW7as9u/fryNHjqS7gLFy5coy\nmUyaNWuW/vjjD7m5uSk0NDTD5Ri7du2qVatW6a233lLXrl2tS6udPHlSY8eOtftnffz4cQ0cOFDP\nPfecypcvL5PJpE2bNikxMVEtWrSwa19AGsIw4AD3Gp3s1KmTrl69qpUrV+rHH3/Uk08+qenTp1v/\noc3MPgoUKKDFixcrPDxcCxculKenp9q2bSt/f3+98847NvOMQ0JCtGzZMs2aNUuLFy9WUlKSihUr\npurVq6tTp07Wfk899ZT69++vFStWaMeOHdY5hRndbvluhQoVUmhoqL7//vt0F86leeONN5SSkqJv\nv/1W69atU0BAgObPn6/hw4enO8b7ff1697a8efNqzpw5GjdunGbPnq18+fKpWbNmat26tV588cV0\nz3V3d9e8efM0atQobdiwQQULFtTgwYP16quvpnuNu1+nZMmSWrVqlWbOnKlNmzYpNjZWhQsXVqVK\nlWwCXpcuXbRx40bNnz9fycnJKlGihF577TX16dPnvu+fve51y+UBAwbo9ddfT7etSpUqGjdunGbN\nmqVJkyapUqVKmj59uhYtWpRuSsO93vvMfiVuMpnk5+enwYMH68MPP9SFCxdUtmxZffLJJwoODrb2\ny58/v5YtW6bZs2dry5YtWrlypby8vFSuXDm98847NuHI3uk7U6dO1axZs7R27Vpt2rRJjz/+uAYO\nHJjhjUfs2feYMWMUEhKipUuXatasWbp586Z8fHzUq1cv9e7dO8PVLooXL6733ntP48aN09KlS/X4\n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\nCMMAAACwLMIwAAAALIswDAAAAMsiDAMAAMCyCMMAAACwLMIwAAAALIswDAAAAMsiDAMAAMCyCMMA\nAACwLMIwAAAALIswDAAAAMsiDAMAAMCyCMMAAACwLMIwAAAALKvGhOFly5bJZrM5PSIiIpzaLF68\nWD169FBgYKDGjBmj9PR0p/mFhYX605/+pO7duys4OFhTpkxRTk5OVW4GAAAAbiM1JgxLUrt27fTF\nF19o9+7d2r17tzZs2OCY99Zbb2n9+vWaMWOG3nvvPXl5eemZZ55RYWGho81rr72mnTt3aunSpVq/\nfr2ys7M1efLk6tgUAAAA3AZqVBj28PBQo0aN5OPjIx8fH91zzz2OeWvWrNFvf/tb9e3bV+3bt9e8\nefOUnZ2txMRESdLly5cVHx+v2NhYdevWTQEBAZo1a5a++eYbHTx4sLo2CQAAANWoRoXhtLQ09ezZ\nUw8//LBefPFFZWVlSZIyMjJkt9sVFhbmaFuvXj0FBgbqwIEDkqRDhw6puLhYDz74oKNNmzZt1KJF\nC+3fv79qNwQAAAC3BY/qLqC8AgMDNWfOHLVu3Vpnz57V0qVL9fTTT+ujjz6S3W6Xm5ubGjdu7LSM\nj4+P7Ha7JCknJ0eenp6qV6/eddtURH5+frnbFhQUVHj9cJ2CggLl5eW5dP24fbh6fwMAbj8VyWk1\nJgz37NnT8XP79u3VuXNn9e3bV//93/+tNm3aVHk9aWlp5W6bmprqukJQYampqbrrrrtcun7cPly9\nvwEANVuNCcM/Vb9+ffn6+urkyZPq1q2bjDGy2+1OZ4dzcnLk7+8vSWrcuLGKiop0+fJlp7PDOTk5\npc4ol4evr6+8vLzK1TYvL0+7du2qcB9wjdatWzveF67A/r69uHp/AwBuP/n5+eU+cVljw/D333+v\nkydP6je/+Y3uv/9+NW7cWF9++aVsNpukHy6YS05O1lNPPSVJ6tixo9zd3ZWUlKT+/ftLklJSUpSZ\nmang4OAK9+/l5VXus01169at8PrhOnXr1nXpmUL29+3F1fsbAFCz1ZgwPHfuXIWHh6tFixY6c+aM\nli5dKg8PD8e9hkeNGqW4uDi1atVKLVu21OLFi3XvvfeqX79+kn64oO6xxx7T7Nmz1aBBA919992a\nOXOmQkJC1Llz5+rcNAAAAFSTGhOGz5w5o2nTpun8+fNq1KiRQkNDtXHjRnl7e0uSxo8fr4KCAr3y\nyiu6dOmSunTpopUrV6p27dqOdbz00ktyd3fXlClTVFhYqJ49e+qPf/xjdW0SAAAAqlmNCcOLFi26\naZvJkyff8Es0ateurZdfflkvv/xyZZYGAACAGqpG3WcYAAAAqEyEYQAAAFgWYRgAAACWRRgGAACA\nZRGGAQAAYFmEYQAAAFgWYRgAAACWRRgGAACAZRGGAQAAYFmEYQAAAFgWYRgAAACWRRgGAACAZRGG\nAQAAYFmEYQAAAFgWYRgAAACWRRgGAACAZRGGAQAAYFmEYQAAAFgWYRgAAACWRRgGAACAZRGGAQAA\nYFmEYQAAAFgWYRgAAACWRRgGAACAZRGGAQAAYFmEYQAAAFgWYRgAAACWRRgGAACAZRGGAQAAYFmE\nYQAAAFgWYRgAAACWRRgGAACAZRGGAQAAYFmEYQAAAFgWYRgAAACWRRgGAACAZXlUdwEAUJMVFhYq\nOTm5usvA/wkMDFTt2rWruwwANQhhGABuQXJysl577TU1bdq0ukuxvOzsbE2fPl1du3at7lIA1CCE\nYQC4RU2bNlXLli2ruwwAwM9AGAYAACgDw6BuL64aBkUYBgAAKAPDoG4frhwGRRgGAAC4DoZB3fm4\ntRoAAAAsizAMAAAAy2KYBAAA5cQFVbcX7iuNykAYBgCgnLig6vbBfaVRWQjDAABUABdUAXcWxgwD\nAADAsgjDAAAAsCzCMAAAACyLMAwAAADLIgwDAADAsgjDAAAAsCzCMAAAACyLMAwAAADLIgwDAADA\nsgjDAAAAsCzCMAAAACyLMAwAAADLIgwDAADAsgjDAAAAsCzCMAAAACyLMAwAAADLIgwDAADAsgjD\nAAAAsCzCMAAAACyLMAwAAADLIgwDAADAsgjDAAAAsCzCMAAAACyLMAwAAADLIgwDAADAsgjDAAAA\nsCzCMAAAACyLMAwAAADLIgwDAADAsgjDAAAAsCzCMAAAACyLMAwAAADLIgwDAADAsgjDAAAAsCzC\nMAAAACzLkmF4/fr1Cg8PV+fOnfX444/r4MGD1V0SAAAAqoHlwvDHH3+sOXPmaMqUKdq6datsNpvG\njRun3Nzc6i4NAAAAVcxyYfidd97RE088oWHDhqlt27b605/+pLp16yo+Pr66SwMAAEAVs1QYLioq\n0pEjR/Tggw86prm5uemhhx7SgQMHqrEyAAAAVAeP6i6gKp07d07FxcVq3Lix03QfHx+lpqaWax0l\n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\ndzmmr1q1SuvWrdOzzz6rNWvW6IMPPlCPHj1KXSTn5eVVgS2AqxUUFGjcuHFq0KCBFixYoPj4eMf4\nzWv7rm7dujddz0/fV25ubhV6X6G0WrVqafXq1Vq1apXatWuntWvXatCgQbLb7eVavqx9ci30/Pjn\na65evVqh+vLy8iRJM2fO1AcffOB4fPTRR9q4caNTW37vb11Ffw+vhauf7mdXqK5+a4JbPX7m5+ff\n9Bhdltq1a+uhhx7SZ599pjNnzlS47vDwcJWUlGjnzp06ffq09u7dq1//+teO+dHR0dq2bZv69Omj\nr776ShEREUpMTCx3/yNGjNDHH3+swsJCbdmyRREREapTp06F66xshGGLa9OmTamLHvbt26e7775b\n9957r6QfLr6Ii4vT4sWLdd999zm1/eabb9SvXz8NGTJEfn5+uu+++5Samlquvj08PAhOLnbw4EGn\n5wcOHJCvr69SUlIcFz+GhoaqdevWpcJW+/bttXfvXi6IqybBwcGKjo5WQkKCPDw89MUXX+i+++5T\nUlLSz15no0aN9P333zsuxpN+uIDlp7KysnT27FnH8/3798vd3V1t2rSRj4+PmjZtqpMnT+r+++93\nerRs2dKxTFl3jfD09OT9VEG+vr6qU6fOdff7ze7O0aZNG33zzTdO0/bt2ydfX1+nZZOTk53aJCcn\nq23bttddL3cFcVa7dm2n9/atHj9TUlJ04cKFGx6jy+Lu7q758+crICBAI0eOVHZ2tmNeeT7va9eu\nrf79+zv+wG3Tpk2pC2wfeOABjRo1Sm+//bYGDBigLVu2XLf/Hx9HJKl3797y8vLShg0btGvXLj32\n2GMVfm1cgTBscU899ZSysrI0Y8YMpaSkKDExUcuWLdOYMWMkSd9++61iYmI0fvx4tW3bVna7XXa7\nXRcuXJD0w4H6iy++0P79+3XixAm98sor5f43WcuWLZWUlCS73a6LFy+6bButLDMzU3PnzlVqaqo+\n+ugjrVu3TqNGjVLz5s3l6empNWvWKCMjQ59++qni4uKclo2MjNTly5c1depUHT58WOnp6Xr//feV\nlpZWPRtjEQcPHtSbb76pw4cPKysrS5988onOnTuntm3bKjo6WqtXr9batWuVnp6uI0eOaN26deVe\nd2BgoOrWrauFCxcqIyNDH374obZu3Vqqnaenp2JiYnTs2DHt3btXr732mgYNGqRGjRpJkiZPnqy3\n3npLa9euVVpamr799ltt2bJF77zzjmMdZZ0hbNmypfLy8pSUlKRz5845hXKUrXbt2ho3bpzmz5+v\nhIQEZWRkKDk5WZs3b5Z08zOxY8eO1ZdffqkVK1YoLS1NW7du1YYNG/TMM884tfvmm2/09ttvKy0t\nTevXr9cnn3yiUaNGXXe9nAF21rJlSx08eFDfffedzp07d8vHz/Ico6Wy94Obm5sWLFggm82mUaNG\nOUL0zT7vr/nVr36lzz77TPHx8Ro6dKhj+pUrVzRjxgzt2bNHmZmZ2rdvnw4dOqRf/OIX1+1/5MiR\nTiG+Vq1aGjZsmBYuXChfX1917ty5XK+Hq5X+3zlqtLL+Wr/RtGbNmmnlypWaN2+ehg0bpoYNG+rx\nxx/XpEmTJElHjhxRQUGB4uLinH4Ru3btqjVr1mjSpEk6deqUxo0bJy8vLz3++OPq37+/Ll26dMP+\nJSkmJkZz5szRpk2b1KxZM76Ao5K5ublp2LBhKigo0IgRI+Tu7q7Ro0drxIgRkqS5c+dq0aJFWrdu\nnQICAhQTE+PY75J0zz336N1339W8efMUFRUld3d3+fv7KzQ0tLo2yRLuvvtux22aLl++rBYtWigm\nJsZxy6PCwkK98847mjdvnry9vTVw4EDHsjf7/W/YsKHmz5+vefPmafPmzQoLC9PkyZP1yiuvOC3j\n6+ur/v37a8KECbp48aL69u2rP/7xj475I0aM0F133aVVq1Zp/vz58vLyUvv27Z3CU1m1BAcH68kn\nn9TUqVN14cIF/e53v+NbDMshOjpanp6eWrp0qbKzs9WkSRM9+eSTkm6+zwMCAvT6669ryZIliouL\nU5MmTfT888+X+pbBMWPG6PDhw1q2bJnq1aun2NhYPfTQQ2Wuszz9Ws3YsWMVExOjwYMH68qVK/r0\n009v6fjZqFEjzZkz54bHaOn6r7m7u7v+8pe/6Pnnn9fo0aO1Zs2am37eXxMWFqaGDRsqPT1dQ4YM\ncUyvVauWzp8/r5iYGNntdnl7e2vAgAFl/g6X1f+1P6Yfe+wxvfnmmxo+fHi5Xouq4Gb48w4AAMsK\nDw/X6NGjHRdoAa60d+9ejRkzRjt37nQE5OrGmWEAAAC4VGFhoXJzc7Vs2TKnYVe3A8YMAwBgYVYe\n3oCqs23bNoWHh+vy5ct68cUXq7scJwyTAAAAgGVxZhgAAACWRRgGAACAZRGGAQAAYFmEYQAAAFgW\nYRgAAACWRRgGAACAZfGlGwBQTT799FNt2LBBhw8f1vfff69mzZrpl7/8pcaOHStfX9/qLg8ALIH7\nDANANViwYIFWrVqlQYMGKSIiQt7e3srIyFB8fLzy8vK0ZcuW6i4RACyBMAwAVWznzp169tlnFR0d\nrejo6DLn9+7duxoqu/1cuXJFderUqe4yANzBGDMMAFVs9erVaty4sSZNmlTm/GtBuLCwULNnz1bP\nnj3VuXNnDRs2TImJiU5tY2JiNHToUCUlJelXv/qVAgMDFRUVpczMTF24cEHPP/+8QkND1b9/f338\n8cdOy0ZFRWnixIlKSEhQ//79HcumpqY6tStPHcePH9f48ePVvXt3BQUF6ZFHHtHbb7/t1Gb//v0a\nNWqUgoOD1aVLF02bNk25ubmO+d99951sNpu2bt2ql19+Wd27d9eIESMq9uICQAVxZhgAqlBxcbGC\ng4M1cOBAzZ8//4ZtJ0+erF27dumFF15Q69atlZCQoG3btmnFihXq27evJCk2Nlb//Oc/de+992ri\nxIny8PDQzJkz1bx5c3l5ealr164KCgrSxo0blZiYqB07dqh58+aSfgjDaWlpatCggZ577jkZY/SX\nv/xFRUVF2r59uzw9PctdR79+/dSkSRNNmDBB9erVU3p6us6cOeM4871//36NHDlSffv21fDhw5WX\nl6fXX39d3t7e+tvf/ibphzB8bT19+vTRoEGDVFJSoh49erhkXwCAJMkAAKqM3W43fn5+ZtGiRTds\nd+zYMePn52c2bdrkNP2JJ54wjz76qON5TEyM8ff3N8ePH3dMW7duXak+Ll68aAICAsyaNWsc0yIj\nI01AQIA5efKkY1p6errx9/c3GzduNMYYc/To0ZvWkZuba/z8/Mw///nP627P008/bZ566imnaceP\nHzc2m83s3LnTGGPMqVOnjJ+fn5kwYcINXxsAqEwMkwCA29DevXvl5uamgQMHOk2PiIjQ0aNHVVBQ\n4JjWtGlTtW3b1vHc19dXbm5uCgsLc0yrX7++GjVqpKysLKf1tWvXTvfff7/jeatWrWSz2ZScnCxJ\n2rdv303r8Pb2VosWLbRw4UIlJCTozJkzTm0LCgq0f/9+DRw4UMXFxY7HAw88oObNm+vQoUNO7Xv1\n6lWRlwoAbglhGACq0D333KM6deqUCqU/dfHiRXl4eKhBgwZO0xs3bixjjC5evOiYVr9+fac214Y3\n/HRZT09PFRYWOk3z8fEp1bePj4/Onj1boTr++te/qm3btvrzn/+s3r17a/jw4dq7d68k6cKFAR1G\nDgAAAr1JREFUCyouLtbs2bPVoUMHx6Njx47KysrS6dOnS60bAKoK9xkGgCrk7u6ukJAQJSUlqaSk\nRLVqlX1OomHDhrp69aouXbrkFHbPnj0rNze3UuH058rJySlzmr+/f4XqeOCBB/T666+ruLhY+/fv\n18KFCzVp0iR9/vnnatCggdzc3DRx4kQ9/PDDpfrz9vZ2eu7m5lYp2wYA5cGZYQCoYqNHj5bdbteK\nFSvKnL9z506FhobKGKPt27c7zdu+fbv8/f1Vt27dSqnlP//5jzIyMhzP09PTdezYMQUFBUlShetw\nd3dXly5dNGHCBF2+fFnZ2dny8vJSUFCQTpw44XRm+NqjRYsWlbItAPBzcGYYAKpY79699cwzz2j5\n8uU6ceKEBg8erHvuuUenTp1SfHy8vv/+e23ZskUDBgzQ7NmzlZ+fr9atW+v9999XcnKy4uLibtqH\nKeeNgnx8fDRx4kRNnjxZxhgtWbJE9957r4YNGyZJ8vPzu2kd//73vzV37lwNGjRIrVq10qVLl/TW\nW2/pvvvuU6tWrSRJv//97zV69GhNnTpVgwcPVoMGDZSVlaWkpCQNHz5cXbt2/ZmvJgDcGsIwAFSD\nF198USEhIVq/fr2mT5+uvLw8NWvWTD169NAzzzwj6YdvqVu0aJFWrlypCxcuqE2bNlqyZEmpL+Qo\na1hBeacFBAQ4bvNmt9sVGBioV1991THuuDx1NGnSRE2aNNHKlSt15swZ1a9fX126dNGCBQscfQYH\nB2vDhg1aunSpXnrpJRUVFalZs2Z68MEHHYH5ejUCgCtxn2EAsKioqCjdfffdeuONN6q7FACoNowZ\nBgAAgGURhgHAwhiWAMDqGCYBAAAAy+LMMAAAACyLMAwAAADLIgwDAADAsgjDAAAAsCzCMAAAACyL\nMAwAAADLIgwDAADAsgjDAAAAsKz/BeQwqXDmS1HGAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(8,6))\n", + "sns.set_style(\"whitegrid\")\n", + "sns.barplot(x=\"composer\", y=\"num_records\",\n", + " data=plot_df,\n", + " color=\"gray\")\n", + "plt.xlabel(\"Composer\")\n", + "plt.ylabel(\"Number of Observations\")\n", + "plt.title(\"Target Variables - Number of Observations\")\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 207, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "749" + ] + }, + "execution_count": 207, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.unique(y, return_counts=True)[1][2:].sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn.linear_model import LogisticRegression" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "X = X[:,X.sum(axis=0).nonzero()[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "predicted = []\n", + "actuals = []\n", + "models = []\n", + "i = 0\n", + "for train_idx, test_idx in KFold(n=X.shape[0], n_folds=5, shuffle=True):\n", + " X_train = X[train_idx]\n", + " X_test = X[test_idx]\n", + " y_train = y[train_idx]\n", + " y_test = y[test_idx]\n", + " nt = NTupleClassifier(X_train, y_train,\n", + " M=400, L=3, num_bins=5)\n", + " nt.fit_init()\n", + " a = time.time()\n", + " nt.fit_optimize(num_iter=100, num_folds=3)\n", + " b = time.time()\n", + " preds = nt.predict(X_test)\n", + " predicted.append(preds)\n", + " actuals.append(y_test)\n", + " models.append(nt)\n", + " pickle.dump(models, open(\"./dumps/ntuple/nt_model_fold_{fold}.pkl\"\n", + " .format(fold=str(i)), 'wb'))\n", + " pickle.dump(predicted, open(\"./dumps/ntuple/predicted_fold_{fold}.pkl\"\n", + " .format(fold=str(i)), 'wb'))\n", + " pickle.dump(actuals, open(\"./dumps/ntuple/actuals_fold_{fold}.pkl\"\n", + " .format(fold=str(i)), 'wb'))\n", + " i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8846.717688083649\n" + ] + } + ], + "source": [ + "print(b-a)" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 195, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "from scipy.stats.distributions import beta\n", + "def posterior_overlap_eval(actual, pred, labels, granularity=10000):\n", + " colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k')\n", + " tp_fn = []\n", + " confusion = metrics.confusion_matrix(actual, pred)\n", + " for i in range(confusion.shape[0]):\n", + " tp = confusion[i,i]\n", + " fn = np.delete(confusion[i,:], i).sum()\n", + " tp_fn.append((tp, fn))\n", + " betas = [beta(a=1 + tp, b = 1 + fn) for tp, fn in tp_fn]\n", + " for i, beta_dist in enumerate(betas):\n", + " random_draws = beta_dist.rvs(granularity)\n", + " plt.hist(random_draws, alpha=0.2, color=colors[i], bins=np.linspace(0,1, 100))\n", + " plt.vlines(random_draws.mean(), 0, 3000, label=labels[i], color=colors[i], linestyles=\"dotted\")\n", + " plt.legend(loc=\"upper left\")\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 200, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "confusion matrix\n", + "[[ 54 75 9 1 0]\n", + " [ 27 434 6 3 2]\n", + " [ 5 14 26 6 10]\n", + " [ 3 11 1 12 4]\n", + " [ 8 17 9 3 16]]\n", + "\taccuracy\n", + "\t\t 0.716931216931\n", + "\tf1\n", + "\t\t 0.695310981495\n", + "\trecall\n", + "\t\t 0.716931216931\n", + "\tprecision\n", + "\t\t 0.689992641723\n", + "confusion matrix\n", + "[[ 44 97 4 0 2]\n", + " [ 24 425 5 6 4]\n", + " [ 5 18 23 4 5]\n", + " [ 0 21 2 18 1]\n", + " [ 5 23 6 1 12]]\n", + "\taccuracy\n", + "\t\t 0.691390728477\n", + "\tf1\n", + "\t\t 0.659130978457\n", + "\trecall\n", + "\t\t 0.691390728477\n", + "\tprecision\n", + "\t\t 0.664620232208\n", + "confusion matrix\n", + "[[ 45 87 5 2 5]\n", + " [ 21 421 12 3 1]\n", + " [ 9 10 20 6 12]\n", + " [ 3 20 6 15 2]\n", + " [ 4 17 10 5 14]]\n", + "\taccuracy\n", + "\t\t 0.682119205298\n", + "\tf1\n", + "\t\t 0.653441348575\n", + "\trecall\n", + "\t\t 0.682119205298\n", + "\tprecision\n", + "\t\t 0.650066150776\n", + "confusion matrix\n", + "[[ 42 87 4 3 2]\n", + " [ 23 430 8 0 4]\n", + " [ 3 14 17 8 7]\n", + " [ 2 17 9 18 1]\n", + " [ 4 29 7 1 15]]\n", + "\taccuracy\n", + "\t\t 0.691390728477\n", + "\tf1\n", + "\t\t 0.659500094588\n", + "\trecall\n", + "\t\t 0.691390728477\n", + "\tprecision\n", + "\t\t 0.662959931352\n", + "confusion matrix\n", + "[[ 37 97 5 1 3]\n", + " [ 11 436 5 3 2]\n", + " [ 3 22 16 4 4]\n", + " [ 1 33 4 18 3]\n", + " [ 3 23 7 5 9]]\n", + "\taccuracy\n", + "\t\t 0.683443708609\n", + "\tf1\n", + "\t\t 0.636886443969\n", + "\trecall\n", + "\t\t 0.683443708609\n", + "\tprecision\n", + "\t\t 0.659467722501\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n" + ] + } + ], + "source": [ + "model_folder = \"/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/dumps/ntuple/\"\n", + "accuracy = []\n", + "precision = []\n", + "recall = []\n", + "f1 = []\n", + "mcc = []\n", + "post_overlaps = []\n", + "predicted = pickle.load(open(model_folder + \"predicted_fold_4.pkl\", 'rb'))\n", + "actuals = pickle.load(open(model_folder + \"actuals_fold_4.pkl\", 'rb'))\n", + "for preds, actual in zip(predicted, actuals):\n", + " pred = preds\n", + " print(\"confusion matrix\")\n", + " print(metrics.confusion_matrix(actual, pred))\n", + " print(\"\\taccuracy\")\n", + " acc = metrics.accuracy_score(actual, pred)\n", + " accuracy.append(acc)\n", + " print(\"\\t\\t\", acc)\n", + " print(\"\\tf1\")\n", + " f = metrics.f1_score(actual, pred)\n", + " f1.append(f)\n", + " print(\"\\t\\t\", f)\n", + " print(\"\\trecall\")\n", + " r = metrics.recall_score(actual, pred)\n", + " recall.append(r)\n", + " print(\"\\t\\t\", r)\n", + " print(\"\\tprecision\")\n", + " p = metrics.precision_score(actual, pred)\n", + " precision.append(p)\n", + " print(\"\\t\\t\", p)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 204, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.71693121693121697" + ] + }, + "execution_count": 204, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.max(accuracy)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 197, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "labs = [\"mozart\", \"bach\", \"schubert\", \"chopin\", \"tchaikovsky\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 198, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nEHolQagQotw8PT359ttvGTduHM7Ozo91rI+PDz4+PtrXp0+fZuHChfj6+tK3b199N7VCfP/996xZ\ns4YBAwYwe/ZsndHD0NBQ9u/fj4WFhQFbqMvU1FTndXx8PAC2trY66SqVSq8BaEZGRqU6D0IIw5A5\noUKIcsm/l3tubi7Lli17qnWlpaWhVquLvV1m4XmN+fMXo6OjmTp1Kq1ataJVq1bMmDGD1NTUR9aV\nkZHB/Pnz6dKlC15eXgQGBrJgwQJycnJKPU5RFBYtWkTNmjV57733ir18HRgYSJs2bUos4+zZs7z1\n1lsEBgbi5eVF+/btmTlzJikpKTr5kpKSePfdd+ncuTNeXl48++yzjBkzhsuXL2vz/Pnnn4wfP562\nbdvi7e1N586deeutt8jKyir23M2dO5c+ffqgUqmYOXMmarVa+2OgpDmh+/btY/Dgwfj4+NCyZUte\nffVVrl27ppPn9ddfp127dly+fJlRo0bh6+vLO++8U+q5FEL8M8hIqBCi3FxdXenfvz/ffvstY8eO\nfezRUH0oHOzlv54xYwZOTk5MnDiRixcvEhkZyb1791i6dGmJZeXm5jJ69GguXLjA4MGDcXNz4+zZ\nsyxdupS4uDjmzZtX4rHnz5/n5s2bjBgxotyjhr/88gv3799n0KBBODg4cOHCBTZu3MjVq1dZu3at\nNt/bb7/NkSNHGDZsGG5ubiQkJHDixAmuXLlCgwYNSE9PZ9SoUZiamjJq1CiqV6/O7du32b9/P2lp\nadr2FTx3/fr1w8HBgfnz5zNw4EACAgKws7PT5it8nr/++mvee+89unbtyr/+9S9SU1NZv349L730\nElu3bsXJyUmbNyMjg9GjR9OhQwd69eqFtbV1uc6PEOJ/iwShQognMn78eLZu3cry5cuZNm2aoZuj\nZW9vz8qVK7XBk5OTE4sXL+bo0aP4+/sXe0xkZCSnT59m06ZNqNVqQLMwyt3dnXnz5hEaGkrjxo2L\nPTZ/FLJRo0blbvPYsWOLBLAeHh688847nD9/HrVaTV5eHgcPHmTkyJFMmjRJm2/MmDHa5//973+5\nd+8eK1eu5Nlnn9Wmh4WFlVi3p6cnJiYmzJ8/H29v71KnRCQmJjJv3jxGjRrF22+/rU3v27cvPXv2\nZOXKlTrpqampjB07lrFjx5btRAgh/hHkcrwQ4onUqVOHfv36ERkZyf379w3dHEAzcjdkyBCd0buQ\nkBAUReHXX38t8bg9e/bQtGlTatasyYMHD7SPgIAAFEXh6NGjJR6bkpKCSqV6olG+ggFoZmYmDx48\nwMfHB0VRiImJATQr2q2srIiKiiIhIaHYcvJHMH/99Vedy+/68vPPP5ORkUGvXr10zpOZmRmenp7F\nnqeCC52EEAJkJFQIoQcTJkxg27ZtLFu2rNjR0MTERLKzs7WvLSwssLGxeaptqlu3rs7r6tWrY29v\nT1xcXInHXLt2jdu3bxc7b1OlUmkX7hTHxsYGRVHKNO+0JAkJCXz++efs2bOHBw8e6NSdnJysfT11\n6lTeeecd2rdvj5eXFx07diQoKAgXFxdAMxo7aNAgIiIi+Pbbb2nVqhWBgYH069cPKyurcrcv319/\n/YWiKAQHBxd5T6VSFdmyy8bGRhsYCyFEPglChRBPrE6dOvTt25fIyEidy8L5wsLCOH78OKAJUoKC\ngpgzZ06Zyy9tj8q8vLzHb3ApZXl7e/Pmm28Wu32Sq6tricfWr18fgIsXL5a7/vHjxxMbG8uYMWNo\n2LAhVlZWpKWl8eqrr+q0JygoiDZt2rB3714OHjzI0qVLWbZsGcuWLaNVq1YAvPfeewwZMoR9+/Zx\n8OBB3nvvPVauXMnGjRtxcHAodxtBc55UKhULFy4sduS38JQCc3PzJ6pPCPG/SYJQIYRevPLKK2zf\nvp3ly5cXeS88PJzExETt68IjZY9iaWmJqakpSUlJOukpKSlF0vJdu3aNZs2aaV8/ePCAxMREateu\nXWI9devW5f79+wQEBDxW+wDUajUuLi78+OOPTJky5bEXJ925c4fo6GjCw8MZMWKENv3cuXPF5q9Z\nsyYhISGEhIRw9+5d+vfvrxOE5rdJrVYTFhbGoUOHePnll/nuu++K/aHwOPJHmZ2cnHS22RJCiMch\nc0KFEHqRPxq6cePGInNDmzRpQps2bbSPBg0alKv8EydO6KRt2LCh2LyKovDNN9/ojJJGRESgUql0\nNsgvrEePHly9epUdO3YUeS8tLY3MzMwSjzUyMuLVV1/l9u3bvPvuu8WO0O7fv5/Dhw+XeHx+2wta\ns2aNzkhwdnY2aWlpOnlq1KiBg4ODdv5nSkpKkXI8PDwA9DJHtFOnTpibm7NkyZJi+1lwKoEQQpRE\nRkKFEOVS3OXq/LmhV65ceaJV4sUJDg5m7ty5TJ48mVatWnHmzBmioqJKXAiUlJTE6NGj6dq1Kxcu\nXODbb7+lXbt2pY5yDho0iD179vD222/z+++/07x5c7Kysrh8+TI//PADkZGR1KtXr8TjX3jhBS5e\nvEhERATyL7Q0AAAgAElEQVRnzpyhZ8+e2jsm/frrr5w4cYIlS5YUe6yzszNNmjRh0aJFpKSk4ODg\nwK+//srdu3d1znVCQgK9e/emR48eNGrUCEtLS3799VdiY2MZOXIkoAl2P/vsM7p3746bmxtZWVls\n3rwZCwsLunbtWoazXToHBwemT5/OzJkzeeGFF+jRowfVqlUjLi6O/fv307lzZ52V+0IIURwJQoUQ\n5VLcPM26devSr18/tmzZUq57jZd2zPDhw7l9+zZbt25l//79tG3bltWrVxMUFFRsOe+//z4bNmxg\nwYIFKIrCwIEDCQ8PL7VOExMTVq5cycqVK9m+fTu7d+/GysoKNzc3xowZo134U5pp06bRvn17NmzY\nwPr160lMTMTe3p7mzZuzdOlSnZHYwv1dtGgRs2bNYu3atRgZGdGpUydmzpxJly5dtHnt7e0JDg7m\n4MGD7N69GwB3d3dmz57NgAEDAPDy8sLf3599+/Zx7949rKys8PT05N///rd2RLSk813Wzy04OJja\ntWuzfPlyli1bRm5uLjVr1qR169b06dOnXGUKIf5ZVIqhb14shBB6tH79et5//3127dpV6qilEEII\nw5I5oUIIIYQQosJJECqEEEIIISqcBKFCCCGEEKLCyZxQIYQQQghR4Qy6Oj4nJ4fExETMzc21e+QJ\nIYQQQojKIy8vj8zMTOzt7TEx0V/oaNAgNDExkatXrxqyCUIIIYQQogzc3d1xdHTUW3kGDULz7yfs\n7u6OpaWlIZsihBBCCCGKkZ6eztWrV7Vxm74YNAjNvwRvaWmJlZWVIZsihBBCCCFKoe+pkzIRUwgD\nSI9N53zoec6Hnic9Nt3QzSmX2FgIDdU8frmYTuj584SeP09sup76U7CC2Fj9lCmEEBUg9kEsodtC\nCd0WSuwD+ferJHLbTiEMIC89j7SYNO3zqig9HWJiNM8T0/OIydX0Jz1PT/0pWIG+AlshhKgA6dnp\nxNyL0T4XxTPoFk1paWmcO3cOT09PuRwvhBBCCFEJPa14TUZChRBCCCGeAkVRSEtLK/Y9KysrVCpV\nBbeocpEgVAghhBDiKUhLS+PIlSOYW+iuKs/MyCSgXgDW1tYGalnlIEGoEAaQl5NHXppm7qSRlRFG\nJlVvjWBODuT/wDezzCNLpemPlZERJvpYQVmwAisr0OMGyUII8TTl5OWQlp1GamYqxmbGWFrJNpTF\nqXr/8wnxPyDlZAoH7A9wwP4AKSdTDN2ccjl5EuztNY/1J1KwP3AA+wMHOJmip/4UrODkSf2UKYQQ\nFeDkzZPYf2hPrYW1uJBwwdDNqbRkaEEIA7BsaEmTyCba51VRw4YQGal57lPfkkiVpj8N9XXjiYIV\nNGyonzKFEKICNHRoSOQLkWRkZuBg7mDo5lRasjpeCCGEEOIpSE1NJepWVJHL8elp6fi6+FaZOaGy\nOl4IIYQQohIqaRV8amoqBhzrq/QkCBVCCCGEeAIlrYJ/mPAQc0tzrKzlam9xJAj9h1Or1XzxxRd0\n6dLF0E35R8m4kcGtFbcAcAl1wcLVwsAtenw3bsCKFZrnvUdmsFPR9CfUxQVXCz30p2AFoaHg6vrk\nZQohxFNibmGuvex+J+UOWy5sIT0tnZ7uPXFwlHmhxZEg9B8qOzsbU1NTQzfjHyv7XrY2CHXq71Ql\ng9B79/6OET36ZLMiS9Of/k5O+glCC1bQv78EoUKIKuNBxgO2XthKXm4ebWu1NXRzKi1ZmPQUDBs2\nDA8PD4yMjNiyZQumpqZMnDiRPn368J///Ic9e/bg5OTEjBkz6NChAwDHjh3jo48+4vz589jb2zNg\nwADefPNNjIyMiIuLo0uXLqhUKp25Ja1bt2bdunU8fPiQWbNmcfz4cZKSkqhTpw7jx4+nd+/eOm1q\n3LgxxsbGbNu2DQ8PD65fv87Nmze1eWrXrs1PP/1UcSdKCCGE+B9Q0gKkhPsJoKLISKgsTNKociOh\nR49CvXpQo8bfabduQVwctGypmzcqCpyddQdQ4uPhzz+hRQvdva9jYsDSEurX/zstORlsbcvXzi1b\nthAaGsqmTZvYtWsX7777Lnv37qVbt25MmDCB1atX8/bbb/PLL7/w8OFDxo0bx8CBA5k3bx6xsbHM\nmDEDc3NzwsLCcHFx4eDBg9qy7927x8iRI2ndujUAmZmZNGvWjLFjx2Jtbc2vv/7K22+/Td26dfHy\n8tJp05AhQ/jmm28AsLe3p02bNnz44Ye0b98eI31sMC6EEEIIUQZVLuoICIBt23TTvv4aAgOL5u3b\n9++refn279eUUXgRW2gozJ6tm3b2bPnbqVarGT9+PHXr1mXs2LGYmZnh4OBAcHAwdevW5dVXX+Xh\nw4dcuHCBDRs24OLiwowZM6hXrx5dunThtddeY/Xq1QAYGRnh6OiIo6Mjtra2vPPOO/j5+REWFgZA\nzZo1GTVqFB4eHri6ujJ06FDatWvH7t27ddrk5ubGlClTcHd3x93dnerVqwNga2uLo6Oj9rUQQggh\nxNNW5UZCqwoPDw/tcyMjI6pXr07jxo21aU5OTiiKQnx8PLGxsfj4+Ogc7+fnR1paGrdv3+aZZ57R\npoeHh5Oens7HH3+sTcvLy2PJkiX88MMP3L17l6ysLLKzs7EstGl4s2bN9N1NIYQQQohyqXJB6JEj\nmsvxBQ0ZAv8/tVLH9u2ay/EFBQZqyig8pWHFCs3l+IKeJGYzKeY+18Wl5eXllbnMxYsXc/DgQTZt\n2qQzJ2PFihV89dVXTJ8+nUaNGmFlZcUHH3xAdna2zvGFg1JhOEknkjgdeBqA5vubY9fSzsAtenwn\nTvx9BWLR3iTCsjT92d+8OS3t9NCfghXs3190vo0QQlRS/733XybsnICiKMxrP48AxwBDN6lSqnJB\nqL9/0TQXF82jMF/fommOjppHYU2bFk0r73zQx1W/fn327t2rk3by5Emsra21o6B79uxhyZIlrFix\nAtdCq4RPnTpFly5d6NOnD6DZNPfKlSs0atTokXWbmJg8ViAs9MO8tjnu77prn1dFtWvDu+9qnnvX\nMudd3DXp5nrqT8EKatfWT5lCCFEBaljXYIzfGNJS03C0KCboEEAVDEL/F7300kusW7eOWbNmMXTo\nUGJjY1m0aBGjRo0C4OLFi0ydOpUxY8bQoEED7t+/D4CpqSn29va4u7vz448/EhUVhZ2dHWvWrCE+\nPr5MQWjt2rU5fPgwvr6+mJmZYaePESzxSOYu5tSZVMfQzXgiLi4waVL+K3N80HN/dCsQQogqw8nK\niRDvEO3qeFE8CUKfApWq6DeutLSaNWuyfPly5s2bR1BQEPb29rz44otMmDABgJiYGDIyMliyZAlL\nlizRHt+qVSvWrVvHhAkTuHHjBqGhoVhaWvLiiy/SrVs3kpOTS60fYOrUqXz44YdERkZSs2ZN2aJJ\nCCGEEBVC9gkVQgghhHgCsk9o+chIqBAGkHU3i/vbNNMqnPo5YVbDzMAtenx37/69XVqbXlkcRtOf\nfk5O1DDTQ38KVtCvn+7mwEIIUYklpCfw27XfSE1JJcAlAAfktp3FkSBUCAPIuJLBxTEXAbDxsqmS\nQeiVKzBmjOb5ikMZjMnU9MfLxkY/QWjBCry8JAgVQlQZN5Nv8v7v7wOwwH4BDWhg4BZVThKECmEA\ndv52dFI6GboZT8TfH/6ezGPHaDo9zQqEEKLKaFajGSfGnJCFSY9Q5e6YJIQQQgghqj4JQoUQQggh\nRIWTIFQIIYQQQlQ4CUKFMICU6BSONT3GsabHSIlOMXRzyiU6WnOnsaZNYdOpFJoeO0bTY8eITtFT\nfwpWEB2tnzKFEKICXIq/xIvfvsiYfWOITYw1dHMqLVmYJIQBmNib4NDdQfu8KrK3h+7dNc9d7Ezo\n/v9bkNib6Kk/BSuwt9dPmUIIUQFszGwIcA0gIz0Da9OqsReoIchm9UIIIYQQT0A2qy8fuRz/FAwb\nNow5c+Y8tfLDw8MJCwt7auULIYQQQjxtEoQKIYQQQogKVzUnowlRxWU/zCb5aDIAtv62mFYzNXCL\nHt/Dh3D0qOa5ukU25400/fG3taWaqR76U7ACf3+oVu3JyxRCiAqQnJnM2btnSU5KRu2gltt2lkBG\nQp+S3NxcZs2aRcuWLQkICGDBggXa97Zu3crAgQPx8/OjXbt2TJ48mYSEBJ3j//zzT8aPH0+LFi3w\n8/MjJCSE69ev6+RZtWoV7dq1w9/fn//85z/k5uZWSN/Ek0u/kE50j2iie0STfiHd0M0plwsXoEcP\nzWPfpXR6REfTIzqaC+l66k/BCi5c0E+ZQghRAa4lXuO1H15j2qFpXE+5/ugD/qGq3Ejo0RtHqVe9\nHjWs/76P9K3kW8Qlx9GyVkudvFG3onC2dsbVzlWbFp8Wz58Jf9KiVgtMjP7ufszdGCxNLalfvb42\nLTkzGVtz23K18/vvvyc4OJhNmzZx9uxZ/v3vf1OrVi2Cg4PJzc1l4sSJ1KtXj4SEBObMmUN4eDhL\nly4F4M6dOwwdOpSAgAAiIiKwsbEhKipKJ8g8cuQIzs7ORERE8NdffzFx4kQ8PT0JDg4uV3tFxbLx\nsSHgegAAZs5V777xAD4+kP+7yM7Rhu4qTX+c9XHf+MIVODvrp0whhKgAjR0bs3PITh4+eIi9uezu\nUZIqNxIasDKAbRe26aR9ffZrAtcGFsnb9+u+rDi1Qidt/5X9BKwMIC07TSc9dHsos3+frZN29u7Z\ncrezVq1ahIeH4+7uTp8+fQgJCWHt2rUAPP/887Rv3x5XV1e8vb2ZNm0av/32G+n/P4K0fv167Ozs\n+OSTT2jSpAl169alf//+uLu7a8u3t7fnnXfeoV69enTs2JGOHTty5MiRcrdXVCwjcyMsXC2wcLXA\nyLzK/RkCYG4Orq6ah52lEa4WFrhaWGBupKf+FKzA3Fw/ZQohRAUwMzajpk1NnC2dMTOumgMNFaHK\njYRWFc2bN9d57ePjw+rVq1EUhZiYGBYtWsSFCxdITEwkf5esmzdv0qBBA86fP0/Lli0xNjYusfxG\njRqhUqm0r52dnbl06dLT6YwQQgghhJ5VuSD0yOgj1KteTydtSLMhdHDrUCTv9iHbcbbWvYwXWC+Q\nI6OPYGWqu8/Vir4rsDTV3d+rWY1memr13zIyMggNDaVDhw58/PHHODg4cPPmTUJDQ8nOzgbAwsLi\nkeWYFNoQXKVSkZeXp/f2CiGEEEI8DVUuCPV39S+S5mLrgoutS5F0XxffImmOVo44WjkWSW9ao2mR\ntPLOBwWILnSbwT/++AN3d3diY2N5+PAhkydPpmbNmsXmbdy4MVu3biU3N7fU0VBRdaWeT+XPN/4E\noOGChlirq8aGxQWdPw9vvKF5/sb8VBbkavqzoGFD1PrYgLlgBQsWgFr95GUKIUQFuPrwKh8f+pjs\n7GwmNJ9QZLN6oVE1J6NVATdv3mTu3LlcuXKFHTt28NVXXzFixAhcXFwwNTVl3bp1XL9+nZ9++okl\nS5boHBsSEkJKSgpvvvkmZ8+e5dq1a2zdupWrV68apjNC71TGKkzsTDCxM0FlrHr0AZWQsTHY2Wke\npsYq7ExMsDMxwVilp/4UrEB+jAkhqhAjlRHWZtZYmVhhrJJ/v0pS5UZCqwKVSkVQUBAZGRkEBwdj\nbGzMyJEjtSvX586dyyeffMJXX31FkyZNmDp1KhMmTNAeX61aNdauXcu8efMYNmwYxsbGeHp60qJF\nC0N1SeiZVSMrmn5bdPS9KmnUCL79Nv+VFd3Qc390KxBCiCqjrn1d5nadq71tpyie3DteCCGEEOIJ\nyL3jy0cuxwshhBBCiAonl+OFMIDctFwyrmQAYFHPAmOrqjdnKC0NrlzRPK9ZN5c7Rpr+1LOwwEof\nczgLVlCvHsjVEiFEFZGRk0FcUhyJSYk8Y/2MoZtTaclIqBAGkHomlePNjnO82XFSz6QaujnlcuYM\nNGumeWw9m0qz48dpdvw4Z1L11J+CFZw5o58yhRCiAvyZ8CeDvhvE2J/GciXpiqGbU2nJSKgQBmDV\nxArfQ77a51VRkyZw6JDmuZunFYdUmv400deIZcEKmjTRT5lCCFEB6lWrx6p+q0h6mISbrZuhm1Np\nSRAqhAGY2Jpg36Zq30/Y1hbatMl/ZUIt9Nwf3QqEEKLKsDazxrumNwnGsjq+NHI5XgghhBBCVDgJ\nQoUQQgghRIWTy/FCGEB6bDrXZl8DwG2aG5b1LR9xROUTGwuzZ2ueh/wrna/yNP2Z5uZGfUs99Kdg\nBdOmQf36T16mEEJUgBtJN1j9x2oyMzIZoh4it+0sgQShQhhAXnoeaTFp2udVUXo6xMRoniem5xGT\nq+lPep6e+lOwgvR0/ZQphBAVIDMnk9gHseRk55CZm2no5lRacsekSkStVvPFF1/QpUuXcpexaNEi\n9u3bx5YtW/TYMiGEEEKURO6YVD4yJ/R/kEr1dJbibd68mVatWj2VsoUQQgjxzyJBqCiTnJwcFEV5\nagGuEEIIIf5ZJAh9Cn744Qf69u1L8+bN8ff35+WXXyYjQ3NLw02bNtGnTx+8vLxo374977//vs6x\nCQkJhIWF4ePjQ/fu3dm/f7/2veJGIvft24darS7Sho0bN9KpUyd8fHyYOHEiKSkpOu9/++239OrV\nC29vb3r16sWGDRu078XFxaFWq9m1axfDhg2jefPmbN++nWnTppGcnIxarcbT05NFixY98bn6p8rL\nySMnKYecpBzycqrmnNCcHEhK0jwysvNIyskhKSeHHH3NCS1YQU6OfsoUQogKkJOXQ0pWCqnZqeTm\n5Rq6OZVW1QtCjx6Fu3d1027dghMniuaNioIbN3TT4uM1ZRT+Ty0mRrMat6Dk5Mdu3r1795gyZQrB\nwcHs3r2br776im7duqEoChs2bGDWrFkMHjyYnTt3smzZMtzd3XWOX7x4Mb169WL79u106NCBKVOm\nkJSUpH2/uJHIwmlXr17lhx9+YOnSpaxYsYJz587x3nvvad/ftm0bCxcuZNKkSezevZtJkybx+eef\nF5lH+sknnzBixAh27dpFQEAA06ZNw8bGhkOHDnHgwAFGjx792OdHaKScTOGA/QEO2B8g5WTKow+o\nhE6eBHt7zWP9iRTsDxzA/sABTqboqT8FKzh5Uj9lCiFEBTh//zyd1nZiwI4BXHx40dDNqbSq3ur4\ngABYvhxCQ/9O+/prePddzYhJQX37avK9++7fafv3w4svQmIi2Nn9nR4aCk2bwooVf6edPfvYd2y5\nd+8eubm5dOvWDRcXFwAaNWoEwJdffsno0aMJCQnR5vf09NQ5/vnnn6dXr14ATJo0iYiICKKjo2nX\nrl2Z25Cdnc28efNwdnYGYMaMGYwbN46pU6fi6OjIokWLmDp1Kl27dgWgdu3aXLp0iW+++YagoCBt\nOSNHjtTmAbC1tUWlUuHgIFtNPCnLhpY0iWyifV4VNWwIkZGa5z71LYlUafrTUB/bMxWuoGFD/ZQp\nhBAVwNXOlQ+7fEhKcgq1rWsbujmVVtULQis5tVpNmzZt6NOnD+3ataNdu3Z0796dnJwc7t69S0BA\nQKnHN27cWPvc0tISGxsb4uPjH6sNLi4u2gAUwNfXl7y8PK5cuYKVlRV//fUX06dPZ/r06do8eXl5\n2Nra6pTTtGnTx6pXlJ2poyk1gmsYuhlPxNERgoPzX5nSCD33R7cCIYSoMqpZVKNr/a7a1fGieFUv\nCD1yBOrV000bMgQ6dCiad/t2KBCMARAYqCmj8BYDK1ZA4RGcZs0eu3lGRkasWrWKqKgoDh48SERE\nBJ999hmrV68u0/EmJrofiUqlIn8XrYLP8+U85ly5tDTNXo7vv/8+3t7eRdpekKW+RrSEEEIIIQqp\nekGov3/RNBcXzaMwX9+iaY6OmkdhxY36FRoZfBy+vr74+vryyiuv0LlzZw4dOoSrqyuHDx+mdevW\n5SrTwcGB1NRUMjIysLCwAODcuXNF8t26dYt79+5pR0OjoqIwNjamfv36ODg4UKNGDf766y969+5d\nYl3FzT01NTUlN1cmWAshhBDiyVW9ILSSi46O5vDhwzz77LM4Ojryxx9/8ODBAxo0aEBYWBgzZ87E\nwcGBDh06kJKSQlRUlM4c0dI0b94cCwsL5s+fz/Dhw/njjz/YvHlzkXympqZMnTqVt956i5SUFD74\n4AN69uypncv52muvMXv2bGxsbGjfvj1ZWVmcPXuWpKQkRo4cCVBkxBU0c0fT0tI4fPgwarUaS0tL\nbTAsHk/GjQxurbgFgEuoCxauVe883rjx9xTq3iMz2Klo+hPq4oKrPr4XBSsIDQVX1ycvUwghKsCd\nlDtsubCF9LR0err3lNt2lkCCUD2ztrbm+PHjrFu3jpSUFGrVqsXUqVNp3749AFlZWaxZs4Z58+ZR\nvXp1unfvrj32USvf7e3t+eijj5g3bx6bNm0iICCA1157jXfeeUfnGHd3d7p168bYsWNJSkqic+fO\nzJw5U/t+cHAwVlZWrFixgo8++ghLS0saN27MiBEjSm2Lr68vgwcP5s033yQxMZFXX32VsLCw8p+s\nf7Dse9naINSpv1OVDELv3fs7RvTok82KLE1/+js56ScILVhB//4ShAohqowHGQ/YemErebl5tK3V\n1tDNqbTktp1CCCGEEE9AbttZPlVvn1AhhBBCCFHlSRAqhBBCCCEqnAShQgghhBCiwkkQKoQBJJ1I\n4ne73/nd7neSTiQ9+oBK6MQJzU3H7Oxg3dEk7H7/Hbvff+dE4TuX6aOC4m7LK4QQldR/7/2Xjms6\nErQ9iIsP5LadJZHV8UIYgHltc9zfddc+r4pq1/77jrjetcx5F3dNurme+lOwgtpy2zshRNVRw7oG\nY/zGkJaahqNFMXuTC0BWxwshhBBCPBFZHV8+cjleCCGEEEJUOAlChRBCCCFEhZM5oUIYQNbdLO5v\nuw+AUz8nzGqYGbhFj+/uXdi2TfO8Ta8sDqPpTz8nJ2qY6aE/BSvo1w9q1HjyMoUQogIkpCfw27Xf\nSE1JJcAlAAfktp3FkZHQChQXF4dareb8+fNPvS61Ws1PP/301OsR5ZNxJYOLYy5yccxFMq5kGLo5\n5XLlCowZo3kcuZbBmIsXGXPxIlcy9NSfghVcuaKfMoUQogLcTL7J+7+/z6dRn3I77bahm1NpyUho\nBSvunuxPw8GDB7Gzs6uQusTjs/O3o5PSydDNeCL+/vD3skY7RtPpaVYghBBVRrMazTgx5oR2YZIo\nngShFayiNiNwdJQtIYQQQghRecnl+KdAURSWL1/Oc889h5eXF4GBgSxdulT7/vXr1xk+fDg+Pj70\n79+fP/74Q+f4PXv20KdPH+2xq1ev1nk/MDCQxYsXM3nyZHx9fenQoQPr16/XyVPwcnz+NIC9e/eW\nWq8QQgghREWpckHo0aQk7mZl6aTdysws9i4tUcnJ3Cg0Py0+O5ujSUnk5OXppMekphKbnq6TlpyT\nU642fvzxx6xYsYJXX32VXbt28emnn+Lk5KR9/7PPPiM0NJStW7fi7u7O5MmTyfv/9pw9e5Y333yT\nPn36sGPHDl5//XUWLFjAli1bdOpYtWoVnp6ebNmyhbFjxzJ79mwOHz5cartKq1cIIYQQoiJVuSA0\n4NQptt2/r5P29d27BJ4+XSRv3zNnWHHrlk7a/gcPCDh1irRCwVfohQvMvnZNJ+1saupjty81NZWI\niAj+9a9/0b9/f+rUqUPz5s0ZOHCgNs/o0aPp0KEDbm5uvP7669y8eZNr/1/3mjVraNOmDePHj8fN\nzY2goCCGDh3KypUrderx8/MjNDQUNzc3QkJC6N69O2vWrCm1baXVKypWSnQKx5oe41jTY6REpxi6\nOeUSHQ1Nm2oem06l0PTYMZoeO0Z0ip76U7CC6Gj9lCmEEBXgUvwlXvz2RcbsG0NsYqyhm1NpVbkg\ntLK7fPky2dnZBAQElJincePG2ufOzs4oikJ8fDwAsbGx+Pn56eT38/Pj6tWrOvNJfXx8dPL4+Phw\n+fLlUttWWr2iYpnYm+DQ3QGH7g6Y2FfNqdn29tC9u+bhYmdCdwcHujs4YG+ip/4UrMDeXj9lCiFE\nBbAxsyHANYAWNVpgbVo17opkCFXuf78jfn7Us7DQSRtSowYdivlParuXF86mpjppgdWrc8TPDysj\n3fh7hYcHloXSmpXjdloWhdpWHJMC/0nnr5aviAVLhqpXFGXhZkHDTxoauhlPxM0NPvkk/5UFz6Ln\n/uhWIIQQVYaLrQuT2kyS1fGPUOVGQv3t7IpshO1ibk7LYrYj8rW1xbVQUOhoaoq/nR0mhQLOptbW\n1LfUveerbTlGdNzd3TE3Ny9xfuajtmiqX78+p06d0kk7efIk7u7uOseeLjT94PTp0zRo0KDEcitq\nayghhBBCiLKockFoZWdmZkZoaCgfffQRW7Zs4fr165w+fZpNmzYBjx55fPnllzly5AiLFy/m6tWr\nbN68mQ0bNjB69GidfKdOnWLlypVcvXqV9evXs2fPHkaMGFFiuTLiKYQQQojKpMpdjq8KwsLCMDU1\nZeHChdy9exdnZ2cGDx4MFD8iWTCtSZMmfPbZZ3z++ecsWbIEZ2dnJk6cSFBQkM4xo0aN4uzZsyxa\ntAgbGxvCw8Np27ZtsWWWpV5RsbIfZpN8NBkAW39bTKuZPuKIyufhQzh6VPNc3SKb80aa/vjb2lLN\nVA/9KViBvz9Uq/bkZQohRAVIzkzm7N2zJCclo3ZQy207S6BSDDhElpaWxrlz5/D09MTKyspQzahy\nAgMDGTlyJMOHDzd0U0Q5JR1N4lSAZtqF3xE/7Pyr3t2tjh6F/PV3Kw4lEZqp6c8RPz/89XG3roIV\nHDmiCUSFEKISSk1NJepWFJZWmml9Z++eZeTWkQAs6LSAZxs9q5M/PS0dXxdfrMux9sQQnla8JiOh\nQhiAjY8NAdc1AZaZs9kjcldOPj5w/brmuZ2jDd1Vmv44m+mpPwUrcHbWT5lCCFEBGjs2ZueQnTx8\n8Bt2TCYAACAASURBVBB7c9ndoyQShFZBchm96jMyN8LC9dE7KVRm5ubg6pr/ygg79Nwf3QqEEKLK\nMDM2o6ZNTUwzTGV1fCkkCK2C8m/HKYQQQghRVcnqeCGEEEIIUeEkCBXCAFLPp3K6+2lOdz9N6vnH\nvz1sZXD+/N83NNp1NpXup0/T/fRpzpfjdrePrOD8ef2UKYQQFeDqw6uE7Qoj/GA4fyX/ZejmVFpy\nOV4IA1AZqzCxM9E+r4qMjSF/EbypsQo7laY/xvqas1ywAmNj/ZQphBAVwEhlhLWZNVlKFsYq+fer\nJLJFkxBCCCHEEyi8RVO+/Nt2Ojjq7hMqWzRpyOV4IYQQQghR4SQIFUIIIYQQFU6C0EogPDycsLCw\nJyrj2LFjeHp6kpKSAsDmzZtp1aqVPppXLoauv7LLTcslNSaV1JhUctNyDd2ccklLg5gYzeN+ci4x\nqanEpKaSlqun/hSsIC1NP2UKIUQFyMjJ4HLCZa4mXSUjJ8PQzam0JAh9CoYNG8acOXMqtE4/Pz8O\nHDiAjY2NNs3Qm9obuv7KLPVMKsebHed4s+Oknqmaq+PPnIFmzTSPrWdTaXb8OM2OH+eMvlbHF6zg\nzBn9lCmEEBXgz4Q/GfTdIMb+NJYrSVcM3ZxKS1bH/48wMTHB0dHR0M0QZWTVxArfQ77a51VRkyZw\n6JDmuZunFYdUmv400dek9YIVNGminzKFEKIC1KtWj1X9VpH0MAk3WzdDN6fSkpFQPQsPD+f48eOs\nW7cOtVqNp6cnN2/e5NKlS4wfP54WLVrg5+dHSEgI1/Pvi/3/Vq1aRbt27fD39+c///kPuQUua27d\nupWBAwfi5+dHu3btmDx5MgkJCdr3jx07hlqt1l6OLywhIYGBAwfy2muvkZ2drT0mODgYLy8v2rVr\nx/z588nLywMgMjKS9u3bFylnwoQJTJ8+HYDz588zfPhw/Pz8aNGiBQMHDiQmJuaR9WdlZfHcc8+x\nevVqnTznzp1DrVYXOS//i0xsTbBvY499G3tMbKvmb0FbW2jTRvOoVc2ENvb2tLG3x9ZET/0pWIGt\nrX7KFEKICmBtZo13TW+aODbByrRqDjRUhCoXhCYdTSLrbpZOWuatTJJOJBXJmxyVTMYN3bkY2fHZ\nJB1NIi8nTyc9NSaV9Nh0nbSc5JzHbt/06dPx8fEhODiYgwcPcuDAAYyNjQkJCcHc3JyIiAi2bNlC\ncHCwTpB55MgRrl+/TkREBPPmzWPz5s18//332vdzc3OZOHEi27ZtY/Hixdy8eZPw8HCduku6/H3r\n1i2GDh2Kh4cHn3/+Oaampty5c4dx48bRvHlztm3bxnvvvcemTZtYvHgxAD169CAxMZEjR45oy0lM\nTOTAgQP069cPgClTpuDi4sL333/P5s2bGTt2LCbFBCCF6zczM2PgwIE6/QP47rvvaNWqFXXq1HnM\nsy6EEEKIqqbKBaGnAk5xf9t9nbS7X9/l9P+xd+/hUZd3/v+fc57MJDMxCYFAhHA0QEDAfktwt0Jb\nW/BQ0Fbp6loPXeKl1+q3W3ttD2ztupf+WO26bvltd61dKm2tfr8/D61Y4eruarcVihxCVUANBxMi\nAeRgEpI5z2Tm98enhIQkQJIP85kJr8d1zXXdc7rv9811Mbz5fO77fn/mnT6f3fWFXRxZc6TXa22/\nbeOPtX8kHemdhO5ZsYfmVc29XgvvHvzatsLCQlwuFwUFBZSWllJaWsqzzz5LIBDgiSeeYMaMGYwf\nP55ly5ZRVVXV/b1gMMj3vvc9Jk6cyMKFC1m4cGGvBPCLX/win/rUp6isrGT27NmsXLmSN954g2g0\n2k8UpzU1NXHrrbdy1VVXsWrVqu5E9bnnnqOiooLvfve7TJw4kc9+9rPcf//93VcnA4EAn/rUp3j1\n1Ve7+/rNb35DSUkJ8+fPB4zkcsGCBVRVVTF+/HgWL17MZZdddl7j33jjjTQ1NbHrT2v9UqkU69ev\n56abbhr0n7mIiIjkn7xLQvNRQ0MDn/jEJ3CcperL1KlTe13JHDVqFB9//HH38927d3PPPffw6U9/\nmnnz5nH77bcDcPjw4QH7jEaj/OVf/iWf//zn+1w1bWxsZM6cOb1emzdvHpFIhI8++giAL3zhC/zX\nf/1X9+37V199lWuvvbb783fddRff/e53ueuuu/jxj3/c5zb62cYvLy/nqquu4qWXXgLgt7/9Lclk\nkiVLlgw4n5Ek2hilYUUDDSsa+lyBzxeNjbBihfH43d4oKxoaWNHQQOM5/mM0pAEaG83pU0QkC1o6\nWnj4jYd54o9PcCR85NxfuEjlXRI6b8s8ypaW9Xqt/JZyLv/t5X0+O+vXs6hYUdHrtUs+cwnztszD\n7us99cvWXMaElb0XD/trzKlk4PV6z/mZM29j22y27vWZ0WiUFStWEAgEePzxx3nppZf44Q9/CNCd\nIPbH7XZz5ZVX8rvf/Y6jR48OOu7PfOYzpNNpfv/73/PRRx9RX1/PsmXLut+/7777WL9+PYsWLWLr\n1q1ce+21vPbaa+c9/s0338yGDRtIJBL88pe/5Nprr8Xj8Qw6znyUjqaJvBsh8m6EdDR97i/koGj0\n9AlKJ6Np3o1EeDcSIZo2aT49BzArsRURyYJ4Kk5jWyPNHc3Eu+JWh5Oz8m5HRGB+oM9rngoPnoq+\nyUvR3L6bGVylLlylrj6v+2f2TTiHumHE7Xb3Wu85bdo01q1bR1dX11mvhg6ksbGRkydP8o1vfIPR\no0cDsHPnznN+z+Fw8E//9E888MAD3H777TzzzDOUl5cDMGnSJP77v/+71+d37NiB3+9nzJgx3fP4\n3Oc+xyuvvMKBAweYNGkS1dXVvb4zYcIE7rjjDu644w6+8Y1v8Mtf/pKrr7663/F/8YtfMGrUqO7v\nLly4kIKCAp577jk2bdrEc889N+g/m3zln+ln3pvzrA5jWGbOhDffPPXMzzJMnk/vAURE8sbkksms\nXba2u2yn9C/vroTmg3HjxrFz504OHTpEW1sbt912G6FQiK9//evs3r2b5uZm1q1bx4EDB86rv4qK\nClwuFz//+c85ePAgr7/+Ok8++WSfz2UymT6v2Ww2Hn/8caqrq7njjjs4ccJYT3vrrbdy5MgRHn74\nYRobG3nttdf44Q9/yF133dXr+0uXLuV3v/sdL730El/4whe6X4/H4zz88MNs27aNw4cPs2PHDnbt\n2sWUKVMGHP/222/vHh/Abrdzww038M///M9UVVUxe/bs8/rzEBERkfynJPQC+OpXv4rdbue6667j\nyiuvJBKJ8LOf/YxIJMJXvvIVvvSlL/Hiiy/2u5O8PyUlJTz66KP853/+J9dffz1r1qzh29/+dp/P\nDbQ73uFw8C//8i9MnTqVO++8k9bWVkaPHs1//Md/sGvXLm644Qb+4R/+geXLl3Pvvff2+m5tbS3B\nYJDm5mauv/767tftdjvt7e18+9vfZsmSJTzwwAMsXLiw38pP/Y1/yk033UQymeRLX/rSef1ZiIiI\nyMhgy/R3+SxLIpEI77//PtOnT8dn1gHXklfq6+u56667+P3vf09JSYnV4WRNOpXuPqHB7rNjd+bf\n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\nM888w/bt23nsscc4fvw4L7zwglvdnTt35qWXXuL7779nwoQJfPLJJyxYsMCt/pq8xppKSkpi2rRp\nLFmyhEmTJmG323nnnXfchsB9Xadt27asXbuWhIQEZsyYwbhx43jttdewWCxumQfmzJnDoEGDeOWV\nV5g8eTLJycmMGTOm2tczffp0nnzySbZt28b48eN54YUXMJlMriH12267jQceeIDFixdz3333MX36\n9IC068iRIxQXF1e7ol8I0bgparC2yBBCNGrbt2/n6aefZteuXR6rvq8XU6ZMISsri02bNoW6KfXa\n3LlzOXr0qMdCJyHE9UV6QoUQfnHbbbfRvn171q5dG+qmiHqsrKyMdevWMXHixFA3RQgRYhKECiH8\n5oUXXqjVXuWNkT+G9Buz3NxcnnjiCW655ZZQN0UIEWIyHC+EEEIIIYJOekKFEEIIIUTQSRAqhBBC\nCCGCToJQIUSjsGjRIlJSUlz/UlNTGTZsGEuXLvXY5ac627ZtY/Xq1dfcplGjRvmlntqYNm0a06ZN\nC+o1hRCiLiRZvRCi0TAYDKxcuRIAi8XC3r17efXVV1FVlUceeaTG9Xz22WdkZWXxwAMP1LktW7du\n5fz589xzzz11rqMqRqORjRs3otfrKSoqIiUlhczMTB555BGGDx/OI488Qtu2bQNybSGE8AcJQoUQ\njYaiKKSmproe9+nTh2PHjrF169ZaBaH+8Pe//53hw4cTFhbm97pNJhPr1q1j7NixKIqC1WplwIAB\nZGZm0rZtW3r27MmqVauYMmWK368thBD+IsPxQohGLSoqymPryG+//ZaHHnqIHj160KtXL5566imK\nioqAyoTzGzZs4Pjx466h/cvB3MGDB5kwYQL9+/enR48ejBw5ko0bN3pcMycnh/3793PHHXcE5DVt\n2LCBMWPGuNJBnTx5koSEBNfzd9xxB5s2bcLpdAbk+kII4Q/SEyqEaFQcDgdQORy/Z88etmzZwoQJ\nE1zPf/vttzz44IPcdtttzJs3D5PJxLx583j00Ud5//33efTRRykqKuLkyZO88sorAK4A79y5c/To\n0YPRo0cTERHBgQMH+POf/4yqqowcOdJ1jd27d6PT6ejevbvfX19BQQGtWrVCq9W6ylauXMkTTzzh\netyjRw+Kioo4evQo3bp183sbhBDCHyQIFUI0GiaTyS3oUhSFYcOGuQ3Fv/rqq6SmprJgwQJXWefO\nnRkxYgQ7d+5kwIABJCYmcv78ebehfYDhw4e7Pe7Vqxe5ubl88MEHbkHo4cOHad++PXq93qONP/30\nE+vXr6dNmzYcPXqUO+64g379+mGxWHA4HK593H354osv+NWvfkV2djazZ8+mW7dulJWVMXToUNcx\nnTp1QqvVcujQIQlChRD1lgShQohGw2AwsGrVKlRVxWazceTIEebPn8/UqVOZPXs2FouFb7/9lj/9\n6U+uHlOAdu3a0bJlSw4fPsyAAQN81l9aWsqCBQv4/PPPyc/Pd9Vx5VA4VPZWJiYmepx/6NAh/vzn\nP7NmzRqio6MpLS1l8ODBbN26lW3btjFo0KBqX2NFRQVhYWF07NiRZcuWAXD33XeTlZXFzTffDIBW\nqyUmJoaCgoLq3zQhhAgRCUKFEI2Goih07drV9bhHjx5UVFQwd+5cxo4dS0xMDA6Hgzlz5jB79myP\nc/Py8qqs/09/+hOHDh3iscce48YbbyQ6OprVq1fzr3/9y+04m83msSBJVVWeffZZHn/8caKjowGI\njY0lISGBvXv3UlJSQnx8fLWvUafz/Nq2Wq0cPXrUFYQChIWFYbFYqq1PCCFCRYJQIUSj1qFDB1RV\n5aeffuLWW29FURTGjx9PZmamx7FX92heyWazsWPHDp577jl+85vfuMq9Lf6Ji4vj/PnzbmXffPMN\n58+fZ/DgwW7lUVFRbNy4kYkTJ1b7WrKzs+nQoYNbmclk4uzZs7Rq1cqt/NKlS1W+HiGECDUJQoUQ\njdqPP/6IoigkJiZiMBhIS0sjOzvbbSHP1fR6PTabza3MZrPhdDrdeiLLysr4/PPPPc5PTk5m3759\nbmUXLlygbdu2REREuJUrikKHDh246aabqn0t+/bto0+fPm5lW7ZsoWnTpvzsZz9zlRUVFWE2m0lO\nTq62TiGECBUJQoUQjYaqqhw6dAgAu91OVlYWb7/9NjfeeCO9evUC4Nlnn2XMmDFMmjSJ4cOHExsb\nS25uLrt37+bXv/41vXv3pkOHDqxfv57NmzfTrl07EhISaN26Nd27d2fx4sUkJCSg1WpZsmQJsbGx\nXLx40a0dPXv25M033yQ/P5/mzZsD0KVLF8xms9tx3333HRaLhVatWmE0GomNjeXTTz8lKyuLZ555\nxuP1Wa1W9u/fT8eOHYHK3s5ly5bx0ksvuQXHhw8fRlEUbrnlFv+9uUII4WeKWtv97IQQoh5atGgR\nb7zxhuuxVqulZcuWDBw4kEcffdRtodCRI0dYuHAhBw4cwG6307x5c9LT0xk/fjzNmzenrKyM6dOn\ns2vXLoxGIyNHjmTOnDmcOXOG6dOnc/DgQRISEvjd735HeXk577zzDgcOHHDVb7fb6d+/P0899RSj\nRo1ylf/jH//g1KlTtG3bFrvdTqdOndDr9SxfvpyuXbsyfvx45s2bx5o1a/jiiy8wGAxur3Ht2rUk\nJydz+PBhtFotp0+fZuTIkR6poGbNmsWxY8d49913/f02CyGE30gQKoQQATB37lyOHj3KihUran3u\nZ599Rp8+fYiJiXGVnT59mtzcXPr27VvluQ6Hg1tvvZVnnnmGX/7yl7W+thBCBIvsmCSEEAEwduxY\nDh06xLFjx2p9bl5enlsACnDgwAHS0tKqPXfTpk1ERUUxYsSIWl9XCCGCSYJQIYQIgGbNmvHSSy+5\ntgOtqe+++45OnTp5lJvNZo9FTd5otVpmz56NRiNf70KI+k2G44UQoh5RVdW1J7wQQjRm8qeyEELU\nIxKACiGuFxKECiGEEEKIoJMgVAghhBBCBJ0EoUIIIYQQIugkCBVCCCGEEEEnQagQQgghhAg6CUKF\nEEIIIUTQSRAqhBBCCCGCToJQIYQQQggRdBKECiGEEEKIoJMgVAghhBBCBN3/A5U+UTAkbIsJAAAA\nAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mymodel = \"N-Tuple Classifier\"\n", + "sns.set_style(\"whitegrid\")\n", + "plt.title(\"Posterior Probability of Within-Class Error\\n{model}\".format(model=mymodel))\n", + "plt.xlabel('P(actual=predicted)\\n' + r'Beta($\\alpha, \\beta$)')\n", + "plt.ylabel(\"Density\")\n", + "plt.yticks([])\n", + "ax = plt.gca()\n", + "ax.grid(False)\n", + "posterior_overlap_eval(actual, pred, labels=labs, granularity=10000)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/nbs/NaiveBayesResults.ipynb b/nbs/NaiveBayesResults.ipynb new file mode 100644 index 0000000..9b1f1e6 --- /dev/null +++ b/nbs/NaiveBayesResults.ipynb @@ -0,0 +1,522 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os\n", + "import pickle\n", + "import numpy as np\n", + "from scipy import sparse\n", + "from functools import partial\n", + "from sklearn.externals import joblib\n", + "from sklearn.cross_validation import KFold\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.cross_validation import train_test_split\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from midi_ml.models.linear_decision_rules import NaiveBayesClassifier" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "labels = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_labels.pkl\")\n", + "features = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_matrix.pkl\")\n", + "features = features.todense()\n", + "mozart_labels = [k for k in range(len(labels)) if labels[k] == \"mozart\"]\n", + "bach_labels = [k for k in range(len(labels)) if labels[k] == \"bach-js\"]\n", + "schubert_labels = [k for k in range(len(labels)) if labels[k] == \"schubert\"]\n", + "chopin_labels = [k for k in range(len(labels)) if labels[k] == \"chopin\"]\n", + "tchaikovsky_labels = [k for k in range(len(labels)) if labels[k] == \"tchaikovsky\"]\n", + "X = features[mozart_labels + bach_labels + schubert_labels + chopin_labels + tchaikovsky_labels].A\n", + "y = np.array([0 for i in range(len(mozart_labels))] + [1 for i in range(len(bach_labels))] + \n", + " [2 for i in range(len(schubert_labels))] + [3 for i in range(len(chopin_labels))] +\n", + " [4 for i in range(len(tchaikovsky_labels))])\n", + "y = y.reshape((y.shape[0],))\n", + "del features" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X = X[:,X.sum(axis=0).nonzero()[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# mkdir dumps/naivebayes" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "predicted = []\n", + "actuals = []\n", + "i = 0\n", + "for train_idx, test_idx in KFold(n=X.shape[0], n_folds=10, shuffle=True):\n", + " X_train = X[train_idx]\n", + " X_test = X[test_idx]\n", + " y_train = y[train_idx]\n", + " y_test = y[test_idx]\n", + " nb = NaiveBayesClassifier(X_train, y_train, parametric_form=\"multinomial\")\n", + " nb.fit()\n", + " preds = nb.predict(X_test)\n", + " predicted.append(preds)\n", + " actuals.append(y_test)\n", + " pickle.dump(predicted, open(\"./dumps/naivebayes/predicted_fold_{fold}.pkl\"\n", + " .format(fold=str(i)), 'wb'))\n", + " pickle.dump(actuals, open(\"./dumps/naivebayes/actuals_fold_{fold}.pkl\"\n", + " .format(fold=str(i)), 'wb'))\n", + " i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "confusion matrix\n", + "[[ 39 13 1 5 9]\n", + " [ 34 182 1 12 6]\n", + " [ 4 0 8 7 8]\n", + " [ 1 3 1 15 3]\n", + " [ 1 3 6 4 12]]\n", + "\taccuracy\n", + "\t\t 0.677248677249\n", + "\tf1\n", + "\t\t 0.693147905744\n", + "\trecall\n", + "\t\t 0.677248677249\n", + "\tprecision\n", + "\t\t 0.726988580692\n", + "confusion matrix\n", + "[[ 42 21 4 4 3]\n", + " [ 35 156 3 26 4]\n", + " [ 2 1 8 5 7]\n", + " [ 2 3 2 19 3]\n", + " [ 3 3 8 3 11]]\n", + "\taccuracy\n", + "\t\t 0.624338624339\n", + "\tf1\n", + "\t\t 0.640519867603\n", + "\trecall\n", + "\t\t 0.624338624339\n", + "\tprecision\n", + "\t\t 0.674443677632\n", + "confusion matrix\n", + "[[ 41 20 3 3 5]\n", + " [ 50 160 4 23 5]\n", + " [ 3 3 11 4 8]\n", + " [ 1 2 1 10 1]\n", + " [ 1 3 5 4 7]]\n", + "\taccuracy\n", + "\t\t 0.60582010582\n", + "\tf1\n", + "\t\t 0.630807720985\n", + "\trecall\n", + "\t\t 0.60582010582\n", + "\tprecision\n", + "\t\t 0.684637089336\n", + "confusion matrix\n", + "[[ 49 12 3 4 7]\n", + " [ 30 162 0 27 2]\n", + " [ 5 1 8 9 10]\n", + " [ 2 3 0 19 0]\n", + " [ 2 0 6 1 16]]\n", + "\taccuracy\n", + "\t\t 0.671957671958\n", + "\tf1\n", + "\t\t 0.685981871288\n", + "\trecall\n", + "\t\t 0.671957671958\n", + "\tprecision\n", + "\t\t 0.734005762673\n", + "confusion matrix\n", + "[[ 38 14 1 2 7]\n", + " [ 38 180 1 14 2]\n", + " [ 2 0 13 9 6]\n", + " [ 2 5 1 17 1]\n", + " [ 3 1 4 1 16]]\n", + "\taccuracy\n", + "\t\t 0.698412698413\n", + "\tf1\n", + "\t\t 0.71276717531\n", + "\trecall\n", + "\t\t 0.698412698413\n", + "\tprecision\n", + "\t\t 0.746467227344\n", + "confusion matrix\n", + "[[ 44 13 5 2 0]\n", + " [ 43 176 0 19 5]\n", + " [ 3 0 9 6 9]\n", + " [ 3 4 3 6 1]\n", + " [ 0 3 6 3 15]]\n", + "\taccuracy\n", + "\t\t 0.661375661376\n", + "\tf1\n", + "\t\t 0.683849256576\n", + "\trecall\n", + "\t\t 0.661375661376\n", + "\tprecision\n", + "\t\t 0.728524344576\n", + "confusion matrix\n", + "[[ 50 20 1 1 5]\n", + " [ 35 162 1 19 3]\n", + " [ 4 0 7 9 6]\n", + " [ 3 2 0 23 1]\n", + " [ 3 2 7 3 10]]\n", + "\taccuracy\n", + "\t\t 0.668435013263\n", + "\tf1\n", + "\t\t 0.67607841743\n", + "\trecall\n", + "\t\t 0.668435013263\n", + "\tprecision\n", + "\t\t 0.704619341492\n", + "confusion matrix\n", + "[[ 44 29 2 2 3]\n", + " [ 31 164 1 23 2]\n", + " [ 4 1 6 4 4]\n", + " [ 2 1 2 22 1]\n", + " [ 2 2 4 3 18]]\n", + "\taccuracy\n", + "\t\t 0.67374005305\n", + "\tf1\n", + "\t\t 0.680775899369\n", + "\trecall\n", + "\t\t 0.67374005305\n", + "\tprecision\n", + "\t\t 0.700370287894\n", + "confusion matrix\n", + "[[ 52 17 2 1 5]\n", + " [ 38 165 2 21 8]\n", + " [ 1 1 11 5 7]\n", + " [ 1 0 2 15 1]\n", + " [ 3 3 3 1 12]]\n", + "\taccuracy\n", + "\t\t 0.676392572944\n", + "\tf1\n", + "\t\t 0.693451068969\n", + "\trecall\n", + "\t\t 0.676392572944\n", + "\tprecision\n", + "\t\t 0.737681486894\n", + "confusion matrix\n", + "[[ 47 10 2 3 1]\n", + " [ 37 177 1 19 7]\n", + " [ 4 2 8 9 9]\n", + " [ 1 2 2 9 1]\n", + " [ 5 4 3 2 12]]\n", + "\taccuracy\n", + "\t\t 0.671087533156\n", + "\tf1\n", + "\t\t 0.689497143407\n", + "\trecall\n", + "\t\t 0.671087533156\n", + "\tprecision\n", + "\t\t 0.742355787449\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:756: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1304: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n", + "/opt/conda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1203: DeprecationWarning: The default `weighted` averaging is deprecated, and from version 0.18, use of precision, recall or F-score with multiclass or multilabel data or pos_label=None will result in an exception. Please set an explicit value for `average`, one of (None, 'micro', 'macro', 'weighted', 'samples'). In cross validation use, for instance, scoring=\"f1_weighted\" instead of scoring=\"f1\".\n", + " sample_weight=sample_weight)\n" + ] + } + ], + "source": [ + "model_folder = \"/home/jovyan/persistent_data/midi-ml/notebooks/ProjectTwoResults/dumps/naivebayes/\"\n", + "accuracy = []\n", + "precision = []\n", + "recall = []\n", + "f1 = []\n", + "mcc = []\n", + "predicted = pickle.load(open(model_folder + \"predicted_fold_9.pkl\", 'rb'))\n", + "actuals = pickle.load(open(model_folder + \"actuals_fold_9.pkl\", 'rb'))\n", + "for preds, actual in zip(predicted, actuals):\n", + " pred = preds\n", + " print(\"confusion matrix\")\n", + " print(metrics.confusion_matrix(actual, pred))\n", + " print(\"\\taccuracy\")\n", + " acc = metrics.accuracy_score(actual, pred)\n", + " accuracy.append(acc)\n", + " print(\"\\t\\t\", acc)\n", + " print(\"\\tf1\")\n", + " f = metrics.f1_score(actual, pred)\n", + " f1.append(f)\n", + " print(\"\\t\\t\", f)\n", + " print(\"\\trecall\")\n", + " r = metrics.recall_score(actual, pred)\n", + " recall.append(r)\n", + " print(\"\\t\\t\", r)\n", + " print(\"\\tprecision\")\n", + " p = metrics.precision_score(actual, pred)\n", + " precision.append(p)\n", + " print(\"\\t\\t\", p)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.69841269841269837" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.max(accuracy)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "from scipy.stats.distributions import beta\n", + "def posterior_overlap_eval(actual, pred, labels, granularity=10000):\n", + " colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k')\n", + " tp_fn = []\n", + " confusion = metrics.confusion_matrix(actual, pred)\n", + " for i in range(confusion.shape[0]):\n", + " tp = confusion[i,i]\n", + " fn = np.delete(confusion[i,:], i).sum()\n", + " tp_fn.append((tp, fn))\n", + " betas = [beta(a=1 + tp, b = 1 + fn) for tp, fn in tp_fn]\n", + " for i, beta_dist in enumerate(betas):\n", + " random_draws = beta_dist.rvs(granularity)\n", + " plt.hist(random_draws, alpha=0.2, color=colors[i], bins=np.linspace(0,1, 100))\n", + " plt.vlines(random_draws.mean(), 0, 1500, label=labels[i], color=colors[i], linestyles=\"dotted\")\n", + " plt.legend(loc=\"upper left\")\n", + " plt.show()\n", + "labs = [\"mozart\", \"bach\", \"schubert\", \"chopin\", \"tchaikovsky\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n4sYbb+Q//uM/OHXqVNZxf/KTnySRSPDb3/6WkydPsn37dpYsWZL8/v3338+rr77KggULeOutt7jl\nllv49a9/PejXX7ZsGa+99hqRSISXX36ZW265BbfbnXWccgUKBvv2/lEiUrCyvUyJYILA7gCB3QES\nwYRln2Aiwe5AgN2BAMGEdR+BcCxMx/kOOs53EI5pUZIUpqKb1V05tzLlmLvBjbshNXmpmJM6E95Z\n48RZ40w5XjYjNeFMNzF+IC6Xq998z2uvvZaNGzcSj8czjoam09HRwYULF/ja175GfX09ADt37hzw\neSUlJfz1X/81q1ev5u677+a5556jrq4OgIkTJ/L//t//69d/x44dlJWVcdVVVyV/jj/6oz9i06ZN\nHD58mIkTJzJ16tR+zxk/fjz33HMP99xzD1/72td4+eWXufnmmy1f/xe/+AVjxoxJPre1tRWPx8Pz\nzz/Pli1beP7557N+b+QKNWMGvPlmvqOQAWR7mcpmlNHyZkvmc5aV8WZL5j4Ck6onsXZJ3+LPrrNd\nGXqL5EfRjYQWg7Fjx7Jz506OHTvG+fPnueuuu/D5fHz1q1/l3Xff5ciRI2zcuJHDhw8P6nwNDQ04\nnU7+6Z/+iaNHj/Jv//ZvPPPMMyn9DMNIOWaz2Xj66aeZOnUq99xzD2fPmvNp77zzTk6cOMFjjz1G\nR0cHv/71r/nhD3/IihUr+j1/8eLF/Md//AcvvfQSn/3sZ5PHw+Ewjz32GNu2beP48ePs2LGDXbt2\nMXny5LSvf/fddydfH8But7N06VL+5m/+hqamJmbNmjWo90NERESKn5LQy+DP/uzPsNvt3Hrrrdx4\n440EAgF+/vOfEwgE+MIXvsBtt93Giy++aLmS3Ep1dTVPPvkk//f//l8+85nP8Oyzz/KNb3wjpV+6\n1fElJSX87d/+LVOmTOHee++lq6uL+vp6/vEf/5Fdu3axdOlSvv3tb7N8+XK+9KUv9XvuvHnzqKqq\n4siRI3zmM59JHrfb7XR3d/ONb3yDRYsWsXr1alpbWy0rP1m9/gduv/12otEot91226DeCxERERkZ\nbIbV8NkwCQQC7N27l2nTpuHVpsNXpO3bt7NixQp++9vfUl1dne9wpFjEYn11IL1e0H6RBSnby5SI\nJZI7l9i9duyO1HGSWCJB4OJcUK/djsN+5Y2l+P1+3j7xNh6vJ+V7XWe7wAaVoyuT5TpLHaX0dPWA\n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\n39JO73Zy2qBBg3j11Vfp3bt3k8/REkFow3YNHz6cvn37snbt2rA+jxAi9kgQKoRoEkVRyMnJIScn\nh1/96lc888wzOJ1OXn75ZQBeeeUVevTowYABA6Lc0thjs9kI9+Z1iYmJnj2gmypSG+j99re/ZePG\njTidzog8nxCidZIgVAjRLNnZ2aSnp1NQUADAli1bmDx5sled77//nltuuYXzzjuPoUOHMnXqVNau\nXesT7NhsNh5//HEmTpzIkCFDOPfcc1mwYAEACxYs4PXXXycvL88zHeD0Y3/84x+ZM2eO17m+++47\n+vfvz5dffukpW7t2LZdddhkjRoxgzJgxzJkzh2PHjoX7LfEM6X/00UdcfPHF5OTkcOmll7J3716v\nehMmTGDx4sWsWbOGCRMmMHToUKqrqwE4cuQIc+fOZcSIEQwbNozrr7+eEydOeB1fV1fHHXfcwfDh\nwxkzZgx/+9vffAI6f8Pxqqqydu1apkyZwpAhQxg7diw333wzdXV1rFq1iqeeegqz2ex5n6+66irP\nseFqF8DEiROprq5mx44dzXujhRBtgi7aDRBCxKa6ujqqq6vJysri+PHjFBYWMnz4cK86p06dokeP\nHlx88cUkJSVx8OBBVq5ciclk4sYbb/TUmzdvHl988QVz5swhJyeHyspK3n33XQBuuOEGKioqOHr0\nKI888ggA6enpQdvWcGj95MmTXHnllXTu3BmTycTLL7/MzJkzeffdd0lJSQl4nqb01Gm1Wq/nLSkp\nYdGiRcybN4+UlBRWr17NtddeyzvvvENGRoan7jvvvEPPnj2555570Gq1JCQkcOLECa644gr69evH\n8uXLURSFZ555hlmzZvHf//4XvV4PwN13380nn3zC7bffTufOndmwYQNvvfVWo+/DokWLeO2115g1\naxZjxoyhvr6eDz/8EJPJxIwZMzh58iRbt25l/fr1gLs3FQh7u5KSkujbty87d+5kwoQJjb7HQoi2\nSYJQIUSTnQ7KiouLWb58OS6Xi8mTJ7Nv3z4UReGss87yqp+bm0tubq7n/vDhwzGbzbz00kueIPST\nTz5hx44dPPbYY0yZMsVT9/Ttrl27kpGRQVFRETk5OU1qZ8Oe1tM9pwAul4vc3FzGjBnDO++8w4wZ\nM/yeo7CwkAsuuCDo8yiKwrJly5g+fbqnrKamhpUrVzJq1CgARo4cybnnnsv69euZP3++p57T6WTN\n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\n5ciRI14LeRrS6/XYbDavMpvNhsvl8uqJrKur4/333/c5vmfPnnzxxRdeZSUlJXTr1o34+HivckVR\n6NWrF2eddVajr+WLL75g1KhRXmXvvvsu7dq145xzzvGUVVRUYDab6dmzZ6PnFEKIaJEgVAjRZqiq\nyt69ewGw2+3s37+fZ599lj59+jBixAgA7rjjDmbNmsX8+fOZOnUqKSkpFBcX8+mnn/Lb3/6WkSNH\n0qtXLzZv3szWrVvp3r076enpdO7cmSFDhrB69WrS09PRarU899xzpKSkUF5e7tWO4cOH8/TTT3Pq\n1Ck6dOgAwIABAzCbzV71vvnmGywWC506daKqqoqUlBTeeecd9u/fz+233+7z+qxWK7t27aJ3796A\nu7fz+eef56GHHvIKjvft24eiKJx99tnhe3OFECLMFDXU/eyEEKIVWrVqFU899ZTnvlarJTs7m3PP\nPZcbbrjBa6HQgQMHWLlyJbt378Zut9OhQwdyc3OZM2cOHTp0oK6ujvvvv5+dO3dSVVXF9OnTWbZs\nGcePH+f+++9nz549pKen88c//pH6+npeeOEFdu/e7Tm/3W5n3Lhx3HrrrcyYMcNT/q9//Ytjx47R\nrVs37HY7ffv2Ra/Xs3btWgYOHMicOXNYsWIFGzdu5MMPP8RoNHq9xtdee42ePXuyb98+tFot+fn5\nTJ8+3ScV1JIlSzh06BAvvvhiuN9mIYQIGwlChRCiBSxfvpyDBw+ybt26kI997733GDVqFMnJyZ6y\n/Px8iouLGT16dNBjnU4n5513Hrfffju//vWvQ35uIYSIFNkxSQghWsDs2bPZu3cvhw4dCvnYkydP\negWgALt372bo0KGNHvvmm2+SmJjItGnTQn5eIYSIJAlChRCiBbRv356HHnrIsx1oU33zzTf07dvX\np9xsNvssavJHq9WydOlSNBr59y6EaN1kOF4IIVoRVVU9e8ILIURbJl+VhRCiFZEAVAhxppAgVAgh\nhBBCRJwEoUIIIYQQIuIkCBVCCCGEEBEnQagQQgghhIg4CUKFEEIIIUTESRAqhBBCCCEiToJQIYQQ\nQggRcRKECiGEEEKIiJMgVAghhBBCRJwEoUIIIYQQIuL+HwN3ROsymjKIAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mymodel = \"Multinomial Naive Bayes\"\n", + "sns.set_style(\"whitegrid\")\n", + "plt.title(\"Posterior Probability of Within-Class Error\\n{model}\".format(model=mymodel))\n", + "plt.xlabel('P(actual=predicted)\\n' + r'Beta($\\alpha, \\beta$)')\n", + "plt.ylabel(\"Density\")\n", + "plt.yticks([])\n", + "ax = plt.gca()\n", + "ax.grid(False)\n", + "posterior_overlap_eval(actual, pred, labels=labs)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/nbs/Posterior Overlap.ipynb b/nbs/Posterior Overlap.ipynb new file mode 100644 index 0000000..6a04d71 --- /dev/null +++ b/nbs/Posterior Overlap.ipynb @@ -0,0 +1,272 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from matplotlib import pyplot as plt\n", + "from scipy.stats import distributions\n", + "from scipy import integrate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Beta with Uninformative Prior" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.059489675707156769" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "from scipy import integrate\n", + "from scipy.stats import distributions\n", + "class_1 = distributions.beta(a=1 + 9, b=1 + 1)\n", + "class_2 = distributions.beta(a=1 + 8, b=1 + 2)\n", + "class_3 = distributions.beta(a=1 + 3, b=1 + 7)\n", + "def prop_overlap(*args, granularity = 1000):\n", + " args = args[0]\n", + " class_pdfs = [cls.pdf(np.linspace(0,1,granularity)) for cls in args]\n", + " class_pdfs = np.stack([cls / cls.sum() for cls in class_pdfs]).T\n", + " return integrate.trapz(class_pdfs.min(axis=1))\n", + "prop_overlap([class_1, class_2, class_3], granularity=1000)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nBghJkpTt/wOCFhCESXwfYQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.hist(class_1.rvs(1000), alpha=0.1)\n", + "plt.hist(class_2.rvs(1000), alpha=0.1)\n", + "plt.hist(class_3.rvs(1000), alpha=0.1)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from scipy import integrate\n", + "from scipy.stats.distributions import beta\n", + "def proportion_overlap(*args, granularity = 1000):\n", + " args = args[0]\n", + " class_pdfs = [cls.pdf(np.linspace(0,1,granularity)) for cls in args]\n", + " class_pdfs = np.stack([cls / cls.sum() for cls in class_pdfs]).T\n", + " return integrate.trapz(class_pdfs.min(axis=1))\n", + "\n", + "def posterior_overlap(actual, pred, labels, granularity=1000):\n", + " colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k')\n", + " tp_fn = []\n", + " confusion = metrics.confusion_matrix(actual, pred)\n", + " for i in range(confusion.shape[0]):\n", + " tp = confusion[i,i]\n", + " fn = np.delete(confusion[i,:], i).sum()\n", + " tp_fn.append((tp, fn))\n", + " betas = [beta(a=1 + tp, b = 1 + fn) for tp, fn in tp_fn]\n", + " for i, beta_dist in enumerate(betas):\n", + " random_draws = beta_dist.rvs(granularity)\n", + " plt.hist(random_draws, alpha=0.2, color=colors[i], bins=np.linspace(0,1, 100))\n", + " plt.vlines(random_draws.mean(), 0, 200, label=labels[i], color=colors[i], linestyles=\"dotted\")\n", + " plt.legend(loc=\"upper left\")\n", + " plt.show()\n", + " return proportion_overlap(betas, granularity)\n", + "# actual=np.array([1,1,0,0,2,1,2])\n", + "# pred=np.array([0,1,0,0,2,1,1])\n", + "# np.log(posterior_overlap(actual, pred))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# SCRAPBOOK" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "def posterior_overlap(actual, pred, labels, granularity=1000):\n", + " colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k')\n", + " tp_fn = []\n", + " confusion = np.array([[450, 21, 29], [8, 70, 22], [53, 27, 20]])\n", + " for i in range(confusion.shape[0]):\n", + " tp = confusion[i,i]\n", + " fn = np.delete(confusion[i,:], i).sum()\n", + " tp_fn.append((tp, fn))\n", + " betas = [beta(a=1 + tp, b = 1 + fn) for tp, fn in tp_fn]\n", + " for i, beta_dist in enumerate(betas):\n", + " random_draws = beta_dist.rvs(granularity)\n", + " plt.hist(random_draws, alpha=0.2, color=colors[i], bins=np.linspace(0,1, 100))\n", + " plt.vlines(random_draws.mean(), 0, 3000, label=labels[i], color=colors[i], linestyles=\"dotted\")\n", + " plt.legend(loc=\"upper left\")\n", + " plt.show()\n", + "actual=np.array([1,1,0,0,2,1,2])\n", + "pred=np.array([0,1,0,0,2,1,1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nPIMdlqi1mIS2QmNJ5eUG+1fe+C0WC7R79yLwivZVgG88dm+Mprwc2LrVUUhPByI47V1jGpt5yWK1\nNpigNpacNvY72tjy5t7zhkS3qX8S1fx8rb3ONHX9aazzCGs8267MWoatJ7bCUm1BSrcURIDXr99q\n6HeusRrSpq4x9fX1EATB7b3q6mpYLO73TavVAoPBc4/Jy8qAL74wANBg1CjP3baaGroJ8I5r72+p\nmoTW19cDAPbs2ePW89JoNLa7/5pEUUT94cPQ+bt+bZWCAC3gllBWCgICAwIQ1MDnqBJFmEURlXV1\nrsstFmiAq14u577kPobh1CkE/u/c8Ze6d0dtXJwin0POfbWXY9RotW7La77+usHfxcZ+Rxta3tR7\nNXV10Pbu7dZ5paMRRRGHLxyGf4Dr33NdbR16d1bv8zUWl1AtABq41V42tTzAEACT0f36Y6m2AFqg\nTqjzyPKOdozWbFNSVYI1+xzXr99pf4fg+mCv/E7kPkZpbWmLf3cBwFxuxqlT9TAFuX6/ZvMl+Pvr\nEB7umgVWV1UixtQLdrvZPV5LJQAt6urK27y8pESHDRs6AwB69TqBuLga2Y9xeXlpaW2DHazq6mrR\nu7e/Ktcmu90O4P/yNrloJBXH3bh06RJKSkrUOjwRERERtVBcXBwiI+UbFULVJLSurg4VFRXQ6/XQ\nXlGjQ0RERETqq6+vh81mQ2hoKPz95XuIrmoSSkRERES+idWPRERERKQ4JqFEREREpDgmoURERESk\nOCahRERERKQ4JqFEREREpDgmoURERESkOCahRERERKQ4JqFEREREpDiPJ6ErV67EsGHDkJycjHvu\nuQd79+5tcv3t27fj7rvvRv/+/TFixAh88sknng6RZNSa871p0yZMmTIFqampuP766zFhwgR89913\nCkZLV6u1f9+X/fTTT0hKSsJdd93l4QhJTq093zU1NXjjjTcwbNgw9O/fH7fddhvWrVunULR0tVp7\nvv/nf/4Hd955JwYMGICbb74Zs2fPhtnsPpc7tS87d+5EdnY2hgwZgsTERHz99dfNbiNbriZ50Pr1\n66V+/fpJn3zyiVRcXCzNnTtXuvHGG6VLly41uP7JkyelAQMGSDk5OdLRo0elf/3rX1Lfvn2l7777\nzpNhkkxae75ffvllafny5dK+ffukEydOSK+//rqUlJQkHTx4UOHIqS1ae74vq6yslDIyMqQHH3xQ\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sns.set_style(\"whitegrid\")\n", + "plt.title(\"Posterior Probability of Within-Class Error\")\n", + "plt.xlabel('P(actual=predicted)\\n' + r'Beta($\\alpha, \\beta$)')\n", + "plt.ylabel(\"Density\")\n", + "plt.yticks([])\n", + "ax = plt.gca()\n", + "ax.grid(False)\n", + "\n", + "posterior_overlap(actual, pred, labels=[\"c0\", \"c1\", \"c2\"], granularity=10000)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import seaborn as sns\n", + "from scipy.stats.distributions import beta\n", + "def posterior_overlap_eval(actual, pred, labels, granularity=10000):\n", + " colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k')\n", + " tp_fn = []\n", + " confusion = metrics.confusion_matrix(actual, pred)\n", + " for i in range(confusion.shape[0]):\n", + " tp = confusion[i,i]\n", + " fn = np.delete(confusion[i,:], i).sum()\n", + " tp_fn.append((tp, fn))\n", + " betas = [beta(a=1 + tp, b = 1 + fn) for tp, fn in tp_fn]\n", + " for i, beta_dist in enumerate(betas):\n", + " random_draws = beta_dist.rvs(granularity)\n", + " plt.hist(random_draws, alpha=0.2, color=colors[i], bins=np.linspace(0,1, 100))\n", + " plt.vlines(random_draws.mean(), 0, 2000, label=labels[i], color=colors[i], linestyles=\"dotted\")\n", + " plt.legend(loc=\"upper left\")\n", + " plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/nbs/RidgeResults.ipynb b/nbs/RidgeResults.ipynb new file mode 100644 index 0000000..605837a --- /dev/null +++ b/nbs/RidgeResults.ipynb @@ -0,0 +1,192 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from matplotlib import pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os\n", + "import pickle\n", + "import numpy as np\n", + "from scipy import sparse\n", + "from functools import partial\n", + "from sklearn.externals import joblib\n", + "from sklearn.cross_validation import KFold\n", + "from sklearn.metrics import confusion_matrix\n", + "from sklearn.cross_validation import train_test_split\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from sklearn.linear_model import RidgeClassifier" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "labels = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_labels.pkl\")\n", + "features = joblib.load(\"/home/jovyan/persistent_data/data/dumps/labeled_corpus_matrix.pkl\")\n", + "features = features.todense()\n", + "mozart_labels = [k for k in range(len(labels)) if labels[k] == \"mozart\"]\n", + "bach_labels = [k for k in range(len(labels)) if labels[k] == \"bach-js\"]\n", + "schubert_labels = [k for k in range(len(labels)) if labels[k] == \"schubert\"]\n", + "chopin_labels = [k for k in range(len(labels)) if labels[k] == \"chopin\"]\n", + "tchaikovsky_labels = [k for k in range(len(labels)) if labels[k] == \"tchaikovsky\"]\n", + "X = features[mozart_labels + bach_labels + schubert_labels + chopin_labels + tchaikovsky_labels].A\n", + "y = np.array([0 for i in range(len(mozart_labels))] + [1 for i in range(len(bach_labels))] + \n", + " [2 for i in range(len(schubert_labels))] + [3 for i in range(len(chopin_labels))] +\n", + " [4 for i in range(len(tchaikovsky_labels))])\n", + "y = y.reshape((y.shape[0],))\n", + "del features" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "X = X[:,X.sum(axis=0).nonzero()[0]]" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "regularization_parameter = 10000.0\n", + "predicted = []\n", + "actuals = []\n", + "lr_models = []\n", + "i = 0\n", + "for train_idx, test_idx in KFold(n=X.shape[0], n_folds=5, shuffle=True):\n", + " X_train = X[train_idx]\n", + " y_train = y[train_idx]\n", + " X_test = X[test_idx]\n", + " y_test = y[test_idx]\n", + "# p = [1/np.bincount(y_train)[i] for i in y_train]\n", + "# undersample_idx = np.random.choice(np.arange(X_train.shape[0]),\n", + "# size=np.bincount(y_train).min() * len(set(y_train)),\n", + "# p=p / sum(p))\n", + "\n", + "\n", + " lr = RidgeClassifier(alpha=regularization_parameter)\n", + " \n", + " try:\n", + " lr.fit(X_train, y_train)\n", + " except:\n", + " continue\n", + "# preds = (lr.predict_probabilities(X_test) > 0.5).astype(int)\n", + "# predicted.append(preds)\n", + "# actuals.append(y_test)\n", + "# lr_models.append(lr)\n", + "# pickle.dump(lr_models, open(\"./dumps/logistic/normal/model_fold_{fold}_reg_{reg}.pkl\"\n", + "# .format(fold=str(i), reg=str(regularization_parameter)), 'wb'))\n", + "# pickle.dump(predicted, open(\"./dumps/logistic/normal/predicted_fold_{fold}_reg_{reg}.pkl\"\n", + "# .format(fold=str(i), reg=str(regularization_parameter)), 'wb'))\n", + "# pickle.dump(actuals, open(\"./dumps/logistic/normal/actuals_fold_{fold}_reg_{reg}.pkl\"\n", + "# .format(fold=str(i), reg=str(regularization_parameter)), 'wb'))\n", + "# i += 1" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.774834437086\n", + "[[ 64 63 0 1 0]\n", + " [ 8 459 0 0 0]\n", + " [ 11 16 22 5 5]\n", + " [ 2 24 3 22 0]\n", + " [ 0 25 2 5 18]]\n" + ] + } + ], + "source": [ + "print(metrics.accuracy_score(y_test, lr.predict(X_test)))\n", + "print(metrics.confusion_matrix(y_test, lr.predict(X_test)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +}