From 23c83cc7720c7aff38ccbd5901388ff7601dc514 Mon Sep 17 00:00:00 2001 From: Joshua We <80349780+joshuawe@users.noreply.github.com> Date: Sat, 16 Dec 2023 14:57:01 +0100 Subject: [PATCH] Add Multiclass roccurve (#23) * add multiclass prob histogram * improvements for historgram * add multiclass roc curve * add black bounding box as titles * many small improvements * added custom color maps * color update and small adjustments * add test for hist plot and preliminary test for roc curve * refine tests * mypy, pylint and black improvements * tiny fix * improve histplot testing --- .gitignore | 11 + README.md | 2 + images/multiclass/histogram_4_classes.png | Bin 0 -> 36398 bytes images/multiclass/roc_curves_multiclass.png | Bin 0 -> 115371 bytes notebooks/calllibration.ipynb | 2 +- notebooks/multiclass_classification.ipynb | 239 +++++++++- plotsandgraphs/cmaps/hawaii.txt | 256 +++++++++++ plotsandgraphs/cmaps/hawaiiS.txt | 100 +++++ plotsandgraphs/cmaps/readme.md | 3 + plotsandgraphs/cmaps/roma.txt | 256 +++++++++++ plotsandgraphs/cmaps/romaO.txt | 256 +++++++++++ plotsandgraphs/multiclass_classifier.py | 331 ++++++++++++-- plotsandgraphs/utils.py | 169 +++++++ pyproject.toml | 3 + src/binary_classifier.py | 459 -------------------- src/compare_distributions.py | 102 ----- src/test.md | 1 - src/test.txt | 1 - tests/test_multiclass_classifier.py | 150 +++++++ 19 files changed, 1731 insertions(+), 610 deletions(-) create mode 100644 images/multiclass/histogram_4_classes.png create mode 100644 images/multiclass/roc_curves_multiclass.png create mode 100644 plotsandgraphs/cmaps/hawaii.txt create mode 100644 plotsandgraphs/cmaps/hawaiiS.txt create mode 100644 plotsandgraphs/cmaps/readme.md create mode 100644 plotsandgraphs/cmaps/roma.txt create mode 100644 plotsandgraphs/cmaps/romaO.txt create mode 100644 plotsandgraphs/utils.py delete mode 100644 src/binary_classifier.py delete mode 100644 src/compare_distributions.py delete mode 100644 src/test.md delete mode 100644 src/test.txt create mode 100644 tests/test_multiclass_classifier.py diff --git a/.gitignore b/.gitignore index 6769e21..c14664e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,14 @@ +tests/test_results/ + + + + + + + + + + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/README.md b/README.md index 9a99712..6a8c189 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,8 @@ fig_auroc.show() + [DALL-E 3](https://openai.com/dall-e-3) created the project logo on 17th October 2023. Prompt used: *Illustration of a stylized graph with colorful lines and bars, representing data visualization, suitable for a project logo named 'plots and graphs'.* ++ The [Scientific colour maps](https://www.fabiocrameri.ch/colourmaps/) in the `plotsandgraphs/cmaps` folder [(Crameri 2018)](https://doi.org/10.5281/zenodo.1243862) are used in this library to prevent visual distortion of the data and exclusion of readers with colour-vision deficiencies [(Crameri et al., 2020)](https://www.nature.com/articles/s41467-020-19160-7). + # Reference diff --git a/images/multiclass/histogram_4_classes.png b/images/multiclass/histogram_4_classes.png new file mode 100644 index 0000000000000000000000000000000000000000..b68659096923f859412613a22910afeeb199fbf8 GIT binary patch literal 36398 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 SX1Ox7eJV;Cis|we$NwLl}_ literal 0 HcmV?d00001 diff --git a/images/multiclass/roc_curves_multiclass.png b/images/multiclass/roc_curves_multiclass.png new file mode 100644 index 0000000000000000000000000000000000000000..a7fc5d9025f63eec866b88af2c272f002f1ab6fe GIT binary patch literal 115371 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 literal 0 HcmV?d00001 diff --git a/notebooks/calllibration.ipynb b/notebooks/calllibration.ipynb index 40e532e..4c8c0f2 100644 --- a/notebooks/calllibration.ipynb +++ b/notebooks/calllibration.ipynb @@ -73,7 +73,7 @@ }, "language_info": { "name": "python", - "version": "3.10.3" + "version": "3.8.8" }, "orig_nbformat": 4 }, diff --git a/notebooks/multiclass_classification.ipynb b/notebooks/multiclass_classification.ipynb index 194af92..0c306be 100644 --- a/notebooks/multiclass_classification.ipynb +++ b/notebooks/multiclass_classification.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -30,44 +30,44 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 374, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([[9.09443337e-01, 9.03393597e-01, 8.31210285e-01],\n", - " [2.21902873e-02, 2.76896844e-01, 1.17129033e-02],\n", - " [3.17239348e-01, 9.98593024e-01, 1.63289150e-02],\n", - " ...,\n", - " [2.58836187e-02, 2.28105168e-01, 5.37207598e-01],\n", - " [2.17134178e-01, 5.08693900e-01, 2.65985367e-01],\n", - " [2.86897406e-15, 7.97772016e-01, 3.77128950e-02]])" + "(1000, 3)" ] }, - "execution_count": 44, + "execution_count": 374, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "num_classes = 3\n", + "class_labels = np.arange(num_classes)\n", + "class_probs = np.random.random(num_classes)\n", + "class_probs = class_probs / class_probs.sum() # normalize\n", "# True labels\n", - "y_true = np.random.choice([0, 1, 2], p=[0.3, 0.5, 0.2], size=1000)\n", + "y_true = np.random.choice(class_labels, p=class_probs, size=1000)\n", "# one hot encoding\n", - "y_true_one_hot = np.eye(3)[y_true] \n", + "y_true_one_hot = np.eye(num_classes)[y_true] \n", "\n", "# Predicted labels\n", "y_pred = np.ones(y_true_one_hot.shape)\n", "\n", - "a0, b0 = [0.1, 0.6, 0.3, 0.4], [0.4, 1.2, 0.8, 1]\n", - "a1, b1 = [0.9, 0.8, 0.9, 1.2], [0.4, 0.1, 0.5, 0.3]\n", - "# iterate through all the columns/labels\n", + "# parameters for Beta distribution for each label\n", + "a0, b0 = [0.1, 0.6, 0.3, 0.4, 2], [0.4, 1.2, 0.8, 1, 5]\n", + "a1, b1 = [0.9, 0.8, 0.9, 1.2, 5], [0.4, 0.1, 0.5, 0.3, 2]\n", + "\n", + "# iterate through all the columns/labels and create a beta distribution for each label\n", "for i in range(y_pred.shape[1]):\n", " y = y_pred[:, i]\n", " y_t = y_true_one_hot[:, i]\n", " y[y_t==0] = np.random.beta(a0[i], b0[i], size=y[y_t==0].shape)\n", " y[y_t==1] = np.random.beta(a1[i], b1[i], size=y[y_t==1].shape)\n", - "y_pred" + "y_pred.shape" ] }, { @@ -79,12 +79,12 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 375, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAI4CAYAAAD6VFg7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAAAsTAAALEwEAmpwYAABILElEQVR4nO3deZhedX3//+d7skIWImEJJpRhcwG0SgMGqVbFWsQWaLUIbqDYuKBfW1qQ1rZS/X0VqUWxLjSKX0EriLiA+wIoCkQUpGxiCTCRRJJAICtJSDLv3x/3GbgZkpl7JnPOPXOf5+O65ppzn/O5z+f9uWdy5pWzRmYiSZKk+uhqdwGSJEmqlgFQkiSpZgyAkiRJNWMAlCRJqhkDoCRJUs0YACVJkmrGACjVQER8ISL+v2L6RRHx24r6zYg4oIJ+uou+xg/z/dutMyJeHxE/3FbbiLggIv5leFU/pZ+zI+JLAyy/IyJeMhJ9SZIBUBolIqInIjZExLqIWF6Etqkj3U9m/iwzn9lCPadExM9Huv+xJjP/OzNfsZ1lb8/MDwJExEsiYkmJdRycmT8ZqM2OBmFJ9WEAlEaXv8jMqcChwFzgn/s3qOMf9zqOeTTy5yB1DgOgNApl5lLge8Ah8Phhx9Mi4m7g7mLen0fELRGxKiKuj4jn9r0/Ip4fETdHxNqI+AowuWnZk/ZURcTeEfH1iHgwIlZGxCcj4tnABcARxR7JVUXbSRHx0Yj4XbGX8oKI2KlpXWdExAMR8fuIeMtAY4yIn0TEhyPixohYExFXRMSuxbK+PVmnRsTvgKsjoisi/jkiFkfEioi4OCJ26bfatxR9PxAR/9DU1+ERcUPxWT1QjHFiv/ceExH3RsRDEfHvEdFVvHe7e0L7Dq1HxJTi5/X04vNaFxFPj4hHI2JmU/tDi895wnY+lonFuNYWh3znNr23JyJe3jSeXxWf2/KIOK9odm3xfVVRwxGDfW4R8aZi2cqI+Jd+/ZwdEZdHxJciYg1wymCfZfFze2dE3F2M44MRsX/xO7omIi7bxmcvqWIGQGkUioi9gWOAXzfNPh54AXBQRDwf+DzwNmAm8F/AlUVAmwh8E/gisCvwVeDV2+lnHPBtYDHQDcwGLs3M3wBvB27IzKmZOaN4yznAM4DnAQcU7f+1WNfRwD8AfwocCLy8haG+CXgLsBewBfhEv+V/Ajwb+DPglOLrpcB+wFTgk/3av7To+xXAe/uCDLAV+DtgN+AI4Cjgnf3e+5c09roeChxX1NWSzFwPvBL4ffF5Tc3M3wM/AU5oavpGGp/v5u2s6ljgUmAGcOU2xtfnfOD8zJwO7A9cVsx/cfF9RlHDDQzwuUXEQcCngdfT+BnsQuNn2uw44PKipv+mtc/yz4A/AuYBZwILgDcAe9P4T81J2xmXpIoYAKXR5ZvF3rafAz8FPtS07MOZ+XBmbgDmA/+Vmb/IzK2ZeRGwicYf3HnABODjmbk5My8Hfrmd/g4Hng6ckZnrM3NjZm5vb1cU/f5dUcfaor4TiyYnAP8vM28vAtHZLYz3i03t/wU4oQilfc4u6tpAI6Scl5n3ZuY64B+BE+PJhyX/rWh/G/D/KIJGZt6UmQszc0tm9tAIzH/Sr5aPFOP6HfBxRiakXEQj+PSF7ZNoBPPt+Xlmfjcztxbt/nA77TYDB0TEbpm5LjMXDrDOgT631wDfysyfZ+ZjNMJ8/wfE35CZ38zM3szc0OJneW5mrsnMO4DbgR8W/a+msaf0+QPUK6kCns8hjS7HZ+aPt7Ps/qbpfYCTI+LdTfMm0ghzCSzNzOY/5Iu3s869gcWZuaWF2nYHdgZuamRBAALoC2xPB25qoc9mzWNaTCO47rad5U/vt87FNLZhew6wvucARMQzgPNo7OHbuXhfc63beu/TW6h/MFcAF0TEvsAzgdWZeeMA7Zc1TT8KTI6I8dv4+ZwKfAC4KyLuoxF8v72ddQ70uT2dpnFn5qMRsbLf+5s/l1Y/y+VN0xu28XrWdmqVVBH3AEpjR3Ogux/4v5k5o+lr58y8BHgAmB1NKQ34g+2s837gD2LbJ/f33xP0EI0/3gc39blLcdEKRb97t9Bns/7tNxf9bKuG39MIvs3tt/DkcNF/fb8vpj8D3AUcWBw2/Sca4XWgWn7P0PT/vMjMjTQOz76BxuHfgfb+td5R5t2ZeRKwB/AR4PLiPMSn1MDAn9sDwJy+BcX5nDN5sv7rbOWzlDTKGQClsemzwNsj4gXRMCUiXhUR04AbaPyB/z8RMSEi/orGod5tuZFGCDinWMfkiDiyWLYcmNN3wn5m9hb9fiwi9gCIiNkR8WdF+8toXCRwUETsDLy/hXG8oan9B4DLi8Of23IJ8HcRsW80bo/zIeAr/faO/UtE7BwRBwNvBr5SzJ8GrAHWRcSzgHdsY/1nRMTTivMv39P03lYtB2bGUy9MuZjGOXjHMkIBMCLeEBG7Fz+TVcXsXuDB4vt+Tc0H+twuB/4iIl5Y/JzPZvAw18pnKWmUMwBKY1Bm/gr4Gxon8z8CLKIRMijO5fqr4vXDwGuBr29nPVuBv6BxQcfvgCVFe4CrgTuAZRHRt1fuvUVfC4urQn9M49Ammfk9GufOXV20ubqFoXwR+AKNQ5+Tgf8zQNvPF+2vBe4DNgLv7tfmp0XfVwEfzcy+Gzj/A/A6YC2NELutcHcFjUOZtwDfAS5sof7HZeZdNMLWvcUVsk8v5l9HI5TdnJmtHBZvxdHAHRGxjsYFIScW5+c9Cvxf4LqihnkM8LkV5+i9m8aFJw8A64AVNM4n3Z5WPktJo1w8+TQhSapGRPwE+FJmfq7dtZQtIq4Gvjzax1rsIVxF4/DufW0uR1KJ3AMoSSWKiMNo3FpmVO4pi4i/KA6bTwE+CtwG9LS3KkllMwBKUkki4iIah8n/trhtzmh0HI0LRX5P4x6KJ6aHhqSO5yFgSZKkmnEPoCRJUs0YACVJkmrGAChJklQzBkBJkqSaMQBKkiTVjAFQkiSpZgyAkiRJNWMAlCRJqhkDoCRJUs0YADXmRMTZEfGldtchSa1yu6XRxgCoUSkiXhcRv4qIdRHxQER8LyL+uE21dEfENRHxaETcFREvb0cdkka3Ubbd+mBE3BYRWyLi7HbUoNHNAKhRJyJOBz4OfAjYE/gD4NM0HlrfDpcAvwZmAu8DLo+I3dtUi6RRaBRutxYBZwLfaVP/GuUMgBpVImIX4APAaZn59cxcn5mbM/NbmXnGdt7z1YhYFhGrI+LaiDi4adkxEXFnRKyNiKUR8Q/F/N0i4tsRsSoiHo6In0XEU/49RMQzgEOB92fmhsz8GnAb8Ooyxi9p7Blt2y2AzLwoM78HrC1hyOoABkCNNkcAk4FvDOE93wMOBPYAbgb+u2nZhcDbMnMacAhwdTH/74ElwO40/rf+T0BuY90HA/dmZvNG9H+K+ZIEo2+7JQ1qfLsLkPqZCTyUmVtafUNmfr5vujjX5ZGI2CUzVwObgYMi4n8y8xHgkaLpZmAvYJ/MXAT8bDurnwqs7jdvNTC71fokdbzRtt2SBuUeQI02K4HdIqKl/5xExLiIOCci7omINUBPsWi34vurgWOAxRHx04g4opj/7zTOkflhRNwbEWdtp4t1wPR+86bjYRVJTxht2y1pUAZAjTY3AJuA41ts/zoaJ1m/HNgF6C7mB0Bm/jIzj6NxmOWbwGXF/LWZ+feZuR9wLHB6RBy1jfXfAewXEdOa5v1hMV+SYPRtt6RBGQA1qhSHP/4V+FREHB8RO0fEhIh4ZUScu423TKOx4V0J7EzjCjwAImJiRLy+OKyyGVgD9BbL/jwiDoiIoHFId2vfsn71/C9wC/D+iJgcEX8JPBf42ggOW9IYNtq2W0XbCRExmcbf+fHF9mvcyI1aY50BUKNOZv4HcDrwz8CDwP3Au2j8T7i/i4HFwFLgTmBhv+VvBHqKwyxvB15fzD8Q+DGNQ7w3AJ/OzGu2U9KJwFwa5+GcA7wmMx8cztgkdaZRuN36LLABOInG7as2FOuVAIhMLyCSJEmqE/cASpIk1YwBUJIkqWYMgJIkSTVjAJQkSaoZA6AkSVLNjOlHwe222245e/ZsJkyY0O5SSrF58+aOHRt09vgc29h00003PZSZu5fZR6dvt6Czf0cc29jUyWMb7nZrTAfA7u5uLr/8crq7u9tdSil6eno6dmzQ2eNzbGNTRCwuu49O325BZ/+OOLaxqZPHNtztloeAJUmSasYAKEmSVDMGQEmSpJoZ0+cAStpxmzdvZsmSJWzcuLGl9lu2bOE3v/lNyVWVa/LkycyZM6djTwqXpMEYAKWaW7JkCdOmTaO7u5uIGLT9pk2bmDRpUgWVlSMzWblyJUuWLGHfffdtdzmS1BalHgKOiJ6IuC0ibomIXxXzdo2IH0XE3cX3pxXzIyI+ERGLIuLWiDi0zNokNWzcuJGZM2e2FP46QUQwc+bMlvd4SlInquIcwJdm5vMyc27x+izgqsw8ELiqeA3wSuDA4ms+8JkKapMEtQl/feo2Xknqrx0XgRwHXFRMXwQc3zT/4mxYCMyIiL3aUJ8kSVJHK/scwAR+GBEJ/FdmLgD2zMwHiuXLgD2L6dnA/U3vXVLMe4DtWLLkES644Bp6e6eMfOUDOPfcEyrtT5IkaSSVHQD/ODOXRsQewI8i4q7mhZmZRThsWUTMp3GImOnTZ7Jk1cOs27h25CoexLNmTaOnp6eSvpYtW1ZJP+3SyeMbS2PbsmULmzZtarn95s2bS6vl9ttv51WvehXf+c53OOSQQ0rrBxrjrurfcvN2a/bs2WPq92M4Onl8jm1s6uSxDVepATAzlxbfV0TEN4DDgeURsVdmPlAc4l1RNF8K7N309jnFvP7rXAAsAJg1a/9ct3ECzz72pWUO43E3XHIdvb1TKn2cTKc+uqZPJ49vrIztN7/5zZCv6i3rKuCPfvSjXH/99bzvfe/jkksuKaWPPuPHj6/sZ9S83Zo7d27OmjVrzPx+DFcnj8+xjU2dPLbhKC0ARsQUoCsz1xbTrwA+AFwJnAycU3y/onjLlcC7IuJS4AXA6qZDxZIqcOaZlw3aZuvWrYwbN25I6231tIm+0Lcj4e/73/8+73nPe9i6dStvfetbOeusswZ/kyTVTJl7APcEvlFcbTce+HJmfj8ifglcFhGnAouBvr8M3wWOARYBjwJvLrE2Sdtx430PD7g8M4d0Fe3h++66oyW1bOvWrZx22mn86Ec/Ys6cORx22GEce+yxHHTQQZXVIEljQWkBMDPvBf5wG/NXAkdtY34Cp5VVj6TWHXHSkdtd1rt1K10t7gG84ZLrWmp3++23M3/+fK6//noAbr75Zs444wyuuuqqlt7f58Ybb+SAAw5gv/32A+DEE0/kiiuuMABKUj8+CURS2x100EHce++9jx9ePv300znvvPOe1OZFL3oRa9c+9YKvj370o7z85S8HYOnSpey99xOnEs+ZM4df/OIX5RYvSWOQAVBS23V1dXHwwQdzxx13cPfdd7PPPvtw6KFPfhjQz372szZVJ0mdxwAoaVSYN28e1113HZ/+9Kf5/ve//5TlrewBnD17Nvff/8TtRJcsWcLs2bPLK1qSxigDoKRRYd68eZxyyimcdtpp2wxtrewBPOyww7j77ru57777mD17Npdeeilf/vKXyyhXksY0A6Ckpxjo4o2hXgXcqmc961lMmjSJ9773vcNex/jx4/nkJz/Jn/3Zn7F161be8pa3cPDBB49glZLUGQyAkp5ksNu2DOc+gK04//zz+fCHP8yUKTv2aMdjjjmGY445ZoSqkqTOZACU9LhWbti8adOmEX0SyD333MOrXvUqjjzySE4++eQRW68kafsMgJLaav/99+euu+4avKEkacR0tbsASZIkVcsAKEmSVDMGQEmSpJoxAEqSJNWMAVCSJKlmDICSJEk1YwCUJEmqGQOgJElSzRgAJY0at912G7NmzeK2225rdymS1NEMgJJGjQ996ENcf/31fOhDH2p3KZLU0QyAkkaNSy65hP32249LLrlk2Ot4y1vewh577MEhhxwygpVJUmfxWcCSHnfmmZcN2mbr1q2MGzduSOs999wThlvSkJ1yyim8613v4k1velNlfUrSWGMAlPRki68fcHFX9kIM4eDBPi8ctMntt9/O/Pnzuf76Rt8333wzZ5xxBldddVXr/RRe/OIX09PTM+T3SVKdGAAlPcW5b8jtLtu6tZdx46Kl9Zz5pdbaHXTQQdx7772P7108/fTTOe+8857U5kUvehFr1659yns/+tGP8vKXv7ylfiRJDQZASW3X1dXFwQcfzB133MHdd9/NPvvsw6GHHvqkNj/72c/aVJ0kdR4DoKRRYd68eVx33XV8+tOf5vvf//5TlrsHUJJGjgFQ0qgwb948TjnlFE477TRmz579lOXuAZSkkeNtYCSNCs961rOYNGkS733ve3doPSeddBJHHHEEv/3tb5kzZw4XXnjhCFUoSZ3DPYCSnmKgizcyu4ho7eKOoTj//PP58Ic/zJQpU3ZoPTtyD0FJqgsDoKQnG+S2Lb3DuA/gQO655x5e9apXceSRR3LyySeP2HolSdtnAJT0uFZu2Lxp0yYmTZo0Yn3uv//+3HXXXSO2PknS4DwHUJIkqWYMgJIkSTVjAJQkSaoZA6AkSVLNlB4AI2JcRPw6Ir5dvN43In4REYsi4isRMbGYP6l4vahY3l12bZIaMrf/7N9OVLfxSlJ/VewBfA/wm6bXHwE+lpkHAI8ApxbzTwUeKeZ/rGgnqWSTJ09m5cqVtQlFmcnKlSuZPHlyu0uRpLYp9TYwETEHeBXwf4HTo3H32JcBryuaXAScDXwGOK6YBrgc+GRERNblr5LUJnPmzGHJkiU8+OCDLbXfsmUL48eP7TtITZ48mTlz5rS7DElqm7K34h8HzgSmFa9nAqsyc0vxegnQ99DP2cD9AJm5JSJWF+0fKrlGqdYmTJjAvvvu23L7np4euru7yytIklS60gJgRPw5sCIzb4qIl4zgeucD8wGmT5/J1Mmb6VrX2p6LHTVjymN0da2np6enkv6WLVtWST/t0snjc2xq1rzdmj17dsd/hp08Psc2NnXy2IarzD2ARwLHRsQxwGRgOnA+MCMixhd7AecAS4v2S4G9gSURMR7YBVjZf6WZuQBYADBr1v65buMEeqfuXuIwnrBq/UR6e6dUuvej0/e0dPL4HJv6NG+35s6dm7Nmzer4z7CTx+fYxqZOHttwlHYRSGb+Y2bOycxu4ETg6sx8PXAN8Jqi2cnAFcX0lcVriuVXe/6fJEnSyGvHfQDfS+OCkEU0zvG7sJh/ITCzmH86cFYbapMkSep4lVzKl5k/AX5STN8LHL6NNhuBv66iHkmSpDob2/dykCRJGiXOPPOydpfQMgOgJEnSSFl8fbsraIkBUJIkaQSd+4ZqrmE980sx7Pe24yIQSZIktZEBUJIkqWYMgJIkSTVjAJQkSaoZA6AkSVLNGAAlSZJqxgAoSZJUMwZASZKkmjEASpIk1YwBUJIkqWYMgJIkSTVjAJQkSaoZA6AkSVLNGAAlSZJqxgAoSZJUMwZASZKkmjEASpIk1YwBUJIkqWYMgJIkSTVjAJQkSaoZA6AkSVLNGAAlSZJqxgAoSZJUMwZASZKkmjEASpIk1YwBUJIkqWYMgJIkSTVjAJQkSaqZ8QMtjIi/amEdGzPzuyNUjyRJkko2YAAEPgtcAcQAbV4MGAAlSZLGiMEC4Pcy8y0DNYiIL21n/mTgWmBS0c/lmfn+iNgXuBSYCdwEvDEzH4uIScDFwB8BK4HXZmbPUAYjSZKkwQ14DmBmvmGwFQzQZhPwssz8Q+B5wNERMQ/4CPCxzDwAeAQ4tWh/KvBIMf9jRTtJkiSNsCFfBBIRC1pplw3ripcTiq8EXgZcXsy/CDi+mD6ueE2x/KiIGOjQsyRJkoZhOFcBz221YUSMi4hbgBXAj4B7gFWZuaVosgSYXUzPBu4HKJavpnGYWJIkSSNosHMAt2VFqw0zcyvwvIiYAXwDeNYw+nuSiJgPzAeYPn0mUydvpmvdgzu62pbMmPIYXV3r6enpqaS/ZcuWVdJPu3Ty+BybmjVvt2bPnt3xn2Enj8+xjU1Vja2raz3sPJ6etVlNfzsP/0DpkANgZh49jPesiohrgCOAGRExvtjLNwdYWjRbCuwNLImI8cAuNC4G6b+uBcACgFmz9s91GyfQO3X3oZY0LKvWT6S3dwrd3d2V9AdU2lc7dPL4HJv6NG+35s6dm7Nmzer4z7CTx+fYxqYqxtbbOwUe3UL3tGoCYO+jww+AAx4CjoizB1vB9tpExO7Fnj8iYifgT4HfANcArymanUzjNjMAVxavKZZfnZnVfIKSJEk1MtgewLdGxJoBlgdwInD2NpbtBVwUEeNoBM3LMvPbEXEncGlE/H/Ar4ELi/YXAl+MiEXAw8V6JUmSNMJauRH0tBbaPEVm3go8fxvz7wUO38b8jcBfD9KXJEmSdtCAATAz/62qQiRJklSN4dwGRpIkSWOYAVCSJKlmWgqAEXFkK/MkSZI0+rW6B/A/W5wnSZKkUW7Ai0Ai4gjghcDuEXF606LpwLgyC5MkSVI5BrsNzERgatGu+XYwa3jiZs6SJEkaQwa7DcxPgZ9GxBcyc3FFNUmSJKlErT4LeFJELAC6m9+TmS8royhJkiSVp9UA+FXgAuBzwNbyypEkSVLZWg2AWzLzM6VWIkmSpEq0ehuYb0XEOyNir4jYte+r1MokSZJUilb3AJ5cfD+jaV4C+41sOZIkSSpbSwEwM/ctuxBJkiRVo6UAGBFv2tb8zLx4ZMuRJElS2Vo9BHxY0/Rk4CjgZsAAKEmSNMa0egj43c2vI2IGcGkZBUmSJKlcrV4F3N96wPMCJUmSxqBWzwH8Fo2rfgHGAc8GLiurKEmSJJWn1XMAP9o0vQVYnJlLSqhHkiRJJWvpEHBm/hS4C5gGPA14rMyiJEmSVJ6WAmBEnADcCPw1cALwi4h4TZmFSZIkqRytHgJ+H3BYZq4AiIjdgR8Dl5dVmCRJksrR6lXAXX3hr7ByCO+VJEnSKNLqHsDvR8QPgEuK168FvldOSZIkSSpTqzeCPiMi/gr442LWgsz8RnllSZIkqSwDBsCIOADYMzOvy8yvA18v5v9xROyfmfdUUaQkSZJGzmDn8X0cWLON+auLZZIkSRpjBguAe2bmbf1nFvO6S6lIkiRJpRosAM4YYNlOI1iHJEmSKjJYAPxVRPxN/5kR8VbgpnJKkiRJUpkGuwr4b4FvRMTreSLwzQUmAn9ZYl2SJEkqyYABMDOXAy+MiJcChxSzv5OZV5demSRJkkrR6n0ArwGuGcqKI2Jv4GJgTyBp3Dvw/IjYFfgKjYtIeoATMvORiAjgfOAY4FHglMy8eSh9SpIkaXBlPs5tC/D3mXkQMA84LSIOAs4CrsrMA4GritcArwQOLL7mA58psTZJkqTaKi0AZuYDfXvwMnMt8BtgNnAccFHR7CLg+GL6OODibFgIzIiIvcqqT5Ikqa5afRbwDomIbuD5wC9o3FvwgWLRMhqHiKERDu9vetuSYt4DTfOIiPk09hAyffpMpk7eTNe6B8srvsmMKY/R1bWenp6eSvpbtmxZJf20SyePz7GpWfN2a/bs2R3/GXby+Bzb2FTV2Lq61sPO4+lZm9X0t3MM+72lB8CImAp8DfjbzFzTONWvITMzIob0KWXmAmABwKxZ++e6jRPonbr7SJa8XavWT6S3dwrd3d2V9AdU2lc7dPL4HJv6NG+35s6dm7Nmzer4z7CTx+fYxqYqxtbbOwUe3UL3tGoCYO+jww+AZZ4DSERMoBH+/rt4ljDA8r5Du8X3FcX8pcDeTW+fU8yTJEnSCCotABZX9V4I/CYzz2tadCVwcjF9MnBF0/w3RcM8YHXToWJJkiSNkDIPAR8JvBG4LSJuKeb9E3AOcFlEnAosBk4oln2Xxi1gFtG4DcybS6xNkiSptkoLgJn5c2B7B6eP2kb7BE4rqx5JkiQ1lHoOoCRJkkYfA6AkSVLNGAAlSZJqxgAoSZJUMwZASZKkmjEASpIk1YwBUJIkqWZKfxawJOkJS5Y8wgUXXNN4ZmiFzj33hMEbSaoNA6AkVeyuZWtZtX5TZf0dvu+ulfUlaWwwAEpSGxxx0pGV9HPDJddV0o+kscVzACVJkmrGAChJklQzBkBJkqSaMQBKkiTVjAFQkiSpZgyAkiRJNWMAlCRJqhkDoCRJUs0YACVJkmrGAChJklQzBkBJkqSaMQBKkiTVjAFQkiSpZgyAkiRJNWMAlCRJqhkDoCRJUs0YACVJkmrGAChJklQzBkBJkqSaMQBKkiTVjAFQkiSpZgyAkiRJNVNaAIyIz0fEioi4vWnerhHxo4i4u/j+tGJ+RMQnImJRRNwaEYeWVZckSVLdlbkH8AvA0f3mnQVclZkHAlcVrwFeCRxYfM0HPlNiXZIkSbVWWgDMzGuBh/vNPg64qJi+CDi+af7F2bAQmBERe5VVmyRJUp2Nr7i/PTPzgWJ6GbBnMT0buL+p3ZJi3gNIqqUzz7ys3SVIUseqOgA+LjMzInKo74uI+TQOEzN9+kymTt5M17oHR7y+bZkx5TG6utbT09NTSX/Lli2rpJ926eTxObYd19W1HpbfUUlfZavTdgv8/R+rHNuO6+paDzuPp2ftkOPN8PrbOYb93qoD4PKI2CszHygO8a4o5i8F9m5qN6eY9xSZuQBYADBr1v65buMEeqfuXmbNj1u1fiK9vVPo7u6upD+g0r7aoZPH59h2TG/vFHh0C+e+oZoN6ZlfGv6GdDB1226Bv/9jlWPbMX3bre5p1Wy3eh8d/nar6tvAXAmcXEyfDFzRNP9NxdXA84DVTYeKJUmSNIJK2wMYEZcALwF2i4glwPuBc4DLIuJUYDFwQtH8u8AxwCLgUeDNZdUlSZJUd6UFwMw8aTuLjtpG2wROK6sWSZIkPcEngUiSJNWMAVCSJKlmDICSJEk1YwCUJEmqGQOgJElSzRgAJUmSasYAKEmSVDMGQEmSpJoxAEqSJNVMaU8CkSS13/JFy1i4/BHOPPOyyvp85zsPr6wvScNjAJSkDvdQjOPG+x6upK/D9921kn4k7RgDoKRRaeHCe9i3aw0LFz5YSX/Ll+9eST/tcsRJR5bexw2XXFd6H5JGhgFQ0qi1cfNWVqzdWFlfklQXBkBJo9qeB8yqpqObqummk/Wdb9jVtZ7e3imV9HnuuSdU0o/UaQyAkqQR81CM465la1m1flPpfXm+oTR8BkBJ0og6+GWH0Du13HMqPd9Q2jHeB1CSJKlmDICSJEk1YwCUJEmqGc8BlCSNOe14wolXHKuTGAAlSWOSTziRhs8AKKllZ555WWX3eFuxYg27T9+CZ6poID7hRBoeA6CkoVl+Bzy6pfRupsVjpfchSXVlAJRGWJV7yfpUfW7SuW/I0vs47MzSu5Ba0ny+Ydn/thcuvAeAefP2L62PbfH8xvoxAEplqGgv2cK7gal7VnYi/MKF9/DsXdcDEyvpTxot+s43nDHlsVKfcvLg2k3E9J0rO7dx+aJl7D5tUseG23PPPaHS/5QvXHgP+3atAaaV3teOMgAOQdVXnXV1reecc95cSV8aeVXsJXvx+4N9u+6GxctL7wuAdYDnwqumjjjpSLrWPVjqU06++cGvPd5XFb75wa91ZLhtDraN/7j+jo2ryn084Z57Tm9sI6eX2s2IMQAOUZVXnc3bf1Il/WjsqyJsAhx25mYee2wLCxcuKb2vrVtnk73VjEuqu04Lt83B9sG1m9h/ei+vfu79pfS1Yc0Gdpowjj32mM41t+7NxomPsXDhvaX01WfevP12eB0GwGHwqrOxpcr7hEHnHybd2pusWLux9H7MflLnKvtv3IY1G2DDZtjjid1xex4wq5S+em6+j40EK9ZuZGtvsqXkbeQe0yaPyHrGfAB8ZOnDlYWlx3+hOlDVIQmqO8S9cOE9PLi23F3/zTas2cD+U7fQqQEQytuQSqqP7vW3lLbumTPXQlcX09av5NEtE0rrp9meB8xi/DXjGT9hfGnbyOWLlo3YusZ8AIRyf4mazZy5lpvWdFfS1/JFy7hz04RKT+5/KBq7sKuwfNEyDty7mvGtWLGGg2csYdqu1VyVe+ujUUk/kjTWvePo9aWst+fmxcSE8ezznL1592dnlNLHWNcRARDK+yVqdu6XSu/iSVas2sDdP7qzkr7WPtT431JVAXDDmg2sWLWFNRWcT7lxcy9Qze8IwDs+NbWSfiRJGq6OCYBVuOeRaWx57LFKDjlvWLOBqROD5+58PzvtslPp/d2yDvbbZQ3T168tvS+AVV2wddOMSvra8tgWcstWYFwl/fX2Jlu39pZ+EjDAhg2NE44laUfdcfXtrFpf3qkrfadR3XDJdSxftIw9d95QWl8anAFwiA7ffWklIWnmzLWsnjATspo9V2+7u3F4tKq9ZG+7ewrPmvEg49avKr2vVSNzvuyQJFRyocTmLb1s2VJN2ITiytz06oyRUtV/Jvv+6EJ1txfpVFWHJCj3nNvm/nLVw8x69L7Sdjq047w8bd+oCoARcTRwPo1dNZ/LzHPaXNI2VRGSem5ezGcXzSy9n3arMtxWraoLJaoKm+CVuWUo+xzmvj+699+1hrXjZ5YaOvvCxM+/eC0rHqouuJQdlNoZkvadvoad1o/cif8D9bds686A5+XVxagJgBExDvgU8KfAEuCXEXFlZlZzEpw0hnlV7thW5n+E+v7ofnThDJ67832VhIn1W3fnuTuvrCy4lB2U2h2Sqvj92Oc5e/P+b+5cWj8afUZNAAQOBxZl5r0AEXEpcBxgAJSkEVJFmPj8PbtX1lcVQcmQpE4Uo+V8noh4DXB0Zr61eP1G4AWZ+a7tvWfWrP3zmc95I7Meva+SGn+7Yif222UNEyaVf+7Cls1bWD1xJrs8tpLxE8rP6VWOra+/5+y3mcfWlf+8XMc2sv116tgALrv+4psyc26ZfcyatX/OO/o9rFo/keWLlvHcncvdfm3ZvAW6urjvkansu8uaUrcnfX2tmbAr0zc9VElf48d1cfdDO5c6tua+Hu6aUerYqhxX//46aWz9+zpk381sWlvOfXyr/plNnjCu8di5wr9fdv6wtltjLgBGxHxgfvHymcBK4KEqa63QbnTu2KCzx+fYxqZnZuaIP8W9Ztst6OzfEcc2NnXy2Ia13RpNh4CXAns3vZ5TzHuSzFwALOh7HRG/Kvt/7O3SyWODzh6fYxubIuJXZay3Ttst6OzxObaxqdPHNpz3dY10ITvgl8CBEbFvREwETgSubHNNkiRJHWfU7AHMzC0R8S7gBzRuA/P5zLyjzWVJkiR1nFETAAEy87vAd4f4tgWDNxmzOnls0Nnjc2xjU1Vj6+TPEDp7fI5tbHJs/Yyai0AkSZJUjdF0DqAkSZIqMGYCYEQcHRG/jYhFEXHWNpZPioivFMt/ERHdbShzWFoY2+kRcWdE3BoRV0XEPu2oczgGG1tTu1dHREbEmLlKq5WxRcQJxc/ujoj4ctU1DlcLv5N/EBHXRMSvi9/LY9pR53BExOcjYkVE3L6d5RERnyjGfmtEHLoDfbndcrs1qrjdcrv1uMwc9V80Lgq5B9gPmAj8D3BQvzbvBC4opk8EvtLuukdwbC8Fdi6m39FJYyvaTQOuBRYCc9td9wj+3A4Efg08rXi9R7vrHsGxLQDeUUwfBPS0u+4hjO/FwKHA7dtZfgzwPSCAecAvSvwc3W6Nsi+3W263RuNXGdutsbIH8PHHxGXmY0DfY+KaHQdcVExfDhwVEVFhjcM16Ngy85rMfLR4uZDGPRLHglZ+bgAfBD4CbKyyuB3Uytj+BvhUZj4CkJkrKq5xuFoZWwJ9t6LfBfh9hfXtkMy8Fnh4gCbHARdnw0JgRkTsNYyu3G653Rpt3G653XrcWAmAs4H7m14vKeZts01mbgFWAzMrqW7HtDK2ZqfSSPljwaBjK3ZT752Z36mysBHQys/tGcAzIuK6iFgYEUdXVt2OaWVsZwNviIglNK7cf3c1pVViqP8md2Q9brdGH7dbbrfGoiFvt0bVbWA0sIh4AzAX+JN21zISIqILOA84pc2llGU8jcMpL6Gx9+PaiHhOZq5qZ1Ej5CTgC5n5HxFxBPDFiDgkM3vbXZhGF7dbY47brZoYK3sAW3lM3ONtImI8jd27Kyupbse09Ai8iHg58D7g2MzcVFFtO2qwsU0DDgF+EhE9NM5buHKMnFDdys9tCXBlZm7OzPuA/6WxYR3tWhnbqcBlAJl5AzCZxrM2O0FL/yZHaD1ut0Yft1tut8aioW+32n1iY4snP44H7gX25YmTOw/u1+Y0nnwy9WXtrnsEx/Z8Gie3Htjuekd6bP3a/4SxczJ1Kz+3o4GLiundaOyen9nu2kdobN8DTimmn03jXJpod+1DGGM32z+Z+lU8+WTqG0v8HN1ujbIvt1tut0br10hvt9o+oCEM/Bga/xO5B3hfMe8DNP5nCY0k/1VgEXAjsF+7ax7Bsf0YWA7cUnxd2e6aR2ps/dqOmQ1piz+3oHGo6E7gNuDEdtc8gmM7CLiu2MjeAryi3TUPYWyXAA8Am2ns7TgVeDvw9qaf26eKsd+2I7+Tbrfcbo22L7dbbrf6vnwSiCRJUs2MlXMAJUmSNEIMgJIkSTVjAJQkSaoZA6AkSVLNGAAlSZJqxgAoSZJUMwZASZKkmjEASpIk1YwBUJIkqWYMgJIkSTVjAJQkSaoZA6AkSVLNGAA15kTE2RHxpXbXIUnSWGUA1KgUEa+LiF9FxLqIeCAivhcRf9yGOvaIiEsi4vcRsToirouIF1RdhyRJI8kAqFEnIk4HPg58CNgT+APg08BxbShnKvBL4I+AXYGLgO9ExNQ21CJJ0ogwAGpUiYhdgA8Ap2Xm1zNzfWZuzsxvZeYZ23nPVyNiWbGH7tqIOLhp2TERcWdErI2IpRHxD8X83SLi2xGxKiIejoifRcRT/j1k5r2ZeV5mPpCZWzNzATAReGY5n4AkSeUzAGq0OQKYDHxjCO/5HnAgsAdwM/DfTcsuBN6WmdOAQ4Cri/l/DywBdqexl/GfgByso4h4Ho0AuGgI9UmSNKqMb3cBUj8zgYcyc0urb8jMz/dNR8TZwCMRsUtmrgY2AwdFxP9k5iPAI0XTzcBewD6ZuQj42WD9RMR04IvAvxXrliRpTHIPoEablcBuEdHSf04iYlxEnBMR90TEGqCnWLRb8f3VwDHA4oj4aUQcUcz/dxp78X4YEfdGxFmD9LMT8C1gYWZ+eGhDkiRpdDEAarS5AdgEHN9i+9fRuDjk5cAuQHcxPwAy85eZeRyNw8PfBC4r5q/NzL/PzP2AY4HTI+KobXUQEZOK9y4B3jbUAUmSNNoYADWqFIdW/xX4VEQcHxE7R8SEiHhlRJy7jbdMoxEYVwI707hyGICImBgRry8OB28G1gC9xbI/j4gDIiKA1cDWvmXNImICcDmwATg5M5/SRpKkscYAqFEnM/8DOB34Z+BB4H7gXTT2wvV3MbAYWArcCSzst/yNQE9xePjtwOuL+QcCPwbW0djr+OnMvGYb638h8OfAK4BVxX0J10XEi4Y9QEmS2iwyB73wUZIkSR3EPYCSJEk1YwCUJEmqGQOgJElSzRgAJUmSasYAKEmSVDNj+lFwu+22W86ePZsJEya0u5RSbN68uWPHBp09Psc2Nt10000PZebu7a5Dkso2pgNgd3c3l19+Od3d3e0upRQ9PT0dOzbo7PE5trEpIha3uwZJqoKHgCVJkmrGAChJklQzBkBJkqSaMQBKkiTVjAFQkiSpZkoNgBHRExG3RcQtEfGrYt6uEfGjiLi7+P60Yn5ExCciYlFE3BoRh5ZZmyRJUl1VsQfwpZn5vMycW7w+C7gqMw8EripeA7wSOLD4mg98poLaJEmSaqcdh4CPAy4qpi8Cjm+af3E2LARmRMRebahPkiSpo5UdABP4YUTcFBHzi3l7ZuYDxfQyYM9iejZwf9N7lxTzJEmSNILKfhLIH2fm0ojYA/hRRNzVvDAzMyJyKCssguR8gNmzZ7Ns2bKRq3aU6eSxQWePz7FJkkazUgNgZi4tvq+IiG8AhwPLI2KvzHygOMS7omi+FNi76e1zinn917kAWAAwd+7cnDVrVsc+lgro6LFBZ4/PsUmSRqvSDgFHxJSImNY3DbwCuB24Eji5aHYycEUxfSXwpuJq4HnA6qZDxZIkSRohZe4B3BP4RkT09fPlzPx+RPwSuCwiTgUWAycU7b8LHAMsAh4F3lxibZIkSbVVWgDMzHuBP9zG/JXAUduYn8BpZdUjSZKkBp8EIkmSVDMGQEmSpJoxAEqSJNWMAVCSJKlmDICSJEk1YwCUJEmqGQOgJElSzRgAJUmSasYAKEmSVDMGQEmSpJoxAEqSJNWMAVCSJKlmDICSJEk1YwCUJEmqGQOgJElSzRgAJUmSasYAKEmSVDMGQEmSpJoxAEqSJNWMAVCSJKlmDICSJEk1YwCUJEmqGQOgJElSzRgAJUmSasYAKEmSVDMGQEmSpJoxAEqSJNWMAVCSJKlmDICSJEk1YwCUJEmqGQOgJElSzRgAJUmSasYAKEmSVDOlB8CIGBcRv46Ibxev942IX0TEooj4SkRMLOZPKl4vKpZ3l12bJElSHVWxB/A9wG+aXn8E+FhmHgA8ApxazD8VeKSY/7GinSRJkkZYqQEwIuYArwI+V7wO4GXA5UWTi4Dji+njitcUy48q2kuSJGkElb0H8OPAmUBv8XomsCoztxSvlwCzi+nZwP0AxfLVRXtJkiSNoPFlrTgi/hxYkZk3RcRLRnC984H5ALNnz2bZsmUjtepRp5PHBp09PscmSRrNSguAwJHAsRFxDDAZmA6cD8yIiPHFXr45wNKi/VJgb2BJRIwHdgFW9l9pZi4AFgDMnTs3Z82aRXd3d4nDaK9OHht09vgcmyRptCrtEHBm/mNmzsnMbuBE4OrMfD1wDfCaotnJwBXF9JXFa4rlV2dmllWfJElSXbXjPoDvBU6PiEU0zvG7sJh/ITCzmH86cFYbapMkSep4ZR4Cflxm/gT4STF9L3D4NtpsBP66inokSZLqzCeBSJIk1UwlewDLsmTJI1xwwTX09k6ptN9zzz2h0v4kSZJG0pgOgAB3LVvLqvWbKuvv8H13rawvSZKkMoz5AAhwxElHVtLPDZdcV0k/kiRJZfIcQEmSpJoxAEqSJNWMAVCSJKlmDICSJEk1YwCUJEmqGQOgJElSzRgAJUmSasYAKEmSVDMGQEmSpJoxAEqSJNWMAVCSJKlmDICSJEk1YwCUJEmqGQOgJElSzRgAJUmSasYAKEmSVDMGQEmSpJoxAEqSJNWMAVCSJKlmDICSJEk1YwCUJEmqGQOgJElSzRgAJUmSasYAKEmSVDMGQEmSpJoxAEqSJNWMAVCSJKlmxg+0MCL+qoV1bMzM745QPZIkSSrZgAEQ+CxwBRADtHkx8JQAGBGTgWuBSUU/l2fm+yNiX+BSYCZwE/DGzHwsIiYBFwN/BKwEXpuZPUMbjiRJkgYzWAD8Xma+ZaAGEfGl7SzaBLwsM9dFxATg5xHxPeB04GOZeWlEXACcCnym+P5IZh4QEScCHwFeO5TBSJIkaXADngOYmW8YbAXba5MN64qXE4qvBF4GXF7Mvwg4vpg+rnhNsfyoiBhoz6MkSZKGYcgXgUTEgiG0HRcRtwArgB8B9wCrMnNL0WQJMLuYng3cD1AsX03jMLEkSZJG0GCHgLdlbqsNM3Mr8LyImAF8A3jWMPp7koiYD8wHmD59JlMnb6Zr3YM7utqWzJjyGF1d6+np6amkv2XLllXST7t08vgcmyRpNBtOAFwx1Ddk5qqIuAY4ApgREeOLvXxzgKVFs6XA3sCSiBgP7ELjYpD+61oALACYNWv/XLdxAr1Tdx/GMIZu1fqJ9PZOobu7u5L+gEr7aodOHp9jkySNVkM+BJyZR7fSLiJ2L/b8ERE7AX8K/Aa4BnhN0exkGlcZA1xZvKZYfnVm5lDrkyRJ0sAGDIARcfZgKxigzV7ANRFxK/BL4EeZ+W3gvcDpEbGIxjl+FxbtLwRmFvNPB85qZQCSJEkamsEOAb81ItYMsDyAE4Gz+y/IzFuB529j/r3A4duYvxH460HqkSRJ0g5q5UbQ01poI0mSpDFiwACYmf9WVSGSJEmqxpAvApEkSdLYZgCUJEmqmZYCYEQc2co8SZIkjX6t7gH8zxbnSZIkaZQb8CKQiDgCeCGwe0Sc3rRoOjCuzMIkSZJUjsFuAzMRmFq0a74dzBqeeJqHJEmSxpDBbgPzU+CnEfGFzFxcUU2SJEkq0WB7APtMiogFQHfzezLzZWUUJUmSpPK0GgC/ClwAfA7YWl45kiRJKlurAXBLZn6m1EokSZJUiVZvA/OtiHhnROwVEbv2fZVamSRJkkrR6h7Ak4vvZzTNS2C/kS1HkiRJZWspAGbmvmUXIkmSpGq0FAAj4k3bmp+ZF49sOZIkSSpbq4eAD2uangwcBdwMGAAlSZLGmFYPAb+7+XVEzAAuLaMgSZIklavVq4D7Ww94XqAkSdIY1Oo5gN+icdUvwDjg2cBlZRUlSZKk8rR6DuBHm6a3AIszc0kJ9UiSJKlkLR0CzsyfAncB04CnAY+VWZQkSZLK01IAjIgTgBuBvwZOAH4REa8pszBJkiSVo9VDwO8DDsvMFQARsTvwY+DysgqTJElSOVq9CrirL/wVVg7hvZIkSRpFWt0D+P2I+AFwSfH6tcD3yilJkiRJZWr1RtBnRMRfAX9czFqQmd8oryxJkiSVZcAAGBEHAHtm5nWZ+XXg68X8P46I/TPzniqKlCRJ0sgZ7Dy+jwNrtjF/dbFMkiRJY8xgAXDPzLyt/8xiXncpFUmSJKlUgwXAGQMs22kE65AkSVJFBguAv4qIv+k/MyLeCtxUTkmSJEkq02BXAf8t8I2IeD1PBL65wETgL0usS5IkSSUZcA9gZi7PzBcC/wb0FF//lplHZOaygd4bEXtHxDURcWdE3BER7ynm7xoRP4qIu4vvTyvmR0R8IiIWRcStEXHoSAxQkiRJT9bqfQCvAa4Z4rq3AH+fmTdHxDTgpoj4EXAKcFVmnhMRZwFnAe8FXgkcWHy9APhM8V2SJEkjqLTHuWXmA5l5czG9FvgNMBs4DrioaHYRcHwxfRxwcTYsBGZExF5l1SdJklRXlTzPNyK6gecDv6Bxa5kHikXLgD2L6dnA/U1vW1LMkyRJ0ghq9VnAwxYRU4GvAX+bmWsi4vFlmZkRkUNc33xgPsD06TOZOnkzXeseHMmSt2vGlMfo6lpPT09PJf0tWzbgaZZjXiePz7FJkkazUgNgREygEf7+u3iUHMDyiNgrMx8oDvGuKOYvBfZuevucYt6TZOYCYAHArFn757qNE+iduntpY2i2av1Eenun0N3dXUl/QKV9tUMnj8+xSZJGq9IOAUdjV9+FwG8y87ymRVcCJxfTJwNXNM1/U3E18DxgddOhYkmSJI2QMvcAHgm8EbgtIm4p5v0TcA5wWUScCiwGTiiWfRc4BlgEPAq8ucTaJEmSaqu0AJiZPwdiO4uP2kb7BE4rqx5JkiQ1VHIVsCRJkkYPA6AkSVLNGAAlSZJqxgAoSZJUMwZASZKkmjEASpIk1YwBUJIkqWYMgJIkSTVjAJQkSaoZA6AkSVLNGAAlSZJqxgAoSZJUMwZASZKkmjEASpIk1YwBUJIkqWYMgJIkSTVjAJQkSaoZA6AkSVLNGAAlSZJqxgAoSZJUMwZASZKkmjEASpIk1YwBUJIkqWYMgJIkSTVjAJQkSaoZA6AkSVLNGAAlSZJqxgAoSZJUMwZASZKkmjEASpIk1YwBUJIkqWYMgJIkSTVjAJQkSaqZ0gJgRHw+IlZExO1N83aNiB9FxN3F96cV8yMiPhERiyLi1og4tKy6JEmS6q7MPYBfAI7uN+8s4KrMPBC4qngN8ErgwOJrPvCZEuuSJEmqtdICYGZeCzzcb/ZxwEXF9EXA8U3zL86GhcCMiNirrNokSZLqrOpzAPfMzAeK6WXAnsX0bOD+pnZLinmSJEkaYePb1XFmZkTkUN8XEfNpHCZm+vSZTJ28ma51D454fdsyY8pjdHWtp6enp5L+li1bVkk/7dLJ43NskqTRrOoAuDwi9srMB4pDvCuK+UuBvZvazSnmPUVmLgAWAMyatX+u2ziB3qm7l1nz41atn0hv7xS6u7sr6Q+otK926OTxOTZJ0mhV9SHgK4GTi+mTgSua5r+puBp4HrC66VCxJEmSRlBpewAj4hLgJcBuEbEEeD9wDnBZRJwKLAZOKJp/FzgGWAQ8Cry5rLokSZLqrrQAmJknbWfRUdtom8BpZdUyUpYvWsbC5Y9w5pmXVdJfV9d6zjnHLCxJkkZW2y4CGaseinHceF//u9uUY97+kyrpR5Ik1YsBcBiOOOnI0vu44ZLrSu9DkiTVk88CliRJqhkDoCRJUs0YACVJkmrGAChJklQzBkBJkqSaMQBKkiTVjAFQkiSpZgyAkiRJNWMAlCRJqhkDoCRJUs34KLhRavmiZdy5aQJnnnlZpf2ee+4JlfYnbU/Vv/uSVCcGwFFsdXRx430PV9bf4fvuWllfUksWX9/uCiSpIxkAR7kjTjqykn5uuOS6SvqRhurcN2Ql/Zz5paikH0kaDTwHUJIkqWYMgJIkSTVjAJQkSaoZzwEU0LjqeOHyRyq98vKd7zy8sr46VTuulPXnJkljnwFQj3soxlV21bFXHI8crxSXJA2VAVBPUsVVx1VfcVyHvWSd+HNbuPAe9u1aw8KFD1bS3/Llu1fSjySNBgZAVa7vcHNX13p6e6eU3t/ChffwUIxjjz2ml97X8kXL2H3apMrH1qk2bt7KirUb212GJHUcA6Da4qEYx13L1rJq/abS+3pw7SZi+s6V7CX75ge/1paxVWH5omVcedti7rrrblatKv/6scWLV7Lb7pvZ84BZpfe1fNGy0vuQpNHEAKi2Ofhlh9A7tfzDbt/84NdK76O/Th3bRrqY2fs7dtpa/l65NRN3Kr0PSaorA6CkIZk0ZRJvf8Wjpffztv8svQtJqi3vAyhJklQzBkBJkqSa8RDwED26fHUlt8PYsGYDmx7Zwg2XXFfJxQuSJKk+DIDD0L3+ltL7mDlzLVOmTuF3zCm9L0mSVC8GwGF6x9HrS11/z82L+c6Kg0rto06q3HPLhs3ccfXtPPvYl5benyRJw2EA1OOqDElbHl7Pz794LTGj/Hu8bVizgS1betnz9zew0y7l3lpk5sy13LNqGo8snVDJZ7n2obXw8Prqfm5betlUwf0NJUnlMgCOYr9fM5nlDyyr9I97lSFpv0lryPXl34C3rz+oZs/th68/hP0mPVDJ2FZNhv12WcP09WtL76v5c5QkjW0dEQCrekZpX0jasHpDJf0BPHfn+9ipQ0NSFX31769KVYztbXdPqayvdn2OkqSRN6oCYEQcDZwPjAM+l5nntPreqi7MaMceEP+4S5KkkTRqAmBEjAM+BfwpsAT4ZURcmZl3trqOKvdcSZIkjVWj6UbQhwOLMvPezHwMuBQ4rs01SZIkdZxRswcQmA3c3/R6CfCCVt64fNEy9tx5A+d9pdw8u2XzPsX3LZz3lXI/ui2b94GJ1fT1eH9UODZg65atpf/MmvvrxLH1qfJz7MSxwdOZPKGCbiRplIjMbHcNAETEa4CjM/Otxes3Ai/IzHf1azcfmF+8fCawEnioylortBudOzbo7PE5trHpmZnppc6SOt5o2gO4FNi76fWcYt6TZOYCYEHf64j4VWbOLb+86nXy2KCzx+fYxqaI+FW7a5CkKoymcwB/CRwYEftGxETgRODKNtckSZLUcUbNHsDM3BIR7wJ+QOM2MJ/PzDvaXJYkSVLHGTUBECAzvwt8d4hvWzB4kzGrk8cGnT0+xzY2dfLYJOlxo+YiEEmSJFVjNJ0DKEmSpAqMmQAYEUdHxG8jYlFEnLWN5ZMi4ivF8l9ERHcbyhyWFsZ2ekTcGRG3RsRVEbFPO+ocjsHG1tTu1RGRETFmri5tZWwRcULxs7sjIr5cdY3D1cLv5B9ExDUR8evi9/KYdtQ5HBHx+YhYERG3b2d5RMQnirHfGhGHVl2jJJVtTATApsfEvRI4CDgpIg7q1+xU4JHMPAD4GPCRaqscnhbH9mtgbmY+F7gcOLfaKoenxbEREdOA9wC/qLbC4WtlbBFxIPCPwJGZeTDwt1XXORwt/tz+GbgsM59P44r9T1db5Q75AnD0AMtfCRxYfM0HPlNBTZJUqTERAGntMXHHARcV05cDR0VEVFjjcA06tsy8JjMfLV4upHGPxLGg1cf7fZBGYN9YZXE7qJWx/Q3wqcx8BCAzV1Rc43C1MrYEphfTuwC/r7C+HZKZ1wIPD9DkOODibFgIzIiIvaqpTpKqMVYC4LYeEzd7e20ycwuwGphZSXU7ppWxNTsV+F6pFY2cQcdWHF7bOzO/U2VhI6CVn9szgGdExHURsTAiBtrrNJq0MrazgTdExBIaV+6/u5rSKjHUf5OSNOaMqtvAaGAR8QZgLvAn7a5lJEREF3AecEqbSynLeBqHEV9CY6/ttRHxnMxc1c6iRshJwBcy8z8i4gjgixFxSGb2trswSdLgxsoewFYeE/d4m4gYT+Ow1MpKqtsxLT0CLyJeDrwPODYzN1VU244abGzTgEOAn0REDzAPuHKMXAjSys9tCXBlZm7OzPuA/6URCEe7VsZ2KnAZQGbeAEym8YzgTtDSv0lJGsvGSgBs5TFxVwInF9OvAa7OsXGTw0HHFhHPB/6LRvgbK+eRwSBjy8zVmblbZnZnZjeN8xuPzcyx8DzWVn4nv0lj7x8RsRuNQ8L3VljjcLUytt8BRwFExLNpBMAHK62yPFcCbyquBp4HrM7MB9pdlCSNpDFxCHh7j4mLiA8Av8rMK4ELaRyGWkTjBO8T21dx61oc278DU4GvFte1/C4zj21b0S1qcWxjUotj+wHwioi4E9gKnJGZo36vdItj+3vgsxHxdzQuCDlljPyHi4i4hEYw3604h/H9wASAzLyAxjmNxwCLgEeBN7enUkkqj08CkSRJqpmxcghYkiRJI8QAKEmSVDMGQEmSpJoxAEqSJNWMAVCSJKlmDIA1FhFbI+KWiLg9Ir4aETvvwLq+EBGvKaY/FxEHDdD2JRHxwmH00VPcT29EDXW9EXF2RPzDNuY/PSIuL6ZfEhHfLqaPjYiziunjB/psttPfTyLitxHxlFv/RMROxc/wsTI+G0lSZzIA1tuGzHxeZh4CPAa8vXlh8USVIcvMt2bmnQM0eQkw5AC4I4Y7lqHIzN9n5mu2Mf/KzDyneHk8MKQAWHj9tu6bmJkbMvN5wO+HsU5JUk0ZANXnZ8ABxZ6rn0XElcCdETEuIv49In4ZEbdGxNsAiqckfLLYM/VjYI++FRV7rOYW00dHxM0R8T8RcVVEdNMImn9X7Ll6UUTsHhFfK/r4ZUQcWbx3ZkT8MCLuiIjPAbGtwiNiXUR8rGh3VUTs3lTHxyPiV8B7IuKoiPh1RNwWEZ+PiElNqzmzmH9jRBxQvP8vIuIXxXt+HBF7NrX/w4i4ISLujoi/Kdp3R8Tt26jvlOKzeiFwLPDvxdj3j4ibm9od2PxakqSyGADVt3fslcBtxaxDgfdk5jNoPPN1dWYeBhwG/E1E7Av8JfBMGnuz3sQ29ugVQeyzwKsz8w+Bv87MHuAC4GPF3sefAecXrw8DXg18rljF+4GfZ+bBwDeAP9jOEKbQeELFwcBPi/f1mZiZc4FPAV8AXpuZz6HxFJx3NLVbXcz/JPDxYt7PgXmZ+XzgUuDMpvbPBV4GHAH8a0Q8fTu1PS4zr6fxmLEzirHfA6yOiOcVTd4M/L/B1iNJ0o4aE4+CU2l2iohbiumf0Xic3guBGzPzvmL+K4Dn9p3fB+wCHAi8GLgkM7cCv4+Iq7ex/nnAtX3rysyHt1PHy4GDisfcAUyPiKlFH39VvPc7EfHIdt7fC3ylmP4S8PWmZX3znwncl5n/W7y+CDiNJ8LeJU3fP1ZMzwG+EhF7AROBvs8E4IrM3ABsiIhrgMOBW7ZT30A+B7w5Ik4HXlusR5KkUhkA663v/LHHFSFsffMs4N2Z+YN+7Y4ZwTq6aOxp27iNWoaj+fmG67fbavvv6Zv+T+C8zLwyIl4CnL2d9tt63aqv0dhjeTVw02DPCo6IvYFvFS8vKJ5dK0nSkHgIWIP5AfCOiJgAEBHPiIgpwLXAa4tzBPcCXrqN9y4EXlwcMiYidi3mrwWmNbX7IfDuvhdNh0SvBV5XzHsl8LTt1NgF9O2hfB2NQ7f9/Rbo7ju/D3gjjcPFfV7b9P2GYnoXYGkxfXK/9R0XEZMjYiaNi1p+uZ3a+nvS2IvQ+wPgM7Rw+Dcz7y8OHz/P8CdJGi4DoAbzOeBO4ObiAof/orHn+BvA3cWyi3kiND0uMx8E5gNfj4j/4YnDsd8C/rLvIhDg/wBzi4tM7uSJq5H/jUaAvIPGoeDfbafG9cDhRX0vAz6wjVo20jjH7qsRcRuNw8bNAeppEXEr8B7g74p5ZxftbwIe6rfKW4FraITcD2Zmq1fhXgqcUVxYsn8x77+Len7Y4jokSdohkTncI1fS6BAR6zJzarvrGK5o3FNwl8z8l+0s/wnwD5n5qwHW0QPMzcz+QVWSpKdwD6DURhHxDRpXUZ8/QLOHgS/EADeCBibQ2IsoSdKg3AMoSZJUM+4BlCRJqhkDoCRJUs0YACVJkmrGAChJklQzBkBJkqSaMQBKkiTVzP8P78UjA4mN+O8AAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "
" ] @@ -101,10 +101,209 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 255, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "from sklearn.metrics import roc_auc_score, roc_curve, auc\n", + "from tqdm import tqdm\n", + "import matplotlib.pyplot as plt\n", + "from plotsandgraphs.utils import bootstrap" + ] + }, + { + "cell_type": "code", + "execution_count": 256, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "ROC for Class: 0%| | 0/5 [00:00" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# def auroc_metric_function(y_true, y_score, average, multi_class):\n", + "# auc = roc_auc_score(y_true, y_score, average=average, multi_class=multi_class)\n", + "# return auc\n", + "\n", + "n_bootstraps = 1\n", + "\n", + "def roc_metric_function(y_true, y_score):\n", + " fpr, tpr, _ = roc_curve(y_true, y_score, drop_intermediate=False)\n", + " auc_score = auc(fpr, tpr)\n", + " # print lengths\n", + " # print(fpr.shape, tpr.shape, auc_score)\n", + " return fpr, tpr, auc_score\n", + "\n", + "# for each class calculate the ROC\n", + "for i in tqdm(range(y_true_one_hot.shape[-1]), desc='ROC for Class'):\n", + " # bootstrap the ROC curve for class i\n", + " roc_result = bootstrap(\n", + " metric_function=roc_metric_function,\n", + " input_resample=[y_true_one_hot[:, i], y_pred[:, i]],\n", + " n_bootstraps=n_bootstraps, \n", + " metric_kwargs={})\n", + " # unpack the results\n", + " fprs, tprs, aucs = zip(*roc_result)\n", + " fprs, tprs, aucs = [x for x in [fprs, tprs, aucs]]\n", + " \n", + " # Determine min and max FPR values across all bootstrapped samples\n", + " min_fpr = min(min(fpr) for fpr in fprs)\n", + " max_fpr = max(max(fpr) for fpr in fprs)\n", + " \n", + " # Define common FPR values for interpolation within the min and max range\n", + " common_fpr = np.linspace(min_fpr, max_fpr, 200)\n", + " \n", + " # Interpolate TPRs for each bootstrap sample\n", + " interp_tprs = [np.interp(common_fpr, np.sort(fpr), tpr[np.argsort(fpr)]) for fpr, tpr in zip(fprs, tprs)]\n", + " \n", + " # calculate median and quantiles\n", + " quantiles = [0.025, 0.5, 0.975]\n", + " tpr_lower, tpr_median, tpr_upper = np.quantile(interp_tprs, q=quantiles, axis=0)\n", + " \n", + " plt.figure()\n", + " plt.plot(common_fpr, tpr_median, label='Median ROC')\n", + " plt.fill_between(common_fpr, tpr_lower, tpr_upper, alpha=0.2, label='95% CI')\n", + " \n" + ] + }, + { + "cell_type": "code", + "execution_count": 386, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Bootsrapping: 100%|██████████| 500/500 [00:00<00:00, 712.66it/s]\n", + "Bootsrapping: 100%|██████████| 500/500 [00:00<00:00, 975.42it/s]\n", + "Bootsrapping: 100%|██████████| 500/500 [00:00<00:00, 931.21it/s]\n", + "ROC for Class: 100%|██████████| 3/3 [00:02<00:00, 1.46it/s]\n", + "Bootsrapping: 100%|██████████| 500/500 [00:01<00:00, 265.71it/s]\n" + ] + }, + { + "data": { + "image/png": "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Hn30UX777Tc1Wk5RPESNAi655ORk+vTpw/z585k2bRobN2684VsjKopi5/JewJWdOTsbs9F58xIuHPgLabMV2v/PpwongAEBAURGRvL5559z1113eTocRanWVAJYcoGBgdSuXZtly5YxZswYT4ejKFVKlU4As/K0/gEk7NuF3teP8CYtrikp8AuLKL/AyoGUkgULFjBs2DDq1avHV1995emQFEXBngCi+gAWSUrJ/PnzGTVqFHXq1Km280UqirtV6UvAeS//2qd/2U2t1u3Q6PLnvQG1amPw8yvv8NwmLS2NUaNG8dhjj7F48WJPh6OUglarJSYmhjZt2jB06FBSUlLKZL+ffPIJjz76aJnsqzgbN2503lauLDz44IMcPHgQgG+++YaWLVvSp08fdu7cWehciRWd6gNYtNTUVIYPH84TTzzBRx995OlwFKVKq9otgElXE8Cip38RhDcu/W21KqoDBw4wYsQIjh8/zuuvv86TTz7p6ZCUUvDx8WHv3r0ATJgwgYULF/Lcc895NigP+/DDD53//uijj1i8eDE9evQA7HckKSmLxYJO5/kqT0qbugRciH379jFixAhOnz7N22+/zeOPP+7pkBSlSquyP0NtNhumvP3/9u8FCk7/4h9Rs8q0/m3evJnOnTuTkpLCL7/8wvTp09VouUqsW7duxMfHA7B9+3a6detG+/btuemmmzhy5Ahgb9kbPnw4gwYNomnTpsyYMcO5/ZIlS2jWrBmdO3fm999/dy4/ffo0ffv2JTo6mn79+nH27FnAPtHz5MmT6dq1K40aNWLjxo3cf//9tGzZMt8E0Hnt2LGDm266iXbt2tG5c2fS09PzrS8q7gMHDtC5c2diYmKIjo7m2LFjZGZmMmTIENq1a0ebNm2c3RZ69+7Nzp07eemll9iyZQsPPPAATz31VL6WxszMTO6//346d+5M+/btWblypfP83H777fTt25d+/SrG1KaqD2BBGzZsoGvXrmRmZrJhwwamTZum6i5FcTPP/xx2E1NmBiCdzxNPHccvvEaB0b4BkVVnRFlMTAyjRo3i1VdfpXbt2p4Op9LLvftGXqNHj2bKlCkYjUYGDx5cYH3u3TKuXLlS4G4aGzduLPGxrVYrv/zyCw888AAALVq0YPPmzeh0On7++WeeffZZVqxYAdjvu7tnzx68vLxo3rw5U6dORafTMXv2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i4oNUexrW9eyuq7+1rKKrrquuuqubVfXtlYsuIrC2nHBgkAoovRuQiAEQkJ6JnN+f8wkG0LaDTOZO8n5PM88ZGbu3Dn3TLhz8t63nHwykyZN4qijjmLatGkceeSRVft98MEHWb16NYsWLWL37t089NBDgL81Kz09nQ8//JAPPviASZMmsXbtWqZMmcJVV11FUVFRk4+zen/LA3X55ZfTo0cPxo4dy0033cRRRx3V4HnixRdf5JlnnmHMmDHs3buX2NjYJr9/Xfuq69zZHCJ28qiCnGyKc3fRtnd/Urp2JypwiWfTpk1MmjSJIUOGMHPmzKrLQubA7d69my+//JIVK1YgIlRUVCAiPPLII7Rv336/vyh3795Nhw4dqu6//vrrjBkzhltvvZUbbriB9957j6FDh7Js2TJ8Pl/V5QCfz8eyZcsYOnQoO3fu5L///a+jOLt3777PX8MZGRl07959v+1eeuklbrvtNkSEAQMG0LdvX1avXk2PHj0YNWoU/fr1A+DMM89kwYIFTJ48meXLl1f9RX3eeedxyimn7Lff1NTUqgElqkrfvn2r9lUZR6dOnTjrrLNYuHDhPkt3LV26FFXloIMO4vbbb+eTTz7hl7/8JevWrdvnksqwYcMc56U+3bt33+ev27py9sILL1Rd3jjyyCMpKSkhJyeH77//nnfffZf/+7//Y8+ePXg8HuLj47n++uu54ooruOKKKwC444479vlru+b79+jRA6/XS15eHu3b77ue9+eff07fvn3p2LEjAGeffTbffvstF110EUceeSTz588H/H8Arl27NjiJaUbr16/ntNNOY8SIEcycOZP+/fuHO6QWo6Wdu+o7x5SXl3POOedw4YUXcvbZZ1e9pnPnzlU/X3XVVXUOFLvzzju58847AbjggguqvkO7du0KQFxcHL/85S/3G4BQVFTEyy+/zCeffMJpp53Ge++9x7vvvsvrr7/OVVddVbXdsGHDWL58ORUVFUH5Q619+/bs2bMHr9dLdHR0nTmLjo7m8ccfr7p/1FFHMWjQINq2bVtnzgcPHsynn34K+C/hzp49e7/9du/efZ8BJRkZGYwfP36/7eraV33nzlCL2BbAHYH5/9r16U9yx86Ul5cD/r4E7777LgsWLLDiL8jeffddLr74YrZs2cLmzZv5+eef6du3L/Pnz2fgwIFs27aNVatWAbBl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I45g69atHH300bz00ktcd911dcZcX16qqytHNR1ozgBuuukmHn74YTwe56eVzMzMfaZfquv9n3/+eSZNmkSPHj149dVXue222/bb5oUXXuAXv/hF1f2ff/6Zgw8+mJ49e/L73/++xZ8DmvJ/sjWzfDlnOXPGrfmK2AJwd6m/71VKTHStI4Dnzp3L6NGjWb58eZNbRcz+3nzzTc4//3wAzj//fN58803A3zJTm+qPX3jhhfTt25cHHnig3uKmsbp168acOXMOeD8ffvghRx99dFVrW25uLh988AGbNm1i27ZtFBYW8tprr+3zmmuvvZZjjz221t+tyy+/nB49ejB27FhuuukmjjrqqKoC9/XXX2fFihXMnz+f+fPn8+qrrwJw8cUXs3TpUl577TUef/xxfvOb3/Cf//yHKVOm8Nvf/rbJLVfBylFNNXP20Ucf0alTp0YVpQfi8ccfZ86cOWRkZPDLX/6y6o+7Sq+99hqLFy/m1ltvrXqsZ8+e/PDDD6xfv55//etfDfYfjXSh/gxaGsuXc5YzZ9yar8gvAKOjiI/632GoKg899BAnnngi7dq1Y+HChTbFS5Ds3r2bL7/8kiuvvJI+ffrwyCOP8Pbbb6OqtG/fntzc3P2279ChQ9X9119/nY0bN3LppZdyww03ADB06FCWLVu2T4Hj8/lYtmwZQ4cOZdiwYY7/eurevfs+l2YzMjLo3r17ndvPmDFjn0uZn3/+OX379qVjx47ExMRw9tln8+2331Y9f++997Jz504ee+yxWvcXHR3N448/zrJly/jggw/Ys2cPgwYNqooNICUlhQsuuGC/y5zbtm1j4cKFnHnmmTz66KO89dZbpKWl8cUXX+yzXVPyUp8Dzdk333zDrFmz6NOnD+effz5ffvklF110kaP3r95KWtv779y5k+XLl3P44YcDcN555+3zuXz++ec88MADzJo1q9b5PLt168bw4cOZP39+o+OKREuWLAl3CBHF8uWc5cwZt+YrcgvAMi/xUR5iozzEV7sEvGXLFu677z7OOeccFi5cyNChQ8MYZcvy7rvvcvHFF7NlyxY2b97Mzz//TN++fZk/fz4DBw5k27ZtrFq1CvB/DsuXL2fUqFH77ENEuO+++1iwYAGrV69mwIABHHLIIdx///1V29x///2MHj2aAQMGcMEFF/Dtt98ye/bsqufnzZvHjz/+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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig = pandg.multiclass_classifier.plot_roc_curve(y_true_one_hot, y_pred, n_bootstraps=500, highlight_roc_area=True, confidence_interval=0.95, save_fig_path='temp_figures/', split_plots=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 388, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "32\n", + "32\n", + "[(None, True, 1, None, True), (None, True, 1, None, False), (None, True, 1, (10, 10), True), (None, True, 1, (10, 10), False), (None, True, 10000, None, True), (None, True, 10000, None, False), (None, True, 10000, (10, 10), True), (None, True, 10000, (10, 10), False), (None, False, 1, None, True), (None, False, 1, None, False), (None, False, 1, (10, 10), True), (None, False, 1, (10, 10), False), (None, False, 10000, None, True), (None, False, 10000, None, False), (None, False, 10000, (10, 10), True), (None, False, 10000, (10, 10), False), (0.99, True, 1, None, True), (0.99, True, 1, None, False), (0.99, True, 1, (10, 10), True), (0.99, True, 1, (10, 10), False), (0.99, True, 10000, None, True), (0.99, True, 10000, None, False), (0.99, True, 10000, (10, 10), True), (0.99, True, 10000, (10, 10), False), (0.99, False, 1, None, True), (0.99, False, 1, None, False), (0.99, False, 1, (10, 10), True), (0.99, False, 1, (10, 10), False), (0.99, False, 10000, None, True), (0.99, False, 10000, None, False), (0.99, False, 10000, (10, 10), True), (0.99, False, 10000, (10, 10), False)]\n" + ] + } + ], + "source": [ + "confidence_intervals = [None, 0.99]\n", + "highlight_roc_area = [True, False]\n", + "n_bootstraps = [1, 10000]\n", + "figsizes = [None, (10,10)]\n", + "split_plots = [True, False]\n", + "\n", + "from itertools import product\n", + "combinations = list(product(confidence_intervals, highlight_roc_area, n_bootstraps, figsizes, split_plots))\n", + "\n", + "print(2**5)\n", + "print(len(combinations))\n", + "print(combinations)" + ] } ], "metadata": { diff --git a/plotsandgraphs/cmaps/hawaii.txt b/plotsandgraphs/cmaps/hawaii.txt new file mode 100644 index 0000000..72a4566 --- /dev/null +++ b/plotsandgraphs/cmaps/hawaii.txt @@ -0,0 +1,256 @@ +0.550541 0.006842 0.451980 +0.551494 0.015367 0.447972 +0.552426 0.023795 0.443998 +0.553328 0.032329 0.440021 +0.554227 0.041170 0.436063 +0.555098 0.049286 0.432125 +0.555948 0.056667 0.428188 +0.556797 0.063525 0.424272 +0.557619 0.069970 0.420377 +0.558415 0.076028 0.416509 +0.559210 0.081936 0.412663 +0.559991 0.087507 0.408823 +0.560746 0.092811 0.405012 +0.561495 0.098081 0.401237 +0.562235 0.103128 0.397471 +0.562954 0.108005 0.393736 +0.563663 0.112872 0.390025 +0.564355 0.117530 0.386344 +0.565032 0.122122 0.382698 +0.565709 0.126681 0.379074 +0.566380 0.131171 0.375474 +0.567037 0.135542 0.371905 +0.567679 0.139872 0.368378 +0.568312 0.144198 0.364861 +0.568939 0.148416 0.361384 +0.569559 0.152618 0.357942 +0.570171 0.156806 0.354519 +0.570777 0.160934 0.351127 +0.571377 0.165008 0.347764 +0.571972 0.169120 0.344417 +0.572562 0.173131 0.341120 +0.573142 0.177166 0.337836 +0.573711 0.181138 0.334602 +0.574276 0.185151 0.331356 +0.574840 0.189095 0.328170 +0.575406 0.193035 0.324992 +0.575967 0.196978 0.321854 +0.576518 0.200854 0.318740 +0.577060 0.204783 0.315654 +0.577596 0.208664 0.312565 +0.578135 0.212545 0.309542 +0.578676 0.216431 0.306516 +0.579214 0.220287 0.303496 +0.579746 0.224106 0.300518 +0.580271 0.227977 0.297566 +0.580793 0.231817 0.294618 +0.581315 0.235646 0.291715 +0.581835 0.239463 0.288810 +0.582353 0.243268 0.285910 +0.582870 0.247097 0.283066 +0.583386 0.250916 0.280201 +0.583901 0.254739 0.277381 +0.584416 0.258531 0.274552 +0.584931 0.262342 0.271740 +0.585443 0.266156 0.268980 +0.585951 0.269966 0.266198 +0.586456 0.273771 0.263439 +0.586961 0.277575 0.260676 +0.587466 0.281374 0.257925 +0.587972 0.285180 0.255221 +0.588478 0.289013 0.252494 +0.588984 0.292818 0.249767 +0.589491 0.296652 0.247081 +0.589999 0.300465 0.244376 +0.590507 0.304300 0.241716 +0.591016 0.308135 0.239031 +0.591526 0.311969 0.236379 +0.592038 0.315846 0.233692 +0.592548 0.319698 0.231058 +0.593055 0.323559 0.228420 +0.593562 0.327429 0.225773 +0.594071 0.331309 0.223134 +0.594583 0.335229 0.220510 +0.595095 0.339131 0.217865 +0.595609 0.343048 0.215226 +0.596126 0.346976 0.212613 +0.596645 0.350921 0.209994 +0.597164 0.354880 0.207388 +0.597680 0.358830 0.204776 +0.598196 0.362821 0.202147 +0.598721 0.366829 0.199533 +0.599248 0.370837 0.196964 +0.599771 0.374879 0.194370 +0.600294 0.378931 0.191738 +0.600819 0.383009 0.189149 +0.601346 0.387090 0.186548 +0.601874 0.391215 0.183949 +0.602403 0.395345 0.181345 +0.602933 0.399486 0.178782 +0.603464 0.403678 0.176158 +0.603995 0.407873 0.173594 +0.604521 0.412102 0.171015 +0.605043 0.416348 0.168436 +0.605562 0.420618 0.165848 +0.606084 0.424928 0.163317 +0.606609 0.429252 0.160731 +0.607129 0.433600 0.158195 +0.607639 0.437998 0.155649 +0.608144 0.442412 0.153086 +0.608644 0.446848 0.150582 +0.609134 0.451324 0.148071 +0.609610 0.455826 0.145615 +0.610079 0.460356 0.143119 +0.610542 0.464933 0.140685 +0.610991 0.469544 0.138267 +0.611421 0.474170 0.135829 +0.611833 0.478839 0.133514 +0.612226 0.483539 0.131212 +0.612600 0.488287 0.128920 +0.612950 0.493049 0.126718 +0.613275 0.497875 0.124574 +0.613572 0.502705 0.122487 +0.613837 0.507592 0.120512 +0.614069 0.512502 0.118669 +0.614264 0.517459 0.116848 +0.614418 0.522434 0.115160 +0.614530 0.527456 0.113657 +0.614594 0.532510 0.112266 +0.614607 0.537595 0.111032 +0.614566 0.542708 0.109999 +0.614468 0.547849 0.109114 +0.614308 0.553016 0.108421 +0.614082 0.558212 0.108010 +0.613787 0.563446 0.107850 +0.613419 0.568682 0.107943 +0.612974 0.573946 0.108312 +0.612449 0.579232 0.109026 +0.611842 0.584522 0.110040 +0.611148 0.589820 0.111320 +0.610353 0.595132 0.112963 +0.609471 0.600443 0.114856 +0.608494 0.605748 0.117169 +0.607411 0.611060 0.119811 +0.606215 0.616350 0.122763 +0.604930 0.621618 0.126124 +0.603536 0.626876 0.129757 +0.602026 0.632107 0.133692 +0.600413 0.637306 0.137967 +0.598689 0.642469 0.142496 +0.596862 0.647588 0.147334 +0.594916 0.652662 0.152416 +0.592872 0.657697 0.157790 +0.590707 0.662667 0.163419 +0.588441 0.667579 0.169258 +0.586085 0.672429 0.175280 +0.583613 0.677213 0.181507 +0.581049 0.681916 0.187985 +0.578388 0.686560 0.194586 +0.575646 0.691121 0.201310 +0.572809 0.695614 0.208243 +0.569878 0.700018 0.215285 +0.566888 0.704346 0.222470 +0.563814 0.708597 0.229738 +0.560662 0.712753 0.237171 +0.557458 0.716845 0.244622 +0.554182 0.720839 0.252219 +0.550853 0.724766 0.259874 +0.547470 0.728605 0.267574 +0.544043 0.732376 0.275394 +0.540571 0.736058 0.283238 +0.537067 0.739685 0.291141 +0.533507 0.743228 0.299094 +0.529936 0.746702 0.307079 +0.526333 0.750112 0.315113 +0.522696 0.753461 0.323192 +0.519049 0.756752 0.331281 +0.515367 0.759983 0.339437 +0.511681 0.763162 0.347595 +0.507990 0.766293 0.355785 +0.504280 0.769372 0.363984 +0.500550 0.772410 0.372217 +0.496820 0.775405 0.380485 +0.493085 0.778365 0.388763 +0.489350 0.781287 0.397049 +0.485614 0.784180 0.405376 +0.481884 0.787038 0.413711 +0.478142 0.789866 0.422057 +0.474411 0.792674 0.430440 +0.470680 0.795455 0.438824 +0.466955 0.798219 0.447235 +0.463220 0.800964 0.455667 +0.459518 0.803693 0.464121 +0.455810 0.806409 0.472577 +0.452124 0.809110 0.481054 +0.448436 0.811796 0.489555 +0.444772 0.814472 0.498091 +0.441108 0.817144 0.506616 +0.437487 0.819803 0.515175 +0.433858 0.822465 0.523755 +0.430280 0.825110 0.532352 +0.426720 0.827756 0.540960 +0.423186 0.830401 0.549598 +0.419708 0.833036 0.558241 +0.416257 0.835673 0.566923 +0.412868 0.838305 0.575612 +0.409520 0.840937 0.584314 +0.406245 0.843562 0.593044 +0.403035 0.846190 0.601780 +0.399905 0.848819 0.610541 +0.396872 0.851439 0.619320 +0.393950 0.854061 0.628104 +0.391152 0.856683 0.636905 +0.388472 0.859301 0.645709 +0.385935 0.861918 0.654530 +0.383585 0.864526 0.663367 +0.381407 0.867128 0.672196 +0.379424 0.869728 0.681023 +0.377672 0.872325 0.689863 +0.376170 0.874907 0.698686 +0.374923 0.877482 0.707507 +0.373981 0.880045 0.716318 +0.373340 0.882596 0.725106 +0.373043 0.885136 0.733865 +0.373112 0.887654 0.742601 +0.373570 0.890156 0.751300 +0.374439 0.892639 0.759946 +0.375723 0.895095 0.768546 +0.377467 0.897524 0.777098 +0.379671 0.899923 0.785572 +0.382352 0.902288 0.793974 +0.385527 0.904619 0.802283 +0.389213 0.906913 0.810503 +0.393385 0.909161 0.818619 +0.398074 0.911369 0.826627 +0.403255 0.913528 0.834507 +0.408926 0.915628 0.842255 +0.415083 0.917688 0.849859 +0.421704 0.919678 0.857309 +0.428791 0.921615 0.864606 +0.436305 0.923489 0.871734 +0.444231 0.925293 0.878682 +0.452541 0.927032 0.885454 +0.461203 0.928705 0.892037 +0.470211 0.930311 0.898424 +0.479521 0.931839 0.904620 +0.489103 0.933297 0.910617 +0.498950 0.934685 0.916408 +0.509019 0.936004 0.922005 +0.519281 0.937246 0.927394 +0.529715 0.938416 0.932588 +0.540292 0.939517 0.937592 +0.550997 0.940549 0.942401 +0.561804 0.941509 0.947020 +0.572686 0.942411 0.951459 +0.583621 0.943243 0.955728 +0.594606 0.944015 0.959825 +0.605610 0.944731 0.963765 +0.616637 0.945388 0.967563 +0.627648 0.945989 0.971214 +0.638645 0.946543 0.974739 +0.649620 0.947052 0.978146 +0.660548 0.947515 0.981449 +0.671439 0.947934 0.984653 +0.682276 0.948316 0.987765 +0.693064 0.948662 0.990803 +0.703779 0.948977 0.993775 \ No newline at end of file diff --git a/plotsandgraphs/cmaps/hawaiiS.txt b/plotsandgraphs/cmaps/hawaiiS.txt new file mode 100644 index 0000000..1ef0fd2 --- /dev/null +++ b/plotsandgraphs/cmaps/hawaiiS.txt @@ -0,0 +1,100 @@ +0.550541 0.006842 0.451980 +0.703779 0.948977 0.993775 +0.611842 0.584522 0.110040 +0.423186 0.830401 0.549598 +0.590507 0.304300 0.241716 +0.398074 0.911369 0.826627 +0.540571 0.736058 0.283238 +0.573711 0.181138 0.334602 +0.607129 0.433600 0.158195 +0.582353 0.243268 0.285910 +0.588441 0.667579 0.169258 +0.377672 0.872325 0.689863 +0.481884 0.787038 0.413711 +0.529715 0.938416 0.932588 +0.598721 0.366829 0.199533 +0.563663 0.112872 0.390025 +0.613572 0.502705 0.122487 +0.594583 0.335229 0.220510 +0.511681 0.763162 0.347595 +0.603536 0.626876 0.129757 +0.452541 0.927032 0.885454 +0.614566 0.542708 0.109999 +0.602933 0.399486 0.178782 +0.566888 0.704346 0.222470 +0.396872 0.851439 0.619320 +0.557619 0.069970 0.420377 +0.374439 0.892639 0.759946 +0.568939 0.148416 0.361384 +0.586456 0.273771 0.263439 +0.452124 0.809110 0.481054 +0.578135 0.212545 0.309542 +0.616637 0.945388 0.967563 +0.610542 0.464933 0.140685 +0.600819 0.383009 0.189149 +0.421704 0.919678 0.857309 +0.613787 0.563446 0.107850 +0.612226 0.483539 0.131212 +0.575967 0.196978 0.321854 +0.660548 0.947515 0.981449 +0.614418 0.522434 0.115160 +0.373340 0.882596 0.725106 +0.526333 0.750112 0.315113 +0.596645 0.350921 0.209994 +0.382352 0.902288 0.793974 +0.437487 0.819803 0.515175 +0.605043 0.416348 0.168436 +0.409520 0.840937 0.584314 +0.489103 0.933297 0.910617 +0.588478 0.289013 0.252494 +0.584416 0.258531 0.274552 +0.578388 0.686560 0.194586 +0.385935 0.861918 0.654530 +0.554182 0.720839 0.252219 +0.580271 0.227977 0.297566 +0.496820 0.775405 0.380485 +0.572686 0.942411 0.951459 +0.592548 0.319698 0.231058 +0.571377 0.165008 0.347764 +0.560746 0.092811 0.405012 +0.554227 0.041170 0.436063 +0.566380 0.131171 0.375474 +0.596862 0.647588 0.147334 +0.466955 0.798219 0.447235 +0.608494 0.605748 0.117169 +0.608644 0.446848 0.150582 +0.585443 0.266156 0.268980 +0.614308 0.553016 0.108421 +0.572562 0.173131 0.341120 +0.552426 0.023795 0.443998 +0.430280 0.825110 0.532352 +0.606084 0.424928 0.163317 +0.381407 0.867128 0.672196 +0.614594 0.532510 0.112266 +0.612974 0.573946 0.108312 +0.562235 0.103128 0.397471 +0.565032 0.122122 0.382698 +0.574840 0.189095 0.328170 +0.519049 0.756752 0.331281 +0.595609 0.343048 0.215226 +0.408926 0.915628 0.842255 +0.436305 0.923489 0.871734 +0.638645 0.946543 0.974739 +0.600413 0.637306 0.137967 +0.589491 0.296652 0.247081 +0.591526 0.311969 0.236379 +0.560662 0.712753 0.237171 +0.391152 0.856683 0.636905 +0.609610 0.455826 0.145615 +0.606215 0.616350 0.122763 +0.489350 0.781287 0.397049 +0.509019 0.936004 0.922005 +0.579214 0.220287 0.303496 +0.444772 0.814472 0.498091 +0.547470 0.728605 0.267574 +0.612950 0.493049 0.126718 +0.470211 0.930311 0.898424 +0.603995 0.407873 0.173594 +0.581315 0.235646 0.291715 +0.474411 0.792674 0.430440 +0.504280 0.769372 0.363984 \ No newline at end of file diff --git a/plotsandgraphs/cmaps/readme.md b/plotsandgraphs/cmaps/readme.md new file mode 100644 index 0000000..d901d6a --- /dev/null +++ b/plotsandgraphs/cmaps/readme.md @@ -0,0 +1,3 @@ +The Scientific colour maps in this folder (Crameri 2018) are used in this library to prevent visual distortion of the data and exclusion of readers with colour-vision deficiencies (Crameri et al., 2020). + +Link: https://www.fabiocrameri.ch/colourmaps/ (last retrieved 12.12.2023) \ No newline at end of file diff --git a/plotsandgraphs/cmaps/roma.txt b/plotsandgraphs/cmaps/roma.txt new file mode 100644 index 0000000..b58b7f3 --- /dev/null +++ b/plotsandgraphs/cmaps/roma.txt @@ -0,0 +1,256 @@ +0.492325 0.090787 0.000076 +0.496730 0.102802 0.003675 +0.501125 0.114034 0.007134 +0.505473 0.124685 0.010421 +0.509813 0.134890 0.013817 +0.514125 0.144643 0.016841 +0.518397 0.154036 0.019720 +0.522634 0.163193 0.022451 +0.526850 0.172041 0.025034 +0.531016 0.180682 0.027528 +0.535142 0.189147 0.030132 +0.539225 0.197418 0.032869 +0.543266 0.205524 0.035925 +0.547254 0.213477 0.038888 +0.551203 0.221318 0.041994 +0.555100 0.229015 0.045012 +0.558954 0.236607 0.047967 +0.562776 0.244053 0.051012 +0.566540 0.251456 0.053998 +0.570257 0.258727 0.057033 +0.573940 0.265922 0.060051 +0.577577 0.273024 0.063001 +0.581178 0.280048 0.065873 +0.584739 0.286993 0.068856 +0.588249 0.293880 0.071712 +0.591737 0.300697 0.074564 +0.595174 0.307450 0.077376 +0.598577 0.314151 0.080252 +0.601948 0.320797 0.083076 +0.605282 0.327364 0.085853 +0.608593 0.333908 0.088711 +0.611855 0.340387 0.091525 +0.615092 0.346826 0.094279 +0.618309 0.353217 0.096979 +0.621487 0.359572 0.099753 +0.624650 0.365896 0.102506 +0.627785 0.372174 0.105218 +0.630901 0.378439 0.107956 +0.633994 0.384670 0.110736 +0.637068 0.390894 0.113480 +0.640129 0.397078 0.116219 +0.643171 0.403273 0.118960 +0.646208 0.409445 0.121674 +0.649242 0.415612 0.124470 +0.652261 0.421776 0.127267 +0.655276 0.427961 0.130152 +0.658297 0.434132 0.132974 +0.661315 0.440331 0.135825 +0.664334 0.446543 0.138777 +0.667364 0.452780 0.141759 +0.670402 0.459031 0.144786 +0.673440 0.465303 0.147848 +0.676494 0.471628 0.150966 +0.679554 0.477967 0.154160 +0.682637 0.484345 0.157428 +0.685735 0.490782 0.160789 +0.688849 0.497239 0.164248 +0.691977 0.503744 0.167748 +0.695120 0.510297 0.171371 +0.698285 0.516904 0.175115 +0.701472 0.523556 0.178956 +0.704681 0.530258 0.182899 +0.707908 0.537021 0.187010 +0.711162 0.543825 0.191228 +0.714426 0.550692 0.195605 +0.717725 0.557617 0.200115 +0.721030 0.564592 0.204829 +0.724366 0.571630 0.209678 +0.727717 0.578727 0.214708 +0.731087 0.585886 0.219946 +0.734480 0.593098 0.225346 +0.737879 0.600364 0.230969 +0.741297 0.607699 0.236808 +0.744731 0.615074 0.242822 +0.748175 0.622516 0.249103 +0.751624 0.630013 0.255599 +0.755074 0.637558 0.262334 +0.758523 0.645147 0.269325 +0.761963 0.652786 0.276547 +0.765406 0.660470 0.284010 +0.768820 0.668197 0.291755 +0.772224 0.675947 0.299742 +0.775598 0.683727 0.307981 +0.778939 0.691534 0.316505 +0.782242 0.699353 0.325257 +0.785493 0.707188 0.334299 +0.788687 0.715019 0.343564 +0.791812 0.722841 0.353091 +0.794864 0.730654 0.362848 +0.797828 0.738438 0.372842 +0.800699 0.746187 0.383072 +0.803461 0.753893 0.393496 +0.806107 0.761537 0.404131 +0.808624 0.769113 0.414950 +0.810997 0.776617 0.425936 +0.813218 0.784025 0.437088 +0.815281 0.791322 0.448363 +0.817167 0.798508 0.459757 +0.818865 0.805562 0.471253 +0.820371 0.812478 0.482813 +0.821675 0.819240 0.494440 +0.822757 0.825842 0.506080 +0.823613 0.832270 0.517753 +0.824237 0.838506 0.529400 +0.824620 0.844553 0.541003 +0.824755 0.850392 0.552561 +0.824634 0.856022 0.564037 +0.824253 0.861429 0.575407 +0.823606 0.866611 0.586656 +0.822692 0.871564 0.597769 +0.821502 0.876273 0.608734 +0.820031 0.880744 0.619513 +0.818285 0.884972 0.630101 +0.816266 0.888952 0.640490 +0.813955 0.892681 0.650660 +0.811371 0.896160 0.660600 +0.808502 0.899389 0.670314 +0.805347 0.902364 0.679761 +0.801918 0.905092 0.688973 +0.798210 0.907568 0.697906 +0.794228 0.909794 0.706586 +0.789963 0.911771 0.714983 +0.785431 0.913506 0.723105 +0.780623 0.914991 0.730953 +0.775551 0.916237 0.738521 +0.770217 0.917249 0.745803 +0.764624 0.918014 0.752800 +0.758773 0.918542 0.759517 +0.752665 0.918838 0.765957 +0.746318 0.918903 0.772108 +0.739731 0.918739 0.777981 +0.732897 0.918350 0.783574 +0.725834 0.917737 0.788893 +0.718537 0.916896 0.793938 +0.711030 0.915828 0.798708 +0.703300 0.914552 0.803212 +0.695360 0.913054 0.807458 +0.687217 0.911341 0.811442 +0.678874 0.909414 0.815168 +0.670351 0.907280 0.818643 +0.661635 0.904933 0.821880 +0.652735 0.902379 0.824863 +0.643676 0.899624 0.827614 +0.634464 0.896664 0.830135 +0.625086 0.893500 0.832423 +0.615567 0.890145 0.834491 +0.605914 0.886598 0.836336 +0.596145 0.882852 0.837970 +0.586260 0.878925 0.839394 +0.576278 0.874814 0.840613 +0.566190 0.870520 0.841632 +0.556024 0.866058 0.842458 +0.545813 0.861420 0.843090 +0.535527 0.856619 0.843538 +0.525217 0.851658 0.843811 +0.514877 0.846543 0.843909 +0.504532 0.841286 0.843838 +0.494180 0.835884 0.843605 +0.483842 0.830350 0.843216 +0.473543 0.824685 0.842677 +0.463293 0.818902 0.841990 +0.453115 0.813010 0.841160 +0.443005 0.807018 0.840201 +0.432982 0.800920 0.839108 +0.423057 0.794738 0.837900 +0.413269 0.788474 0.836571 +0.403599 0.782136 0.835134 +0.394062 0.775727 0.833595 +0.384684 0.769261 0.831959 +0.375472 0.762745 0.830227 +0.366446 0.756186 0.828409 +0.357593 0.749581 0.826514 +0.348916 0.742958 0.824540 +0.340447 0.736291 0.822504 +0.332185 0.729618 0.820394 +0.324113 0.722919 0.818230 +0.316282 0.716224 0.816018 +0.308653 0.709514 0.813746 +0.301225 0.702804 0.811437 +0.294036 0.696099 0.809086 +0.287067 0.689401 0.806696 +0.280322 0.682707 0.804272 +0.273816 0.676034 0.801816 +0.267484 0.669377 0.799343 +0.261414 0.662739 0.796836 +0.255543 0.656120 0.794320 +0.249860 0.649522 0.791778 +0.244403 0.642944 0.789229 +0.239162 0.636402 0.786665 +0.234103 0.629874 0.784090 +0.229233 0.623385 0.781503 +0.224530 0.616915 0.778909 +0.220062 0.610472 0.776315 +0.215727 0.604065 0.773710 +0.211566 0.597675 0.771114 +0.207553 0.591317 0.768502 +0.203709 0.584989 0.765902 +0.199968 0.578679 0.763292 +0.196442 0.572403 0.760691 +0.192988 0.566143 0.758086 +0.189677 0.559913 0.755482 +0.186487 0.553693 0.752873 +0.183398 0.547501 0.750276 +0.180424 0.541321 0.747679 +0.177586 0.535164 0.745074 +0.174797 0.529026 0.742478 +0.172082 0.522885 0.739880 +0.169502 0.516755 0.737273 +0.166959 0.510628 0.734673 +0.164485 0.504518 0.732066 +0.162089 0.498397 0.729453 +0.159699 0.492262 0.726836 +0.157413 0.486128 0.724215 +0.155180 0.479992 0.721583 +0.152960 0.473828 0.718948 +0.150805 0.467661 0.716306 +0.148654 0.461471 0.713644 +0.146549 0.455260 0.710977 +0.144488 0.449025 0.708292 +0.142409 0.442760 0.705595 +0.140344 0.436466 0.702886 +0.138310 0.430142 0.700156 +0.136210 0.423782 0.697413 +0.134205 0.417407 0.694652 +0.132133 0.410984 0.691884 +0.130086 0.404521 0.689094 +0.127967 0.398042 0.686279 +0.125859 0.391517 0.683451 +0.123663 0.384945 0.680600 +0.121475 0.378353 0.677747 +0.119286 0.371714 0.674860 +0.117003 0.365049 0.671962 +0.114652 0.358343 0.669046 +0.112324 0.351597 0.666107 +0.109890 0.344819 0.663159 +0.107324 0.337994 0.660182 +0.104641 0.331130 0.657195 +0.101951 0.324237 0.654180 +0.099119 0.317305 0.651154 +0.096135 0.310338 0.648101 +0.093031 0.303295 0.645033 +0.089832 0.296240 0.641950 +0.086378 0.289140 0.638844 +0.082771 0.281987 0.635717 +0.078888 0.274774 0.632572 +0.074823 0.267513 0.629402 +0.070429 0.260237 0.626217 +0.065707 0.252891 0.623014 +0.060588 0.245475 0.619791 +0.054957 0.238038 0.616544 +0.048861 0.230521 0.613271 +0.041963 0.222980 0.609992 +0.034076 0.215343 0.606696 +0.026246 0.207675 0.603381 +0.018222 0.199913 0.600048 +0.009824 0.192129 0.596704 \ No newline at end of file diff --git a/plotsandgraphs/cmaps/romaO.txt b/plotsandgraphs/cmaps/romaO.txt new file mode 100644 index 0000000..46bf8aa --- /dev/null +++ b/plotsandgraphs/cmaps/romaO.txt @@ -0,0 +1,256 @@ +0.451374 0.223459 0.341871 +0.454179 0.222444 0.336099 +0.456965 0.221584 0.330428 +0.459746 0.220902 0.324834 +0.462509 0.220346 0.319346 +0.465269 0.219936 0.313938 +0.468026 0.219680 0.308619 +0.470782 0.219577 0.303367 +0.473519 0.219624 0.298218 +0.476275 0.219821 0.293158 +0.479024 0.220172 0.288184 +0.481779 0.220673 0.283304 +0.484530 0.221302 0.278502 +0.487308 0.222079 0.273790 +0.490079 0.223041 0.269167 +0.492862 0.224106 0.264606 +0.495670 0.225363 0.260159 +0.498500 0.226770 0.255786 +0.501335 0.228325 0.251528 +0.504195 0.229992 0.247331 +0.507065 0.231880 0.243220 +0.509968 0.233866 0.239229 +0.512896 0.236050 0.235334 +0.515844 0.238350 0.231514 +0.518842 0.240823 0.227787 +0.521842 0.243453 0.224136 +0.524894 0.246246 0.220647 +0.527969 0.249200 0.217203 +0.531082 0.252307 0.213873 +0.534225 0.255563 0.210643 +0.537416 0.258987 0.207528 +0.540630 0.262549 0.204524 +0.543886 0.266281 0.201585 +0.547179 0.270169 0.198791 +0.550515 0.274192 0.196132 +0.553885 0.278386 0.193559 +0.557305 0.282735 0.191089 +0.560748 0.287203 0.188770 +0.564244 0.291860 0.186548 +0.567772 0.296649 0.184461 +0.571340 0.301568 0.182483 +0.574948 0.306664 0.180655 +0.578598 0.311864 0.178977 +0.582284 0.317240 0.177430 +0.586017 0.322749 0.175966 +0.589771 0.328376 0.174730 +0.593578 0.334152 0.173585 +0.597416 0.340051 0.172608 +0.601285 0.346065 0.171791 +0.605194 0.352226 0.171139 +0.609146 0.358507 0.170652 +0.613114 0.364912 0.170337 +0.617133 0.371432 0.170196 +0.621178 0.378080 0.170234 +0.625257 0.384833 0.170456 +0.629367 0.391713 0.170869 +0.633516 0.398692 0.171480 +0.637690 0.405793 0.172295 +0.641897 0.412993 0.173322 +0.646135 0.420290 0.174579 +0.650407 0.427708 0.176000 +0.654703 0.435222 0.177736 +0.659036 0.442831 0.179619 +0.663407 0.450539 0.181754 +0.667798 0.458344 0.184159 +0.672217 0.466246 0.186797 +0.676668 0.474246 0.189683 +0.681140 0.482334 0.192826 +0.685655 0.490514 0.196242 +0.690187 0.498775 0.199872 +0.694745 0.507119 0.203841 +0.699332 0.515544 0.208030 +0.703944 0.524059 0.212508 +0.708579 0.532648 0.217265 +0.713225 0.541296 0.222288 +0.717895 0.550029 0.227610 +0.722571 0.558812 0.233180 +0.727265 0.567668 0.239068 +0.731968 0.576577 0.245213 +0.736664 0.585526 0.251677 +0.741360 0.594511 0.258373 +0.746052 0.603542 0.265369 +0.750732 0.612587 0.272630 +0.755385 0.621656 0.280165 +0.760006 0.630745 0.287962 +0.764599 0.639821 0.296021 +0.769139 0.648887 0.304326 +0.773631 0.657933 0.312873 +0.778064 0.666936 0.321653 +0.782419 0.675905 0.330656 +0.786695 0.684810 0.339884 +0.790867 0.693646 0.349292 +0.794942 0.702400 0.358881 +0.798901 0.711061 0.368667 +0.802727 0.719608 0.378588 +0.806422 0.728028 0.388664 +0.809958 0.736314 0.398854 +0.813335 0.744458 0.409164 +0.816545 0.752436 0.419568 +0.819561 0.760246 0.430039 +0.822394 0.767865 0.440566 +0.825010 0.775295 0.451146 +0.827418 0.782521 0.461742 +0.829604 0.789531 0.472346 +0.831554 0.796313 0.482931 +0.833258 0.802869 0.493494 +0.834717 0.809192 0.504023 +0.835918 0.815263 0.514486 +0.836858 0.821087 0.524871 +0.837531 0.826662 0.535170 +0.837927 0.831978 0.545375 +0.838045 0.837031 0.555455 +0.837883 0.841824 0.565417 +0.837435 0.846348 0.575250 +0.836696 0.850614 0.584935 +0.835669 0.854618 0.594457 +0.834353 0.858353 0.603824 +0.832739 0.861831 0.613005 +0.830839 0.865039 0.622016 +0.828643 0.867997 0.630853 +0.826153 0.870685 0.639486 +0.823373 0.873124 0.647922 +0.820303 0.875309 0.656171 +0.816950 0.877238 0.664202 +0.813306 0.878922 0.672031 +0.809388 0.880359 0.679644 +0.805181 0.881555 0.687053 +0.800706 0.882504 0.694237 +0.795954 0.883220 0.701215 +0.790939 0.883702 0.707970 +0.785664 0.883948 0.714502 +0.780124 0.883963 0.720819 +0.774335 0.883750 0.726915 +0.768301 0.883309 0.732792 +0.762029 0.882644 0.738441 +0.755527 0.881765 0.743873 +0.748792 0.880661 0.749079 +0.741841 0.879343 0.754074 +0.734683 0.877813 0.758841 +0.727313 0.876068 0.763388 +0.719756 0.874113 0.767719 +0.712006 0.871955 0.771837 +0.704082 0.869584 0.775732 +0.695993 0.867012 0.779414 +0.687741 0.864247 0.782882 +0.679339 0.861273 0.786143 +0.670810 0.858109 0.789187 +0.662150 0.854755 0.792019 +0.653362 0.851204 0.794649 +0.644479 0.847473 0.797069 +0.635505 0.843557 0.799296 +0.626448 0.839467 0.801310 +0.617323 0.835195 0.803130 +0.608145 0.830754 0.804757 +0.598912 0.826142 0.806190 +0.589646 0.821370 0.807431 +0.580374 0.816441 0.808484 +0.571083 0.811354 0.809355 +0.561811 0.806120 0.810038 +0.552547 0.800742 0.810547 +0.543317 0.795225 0.810885 +0.534125 0.789579 0.811051 +0.524999 0.783805 0.811048 +0.515929 0.777906 0.810881 +0.506955 0.771892 0.810554 +0.498077 0.765771 0.810073 +0.489276 0.759536 0.809444 +0.480607 0.753210 0.808662 +0.472072 0.746795 0.807735 +0.463654 0.740290 0.806671 +0.455394 0.733701 0.805462 +0.447279 0.727034 0.804130 +0.439337 0.720299 0.802661 +0.431578 0.713497 0.801070 +0.423976 0.706638 0.799360 +0.416583 0.699711 0.797521 +0.409380 0.692747 0.795570 +0.402372 0.685723 0.793511 +0.395598 0.678655 0.791330 +0.389026 0.671549 0.789048 +0.382671 0.664406 0.786657 +0.376562 0.657236 0.784158 +0.370660 0.650026 0.781553 +0.365016 0.642789 0.778844 +0.359615 0.635525 0.776036 +0.354461 0.628244 0.773123 +0.349553 0.620936 0.770113 +0.344901 0.613599 0.766998 +0.340512 0.606253 0.763782 +0.336374 0.598893 0.760465 +0.332529 0.591514 0.757040 +0.328930 0.584115 0.753510 +0.325587 0.576714 0.749871 +0.322555 0.569280 0.746129 +0.319777 0.561855 0.742275 +0.317272 0.554406 0.738302 +0.315046 0.546949 0.734221 +0.313109 0.539477 0.730018 +0.311441 0.532009 0.725695 +0.310071 0.524525 0.721239 +0.308966 0.517042 0.716673 +0.308112 0.509546 0.711966 +0.307548 0.502054 0.707132 +0.307260 0.494561 0.702158 +0.307234 0.487065 0.697056 +0.307463 0.479578 0.691816 +0.307949 0.472098 0.686432 +0.308702 0.464628 0.680904 +0.309677 0.457161 0.675245 +0.310879 0.449728 0.669443 +0.312279 0.442319 0.663499 +0.313934 0.434930 0.657412 +0.315778 0.427577 0.651184 +0.317795 0.420253 0.644817 +0.320009 0.412992 0.638326 +0.322377 0.405774 0.631704 +0.324886 0.398606 0.624954 +0.327554 0.391516 0.618086 +0.330353 0.384484 0.611110 +0.333270 0.377545 0.604024 +0.336267 0.370682 0.596835 +0.339387 0.363923 0.589549 +0.342566 0.357280 0.582191 +0.345800 0.350728 0.574756 +0.349117 0.344276 0.567267 +0.352467 0.337970 0.559714 +0.355866 0.331794 0.552120 +0.359272 0.325743 0.544484 +0.362710 0.319862 0.536836 +0.366167 0.314106 0.529165 +0.369611 0.308515 0.521481 +0.373061 0.303063 0.513821 +0.376517 0.297796 0.506155 +0.379939 0.292691 0.498537 +0.383360 0.287752 0.490941 +0.386740 0.283009 0.483366 +0.390111 0.278418 0.475862 +0.393460 0.274009 0.468397 +0.396772 0.269784 0.460998 +0.400064 0.265728 0.453665 +0.403326 0.261851 0.446404 +0.406547 0.258146 0.439213 +0.409741 0.254658 0.432120 +0.412905 0.251321 0.425087 +0.416023 0.248166 0.418135 +0.419122 0.245150 0.411283 +0.422176 0.242352 0.404511 +0.425224 0.239720 0.397844 +0.428226 0.237276 0.391261 +0.431207 0.234977 0.384755 +0.434145 0.232820 0.378357 +0.437082 0.230864 0.372040 +0.439979 0.229066 0.365832 +0.442860 0.227428 0.359703 +0.445706 0.225957 0.353661 +0.448555 0.224596 0.347728 \ No newline at end of file diff --git a/plotsandgraphs/multiclass_classifier.py b/plotsandgraphs/multiclass_classifier.py index b69d532..02c21de 100644 --- a/plotsandgraphs/multiclass_classifier.py +++ b/plotsandgraphs/multiclass_classifier.py @@ -1,6 +1,7 @@ from pathlib import Path -from typing import Optional +from typing import Optional, List, Callable, Dict, Tuple, Union import matplotlib.pyplot as plt +from matplotlib.patches import BoxStyle from matplotlib.colors import to_rgba from matplotlib.figure import Figure import numpy as np @@ -13,58 +14,336 @@ auc, accuracy_score, precision_recall_curve, + roc_auc_score, ) from sklearn.calibration import calibration_curve from sklearn.utils import resample from tqdm import tqdm +from plotsandgraphs.utils import bootstrap, set_black_title_box, scale_ax_bbox, get_cmap -def plot_y_prob_histogram(y_true: np.ndarray, y_prob: Optional[np.ndarray] = None, save_fig_path=None) -> Figure: - - plot_len = np.ceil(np.sqrt(y_true.shape[-1])).astype(int) # Number of plots in a row/column - fig, axes = plt.subplots(nrows=plot_len, ncols=plot_len, figsize=(plot_len*4+1, plot_len*4), sharey=True) + +def plot_roc_curve( + y_true: np.ndarray, + y_score: np.ndarray, + confidence_interval: Optional[float] = 0.95, + highlight_roc_area: bool = True, + n_bootstraps: int = 1, + figsize: Optional[Tuple[float, float]] = None, + class_labels: Optional[List[str]] = None, + split_plots: bool = True, + save_fig_path=Optional[Union[str, Tuple[str, str]]], +) -> Tuple[Figure, Union[Figure, None]]: + """ + Creates two plots. + 1) ROC curves for a multiclass classifier. Includes the option for bootstrapping. + 2) An overview of the AUROC for each class and the macro average AUROC for one vs rest. + Note: That the AUROC overview plot can be included with the ROC curves by setting split_plots=False. + + + Parameters + ---------- + y_true : np.ndarray + The actual labels of the data. Either 0 or 1. One hot encoded. + y_score : np.ndarray + The output scores of the classifier. Between 0 and 1. + figsize : tuple, optional + The size of the figure. By default (5,5). + confidence_interval : float, optional + The confidence interval to use for the calibration plot. By default 0.95. Between 0 and 1. Has no effect when not using n_bootstraps. + highlight_roc_area : bool, optional + Whether to highlight the area under the ROC curve. By default True. Has no effect when using n_bootstraps. + n_bootstraps : int, optional + Number of bootstrap samples to use for the calibration plot. Recommended minimum: 1000, moderate: 5000-10000, high: 50000-100000. + If None, then no bootstrapping is done. By default None. + class_labels : List[str], optional + The labels of the classes. By default None. + split_plots : bool, optional + Whether to split the plots into two separate figures. By default True. + save_fig_path : Optional[Union[str, Tuple[str, str]]], optional + Path to folder where the figure(s) should be saved. If None then plot is not saved, by default None. If `split_plots` is False, then a single str is required. If True, then a tuple of strings (Pos 1 Roc curves comparison, Pos 2 AUROCs comparison). E.g. `save_fig_path=('figures/roc_curves.png', 'figures/aurocs_comparison.png')`. + + Returns + ------- + figures : Tuple[Figure, Figure] + The figures of the calibration plot. First the roc curves, then the AUROC overview. + """ + # Sanity checks + if confidence_interval is None and highlight_roc_area is True: + raise ValueError( + "Confidence interval must be set when highlight_roc_area is True." + ) + if confidence_interval is None: + confidence_interval = ( + 0.95 # default value, but it will not be displayed in the plot + ) + + num_classes = y_true.shape[-1] + class_labels = ( + [f"Class {i}" for i in range(num_classes)] + if class_labels is None + else class_labels + ) + cmap, colors = get_cmap("roma", n_colors=num_classes + 1) + + # ------ ROC curves ------ + n_subplots = num_classes + (split_plots is False) + # Aiming for a square plot + plot_cols = np.ceil(np.sqrt(n_subplots)).astype(int) # Number of plots in a row + plot_rows = np.ceil(n_subplots / plot_cols).astype( + int + ) # Number of plots in a column + figsize = (plot_cols * 4 + 1, plot_rows * 4) if figsize is None else figsize + fig, axes = plt.subplots( + nrows=plot_rows, ncols=plot_cols, figsize=figsize, sharey=True + ) + plt.suptitle("Receiver Operating Characteristic (ROC), One vs Rest") + + # the roc metric function to pass for bootstrapping + def roc_metric_function(y_true, y_score): + fpr, tpr, _ = roc_curve(y_true, y_score, drop_intermediate=False) + auc_score = auc(fpr, tpr) + # print lengths + # print(fpr.shape, tpr.shape, auc_score) + return fpr, tpr, auc_score + + aucs_lower, aucs_median, aucs_upper = [], [], [] + + # for each class calculate the ROC + for i in tqdm(range(num_classes), desc="ROC for Class"): + # only plot axis that should be printed + if i >= num_classes: + continue + + # --- BOOTSTRAPPING / CALCULATIONS --- + # bootstrap the ROC curve for class i + roc_result = bootstrap( + metric_function=roc_metric_function, + input_resample=[y_true[:, i], y_score[:, i]], + n_bootstraps=n_bootstraps, + metric_kwargs={}, + ) + # unpack the results + fprs, tprs, aucs = zip(*roc_result) + fprs, tprs, aucs = [x for x in [fprs, tprs, aucs]] + + # Determine min and max FPR values across all bootstrapped samples + min_fpr = min(min(fpr) for fpr in fprs) + max_fpr = max(max(fpr) for fpr in fprs) + + # Define common FPR values for interpolation within the min and max range + common_fpr = np.linspace(min_fpr, max_fpr, 200) + + # Interpolate TPRs for each bootstrap sample + interp_tprs = [ + np.interp(common_fpr, np.sort(fpr), tpr[np.argsort(fpr)]) + for fpr, tpr in zip(fprs, tprs) + ] + + # calculate median and quantiles + quantiles = [0.5 - confidence_interval / 2, 0.5, 0.5 + confidence_interval / 2] + tpr_lower, tpr_median, tpr_upper = np.quantile(interp_tprs, q=quantiles, axis=0) + auc_lower, auc_median, auc_upper = np.quantile(aucs, q=quantiles, axis=0) + aucs_lower.append(auc_lower) + aucs_median.append(auc_median) + aucs_upper.append(auc_upper) + + # --- PLOTTING --- + ax = axes.flat[i] + ax.plot(common_fpr, tpr_median, label="Median ROC", c=colors[i]) + if highlight_roc_area: + ax.fill_between( + common_fpr, + tpr_lower, + tpr_upper, + alpha=0.3, + label=f"{confidence_interval:.1%} CI", + fc=colors[i], + ) + ax.plot([0, 1], [0, 1], "k--", label="Random classifier") + ax.set_xlim([-0.01, 1.01]) + ax.set_ylim([-0.01, 1.01]) + # if subplot in first column + if (i % plot_cols) == 0: + ax.set_ylabel("True Positive Rate") + # if subplot in last row + if (i // plot_cols) + 1 == plot_rows: + ax.set_xlabel("False Positive Rate") + + # plot AUROC at the bottom right of each plot + auroc_text = f"AUROC: {auc_median:.3f} {confidence_interval:.0%} CI: [{auc_lower:.3f},{auc_upper:.3f}]" + ax.text(0.99, 0.02, auroc_text, ha="right", va="bottom", transform=ax.transAxes) + + # Legend only in first subplot + if i == 0: + # plot legend above previous text + ax.legend( + loc="center right", frameon=True, bbox_to_anchor=(0.5, 0.0, 0.5, 0.5) + ) + ax.spines[:].set_color("grey") + # ax.grid(True, linestyle="-", linewidth=0.5, color="grey", alpha=0.5) + ax.set_yticks(np.arange(0, 1.1, 0.2)) + + # disable axis for subplots in last row that are not required + for i in range(num_classes, len(axes.flat)): + axes.flat[i].axis("off") + + # make the subplot tiles (and black boxes) + for i in range(num_classes): + set_black_title_box(axes.flat[i], f"Class {i}") + plt.tight_layout(h_pad=1.5) + # make the subplot tiles (and black boxes) + # First time to get the approx. correct spacing with plt.tight_layout() + # Second time to get the correct width of the black box + # Thank you matplotlib ... + for i in range(num_classes): + set_black_title_box( + axes.flat[i], + f"Class {i}", + set_title_kwargs={ + "fontdict": {"fontname": "Arial Black", "fontweight": "bold"} + }, + ) + + # ---------- AUROC overview plot comparing classes ---------- + # Make an AUROC overview plot comparing the aurocs per class and combined + + # Define metric funtion to calculate one vs rest AUROC + def auroc_metric_function(y_true, y_score, average, multi_class): + auc = roc_auc_score(y_true, y_score, average=average, multi_class=multi_class) + return auc + + # get the combined auroc bootstrap results for one vs rest + roc_result = bootstrap( + metric_function=auroc_metric_function, + input_resample=[y_true, y_score], + n_bootstraps=n_bootstraps, + metric_kwargs={"average": "macro", "multi_class": "ovr"}, + ) + + # get the lower, median and upper quantiles + auc_comb_lower, auc_comb_median, auc_comb_upper = np.quantile( + roc_result, q=quantiles, axis=0 + ) + # add the result to the beginning of the numpy array + aucs_lower = np.insert(aucs_lower, 0, auc_comb_lower) + aucs_median = np.insert(aucs_median, 0, auc_comb_median) + aucs_upper = np.insert(aucs_upper, 0, auc_comb_upper) + + # Either create a new figure or use the same figure as the roc curves for the auroc overview + fig_aurocs = None + if split_plots: + fig_aurocs = plt.figure(figsize=(5, 5)) + ax = fig_aurocs.add_subplot(111) + else: + fig_aurocs = None + ax = axes.flat[ + num_classes + 1 - 1 + ] # +1 cause we plot after class roc curve, -1 cause indexing begins at 0 + scale_ax_bbox( + ax, 0.9 + ) # needed to avoid plot overlap and calling plt.tight_layout() again + ax.axis("on") + # y ticks on + ax.tick_params(axis="y", which="both", left=True, labelleft=True) + ax.set_title(f"AUROC (One vs Rest, CI={confidence_interval:.0%})") + labels = ["Macro\nAverage"] + class_labels + + for i, (lower, median, upper) in enumerate( + zip(aucs_lower, aucs_median, aucs_upper) + ): + lower = median - lower + upper = upper - median + ax.errorbar( + i, median, yerr=[[lower], [upper]], ecolor="grey", capsize=5, capthick=2 + ) + ax.scatter(i, median, s=25, color=colors[i - 1], zorder=10, alpha=0.7) + + ax.set(xticks=range(len(labels)), xticklabels=labels) + ax.tick_params(axis="x", rotation=0) + ax.set_yticks(np.arange(0, 1.1, 0.1), minor=True) + ax.grid(True, linestyle=":", axis="both") + + # save auroc comparison plot + if save_fig_path and split_plots is True and fig_aurocs is not None: + path = Path(save_fig_path[1]) + path.parent.mkdir(parents=True, exist_ok=True) + fig_aurocs.savefig(path, bbox_inches="tight") + # save roc curves plot + if save_fig_path is not None: + path = save_fig_path[0] if split_plots is True else save_fig_path + path = Path(path) + path.parent.mkdir(parents=True, exist_ok=True) + fig.savefig(path, bbox_inches="tight") + return fig, fig_aurocs + + +def plot_y_prob_histogram( + y_true: np.ndarray, y_prob: Optional[np.ndarray] = None, save_fig_path=None +) -> Figure: + # Aiming for a square plot + plot_cols = np.ceil(np.sqrt(y_true.shape[-1])).astype( + int + ) # Number of plots in a row + plot_rows = np.ceil(y_true.shape[-1] / plot_cols).astype( + int + ) # Number of plots in a column + fig, axes = plt.subplots( + nrows=plot_rows, + ncols=plot_cols, + figsize=(plot_cols * 4 + 1, plot_rows * 4), + sharey=True, + ) alpha = 0.6 plt.suptitle("Predicted probability histogram") - + + # Flatten axes if there is only one class, even though this function is designed for multiclasses + if y_true.shape[-1] == 1: + axes = np.array([axes]) + for i, ax in enumerate(axes.flat): if i >= y_true.shape[-1]: ax.axis("off") continue - + if y_prob is not None: y_true_i = y_true[:, i] y_prob_i = y_prob[:, i] - ax.hist(y_prob_i[y_true_i==0], - bins=10, - label="$\\hat{y} = 0$", - alpha=alpha, - edgecolor="midnightblue", - linewidth=2, - rwidth=1,) - ax.hist(y_prob_i[y_true_i==1], - bins=10, - label="$\\hat{y} = 1$", - alpha=alpha, - edgecolor="midnightblue", - linewidth=2, - rwidth=1,) + ax.hist( + y_prob_i[y_true_i == 0], + bins=10, + label="$\\hat{y} = 0$", + alpha=alpha, + edgecolor="midnightblue", + linewidth=2, + rwidth=1, + ) + ax.hist( + y_prob_i[y_true_i == 1], + bins=10, + label="$\\hat{y} = 1$", + alpha=alpha, + edgecolor="midnightblue", + linewidth=2, + rwidth=1, + ) ax.set_title(f"Class {i}") ax.set_xlim((-0.005, 1.0)) # if subplot in first column - if i % plot_len == 0: + if (i % plot_cols) == 0: ax.set_ylabel("Count [-]") # if subplot in last row - if i >= plot_len*(plot_len-1): - ax.set_xlabel("Predicted probability [-]") + if (i // plot_cols) + 1 == plot_rows: + ax.set_xlabel("$P\\,(y=1)$") # ax.spines[:].set_visible(False) ax.grid(True, linestyle="-", linewidth=0.5, color="grey", alpha=0.5) ax.set_xticks(np.arange(0, 1.1, 0.2)) # only first subplot should have legends if i == 0: ax.legend() - + plt.tight_layout() - + # save plot if save_fig_path is not None: path = Path(save_fig_path) diff --git a/plotsandgraphs/utils.py b/plotsandgraphs/utils.py new file mode 100644 index 0000000..42f63fd --- /dev/null +++ b/plotsandgraphs/utils.py @@ -0,0 +1,169 @@ +from typing import Optional, List, Callable, Dict, Tuple, Union, TYPE_CHECKING +from tqdm import tqdm +from sklearn.utils import resample +import numpy as np +from matplotlib.path import Path +from matplotlib.patches import BoxStyle +from matplotlib.colors import LinearSegmentedColormap + +if TYPE_CHECKING: + from matplotlib.axes import Axes + + +def bootstrap(metric_function: Callable, input_resample: List[np.ndarray], n_bootstraps: int, metric_kwargs: Dict={}) -> List: + """ + A bootstrapping function for a metric function. The metric function should take the same number of arguments as the length of input_resample. + + Parameters + ---------- + metric_function : Callable + The metric function to use. Should take the same number of arguments as the length of input_resample. + input_resample : List[np.ndarray] + A list of arrays to resample. The arrays should have the same length. The arrays are passed to the metric function. + n_bootstraps : int + The number of bootstrap iterations. + metric_kwargs : Dict + Keyword arguments to pass to the metric function. + + Returns + ------- + List + A list of the metric function results for each bootstrap iteration. + """ + results = [] + # for each bootstrap iteration + for _ in tqdm(range(n_bootstraps), desc='Bootsrapping', leave=True): + # resample indices with replacement + indices = resample(np.arange(len(input_resample[0])), replace=True) + input_resampled = [x[indices] for x in input_resample] + # calculate metric + result = metric_function(*input_resampled, **metric_kwargs) + + results.append(result) + + return results + + + +class ExtendedTextBox_v2: + """ + Black background boxes for titles in maptlolib subplots + + From: + https://stackoverflow.com/questions/40796117/how-do-i-make-the-width-of-the-title-box-span-the-entire-plot + https://matplotlib.org/stable/gallery/userdemo/custom_boxstyle01.html?highlight=boxstyle+_style_list + """ + + def __init__(self, pad=0.3, width=500.): + """ + The arguments must be floats and have default values. + + Parameters + ---------- + pad : float + amount of padding + """ + self.width = width + self.pad = pad + super().__init__() + + def __call__(self, x0, y0, width, height, mutation_size): + """ + Given the location and size of the box, return the path of the box + around it. + + Rotation is automatically taken care of. + + Parameters + ---------- + x0, y0, width, height : float + Box location and size. + mutation_size : float + Reference scale for the mutation, typically the text font size. + """ + # padding + pad = mutation_size * self.pad + # width and height with padding added + #width = width + 2.*pad + height = height + 3 * pad + # boundary of the padded box + y0 = y0 - pad # change this to move the text + y1 = y0 + height + _x0 = x0 + x0 = _x0 +width /2. - self.width/2. + x1 = _x0 +width /2. + self.width/2. + # return the new path + return Path([(x0, y0), + (x1, y0), (x1, y1), (x0, y1), + (x0, y0)], + closed=True) + + +def set_black_title_box(ax: "Axes", title=str, backgroundcolor='black', color='white', set_title_kwargs: Dict={}): + """ + Sets the title of the given axes with a black bounding box. + Note: When using `plt.tight_layout()` the box might not have the correct width. First call `plt.tight_layout()` and then `set_black_title_box()`. + + Parameters: + - ax: The matplotlib.axes.Axes object to set the title for. + - title: The title string to be displayed. + - backgroundcolor: The background color of the title box (default: 'black'). + - color: The color of the title text (default: 'white'). + - set_title_kwargs: Keyword arguments to pass to `ax.set_title()`. + """ + BoxStyle._style_list["ext"] = ExtendedTextBox_v2 + ax_width = ax.get_window_extent().width + # make title with black bounding box + title = ax.set_title(title, backgroundcolor=backgroundcolor, color=color, **set_title_kwargs) + bb = title.get_bbox_patch() # get bbox from title + bb.set_boxstyle("ext", pad=0.1, width=ax_width) # use custom style + + +def scale_ax_bbox(ax: "Axes", factor: float): + # Get the current position of the subplot + box = ax.get_position() + + # Calculate the new width and the adjustment for the x-position + new_width = box.width * factor + adjustment = (box.width - new_width) / 2 + + # Set the new position + ax.set_position([box.x0 + adjustment, box.y0, new_width, box.height]) + + return + + + +def get_cmap(cmap_name: str, n_colors: Optional[int]=None) -> Tuple[LinearSegmentedColormap, Tuple]: + """ + Loads one of the custom cmaps from the cmaps folder. + + Parameters + ---------- + cmap_name : str + The name of the cmap file without the extension. + + Returns + ------- + Tuple[LinearSegmentedColormap, Union[None, Tuple]] + A tuple of the cmap and a list of colors if n_colors is not None. + + Example + ------- + >>> cmap_name = 'hawaii' + >>> cmap, color_list = get_cmap(cmap_name, n_colors=10) + """ + from pathlib import Path as PathClass + + cm_path = PathClass(__file__).parent / ('cmaps/' + cmap_name + '.txt') + cm_data = np.loadtxt(cm_path) + cmap_name = cmap_name.split('.')[0] + cmap = LinearSegmentedColormap.from_list(cmap_name, cm_data) + if n_colors is None: + n_colors = 10 + color_list = cmap(np.linspace(0, 1, n_colors)) + return cmap, color_list + + + + \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 576db67..d61c26d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,3 +9,6 @@ disable = "W0621" # Allow redefining names in outer scope [flake8] max-line-length = 120 + +[tool.mypy] +ignore_missing_imports = true \ No newline at end of file diff --git a/src/binary_classifier.py b/src/binary_classifier.py deleted file mode 100644 index fdd44ad..0000000 --- a/src/binary_classifier.py +++ /dev/null @@ -1,459 +0,0 @@ -from typing import Optional -from pathlib import Path -import matplotlib.pyplot as plt -from matplotlib.colors import to_rgba -from matplotlib.figure import Figure -import numpy as np -import pandas as pd -from sklearn.metrics import confusion_matrix, classification_report, ConfusionMatrixDisplay, roc_curve, auc, accuracy_score, precision_recall_curve -from sklearn.calibration import calibration_curve -from sklearn.utils import resample -from tqdm import tqdm - - -def plot_accuracy(y_true, y_pred, name='', save_fig_path=None) -> Figure: - """ Really ugly plot, I am not sure if the scalar value for accuracy should receive an entire plot.""" - accuracy = accuracy_score(y_true, y_pred) - - # accuracy = 0 - # for t in range(max_seq_len): - # accuracy += accuracy_score( y[:,t,0].round() , y_pred[:,t] ) - # accuracy = accuracy / max_seq_len - fig= plt.figure( figsize=(4,5)) - plt.bar( np.array([0]), np.array([ accuracy ])) - # axs[0].set_xticks(ticks=range(2)) - # axs[0].set_xticklabels(["train", "test"]) - plt.ylabel('Accuracy') - plt.ylim([0,1]) - # axs[0].set_xlabel('Features') - title = "Predictor model: {}".format(name ) - plt.title(title) - plt.tight_layout() - - if (save_fig_path != None): - path = Path(save_fig_path) - path.parent.mkdir(parents=True, exist_ok=True) - fig.savefig(save_fig_path, bbox_inches='tight') - return fig, accuracy - -def plot_confusion_matrix(y_true: np.ndarray, y_pred: np.ndarray, save_fig_path=None) -> Figure: - import matplotlib.colors as colors - - # Compute the confusion matrix - cm = confusion_matrix(y_true, y_pred.round()) - # normalize the confusion matrix - cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis] - - # Create the ConfusionMatrixDisplay instance and plot it - cmd = ConfusionMatrixDisplay(cm, display_labels=['class 0\nnegative', 'class 1\npositive']) - fig, ax = plt.subplots(figsize=(4,4)) - cmd.plot(cmap='YlOrRd', values_format='', colorbar=False, ax=ax, text_kw={'visible':False}) - cmd.texts_ = [] - cmd.text_ = [] - - text_labels = ['TN', 'FP', 'FN', 'TP'] - cmap_min, cmap_max = cmd.im_.cmap(0), cmd.im_.cmap(1.0) - for i in range(2): - for j in range(2): - ax.text(j, i, f"{text_labels[i * 2 + j]}\n{cmd.im_.get_array()[i, j]:.2%}", - ha="center", va="center", color=cmap_min if cmd.im_.get_array()[i, j] > 0.5 else cmap_max) - - ax.vlines([0.5], *ax.get_ylim(), color='white', linewidth=1) - ax.hlines([0.49], *ax.get_xlim(), color='white', linewidth=1) - ax.spines[:].set_visible(False) - - - bounds = np.linspace(0, 1, 11) - cmap = plt.cm.get_cmap('YlOrRd', len(bounds)+1) - norm = colors.BoundaryNorm(bounds, cmap.N) - cbar = ax.figure.colorbar(cmd.im_, ax=ax, cmap=cmap, norm=norm, boundaries=bounds, ticks=bounds[::2], location="right", shrink=0.8) - # cbar.set_ticks(np.arange(0,1.1,0.1)) - cbar.ax.yaxis.set_ticks_position('both') - cbar.outline.set_visible(False) - plt.tight_layout() - - if (save_fig_path != None): - path = Path(save_fig_path) - path.parent.mkdir(parents=True, exist_ok=True) - fig.savefig(save_fig_path, bbox_inches='tight') - - return fig - - - - -def plot_classification_report(y_test: np.ndarray, - y_pred: np.ndarray, - title='Classification Report', - figsize=(8, 4), - save_fig_path=None, **kwargs): - """ - TODO: save all these plots - Plot the classification report of sklearn - - Parameters - ---------- - y_test : pandas.Series of shape (n_samples,) - Targets. - y_pred : pandas.Series of shape (n_samples,) - Predictions. - title : str, default = 'Classification Report' - Plot title. - fig_size : tuple, default = (8, 6) - Size (inches) of the plot. - dpi : int, default = 70 - Image DPI. - save_fig_path : str, defaut=None - Full path where to save the plot. Will generate the folders if they don't exist already. - **kwargs : attributes of classification_report class of sklearn - - Returns - ------- - fig : Matplotlib.pyplot.Figure - Figure from matplotlib - ax : Matplotlib.pyplot.Axe - Axe object from matplotlib - """ - import matplotlib as mpl - import matplotlib.colors as colors - import seaborn as sns - import pathlib - - fig, ax = plt.subplots(figsize=figsize) - - cmap = 'YlOrRd' - - clf_report = classification_report(y_test, y_pred, output_dict=True, **kwargs) - keys_to_plot = [key for key in clf_report.keys() if key not in ('accuracy', 'macro avg', 'weighted avg')] - df = pd.DataFrame(clf_report, columns=keys_to_plot).T - #the following line ensures that dataframe are sorted from the majority classes to the minority classes - df.sort_values(by=['support'], inplace=True) - - #first, let's plot the heatmap by masking the 'support' column - rows, cols = df.shape - mask = np.zeros(df.shape) - mask[:,cols-1] = True - - bounds = np.linspace(0, 1, 11) - cmap = plt.cm.get_cmap('YlOrRd', len(bounds)+1) - norm = colors.BoundaryNorm(bounds, cmap.N) - - ax = sns.heatmap(df, mask=mask, annot=False, cmap=cmap, fmt='.3g', - cbar_kws={'ticks':bounds[::2], 'norm':norm, 'boundaries':bounds}, - vmin=0.0, - vmax=1.0, - linewidths=2, linecolor='white' - ) - cbar = ax.collections[0].colorbar - cbar.ax.yaxis.set_ticks_position('both') - - cmap_min, cmap_max = cbar.cmap(0), cbar.cmap(1.0) - - # add text annotation to heatmap - dx, dy = 0.5, 0.5 - for i in range(rows): - for j in range(cols-1): - text = f"{df.iloc[i, j]:.2%}" #if (j 0.5 else cmap_max) - - #then, let's add the support column by normalizing the colors in this column - mask = np.zeros(df.shape) - mask[:,:cols-1] = True - - ax = sns.heatmap(df, mask=mask, annot=False, cmap=cmap, cbar=False, - linewidths=2, linecolor='white', fmt='.0f', - vmin=df['support'].min(), - vmax=df['support'].sum(), - norm=mpl.colors.Normalize(vmin=df['support'].min(), - vmax=df['support'].sum()) - ) - - cmap_min, cmap_max = cbar.cmap(0), cbar.cmap(1.0) - for i in range(rows): - j = cols-1 - text = f"{df.iloc[i, j]:.0f}" #if (j 0.5 else cmap_max) - - plt.title(title) - plt.xticks(rotation = 45) - plt.yticks(rotation = 360) - plt.tight_layout() - - if (save_fig_path != None): - path = Path(save_fig_path) - path.parent.mkdir(parents=True, exist_ok=True) - fig.savefig(save_fig_path, bbox_inches='tight') - - return fig, ax - - - - - -def plot_roc_curve( - y_true: np.ndarray, - y_score: np.ndarray, - figsize=(5,5), - save_fig_path=None, - confidence_interval: float=0.95, - highlight_roc_area=True, - n_bootstraps=None) -> Figure: - """ - Creates a ROC curve for a binary classifier. Includes the option for bootstrapping. - - Parameters - ---------- - y_true : np.ndarray - The actual labels of the data. Either 0 or 1. - y_score : np.ndarray - The output scores of the classifier. Between 0 and 1. - figsize : tuple, optional - The size of the figure. By default (5,5). - save_fig_path : str, optional - Path to folder where the figure should be saved. If None then plot is not saved, by default None. E.g. 'figures/roc_curve.png'. - confidence_interval : float, optional - The confidence interval to use for the calibration plot. By default 0.95. Between 0 and 1. Has no effect when not using n_bootstraps. - highlight_roc_area : bool, optional - Whether to highlight the area under the ROC curve. By default True. Has no effect when using n_bootstraps. - n_bootstraps : int, optional - Number of bootstrap samples to use for the calibration plot. Recommended minimum: 1000, moderate: 5000-10000, high: 50000-100000. - If None, then no bootstrapping is done. By default None. - - Returns - ------- - fig : matplotlib.pyplot figure - The figure of the calibration plot - """ - - # create figure - fig = plt.figure(figsize=figsize) - ax = fig.add_subplot(111) - - if n_bootstraps is None: - base_fpr, mean_tprs, thresholds = roc_curve(y_true, y_score) - mean_auc = auc(base_fpr, mean_tprs) - if highlight_roc_area is True: - plt.fill_between(base_fpr, 0, mean_tprs, alpha=0.2, zorder=2) - if confidence_interval is not None: - print('Warning: confidence_intervals is not None, but n_bootstraps is None. Confidence intervals will not be plotted.') - else: - # Bootstrapping for AUROC - bootstrap_aucs, bootstrap_tprs = [], [] - base_fpr = np.linspace(0, 1, 101) - for _ in tqdm(range(n_bootstraps), desc='Bootstrapping'): - indices = resample(np.arange(len(y_true)), replace=True) - fpr_i, tpr_i, _ = roc_curve(y_true[indices], y_score[indices]) - roc_auc_i = auc(fpr_i, tpr_i) - bootstrap_aucs.append(roc_auc_i) - - # Interpolate tpr_i to base_fpr, so we have the tpr for the same fpr values for each bootstrap iteration - tpr_i_interp = np.interp(base_fpr, fpr_i, tpr_i) - tpr_i_interp[0] = 0.0 - bootstrap_tprs.append(tpr_i_interp) - - mean_auc = np.mean(bootstrap_aucs) - tprs = np.array(bootstrap_tprs) - mean_tprs = tprs.mean(axis=0) - - # visualize confidence intervals - if confidence_interval is not None: - CI_upper = confidence_interval + (1-confidence_interval)/2 - CI_lower = (1-confidence_interval)/2 - tprs_upper = np.quantile(tprs, CI_upper, axis=0) - tprs_lower = np.quantile(tprs, CI_lower, axis=0) - auc_upper = np.quantile(bootstrap_aucs, CI_upper) - auc_lower = np.quantile(bootstrap_aucs, CI_lower) - label = f'{confidence_interval:.0%} CI: [{auc_lower:.2f}, {auc_upper:.2f}]' - plt.fill_between(base_fpr, tprs_lower, tprs_upper, alpha=0.3, label=label, zorder=2) - - if highlight_roc_area is True: - print('Warning: highlight_roc_area is True, but n_bootstraps is not None. The area under the ROC curve will not be highlighted.') - - plt.plot(base_fpr, mean_tprs, label=f'ROC curve (AUROC = {mean_auc:.2f})', zorder=3) - plt.plot([0, 1], [0, 1], 'k--', label='Random classifier') - plt.xlim([0.0, 1.01]) - plt.ylim([-0.01, 1.01]) - plt.xlabel('False Positive Rate') - plt.ylabel('True Positive Rate') - plt.title('Receiver Operating Characteristic (ROC)') - # reverse legend entry order - handles, labels = plt.gca().get_legend_handles_labels() - handles = handles[::-1] - labels = labels[::-1] - plt.legend(handles, labels, loc="lower right", frameon=False) - ax.spines[:].set_visible(False) - ax.grid(True, linestyle='-', linewidth=0.5, color='grey', alpha=0.5) - ax.set_yticks(np.arange(0, 1.1, 0.2)) - plt.tight_layout() - - if save_fig_path: - path = Path(save_fig_path) - path.parent.mkdir(parents=True, exist_ok=True) - fig.savefig(save_fig_path, bbox_inches='tight') - - return fig - - - -def plot_calibration_curve(y_prob: np.ndarray, y_true: np.ndarray, n_bins=10, save_fig_path=None): - """ - Creates calibration plot for a binary classifier and calculates the ECE. - - Parameters - ---------- - y_prob : np.ndarray - The output probabilities of the classifier. Between 0 and 1. - y_true : np.ndarray - The actual labels of the data. Either 0 or 1. - n_bins : int - The number of bins to use for the calibration curve. - save_fig_path : str, optional - Path to folder where the figure should be saved. If None then plot is not saved, by default None - - Returns - ------- - fig : matplotlib.pyplot figure - The figure of the calibration plot - ece : float - The expected calibration error. - """ - prob_true, prob_pred = calibration_curve(y_true, y_prob, n_bins=n_bins, strategy='uniform') - - # Find the number of samples in each bin - bin_counts = np.histogram(y_prob, bins=n_bins, range=(0, 1))[0] - - # Calculate the weighted absolute difference (ECE) - ece = np.abs(prob_pred - prob_true) * (bin_counts / len(y_prob)) - ece = ece.sum().round(2) - - fig = plt.figure(figsize=(5,5)) - ax = fig.add_subplot(111) - - # Evenly spaced bar locations on the x-axis and reduced bar width for spacing - bar_centers = np.linspace(0, 1, n_bins, endpoint=False) + 0.5 / n_bins - bar_width = 1.0 / n_bins # * 0.9 # 90% of the bin width to create gaps - - # Plotting - ax.bar(bar_centers, prob_true, width=bar_width, align='center', zorder=3, facecolor=to_rgba('C0',0.75), edgecolor='midnightblue', linewidth=2, label=f'True Calibration') - ax.bar(bar_centers, prob_pred - prob_true, bottom=prob_true, width=bar_width, align='center', zorder=3, alpha=0.5, edgecolor='red', fill=False, linewidth=2, label=f'Mean ECE = {ece}', hatch='//') - ax.plot([0, 1], [0, 1], linestyle='--', color='grey', zorder=3, label='Perfect Calibration') - - # Labels and titles - ax.set(xlabel='Predicted probability', ylabel='True probability') - plt.xlim([0.0, 1.005]) - plt.ylim([-0.01, 1.0]) - ax.legend(loc='upper left', frameon=False) - - # show y-grid - ax.spines[:].set_visible(False) - ax.grid(True, linestyle='-', linewidth=0.5, color='grey', alpha=0.5) - ax.set_yticks(np.arange(0, 1.1, 0.2)) - ax.set_xticks(np.arange(0, 1.1, 0.2)) - plt.tight_layout() - - # save plot - if save_fig_path is not None: - path = Path(save_fig_path) - path.parent.mkdir(parents=True, exist_ok=True) - fig.savefig(save_fig_path, bbox_inches='tight') - - return fig, ece - - -def plot_y_prob_histogram(y_prob: np.ndarray, save_fig_path=None) -> Figure: - fig = plt.figure(figsize=(5,5)) - ax = fig.add_subplot(111) - ax.hist(y_prob, bins=10, alpha=0.9, edgecolor='midnightblue', linewidth=2, rwidth=1) - # same histogram as above, but with border lines - # ax.hist(y_prob, bins=10, alpha=0.5, edgecolor='black', linewidth=1.2) - ax.set(xlabel='Predicted probability [-]', ylabel='Count [-]', xlim=(-0.01, 1.0)) - ax.set_title('Histogram of predicted probabilities') - - ax.spines[:].set_visible(False) - ax.grid(True, linestyle='-', linewidth=0.5, color='grey', alpha=0.5) - ax.set_xticks(np.arange(0, 1.1, 0.2)) - plt.tight_layout() - - # save plot - if (save_fig_path is not None): - path = Path(save_fig_path) - path.parent.mkdir(parents=True, exist_ok=True) - fig.savefig(save_fig_path, bbox_inches='tight') - - return fig - - - -def plot_pr_curve( - y_true: np.ndarray, - y_score: np.ndarray, - figsize=(5,5), - save_fig_path: Optional[str]=None, - color: Optional[str]= None, - label: Optional[str]=None, - title: Optional[str]=None - ) -> Figure: - """ - Visualize the Precision-Recall curve for a binary classifier. - - Parameters - ---------- - y_true : np.ndarray - The actual labels of the data. Either 0 or 1. - y_score : np.ndarray - The output scores of the classifier. Between 0 and 1. - figsize : tuple, optional - The size of the figure. By default (5,5). - save_fig_path : str, optional - Path to folder where the figure should be saved. If None then plot is not saved, by default None. E.g. 'figures/pr_curve.png'. - color : str, optional - Color of the PR curve, by default None. - label : str, optional - Custom label for the plot. If None, a default label is used. By default None. - - Returns - ------- - fig : matplotlib.pyplot figure - The figure of the PR curve - """ - - # Create a new figure - fig = plt.figure(figsize=figsize) - ax = fig.add_subplot(111) - - # Compute Precision-Recall curve and area for each class - precision, recall, _ = precision_recall_curve(y_true, y_score) - - pr_auc = auc(recall, precision) - - if label is None: - # Use a default label if none is provided - label = 'PR curve' - - label += f' (area = {pr_auc:.3f})' - - # Plot Precision-Recall curve - ax.plot(recall, precision, label=label, color=color) - ax.set_xlim([0.0, 1.01]) - ax.set_ylim([-0.01, 1.01]) - ax.set_xlabel('Recall') - ax.set_ylabel('Precision') - if title is not None: - ax.set_title(title) - ax.legend(loc="lower right") - ax.spines[:].set_visible(False) - ax.grid(True, linestyle='-', linewidth=0.5, color='grey', alpha=0.5) - ax.set_yticks(np.arange(0, 1.1, 0.2)) - plt.tight_layout() - - # Save the figure if save_fig_path is specified - if save_fig_path: - plt.savefig(save_fig_path, bbox_inches='tight') - - return fig - diff --git a/src/compare_distributions.py b/src/compare_distributions.py deleted file mode 100644 index 5a9aeb4..0000000 --- a/src/compare_distributions.py +++ /dev/null @@ -1,102 +0,0 @@ -import numpy as np -import matplotlib.pyplot as plt -import matplotlib as mpl -import pandas as pd -from typing import List, Tuple - - -def plot_raincloud(df: pd.DataFrame, - x_col: str, - y_col: str, - colors: List[str] = None, - order: List[str] = None, - title: str = None, - x_label: str = None, - x_range: Tuple[float, float] = None, - show_violin = True, - show_scatter = True, - show_boxplot = True): - - """ - Generate a raincloud plot using Pandas DataFrame. - - Parameters: - - df (pd.DataFrame): The data frame containing the data. - - x_col (str): The column name for the x-axis data. - - y_col (str): The column name for the y-axis categories. - - colors (List[str], optional): List of colors for each category. Defaults to tab10 cmap. - - order (List[str], optional): Order of categories on y-axis. Defaults to unique values in y_col. - - title (str, optional): Title of the plot. - - x_label (str, optional): Label for the x-axis. - - x_range (Tuple[float, float], optional): Range for the x-axis. - - show_violin (bool, optional): Whether to show violin plot. Defaults to True. - - show_scatter (bool, optional): Whether to show scatter plot. Defaults to True. - - show_boxplot (bool, optional): Whether to show boxplot. Defaults to True. - - Returns: - - matplotlib.figure.Figure: The generated plot figure. - """ - - fig, ax = plt.subplots(figsize=(16, 8)) - offset = 0.2 # Offset value to move plots - - if order is None: - order = df[y_col].unique() - - # if colors are none, use distinct colors for each group - if colors is None: - cmap = plt.get_cmap('tab10') - colors = [mpl.colors.to_hex(cmap(i)) for i in np.linspace(0, 1, len(order))] - else: - assert len(colors) == len(order), 'colors and order must be the same length' - - # Boxplot - if show_boxplot: - bp = ax.boxplot([df[df[y_col] == grp][x_col].values for grp in order], - patch_artist=True, vert=False, positions=np.arange(1 + offset, len(order) + 1 + offset), widths=0.2) - - # Customize boxplot colors - for patch, color in zip(bp['boxes'], colors): - patch.set_facecolor(color) - patch.set_alpha(0.8) - - # Set median line color to black - for median in bp['medians']: - median.set_color('black') - - # Violinplot - if show_violin: - vp = ax.violinplot([df[df[y_col] == grp][x_col].values for grp in order], - positions=np.arange(1 + offset, len(order) + 1 + offset), showmeans=False, showextrema=False, showmedians=False, vert=False) - - # Customize violinplot colors - for idx, b in enumerate(vp['bodies']): - b.get_paths()[0].vertices[:, 1] = np.clip(b.get_paths()[0].vertices[:, 1], idx + 1 + offset, idx + 2 + offset) - b.set_color(colors[idx]) - - # Scatterplot with jitter - if show_scatter: - for idx, grp in enumerate(order): - features = df[df[y_col] == grp][x_col].values - y = np.full(len(features), idx + 1 - offset) - jitter_amount = 0.12 - y += np.random.uniform(low=-jitter_amount, high=jitter_amount, size=len(y)) - plt.scatter(features, y, s=10, c=colors[idx], alpha=0.3, facecolors='none') - - # Labels - plt.yticks(np.arange(1, len(order) + 1), order) - - if x_label is None: - x_label = x_col - plt.xlabel(x_label) - if title: - plt.title(title + '\n') - ax.spines['top'].set_visible(False) - ax.spines['right'].set_visible(False) - ax.spines['left'].set_visible(False) - ax.xaxis.grid(True) - - if x_range: - plt.xlim(x_range) - - return fig diff --git a/src/test.md b/src/test.md deleted file mode 100644 index 8b13789..0000000 --- a/src/test.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/test.txt b/src/test.txt deleted file mode 100644 index 6a69f92..0000000 --- a/src/test.txt +++ /dev/null @@ -1 +0,0 @@ -f diff --git a/tests/test_multiclass_classifier.py b/tests/test_multiclass_classifier.py new file mode 100644 index 0000000..2372dac --- /dev/null +++ b/tests/test_multiclass_classifier.py @@ -0,0 +1,150 @@ +from pathlib import Path +from typing import Tuple +from itertools import product +import numpy as np +import pytest +# import plotsandgraphs.binary_classifier as binary +import plotsandgraphs.multiclass_classifier as multiclass + +TEST_RESULTS_PATH = Path(r"tests\test_results") + + +# @pytest.fixture(scope="module") +def random_data_multiclass_classifier(num_classes:int = 3) -> Tuple[np.ndarray, np.ndarray]: + """ + Create random data for binary classifier tests. + + Returns + ------- + Tuple[np.ndarray, np.ndarray] + The simulated data. + """ + class_labels = np.arange(num_classes) + class_probs = np.random.random(num_classes) + class_probs = class_probs / class_probs.sum() # normalize + # True labels + y_true = np.random.choice(class_labels, p=class_probs, size=1000) + # one hot encoding + y_true_one_hot = np.eye(num_classes)[y_true] + + # Predicted labels + y_pred = np.ones(y_true_one_hot.shape) + + # parameters for Beta distribution for each label (a0,b0 for class 0, a1,b1 for class 1) + a0, b0 = [0.1, 0.6, 0.3, 0.4, 2]*10, [0.4, 1.2, 0.8, 1, 5]*10 + a1, b1 = [0.9, 0.8, 0.9, 1.2, 5]*10, [0.4, 0.1, 0.5, 0.3, 2]*10 + + # iterate through all the columns/labels and create a beta distribution for each label + for i in range(y_pred.shape[1]): + y = y_pred[:, i] + y_t = y_true_one_hot[:, i] + y[y_t==0] = np.random.beta(a0[i], b0[i], size=y[y_t==0].shape) + y[y_t==1] = np.random.beta(a1[i], b1[i], size=y[y_t==1].shape) + + return y_true_one_hot, y_pred + + +# Test histogram plot +def test_hist_plot(): + """ + Test histogram plot. + + Parameters + ---------- + random_data_binary_classifier : Tuple[np.ndarray, np.ndarray] + The simulated data. + """ + for num_classes in [2, 3, 4, 5, 10, 16, 25]: + y_true, y_prob = random_data_multiclass_classifier(num_classes=num_classes) + print(TEST_RESULTS_PATH) + multiclass.plot_y_prob_histogram(y_true=y_true, y_prob=y_prob, save_fig_path=TEST_RESULTS_PATH / f"histogram_{num_classes}_classes.png") + # multiclass.plot_y_prob_histogram(y_prob=y_prob, save_fig_path=TEST_RESULTS_PATH / "histogram_classes.png") + + +def test_roc_curve(): + """ + Test roc curve. + + Parameters + ---------- + random_data_binary_classifier : Tuple[np.ndarray, np.ndarray] + The simulated data. + """ + # helper function for file name, to avoid repeating code + def get_path_name(confidence_interval, highlight_roc_area, n_bootstraps, figsize, split_plots): + if split_plots is False: + fig_path = TEST_RESULTS_PATH / f"roc_curves_conf_{confidence_interval}_highlight_{highlight_roc_area}_nboot_{n_bootstraps}_figsize_{figsize}.png" + else: + fig_path_1 = TEST_RESULTS_PATH / f"roc_curves_split_conf_{confidence_interval}_highlight_{highlight_roc_area}_nboot_{n_bootstraps}_figsize_{figsize}.png" + fig_path_2 = TEST_RESULTS_PATH / f"auroc_comparison_conf_{confidence_interval}_highlight_{highlight_roc_area}_nboot_{n_bootstraps}_figsize_{figsize}.png" + fig_path = [fig_path_1, fig_path_2] + return fig_path + + + y_true, y_prob = random_data_multiclass_classifier(num_classes=3) + + confidence_intervals = [None, 0.99] + highlight_roc_area = [True, False] + n_bootstraps = [1, 1000] + figsizes = [None] + split_plots = [True, False] + + # From the previous lists I want all possible combinations + combinations = list(product(confidence_intervals, highlight_roc_area, n_bootstraps, figsizes, split_plots)) + + for confidence_interval, highlight_roc_area, n_bootstraps, figsize, split_plots in combinations: + # check if one or two figures should be saved (splot_plots=True or False) + # if split_plots is False: + # fig_path = TEST_RESULTS_PATH / f"roc_curves_conf_{confidence_interval}_highlight_{highlight_roc_area}_nboot_{n_bootstraps}_figsize_{figsize}.png" + # else: + # fig_path_1 = TEST_RESULTS_PATH / f"roc_curves_conf_{confidence_interval}_highlight_{highlight_roc_area}_nboot_{n_bootstraps}_figsize_{figsize}.png" + # fig_path_2 = TEST_RESULTS_PATH / f"auroc_comparison_conf_{confidence_interval}_highlight_{highlight_roc_area}_nboot_{n_bootstraps}_figsize_{figsize}.png" + # fig_path = [fig_path_1, fig_path_2] + + fig_path = get_path_name(confidence_interval, highlight_roc_area, n_bootstraps, figsize, split_plots) + + # It should raise an error when confidence_interval is None but highlight_roc_area is True + if confidence_interval is None and highlight_roc_area is True: + with pytest.raises(ValueError): + multiclass.plot_roc_curve(y_true=y_true, y_score=y_prob, + confidence_interval=confidence_interval, + highlight_roc_area=highlight_roc_area, + n_bootstraps=n_bootstraps, + figsize=figsize, + split_plots=split_plots, + save_fig_path=fig_path) + # Otherwise no error + else: + multiclass.plot_roc_curve(y_true=y_true, y_score=y_prob, + confidence_interval=confidence_interval, + highlight_roc_area=highlight_roc_area, + n_bootstraps=n_bootstraps, + figsize=figsize, + split_plots=split_plots, + save_fig_path=fig_path) + + # check for SMALL figure size + confidence_interval, highlight_roc_area, n_bootstraps, figsize, split_plots = 0.95, True, 100, (3,3), False + fig_path = get_path_name(confidence_interval, highlight_roc_area, n_bootstraps, figsize, split_plots) + multiclass.plot_roc_curve(y_true=y_true, y_score=y_prob, + confidence_interval=confidence_interval, + highlight_roc_area=highlight_roc_area, + n_bootstraps=n_bootstraps, + figsize=figsize, + split_plots=split_plots, + save_fig_path=fig_path) + + # check for BIG figure size + confidence_interval, highlight_roc_area, n_bootstraps, figsize, split_plots = 0.95, True, 100, (15, 15), False + fig_path = get_path_name(confidence_interval, highlight_roc_area, n_bootstraps, figsize, split_plots) + multiclass.plot_roc_curve(y_true=y_true, y_score=y_prob, + confidence_interval=confidence_interval, + highlight_roc_area=highlight_roc_area, + n_bootstraps=n_bootstraps, + figsize=figsize, + split_plots=split_plots, + save_fig_path=fig_path) + + + +