-
-
Save joshvfleming/f42882d6903b4406084d634869a7b458 to your computer and use it in GitHub Desktop.
Learning to Rank Explorations for Photon-ML
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 319, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import numpy as np\n", | |
| "from sklearn.linear_model import LogisticRegression\n", | |
| "import matplotlib.colors as pltColors\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "from math import exp\n", | |
| "from itertools import combinations\n", | |
| "import warnings\n", | |
| "warnings.filterwarnings(\"ignore\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 416, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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BZMS0NrayrnnnstRRx3FyJEjueqqq9i3b1/e7/vjH/+YD3/4w5gZb7+dyWq2qR1yyCE5KFVmbr/9dl5//fWC3U9EUlMwKTJ357Of/Syf+cxnWL9+PevXr2fPnj184xvfSH9yBtra2pLuO/nkk3nssccYPnx4Rtc6ePBgTsqUCwomIqVFwaSL1u1bx5IdS1i4fSFLdixh3b51WV3v8ccfp6amhssuuwyAiooKfvjDH3LHHXewa9cubr/9dq666qrY8WeffTZ/+MMfAHjkkUc46aSTmDBhAhdccAG7du0CoKmpiW9+85tMmDCBm266iQkTJsTOX79+fezr448/nqamppTlu/322znnnHM47bTTmDJlCgDf//73+ehHP8q4ceO47rrrAs8LOuaaa67hJz/5SeyY66+/nh/84Afs2rWLKVOmMGHCBI499lh+85vwONWNGzdyzDHH8I//+I+MGTOGqVOnsmfPHlasWEFLSwszZsxg/Pjx7NmzJ9OPW0TyRMGkC9btW8fvd/+ene3h5Sp2tu/k97t/n1VAeeGFF5g4cWKHbYceeihNTU1s2LAh6Xlvv/023/nOd3jsscdYs2YNzc3N3HzzzbH9DQ0NrFmzhrlz59KvXz/Wrl0LwC9+8YtY4MrUmjVrWLFiBf/zP//DI488wvr163n66adZu3Ytq1ev5o9//GOH45MdM336dO65557Ycffccw/Tp0+npqaGlStXsmbNGp544gm+9rWvER3/tH79er7yla/wwgsvcNhhh3Hfffdx/vnn09zczLJly1i7di21tbVd+n5EJPfKvmtwV6zau4qDdGzqOchBVu1dxag+hZ1A8qmnnuKvf/0rJ598MgD79+/npJNOiu2fPn167P2Xv/xlfvGLX3DzzTezfPlynn766S7d6/TTT2fAgAFAOFA88sgjHH/88QDs2rWL9evX8/GPfzx2fLJjvvSlL/HWW2/x+uuvs3XrVvr378+RRx7JgQMH+Na3vsUf//hHQqEQmzdv5s033wRgxIgRjB8/HoCJEyeycePGLn5SIlIICiZdEK2RZLo9E6NHj2bFihUdtr333nu88cYbHH300Tz//PO0t7fH9kW7vbo7p59+OnfffXfgdevr62PvP/e5zzF//nxOO+00Jk6cSENDQ5fKGH8td+faa6/l8ssvT3p8qmMuuOACVqxYwRtvvBELeMuW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\n", | |
| "text/plain": [ | |
| "<Figure size 432x432 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "np.random.seed(5)\n", | |
| "colors = ['black', 'lightgreen']\n", | |
| "\n", | |
| "def sigmoid(x):\n", | |
| " return 1.0 / (1.0 + exp(-x))\n", | |
| "\n", | |
| "def generate_query_data(mean, cov, n):\n", | |
| " covM = [[1.5, cov], [cov, 1.5]]\n", | |
| " xs = np.random.multivariate_normal(mean, covM, n)\n", | |
| " w = np.array([cov, cov])*2.5\n", | |
| " return np.array([(x1, x2, np.random.binomial(1, sigmoid(w.dot(np.array([x1, x2]) - np.array(mean))))) for (x1, x2) in xs])\n", | |
| "\n", | |
| "\n", | |
| "q1mean = [3.0, 4.0]\n", | |
| "q1data = generate_query_data(q1mean, 0.7, 100)\n", | |
| "q1x1, q1x2, q1y = q1data.T\n", | |
| "\n", | |
| "q2mean = [-2, -4.0]\n", | |
| "q2data = generate_query_data(q2mean, 0.65, 100)\n", | |
| "q2x1, q2x2, q2y = q2data.T\n", | |
| "\n", | |
| "plt.figure(figsize=(6,6))\n", | |
| "\n", | |
| "plt.scatter(q1x1[q1y > 0], q1x2[q1y > 0], marker='o', color=colors[1], label='Query1 relevant')\n", | |
| "plt.scatter(q1x1[q1y <= 0], q1x2[q1y <= 0], marker='o', color=colors[0])\n", | |
| "plt.scatter(q2x1[q2y > 0], q2x2[q2y > 0], marker='v', color=colors[1], label='Query2 relevant')\n", | |
| "plt.scatter(q2x1[q2y <= 0], q2x2[q2y <= 0], marker='v', color=colors[0])\n", | |
| "\n", | |
| "plt.xlim((-10, 10))\n", | |
| "plt.ylim((-10, 10))\n", | |
| "plt.xlabel('x1')\n", | |
| "plt.ylabel('x2')\n", | |
| "plt.title('Query Results')\n", | |
| "plt.legend(loc=2)\n", | |
| "plt.axes().set_aspect('equal')\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 441, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<Figure size 432x288 with 0 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x432 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "X = np.concatenate((q1data[:,:-1], q2data[:,:-1]))\n", | |
| "y = np.concatenate((q1data[:,-1], q2data[:,-1]))\n", | |
| "\n", | |
| "lr = LogisticRegression()\n", | |
| "lr.fit(X, y)\n", | |
| "w = lr.coef_[0]\n", | |
| "\n", | |
| "plt.clf()\n", | |
| "plt.figure(figsize=(6,6))\n", | |
| "\n", | |
| "plt.scatter(q1x1[q1y > 0], q1x2[q1y > 0], marker='o', color=colors[1], label='Query1 relevant')\n", | |
| "plt.scatter(q1x1[q1y <= 0], q1x2[q1y <= 0], marker='o', color=colors[0])\n", | |
| "plt.scatter(q2x1[q2y > 0], q2x2[q2y > 0], marker='v', color=colors[1], label='Query2 relevant')\n", | |
| "plt.scatter(q2x1[q2y <= 0], q2x2[q2y <= 0], marker='v', color=colors[0])\n", | |
| "\n", | |
| "plt.quiver(w[0], w[1], scale=3.0, color='orange', label='LR weights')\n", | |
| "plt.plot([-10, 10], [-(w[0]/w[1])*-10, -(w[0]/w[1])*10], '--', c='gray')\n", | |
| "\n", | |
| "plt.xlim((-10, 10))\n", | |
| "plt.ylim((-10, 10))\n", | |
| "plt.xlabel('x1')\n", | |
| "plt.ylabel('x2')\n", | |
| "plt.title('Logistic Fit')\n", | |
| "plt.legend(loc=2)\n", | |
| "plt.axes().set_aspect('equal')\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 423, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<Figure size 432x288 with 0 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x432 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "projs = [(np.array([x1, x2]).dot(w), yl) for (x1, x2, yl) in q2data]\n", | |
| "\n", | |
| "xmin = min([yhat for (yhat, _) in projs])\n", | |
| "xmax = max([yhat for (yhat, _) in projs])\n", | |
| "\n", | |
| "# normalize\n", | |
| "projs = [((yhat - xmin) / (xmax - xmin), yl) for (yhat, yl) in projs]\n", | |
| "\n", | |
| "fy = 5\n", | |
| "height = 1\n", | |
| "\n", | |
| "plt.clf()\n", | |
| "plt.figure(figsize=(6,6))\n", | |
| "\n", | |
| "plt.hlines(fy, 0, 1)\n", | |
| "plt.vlines(0, fy - height / 2., fy + height / 2.)\n", | |
| "plt.vlines(1, fy - height / 2., fy + height / 2.)\n", | |
| "\n", | |
| "for (yhat, yl) in projs:\n", | |
| " plt.plot(yhat, fy, 'o', color=colors[yl.astype(np.int)])\n", | |
| "\n", | |
| "plt.axis('off')\n", | |
| "plt.xlim((-0.05, 1.05))\n", | |
| "plt.ylim((0, 10))\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 446, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<Figure size 432x288 with 0 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZMAAAGDCAYAAADuyv36AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsnXl8VOW5+L/PTPYQIASEQCARpCIgi1B2qZXL4lJQgboEiwhGsFbbW283SkUtt95fe22xWhERUIleFaVS3FBQFhEVkEUUjGAgYVG2xGxkm/f3xyydTGZLMslMkufr53yYOec973nOCOc5z/tsYoxBURRFURqCJdwCKIqiKM0fVSaKoihKg1FloiiKojQYVSaKoihKg1FloiiKojQYVSaKoihKg1FlojRbRORyETkYormKRaRnKOaq43XfFJGZbt//KCKnReSk4/v1IpLnkG9wU8unKMEimmeihBsRyQU6A9VACfAmcLcxpjiccjUUETFAKWCAcmA3sNQY86KP8T2Ag0C6MeZbx75DwH8aY15rGqkVpX6oZaJECj8yxrQBLgOGAr9vyGQiEhUSqRrOQMd9XQysBB4Tkft9jO0BnHEqEgfpwP76XDiCfgOlFaDKRIkojDHHsFsm/QFEZJaIfCEiRSJyWETudI4VkStEJN/te66I/FpE9gIlInKHiPzL7XiOiLzs9j1PRAY5PhsRucjx+WoR+dxxzWMicp/bOdeKyG4RKRCRbSIyIMj7Om2MeQ6YB/xWRFIc870vInNE5D+Ad4CujiWtF0SkGLACexwWCiLSVUReEZFTIvK1iNzjJttCEVktIqtE5DvgNhGxiMhvROSQiJwRkZdEpINjfIbjvmeKyFHH8tp8t/msIvI7x7lFIrJTRLo7jvURkXdE5KyIHBSRH7ud5/P3U1owxhjddAvrBuQC/+H43B37m/hDju/XAL0AAX6AfdnoMsexK4B8j3l2O+aIB3oCBdhfmroCR5zjHcfOARbHdwNc5Ph8Arjc8TnZ7XqDgW+B4dgf8jMd14z1cV+uOd32RQNVwFWO7+8Dc7zdjxe5LMBO4A9AjOMeDgMTHccXApXAdY6x8cC9wHYgDYgFngRecIzPcMz/lGPsQOzLcZc4jv8XsA+7VSWO4ylAIpAHzAKiHL/LaaCvv99Pt5a9qWWiRAr/FJECYCuwCfhvAGPM68aYQ8bOJmA9cLmfeR41xuQZY8qMMYeBImAQMBZ4GzguIn2wK6Ytxhiblzkqgb4i0tYYc84Ys8uxPwt40hjzkTGm2hjzDPaH74hgb9IYU4n9wdsh2HPc+D7QyRjzoDGmwnF/TwE3uY350BjzT2OMzRhTBswF5htj8o0x5dgVzjSPJbAHHL/XHmAPdqUBMAf4vTHmoOP332OMOQNcC+QaY1YYY6qMMZ8CrwDTHef5+v2UFowqEyVSuM4Y094Yk26MucvxIERErhKR7Y7llALgaqCjn3nyPL5vwv7GP9bx+X3siuQHju/emOq4zhER2SQiIx3704FfOpa4ChzydMdu9QSFiEQDnYCzwZ7jRjr2ZTD36/8Oe/CCE8/7TwfWuI3/Anugg/s5J90+lwJtHJ+7A4d8yDHcQ45MoIvjuK/fT2nBqINOiVhEJBb7G+9PgNeMMZUi8k/sSy6+8AxP3AT8CLgQu7XjfPCNBB7zOoExnwBTHA/+u4GXsD9Y84BFxphF9b4pmIJ9mevjepybB3xtjOntZ4zn/ecBtxtjPvAcKCIZQVyvF/CZl/2bjDHjvQrg+/dTWjBqmSiRTAz2df5TQJWIXAVMqOMcm4AfAvHGmHxgCzAJ+9r/p56DRSRGRDJFpJ1jSeo7wLkU9hQwV0SGi51EEblGRJICCSEiHUQkE3gc+B/HclFd+RgocgQZxDsc5P1F5Pt+zlkCLBKRdIccnURkSpDXWwY8JCK9Hfc7wBE4sA74nojcKiLRju37InJJgN9PacGoMlEiFmNMEXAP9jfbc8AtwNo6zvElUIxdiWCM+Q670/oDY0y1j9NuBXIdEVFzsVsyGGN2AHdgt2jOAV8BtwUQYY8jKusr7D6IXxhj/lCXe3C7l2rs/opBwNfYfS/LgHZ+TluM/TdbLyJF2J3xw4O85CPYf/v12JXC09iVchF2pX4TcBz7Mtn/YFf84OP3U1o2mrSoKIqiNBi1TBRFUZQGE1ZlIiLLReRbEfnMbV8HRzJUjuPPZB/nznSMyRG32kaKoihK0xNuy2QldmeoO78BNjgiVjY4vtfAkcF7P/a132HA/b6UjqIoitL4hFWZGGM2UzvefgrwjOPzM9izeT2ZCLxjjDlrjDmHvQyFp1JSFEVRmohwWybe6GyMOeH4fJKayVVOulEzOSvfsU9RFEUJAxGdtGiMMWIv411vRCQLexkMEhMTh/Tp0ycksimKorQEdu7cedoY06mh80SiMvlGRFKNMSdEJBV7YT1PjmEvkeEkDXuZjFoYY5YCSwGGDh1qduzYEVppFUVRmjEiciQU80TiMtda7NVYcfzprSnQ28AEEUl2ON4nOPYpiqIoYSDcocEvAB8CF4tIvojMBh4GxotIDvAfju+IyFARWQZgjDkLPAR84tgedOxTFEVRwkCryoDXZS5FUZSaiMhOY8zQhs4TiT6TJqWyspL8/HzOnz8fblGUEBAXF0daWhrR0dHhFkVRWhWtXpnk5+eTlJRERkYGIv4qmyuRjjGGM2fOkJ+fz4UXXhhucRSlVRGJDvgm5fz586SkpKgiaQGICCkpKWplKkoYaPXKBFBF0oLQ/5eKEh5UmUQA+fn5TJkyhd69e9OzZ0/uvvtuysvLG/26jz32GBdddBEiwunTpxs8X5s2bQIPChErV67k+PHjTXY9RVH8o8okzBhjuOGGG7juuuvIyckhJyeHsrIyfvWrX4Vk/upqX/2fYPTo0bz77rukp6cHNVdVVVVIZAoFqkwUJbJQZVJHDpQfYHnhchafW8zywuUcKD/QoPk2btxIXFwcs2bNAsBqtfLXv/6VZ599luLiYlauXMndd9/tGn/ttdfy/vvvA7B+/XpGjhzJZZddxvTp0ykuLgYgIyODX//611x22WU8/PDDXHbZZa7zc3JyXN8HDx5MRkaGX/lWrlzJ5MmTufLKKxk3bhwAf/7zn/n+97/PgAEDuP/++72e523Mb37zGx5//HHXmIULF/KXv/yF4uJixo0bx2WXXcall17Ka6/Z81Rzc3O55JJLuOOOO+jXrx8TJkygrKyM1atXs2PHDjIzMxk0aBBlZWXB/tyKojQSqkzqwIHyA2wo3UCRrQiAIlsRG0o3NEih7N+/nyFDhtTY17ZtWzIyMvjqq698nnf69Gn++Mc/8u6777Jr1y6GDh3KI4884jqekpLCrl27mD9/Pu3atWP37t0ArFixwqW4gmXXrl2sXr2aTZs2sX79enJycvj444/ZvXs3O3fuZPPmzTXG+xpz44038tJLL7nGvfTSS9x4443ExcWxZs0adu3axXvvvccvf/lLnPlPOTk5/PSnP2X//v20b9+eV155hWnTpjF06FCys7PZvXs38fHxdbofRVFCT6sPDa4L285vo4qaSz1VVLHt/Db6xDZtAcnt27fz+eefM3r0aAAqKioYOXKk6/iNN97o+jxnzhxWrFjBI488wosvvsjHH39cp2uNHz+eDh06AHZFsX79egYPHgxAcXExOTk5jB071jXe15jZs2fz7bffcvz4cU6dOkVycjLdu3ensrKS3/3ud2zevBmLxcKxY8f45ptvALjwwgsZNGgQAEOGDCE3N7eOv5SiKE2BKpM64LRIgt0fDH379mX16tU19n333XecPHmSiy++mM8++wybzeY65gx7NcYwfvx4XnjhBa/zJiYmuj5PnTqVBx54gCuvvJIhQ4aQkpJSJxnd5zLG8Nvf/pY777zT53h/Y6ZPn87q1as5efKkS+FlZ2dz6tQpdu7cSXR0NBkZGa77jI2NdZ1rtVp1SUtRIhRd5qoDSZakOu0PhnHjxlFaWsqzzz4L2B3mv/zlL7n77ruJj48nIyOD3bt3Y7PZyMvLc1kVI0aM4IMPPnAthZWUlPDll196vUZcXBwTJ05k3rx5dV7i8mTixIksX77c5Z85duwY3377bdBjbrzxRv7v//6P1atXM336dAAKCwu54IILiI6O5r333uPIkcBFTJOSkigqqr8SVxQltKgyqQOj4kYR5WHMRRHFqLhR9Z5TRFizZg2rV6+md+/epKSkYLFYmD9/PmCPuLrwwgvp27cv99xzj8t53qlTJ1auXMnNN9/MgAEDGDlyJAcO+PbdZGZmYrFYmDBhgmvfo48+SlpaGvn5+QwYMIA5c+YElHfChAnccsstjBw5kksvvZRp06bVeqj7G9OvXz+Kioro1q0bqampLtl27NjBpZdeyrPPPkswPWduu+025s6dqw54RYkQWn2hxy+++IJLLrkk6DkOlB9g2/ltFNmKSLIkMSpuVEj9Jdu2bePmm29mzZo1NaKwGspf/vIXCgsLeeihh0I2Z6RS1/+nitKa0UKPYaJPbJ9GdbaPGjUqqGWeunD99ddz6NAhNm7cGNJ5FUVRnKgyaQWsWbMm3CIoitLCUZ+JoiiK0mBUmSiKoigNRpWJoiiK0mBUmSiKoigNRpVJBBCuEvSZmZlcfPHF9O/fn9tvv53KysoGzacl6BWl9aLKJMyEswR9ZmYmBw4cYN++fZSVlbFs2TK/c2kJekVRfKHKpA4sK1jG4nOLa23LCvw/hP0RzhL0V199NSKCiDBs2DDy8/Nryacl6BVFCQZVJnWgZ3RPLB4/mQULvaJ71XvOSChBX1lZyXPPPcekSZO8XktL0CuKEghNWqwDw+OH83nF5zX2WbAwLH5Yk8sSyhL0d911F2PHjuXyyy/3ei0tQa8oSiBUmdSBREsifWP6sr9iPzZsWLDQN6YviZbEwCf7INwl6B944AFOnTrFk08+6VNGLUGvKEogdJmrjgyPH44gQGisknCWoF+2bBlvv/02L7zwAhZLcH8VtAS9oijeUGVSR5zWCdBgqwTCW4J+7ty5fPPNN4wcOZJBgwbx4IMPBpRXS9AriuINLUFfj3LlJbYSXi56melJ0xusTDzREvQNR0vQK0rwaAn6MJJoSeS2drc1ytxagl5RlOaIKpNWgJagVxSlsVGfiaIoitJgVJkoiqIoDSYilYmIXCwiu92270Tk5x5jrhCRQrcxfwiXvIqiKK2diPSZGGMOAoMARMQKHAO8LfxvMcZc25SyKYqiKLWJSMvEg3HAIWNMaEOcIghvpdsXLlxIt27dGDRoEH379vWZ6V5fduzYwT333ON3TG5uLv379/d6TKv2KoriTkRaJh7cBPh6ko4UkT3AceA+Y8x+zwEikgVkAfTo0SPw1Z6XegvqlVvqn8fzi1/8gvvuu4+cnByGDBnCtGnTiI6ODolYQ4cOZejQ+oeWr1y5kv79+9O1a9eQyKMoSvMmoi0TEYkBJgMvezm8C0g3xgwE/g7809scxpilxpihxpihnTp1ajxhG5HevXuTkJDAuXPnauyvrq7mwgsvxBhDQUEBVqvVVcF37Nix5OTkUFJSwu23386wYcMYPHiwq7z7+++/z7XX2lcIT506xfjx4+nXrx9z5swhPT2d06dPu64RTAn43/zmN/Tt25cBAwZw3333NeGvoyhKJBDRygS4CthljPnG84Ax5jtjTLHj8xtAtIh0bGoBm4Jdu3bRu3dvLrjgghr7rVYrF198MZ9//jlbt27lsssuY8uWLZSXl5OXl0fv3r1ZtGgRV155JR9//DHvvfce//Vf/0VJSUmNeZxFIPfv38+0adM4evSo61gwJeBLS0tZs2YN+/fvZ+/evfz+979vkt9FUZTIIdKVyc34WOISkS4iIo7Pw7Dfy5kmlK3R+etf/0q/fv0YPny4q1aXJ5dffjmbN29m8+bN/Pa3v2Xr1q188sknfP/73wfs5eAffvhhBg0axBVXXMH58+drKAuArVu3ctNNNwEwadIkkpOTXceCKQHfrl074uLimD17Nq+++ioJCQmhuH1FUZoREatMRCQRGA+86rZvrojMdXydBnzm8Jk8CtxkAhQaa2iP86bmF7/4Bfv37+eVV15h9uzZrrLs7owdO5YtW7bw8ccfc/XVV1NQUMD777/v6k1ijOGVV15h9+7d7N69m6NHj9apbpVnCXhvrXujoqL4+OOPmTZtGuvWrfPZZEtRlJZLxCoTY0yJMSbFGFPotm+JMWaJ4/Njxph+xpiBxpgRxphtgeY8ffo0W7dupbkVt5w8eTJDhw7lmWeeqXVs2LBhbNu2DYvFQlxcHIMGDeLJJ590NauaOHEif//73133/Omnn9aaY/To0a4OiOvXr6/lm/GGewn44uJiCgsLufrqq/nrX//Knj176n2viqI0TyJWmTQGcXFxbNiwgeeee47vvvsu3OK4KC0tJS0tzbW5t9918oc//IFHHnmkRqMssFsO3bt3Z8SIEYB92auoqIhLL70UgAULFlBZWcmAAQPo168fCxYsqDX3/fffz/r16+nfvz8vv/wyXbp0ISkpya/M7iXgi4qKuPbaaxkwYABjxozxKr+iKC2bVleC/qmnnuLNN98kKiqKadOmUV5e3urLlZeXl2O1WomKiuLDDz9k3rx5rp7xzREtQa8owaMl6OvJ4MGD6d69O2vXrqVNmzaUl5eHW6Swc/ToUX784x9js9mIiYnhqaeeCrdIiqI0M1qdMgHo2LEjs2bNQkQ4c+YM3333HfHx8SFLCGxu9O7d26svRVEUJVhalc/EHUdUMTabjdLSUk6dOkVJSUmzc84riqJEAq1WmTixWCx07NiR2NhYCgsLOXv2LNXV1eEWS6kn+jKgKOGh1SuTuLg4CgoKSE5Opm3btpSXl3PmzBl9KDVDjDGcOXOGuLi4cIuiKK2OVukzcSctLY38/HxOnToF2GtR2Ww2zpyxJ9MbY1xLYkrkExcXR1paWrjFUJRWR6tXJtHR0Vx44YVej23fvp29e/cydepUUlJSmlgyRVGU5kOrX+byR/v27SkoKODJJ5/k008/1aUvRVEUH6gy8UOfPn2YO3cu3bp1Y+3atbzyyite62MpiqK0dlSZBKBt27bceuutXHnllRw4cICTJ0+GWyRFUZSIo9X7TILBYrFw+eWXM3DgQNq2bQvA119/TXp6OhaL6mNFURR9EtYBpyI5deoUzz77LM888wyFhYUBzlIURWn5qDKpB506deL666/n5MmTLFmyhP37a7WeVxRFaVWoMqknAwYM4M477yQlJYXVq1fz+uuvh1skRVGUsKE+kwbQoUMHZs2axfvvv09iYmK4xVEURQkbqkwaiNVqZdy4ca7vX3zxBQUFBYwYMUIz5xVFaTXoMleI+fLLL1m/fj3Z2dkUFxeHWxxFUZQmQZVJiJk8eTLXXHMNR44c4YknniAnJyfcIimKojQ6qkxCjIgwdOhQsrKyaNOmDc8//zzHjx8Pt1iKoiiNivpMGolOnTpxxx13sH//frp27QpARUUFMTExYZZMURQl9Khl0ohERUUxcOBAwJ7o+Le//Y2dO3dqwUhFUVocqkyaiPj4eFJTU1m3bh0vv/wyZWVl4RZJURQlZKgyaSLatGnDjBkzGD9+PAcPHuSJJ54gNzc33GIpiqKEBFUmTYiIMGrUKGbPnk10dDQHDx4Mt0iKoighQR3wYaBr167ceeedrorDJ06cIC4ujuTk5DBLpiiKUj9UmYQJZ1SXMYa1a9dy9uxZrrnmGgYMGBBmyRRFUeqOLnOFGRHhxhtvpHPnzqxZs4Y1a9ZQXl4ebrEURVHqhFomEUD79u257bbb2Lx5M5s3byYvL4+ZM2fSrl27cIumKEGxrGAZJaak1v5ESWRO+zlhkEhpalSZRAgWi4UrrriCnj17smvXLpKSksItkqIETc/onuyv2I8Nm2ufBQu9onuFUSqlKdFlrgijR48eXHfddVgsFoqKinj55Zf57rvvwi2WovhlePxwhJpVsi1YGBY/LEwSKU1NxCoTEckVkX0isltEdng5LiLyqIh8JSJ7ReSycMjZmHzzzTfk5OSwZMkSDhw4EG5xFMUniZZE+sb0xeJ4pFiw0DemL4kW7fPTWohYZeLgh8aYQcaYoV6OXQX0dmxZwBNNKlkTcNFFF3HnnXfSvn17XnzxRdatW0dlZWW4xVIUr7hbJ2qVtD6as89kCvCssRe62i4i7UUk1RhzItyChZKUlBRmz57Nhg0b+PDDD4mJiWHChAnhFktpxfhztveN6cu+in1qlbRCIlmZGGC9iBjgSWPMUo/j3YA8t+/5jn01lImIZGG3XOjRo0fjSduIWK1WJkyYwEUXXURqaioAZWVlxMXFaTdHpcnx52wfFj+Mo1VH1SpphUTyMtcYY8xl2JezfioiY+sziTFmqTFmqDFmaKdOnUIrYRPTs2dP4uPjqa6u5rnnnuOFF16gpKT2G6KiNCb+nO2JlkRua3ebWiWtkIhVJsaYY44/vwXWAJ6vOseA7m7f0xz7WjwWi4WBAwdy+PBhlixZwqFDh8ItktKKUGe74o2IVCYikigiSc7PwATgM49ha4GfOKK6RgCFLc1f4gsRYfjw4dxxxx3ExcWxatUq1q9fT3V1dbhFU1oJ6mxXPIlIZQJ0BraKyB7gY+B1Y8xbIjJXROY6xrwBHAa+Ap4C7gqPqOGjc+fOZGVlMWTIEL766itsNlvgkxQlBDitE0CtEgUAaU1d/4YOHWp27KiVstIicLYELi8v58svv6R///7qnFcalRJbCS8Xvcz0pOmqTJoxIrLTR/pFnYjkaC6lDjirEO/YsYN3332XgwcPcu211xIXFxdmyZRI4ED5Abad30aRrYgkSxKj4kbRJ7ZPg+Z0OtsVBVSZtDhGjhyJzWbjvffeIz8/nxtuuKHZhkQroeFA+QE2lG6giioAimxFbCjdANBghaIoTlSZtDAsFguXX345F154Ia+++iorV65k8uTJDBo0KNyiKWFi2/ltLkXipIoqtp3fFnJlotWDWy+R6oBXGkhaWhp33nkngwcPJiMjI9ziKGGkyFZUp/0NoWd0T1fIsBOtHtw6UGXSgomNjeVHP/oR7du3xxjDq6++yv79+8MtltLEJFm8tzPwtb++LCtYxr6KfTUy4wFs2DR0uBWgyqSVcP78ec6ePcvq1at57bXXqKioCLdIShMxKm4UUR4r2lFEMSpuVEiv480qAUixpGi0VytAfSathPj4eGbNmsX777/P1q1bycvLY+rUqa5aX0rLxekXqW80l3skmCAYjOvPYJiYOLHesivNB80zaYXk5uby6quvYrFY+NnPfobVag23SEqE4hkJ5g8LFtpb2lNgK3AtdaVYUpjRbkZji6k0gFDlmegyVyskIyODuXPn8uMf/xir1YrNZtOCkYpXvEWC+cKChUmJk2oUgVSrpPWgyqSVkpCQQNeuXQHYvHkz//jHP8jJyQmzVEqkEWzEl7PYY6eoTq4yKwNiBtApqnlX6laCR5WJQr9+/UhKSuL555/nrbfeoqoquDdRpeUTbMSXe7HH4fHDaWdppxFcrQxVJgqdOnVizpw5DBs2jI8++ohly5Zx6tSpcIulRADeIsGcRBFFd6u9C4R7sUftadI6UWWiABAVFcVVV13FzTffTGlpqVonCmCPBBuXMM5loTj9IUmWJMYljGNim4lqhSiARnMpXqiqqiIqyv42umvXLvr06UNCQkKYpVIagpY5UXyh0VxKo+FUJOfOneONN95gyZIl5ObmhlcopUFomROlsVFlovgkOTmZ2bNnExMTwzPPPMOGDRu0m2MzxV/fdkUJBapMFL+kpqaSlZXF4MGD2bp1K88//zytaWm0paB925XGRsupKAGJiYlh8uTJ9OrVC2MMIuL6U4ls3EuhJMq/FUeorJLGaLqlNE9UmShB069fP9fnXbt2cfToUa6++mpiY2PDKJXiC89SKCWmxLXUFQqrRJtuKe6oMlHqRVlZGfv27SMvL48bbriBtLS0cIvU4mhoBJa3UijOIo2hsEqasumWEvmoz0SpF2PGjOG2227DZrOxYsUKtmzZgs1mC3yiEjQNjcDyVQrFYELiK/HXdGvxucUsPreYZQXLGnwdpXmglolSb3r06MHcuXNZt24dGzduJD09XfvNh5Dh8cP5vOLzGvvq4utIsiR5feDXtymWL0vJFxp63LpQy0RpEHFxcUydOpXZs2e7FMnZs2fDLFXLoKERWKFuiuWr+ZUvNPS4daHKRGkwIuLymRw/fpzHHnuMdevWUVlZGWbJmj/u+SF1fTg7S6G455dUUcXbpW/XawnKV66KM0osmugasmrocetClYkSUjp37szIkSPZuXMnTz31FN988024RWrWOK0TqF8EVp/YPvSP6R+S7HdvllL/mP7MaT+He5PvZWa7mTWOqVXSulBlooQUq9XK+PHjmTFjBmVlZTz11FN88skn4RarWdPQku6hzH73Zyk1VPEpzRt1wCuNQq9evZg7dy5r166lrKws3OI0a5wl3Rtyft+Yvuyv2I8NW9BLUL4c7k4/jLc5hscP52jVUbVKWiGqTJRGIzExkZtuusn1/dChQ4Bd0ShNi3tkmD+rxD2j3ekDMfy7fI4FC71jenO86rjXORqq+JTmiyoTpVFxllwxxrB161Zyc3MZOXIk48aNw2q1hlm61oPTOtlXsc+nVeKZ0V5J7QAKCxZGx4/WJSylFqpMlCZBRLjllltYv349H374Ibm5uUydOpWUlJRwixZRNGbfkUBL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44qYdiM66OCgKMoiEemgDOACbggCAvYzf5zTeKe93bSc2/fc7v59qm71uWd5z9PvPX2fPu97znvOPZeqqqqiT/G0fLkD3jq01sbRuvLKK7nhhhvKHJG1t4hAElu2bGHRokWceuqpRc9krW3cAW9Gy/0rkrjuuusyDd9ilUkSAKtXr+aZZ55h5syZbNy4MeeozMnEOrRiV0wBnH766QwYMIDzzjvvM00ildCXYtmNGDGCSy65hI8++oibbrqJxYsXu3M+R27msg6vcCj52tpadu3axdKlSxkwYMD/e3Rwk/Z41K/lZ+vWrcydO5eGhgbOPPNMRo8enXdIHYqfZ7IPnEy6piuvvJJZs2axc+dOevTowZQpU9yX0slEBC+88AJHH300BxxwAJ988glVVVV5h9UhuM/EOr2sI+42bT99+nR27doF+AqvzkoSI0eO3JNIbrnlFubPn+9nz5eRn5lpFan5sCtNI+4CbbpXo/n2TWfgo0ePdvNWJ9fY2MghhxzCwoULee2117jwwgv3PDPF2o+buawiZR3XqqXtBw0axLp160oRolW4lStXMm/ePBobGxk/fjzHHnvsnivB7FNu5rJOrbWHV2XZvvlQ99Z5HXXUUUybNo2BAweycOFCN3m1MycTq0hZn/deyufFW8fVq1cvJk6cyIQJE6iurmbnzp3+h6KdOJlYRco64q5H7LUm3bp1o2fPngAsWLCAWbNm8dRTT/lpjiXmZGIVKeuIux6x14o56aSTOProo3nyySe5/fbb2bx5c94hdRrugDezLiUiWLp0KfX19VRVVXHRRRdx2GGH5R1WbkrVAe9Lg82sS5HE8OHDOfTQQ6mvr6dPnz55h9QpuJnLzLqkgw46iAkTJtC7d28igocffpi33nor77A6LCcTqwhZ73Y3y+LDDz9k5cqVzJw5k0WLFnnAyH3gZGK5a7pbfe3atUTEnrvdnVCsXHr16sUVV1zB0KFDefTRR5k9ezZbt27NO6wOxR3wlrusd7ublUpEsHjxYh577DH69evH1KlTO/1d8+6At04j693uZqUiieOPP54hQ4awY8cOJNHY2EhjYyPV1f66bI2buSx3vlvdKk3//v33HH9NNzq+8847OUdV2SoumUj6saQNkl5KX+NbWO8cSaskNUi6ptxxWun4bnWrZLW1tWzevJkZM2awZMkSd863oOKSSeqXETE8fdU3XyipCrgBGAccBXxH0lHlDtJKw3erWyU74ogjuOKKKxg0aBDz5s3jnnvuYfv27XmHVXE6aiPg8UBDRKwBkDQHOB9YmWtUts+++93vOnlYxerZsycTJkzgmWeeYcGCBbz//vsccMABeYdVUSr1zOQqScsk3Syp2O2pXwIKH0qxPp33GZKmSnpe0vObNm1qj1jNrAuQxJgxY7j66qupra0FYNWqVR4wMpVLMpE0X9KKIq/zgenAUGA48Cbwiyz7iogZETEyIkb269evBNGbWVfW1L/3xhtvMGfOHG655RY++OCDnKPKXy7JJCLGRsQxRV5zI+LtiPgkIhqBm0iatJrbABxa8H5QOs/MrCxqa2u58MIL2bRpE3V1daxYsSLvkHJVcc1ckgYWvL0AKPYJLQaGSTpMUg/gYuDBcsRnZtbkmGOOYdq0afTr1497772X+vrPXC/UZVRiB/zPJQ0HAngduBxAUi0wMyLGR8RuSVcBjwJVwM0R8XJeAZtZ19W7d28mTZrEggUL6Nu3b97h5MbDqZiZldiLL77Itm3bGD16dMUPx1Kq4VQqrpnLzKyjW7t2LfPnz+eOO+5gy5YteYdTFk4mZmYldv7553Puueeybt066urqWLVqVd4htTsnEzOzEpPEiBEjmDp1Kl/84heZM2cOGzduzDusdlWJHfBmZp3CwQcfzOTJk2loaKB///4AbN++vVPePe8zEzOzdlRdXc2RRx4JwPr16/nVr37F4sWLO92AkU4mZmZl0qdPH7785S9TX1/PXXfdxbZt2/IOqWScTMzMyqSmpoZLLrmEs88+m4aGBqZPn86aNWvyDqsknEzMzMpIEieeeCJTpkxh//33Z/369XmHVBLugDczy8GAAQOYOnUqVVVVQHJvSs+ePTvsXfROJmZmOenevTsAEcFDDz3Ehx9+yLhx4zjuuOMq/s755tzMZWaWM0l873vfY+DAgcydO5f77ruPHTt25B3W5+JkYmZWAXr16sXEiRM57bTTePnll7nxxhvZunVr3mG1mZu5zMwqRLdu3Tj55JM5/PDDWb58OTU1NXmH1GY+MzEzqzCDBg1i3LhxSOK9995j9uzZbN68Oe+wWuVkYmZWwd59913Wrl1LXV0dK1euzDucFjmZmJlVsGHDhnH55ZfTt29f7r77bubNm8fOnTvzDusznEzMzCpc3759ueyyyxgzZgxLlixh4cKFeYf0Ge6ANzPrAKqqqhg7dizDhg1j4MCBAGzdupWampqKuCfFZyZmZh3I4MGD6dGjB7t27eLWW29l9uzZFXEJsZOJmVkHVF1dzQknnMDrr79OXV0dDQ0NucbjZGJm1gFJYtSoUfzgBz+gpqaGO++8k0ceeYTdu3fnEo+TiZlZB9a/f3+mTJnCqFGj2LBhQ279J+6ANzPr4Lp378748ePZvXs3VVVVbNu2jVdffbWsA0b6zMTMrJOork7OD5577jnmzp3L3Xffzfbt28uz77LsxczMyuaUU06he/fuPPHEE2zYsIELLriAIUOGtOs+fWZiZtbJSGLMmDFMnjyZ6upqbrvtNpYtW9au+3QyMTPrpGpra7n88ss54YQTGDp0aLvuy8nEzKwT69GjB+eccw41NTU0NjYye/Zsli9fXvL9OJmYmXURO3bsYPv27dx333088MADfPzxxyUr2x3wZmZdxIEHHsikSZNYsGABTz/9NOvWrStZ2U4mZmZdSLdu3TjttNP2PM2xVJxMzMy6oMGDBzN48OCSlVdRyUTSXcAR6dvewAcRMbzIeq8DW4BPgN0RMbJsQZqZ2WdUVDKJiG83TUv6BdDaQ49Pi4h32j8qMzPbm4pKJk2UDCZzEXB63rGYmdneVeqlwScBb0fE6haWB/CYpBckTW2tIElTJT0v6flNmzaVPFAzM8vhzETSfGBAkUXXRsTcdPo7wG9aKebrEbFBUn/gcUmvRMRTxVaMiBnADICRI0dGhtDNzKwFZU8mETG2teWSqoFvAl9tpYwN6c+Nku4HjgeKJhMzM2t/ldjMNRZ4JSLWF1soqUZSz6Zp4CxgRRnjMzOzZioxmVxMsyYuSbWS6tO3hwD/LWkp8Bzwu4h4pMwxmplZgYq7misivl9k3hvA+HR6DXBcmcMyM7NWVOKZiZmZdTBOJmZmlpmTiZmZZeZkYmZmmTmZmJlZZk4mZmaWmZOJmZll5mRiZmaZOZmYmVlmTiZmZpaZk4mZmWXmZGJmZpk5mZiZWWZOJmZmlpmTiZmZZeZkYmZmmTmZmJlZZk4mZmaWmZOJmZll5mRiZmaZOZmYmVlmTiZmZpaZk4mZmWXmZGJmZpk5mZiZWWZOJmZmlpmTiZmZZeZkYmZmmTmZmJlZZk4mZmaWmZOJmZlllksykfQtSS9LapQ0stmyH0pqkLRK0tktbH+YpGfT9e6S1KM8kZuZWTF5nZmsAL4JPFU4U9JRwMXA0cA5wK8lVRXZ/nrglxHxFeB9YHL7hmtmZq3JJZlExB8iYlWRRecDcyLi44h4DWgAji9cQZKA04F70lm3AX/envGamVnrKq3P5EvAuoL369N5hQ4CPoiI3a2sY2ZmZVTdXgVLmg8MKLLo2oiY2177LRLHVGBq+vZjSSvKte99cDDwTt5B7IVjLA3HmF2lxwcdI8YjSlFIuyWTiBi7D5ttAA4teD8onVfoXaC3pOr07KTYOoVxzABmAEh6PiJGtrRu3io9PnCMpeIYs6v0+KDjxFiKciqtmetB4GJJ+0k6DBgGPFe4QkQE8CTwF+msS4GynemYmdln5XVp8AWS1gNfA34n6VGAiHgZ+C2wEngE+MuI+CTdpl5SbVrEPwJ/K6mBpA9lVrl/BzMz+1S7NXO1JiLuB+5vYdnPgJ8VmT++YHoNza7yaqMZ+7BNOVV6fOAYS8UxZlfp8UEXilFJq5GZmdm+q7Q+EzMz64A6XTLpSEO1pOW/lL5el/RSC+u9Lml5ul5Jrrz4HDH+WNKGgjjHt7DeOWm9Nki6pswx/oukVyQtk3S/pN4trFf2etxbvaQXm9yVLn9W0pByxJXu+1BJT0pamf7N/HWRdU6VtLng8/9RueIriKHVz02Jf0/rcJmkEWWO74iC+nlJ0oeSrm62TtnrUdLNkjYW3g4hqa+kxyWtTn/2aWHbS9N1Vku6tE07jIhO9QL+lOS66f8CRhbMPwpYCuwHHAb8Eagqsv1vgYvT6TrgijLF/QvgRy0sex04OKf6/DHw93tZpyqtz8OBHmk9H1XGGM8CqtPp64HrK6Ee21IvwJVAXTp9MXBXGeMbCIxIp3sCrxaJ71TgoTyOvbZ+bsB44GFAwInAsznGWgW8BQzOux6Bk4ERwIqCeT8Hrkmnryn2twL0BdakP/uk0332tr9Od2YSHXColnS/FwG/ae99tZPjgYaIWBMRO4E5JPVdFhHxWHw6IsIiknuPKkFb6uV8kuMMkuPujPR4aHcR8WZELEmntwB/oGOOJnE+cHskFpHchzYwp1jOAP4YEWtz2v8eEfEU8F6z2YXHW0vfb2cDj0fEexHxPvA4yViJrep0yaQVlTxUy0nA2xGxuoXlATwm6YX0jv5yuyptPri5hdPittRtuVxG8l9qMeWux7bUy5510uNuM8lxWFZp89qfAc8WWfw1SUslPSzp6LIGltjb51ZJx9/FtPxPYd71CHBIRLyZTr8FHFJknX2qz1wuDc5KFTJUS1u0Mdbv0PpZydcjYoOk/sDjkl5J/+to9xiB6cBPSf6gf0rSHHdZqfbdVm2pR0nXAruBO1sopl3rsaOS9AXgXuDqiPiw2eIlJE02W9P+sgdIbiYupw7xuaX9q+cBPyyyuBLq8f+JiJBUsst5O2QyiQoZqqUt9harpGqS4fi/2koZG9KfGyXdT9J8UrI/prbWp6SbgIeKLGpL3WbShnr8PvAN4IxIG36LlNGu9VhEW+qlaZ316bHQi+Q4LAtJ3UkSyZ0RcV/z5YXJJSLqJf1a0sERUbbxptrwubX78ddG44AlEfF28wWVUI+ptyUNjIg306bAjUXW2UDSx9NkEEkfdKu6UjNXpQ7VMhZ4JSLWF1soqUZSz6Zpks7msg1W2azt+YIW9r0YGKbkSrgeJKf6D5YjPkiumAL+ATgvIra1sE4e9diWenmQ5DiD5Lh7oqVkWGpp38ws4A8R8a8trDOgqQ9H0vEk3xnlTHZt+dweBCamV3WdCGwuaMoppxZbGPKuxwKFx1tL32+PAmdJ6pM2a5+VzmtdOa8uKMeL5AtvPfAx8DbwaMGya0murlkFjCuYXw/UptOHkySZBuBuYL92jvdWYFqzebVAfUE8S9PXyyTNOuWsz/8ElgPL0gNxYPMY0/fjSa4G+mMOMTaQtPG+lL7qmseYVz0WqxfgJySJD2D/9DhrSI+7w8tYb18nab5cVlB344FpTcckcFVaX0tJLm4YXebPtujn1ixGATekdbycgqs4yxhnDUly6FUwL9d6JElsbwK70u/EyST9cb8HVgPzgb7puiOBmQXbXpYekw3ApLbsz3fAm5lZZl2pmcvMzNqJk4mZmWXmZGJmZpk5mZiZWWZOJmZmlpmTiVkRkh6R9IGkYjdpZin3MyO5lqDMWkn37H1Ns/bjS4PNipB0BnAgcHlEfKOE5Z4MbCUZmPCYUpXbwr6aRnIwa3c+M7EuS9KodADL/dM7rV+WdAxARPwe2LKP5Q5OnwNxsKRukp6WdFZabrGRXJtvf6ukOknPS3pV0jfS+UPSspakr9EF81ek09+X9KCkJ4DfSxoo6Sklz9BYIemkffmdzPamQ47NZVYKEbFY0oPAPwEHAHdERObmp4hYK+l6kkEynwNWRsRjn7OYISRjUA0FnpT0FZJxlM6MiB2ShpHc4TyyyLYjgGMj4j1Jf0cyCsTPJFWRnG2ZlZyTiXV1PyEZQ2sH8FelKjQiZkr6FsmQGsP3oYjfRkQjsFrSGuBI4DXgPyQNBz4B/qSFbR+PiKazn8XAzemAjg9ERNGneZpl5WYu6+oOAr5A8qTB/du6kZJH3jY9gnVakeUH8ulDur6wD3E178wM4G9Ixps7juSMpKVHSn+0Z6OkWe1kkpFgb5U0cR9iMdsrn5lYV3cjcB3Jo5yvJxmQb68iYh2tn3FcT/JclbXATSTD438e35J0WxrX4SSDk/YC1kdEo5LnclftrRBJg9NtbpK0H0kT2O2fMxazvfKZiXVZ6X/puyJiNvDPwChJp6fLniYZzfcMSeslnf05yj0FGEXyfO07gZ2SJqXLfgP8D3BEWu7kFor5X5L+lodJRp7dAfwauFTSUpJmr49a2LbQqcBSSS8C3wb+ra2/h9nn4UuDzSqMpFuBhyLC945Yh+EzEzMzy8xnJmZmlpnPTMzMLDMnEzMzy8zJxMzMMnMyMTOzzJxMzMwsMycTMzPL7P8AAPgxXUKYaxAAAAAASUVORK5CYII=\n", | |
| "text/plain": [ | |
| "<Figure size 432x432 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "def pairwise_diffs(data):\n", | |
| " return np.array([(d1[0] - d2[0], d1[1] - d2[1], d1[2] - d2[2]) \\\n", | |
| " for (d1, d2) in combinations(data, 2) \\\n", | |
| " if d1[2] != d2[2]])\n", | |
| "\n", | |
| "q1pairs = pairwise_diffs(q1data)\n", | |
| "q2pairs = pairwise_diffs(q2data)\n", | |
| "allpairs = np.concatenate((q1pairs, q2pairs))\n", | |
| "Xpairs = allpairs[:,:-1]\n", | |
| "ypairs = allpairs[:,-1]\n", | |
| "\n", | |
| "lr = LogisticRegression()\n", | |
| "lr.fit(Xpairs, ypairs)\n", | |
| "w2 = lr.coef_[0]\n", | |
| "\n", | |
| "plt.clf()\n", | |
| "plt.figure(figsize=(6,6))\n", | |
| "\n", | |
| "q1p = q1pairs[np.random.choice(q1pairs.shape[0], 100, replace=False), :]\n", | |
| "q2p = q1pairs[np.random.choice(q2pairs.shape[0], 100, replace=False), :]\n", | |
| "q1y = q1p[:,-1]\n", | |
| "q2y = q2p[:,-1]\n", | |
| "\n", | |
| "plt.scatter(q1p[q1y > 0,0], q1p[q1y > 0,1], marker='o', color=colors[1], label='Query1 relevant')\n", | |
| "plt.scatter(q1p[q1y <= 0,0], q1p[q1y <= 0,1], marker='o', color=colors[0])\n", | |
| "plt.scatter(q2p[q2y > 0,0], q2p[q2y > 0,1], marker='v', color=colors[1], label='Query2 relevant')\n", | |
| "plt.scatter(q2p[q2y <= 0,0], q2p[q2y <= 0,1], marker='v', color=colors[0])\n", | |
| "\n", | |
| "\n", | |
| "\n", | |
| "plt.quiver(w2[0], w2[1], scale=20.0, color='orange', label='LR weights')\n", | |
| "plt.plot([-10, 10], [-(w2[0]/w2[1])*-10, -(w2[0]/w2[1])*10], '--', c='gray')\n", | |
| "\n", | |
| "plt.xlim((-10, 10))\n", | |
| "plt.ylim((-10, 10))\n", | |
| "plt.xlabel('x1 - x1 pairs')\n", | |
| "plt.ylabel('x2 - x2 pairs')\n", | |
| "plt.title('Pairwise Differences')\n", | |
| "plt.legend(loc=2)\n", | |
| "plt.axes().set_aspect('equal')\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 443, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<Figure size 432x288 with 0 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x432 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "plt.clf()\n", | |
| "plt.figure(figsize=(6,6))\n", | |
| "\n", | |
| "plt.scatter(q1x1[q1y > 0], q1x2[q1y > 0], marker='o', color=colors[1], label='Query1 relevant')\n", | |
| "plt.scatter(q1x1[q1y <= 0], q1x2[q1y <= 0], marker='o', color=colors[0])\n", | |
| "plt.scatter(q2x1[q2y > 0], q2x2[q2y > 0], marker='v', color=colors[1], label='Query2 relevant')\n", | |
| "plt.scatter(q2x1[q2y <= 0], q2x2[q2y <= 0], marker='v', color=colors[0])\n", | |
| "\n", | |
| "plt.quiver(q1mean[0], q1mean[1], w2[0], w2[1], scale=20.0, color='orange', label='LR weights')\n", | |
| "plt.plot([-10+q1mean[0], 10+q1mean[0]], [-(w2[0]/w2[1])*-10 + q1mean[1], -(w2[0]/w2[1])*10 + q1mean[1]], '--', c='gray')\n", | |
| "\n", | |
| "plt.quiver(q2mean[0], q2mean[1], w2[0], w2[1], scale=20.0, color='orange')\n", | |
| "plt.plot([-10+q2mean[0], 10+q2mean[0]], [-(w2[0]/w2[1])*-10 + q2mean[1], -(w2[0]/w2[1])*10 + q2mean[1]], '--', c='gray')\n", | |
| "\n", | |
| "plt.xlim((-10, 10))\n", | |
| "plt.ylim((-10, 10))\n", | |
| "plt.xlabel('x1')\n", | |
| "plt.ylabel('x2')\n", | |
| "plt.legend(loc=2)\n", | |
| "plt.title('Logistic Fit from Pairwise Differences')\n", | |
| "plt.axes().set_aspect('equal')\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 430, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "<Figure size 432x288 with 0 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAFpCAYAAACMK9MWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAC+ZJREFUeJzt3VFoned9x/H/K8VurMZt5CwMFpOsl7vJBlFxL0ro1Vri3JTFSRNYtwRcAg0otPSiZnZJxnIz2OIxg8mgvXOblUILoWG72EovSktDyLrCoPSikhNGILOKnMiRnHPeXeic+PXxOUeSozjWj8/nRuI953ne53316qtX5wi7adu2ANj7Zj7qBQCwOwQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBB7IuhN0/ykaZqffNTrANipG9mvPRF0ALYm6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEE3bth/1GqZqmuaxqvp2VX2sqpaq6kTbtue2Me6fq+rJqpqtql5VnW3b9qlt7Ou5qrq7qpar6qWq+nJVHew87WJVPTltDSP77lfVRlXdOjLHelXdUVXNYFu/qt6pqts6+35wsJZ+bf7wXa7O8Y9Z74m2bc8Ntp8dWXcNzsPMyHwvVdUjVfUHnXU0VfV2VX28rv6h/9bg4x1V1XYeazvHUTOzM3XPwj0bb/z3G6sbaxt3VNX/dcZd+bypqnZz3NyhuXrgxAOXP/vEZ1/oHPdyVZ1YnF889/X/+Pq/Hb738J83M01trG3Uj079qH72nZ/VgU8eqGa2qbWVtZq7fa79/Dc+39z/lftr49JGnf+v85deePiFdwZrWK6qE89feL6G5+wX537x9svPvfzx3//v72fm75qvoyeP1sKxheFxvjhyXkbPzW2dY75YVU8+fejp4dz3DAfc99B9/WP/cGz91ttuPVDXulSb1/XM4GtzdnF+8f1r9PTK6ceq6vTIGt7f3+Dzq77+i/OL50bGX/P4yParrq3h+EljxxxDnN089tMrpx9bfXP12wfvPPixZqZZ+iBzbcdNHfRBmP6lquY6m9eq6vg2gvrVMQ+dmRT1Cfua5L2q+qtxa5iy792yVlXHB5+POzffqaqvVNW+D3ENH4rZ/bP18D8+XEcePdLdvHbh/IXfzh+ev7dp3v+ZURtrG/W9xe/Vqz949ao59h3YV488/0gtHFu45jkLxxbWHz3zaDN7y+z+V77/Sr349It1+dLlsWN36pf/+sved7/63V6/198/3NbMNvWlf/rS6PFs5czi/OJTg6gMb2TG6VfV5ZHH16rqeCfak66Px2v8db7VtXU8PepTztuOj30359qumz3ov6vO3U7HelX9fMrQ+6tzx9jRVtVPJ4z5TE3+5hln0hom7Xs3rQ8+jlvvVXfLe8384fn61q++ddW2tm2rG/OhC8sX6tk/e3bqHN3nnHrtVB26+1BVVT1z7zO18vrKtva/Hbs1X7/Xb79259d++uz/PPuZT/zhJ3ZyPVZV1eqbq+un/uTUzyeN7/f67czszMTrY/XN1fWqqnFjh3PvdE17yaTzdj3HPuVruLQ4v/jH17vGaW75MCbdRXdP2L7VhT7pgp0Wup1+80x6/o2I6bS17tmYV1WtvHFtFCeZPzy/5Rzd53Q/n7Sfnex/O+N2Ol8zs/mT6+CdB3cc8+64SeOH8281fqePpZh0jNdz7FPGTOraB3azB325xt+hL7Vt+7lJg5qmea82X78e1Zs0bspvA5OMXcOUfe+mpcHHcevt3YD9f2jm7xof6XHG3RGPztF9zsrrK+/foc/fNT/+jnoH+x8dtxvzNU3Ta9v2c6dXTv+udnY9bo6faZamjW+aZur1MXidt8aOHcy90zXtJRPP23Uc+5Sv4fL1rG07bva/cjlRm685da0Ntk9zdofbJ+1rkvemrGHaPnbD8PgnnZuztfna6p4zu3+2vvDNL4xuXlt5feVXoy8Nbqxt1Et/+9I1c+w7sK+Onjw69jk//rsfr/fe621UVR09ebT2Hdg3cexOPfA3D/RmZmc2utua2Wbc8WxleP2cqCsvrY3TH/N493tj2vUx6Trf6tra6vsuwW4e+w0/jzd10AdvOh6vKxfuUm3xhuhg3FNVdaY271Zr8HHiG6Ij+1qqzdehlwZzXBx56sWa8IbohH33q+rdMXO8NdhPdZ53cWTfw7X0OtuPt217bsJ6jw/2/9dj1l2debrznakrf70yXEc7GN8fGf9WZ93dx66q7czsTH3qyKc29s/tHz63O+7K582VcXOH5uqLz33x8pFHj3SPe6mqjj9z7zN/ev618//e7/Wrbdtaf2e9fnjyh/XqD16tA588UHOH5qqaqrn5ufbBkw/WfX9xX62/s17Lry1f+vXLvx7ud+mV77/yxOwts49X1dLCsYX2ob9/6OLtf3R7v5rNl2M6b4i+Nea8jJ6b7jFf/PTDn/5yv9d/vK789lRtr63f/Odv+u++/e6lMV+Lqs2/chmex14N3hCtqhq8afbEmDXUYP9/OXj8qnM1fLNt8PGa62Mwf3d7b3T8lLHRb4hWTT1vOz724Vyrb66ut/22Pshc23VTvyk6NPwPVtN/3QPy3Mh+3dR36ABsn6ADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEHvi33IBYGvu0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpACEEHCCHoACEEHSCEoAOEEHSAEIIOEELQAUIIOkAIQQcIIegAIQQdIISgA4QQdIAQgg4QQtABQgg6QAhBBwgh6AAhBB0ghKADhBB0gBCCDhBC0AFCCDpAiP8HxfrtytL+z8UAAAAASUVORK5CYII=\n", | |
| "text/plain": [ | |
| "<Figure size 432x432 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "projs = [(np.array([x1, x2]).dot(w2), yl) for (x1, x2, yl) in q2data]\n", | |
| "\n", | |
| "xmin = min([yhat for (yhat, _) in projs])\n", | |
| "xmax = max([yhat for (yhat, _) in projs])\n", | |
| "\n", | |
| "# normalize\n", | |
| "projs = [((yhat - xmin) / (xmax - xmin), yl) for (yhat, yl) in projs]\n", | |
| "\n", | |
| "fy = 5\n", | |
| "height = 1\n", | |
| "\n", | |
| "plt.clf()\n", | |
| "plt.figure(figsize=(6,6))\n", | |
| "\n", | |
| "plt.hlines(fy, 0, 1)\n", | |
| "plt.vlines(0, fy - height / 2., fy + height / 2.)\n", | |
| "plt.vlines(1, fy - height / 2., fy + height / 2.)\n", | |
| "\n", | |
| "for (yhat, yl) in projs:\n", | |
| " plt.plot(yhat, fy, 'o', color=colors[yl.astype(np.int)])\n", | |
| "\n", | |
| "plt.axis('off')\n", | |
| "plt.xlim((-0.05, 1.05))\n", | |
| "plt.ylim((0, 10))\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "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.7.0" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 2 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment