Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save alonsosilvaallende/7ccaf61183fc29f83f4f539454fe465f to your computer and use it in GitHub Desktop.
Save alonsosilvaallende/7ccaf61183fc29f83f4f539454fe465f to your computer and use it in GitHub Desktop.
pharmacoSmoking_ci_ibs_hyperparameters_comparison.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "pharmacoSmoking_ci_ibs_hyperparameters_comparison.ipynb",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyPk8HolMcNSkXHF7xr86s0M",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/alonsosilvaallende/7ccaf61183fc29f83f4f539454fe465f/pharmacosmoking_ci_ibs_hyperparameters_comparison.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "5eBjyOzOioew"
},
"outputs": [],
"source": [
"!pip install -q scikit-survival"
]
},
{
"cell_type": "code",
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import statsmodels.api as sm\n",
"pharmacoSmoking = sm.datasets.get_rdataset(\"pharmacoSmoking\", \"asaur\")\n",
"data = pharmacoSmoking.data\n",
"data.head(3)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 178
},
"id": "EPtGZM0GiqKx",
"outputId": "bf287c58-0168-412a-cde3-dc1aa8c31ab5"
},
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n",
" import pandas.util.testing as tm\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/html": [
"\n",
" <div id=\"df-23e8dd57-0adb-4d09-8040-550f9041413d\">\n",
" <div class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>ttr</th>\n",
" <th>relapse</th>\n",
" <th>grp</th>\n",
" <th>age</th>\n",
" <th>gender</th>\n",
" <th>race</th>\n",
" <th>employment</th>\n",
" <th>yearsSmoking</th>\n",
" <th>levelSmoking</th>\n",
" <th>ageGroup2</th>\n",
" <th>ageGroup4</th>\n",
" <th>priorAttempts</th>\n",
" <th>longestNoSmoke</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>21</td>\n",
" <td>182</td>\n",
" <td>0</td>\n",
" <td>patchOnly</td>\n",
" <td>36</td>\n",
" <td>Male</td>\n",
" <td>white</td>\n",
" <td>ft</td>\n",
" <td>26</td>\n",
" <td>heavy</td>\n",
" <td>21-49</td>\n",
" <td>35-49</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>113</td>\n",
" <td>14</td>\n",
" <td>1</td>\n",
" <td>patchOnly</td>\n",
" <td>41</td>\n",
" <td>Male</td>\n",
" <td>white</td>\n",
" <td>other</td>\n",
" <td>27</td>\n",
" <td>heavy</td>\n",
" <td>21-49</td>\n",
" <td>35-49</td>\n",
" <td>3</td>\n",
" <td>90</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>39</td>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>combination</td>\n",
" <td>25</td>\n",
" <td>Female</td>\n",
" <td>white</td>\n",
" <td>other</td>\n",
" <td>12</td>\n",
" <td>heavy</td>\n",
" <td>21-49</td>\n",
" <td>21-34</td>\n",
" <td>3</td>\n",
" <td>21</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-23e8dd57-0adb-4d09-8040-550f9041413d')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
" \n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
" </svg>\n",
" </button>\n",
" \n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" flex-wrap:wrap;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-23e8dd57-0adb-4d09-8040-550f9041413d button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-23e8dd57-0adb-4d09-8040-550f9041413d');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
" </div>\n",
" "
],
"text/plain": [
" id ttr relapse ... ageGroup4 priorAttempts longestNoSmoke\n",
"0 21 182 0 ... 35-49 0 0\n",
"1 113 14 1 ... 35-49 3 90\n",
"2 39 5 1 ... 21-34 3 21\n",
"\n",
"[3 rows x 14 columns]"
]
},
"metadata": {},
"execution_count": 2
}
]
},
{
"cell_type": "code",
"source": [
"# Drop redundant information and ids\n",
"data = data.drop(columns=[\"id\",\"ageGroup2\",\"ageGroup4\"])\n",
"data.head(3)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 143
},
"id": "NgvnH8-Di2Wd",
"outputId": "68acc251-650d-4af5-a607-169205e12cb1"
},
"execution_count": 3,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"\n",
" <div id=\"df-6d514aaa-98f2-4e08-ac7a-d49902b21aed\">\n",
" <div class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ttr</th>\n",
" <th>relapse</th>\n",
" <th>grp</th>\n",
" <th>age</th>\n",
" <th>gender</th>\n",
" <th>race</th>\n",
" <th>employment</th>\n",
" <th>yearsSmoking</th>\n",
" <th>levelSmoking</th>\n",
" <th>priorAttempts</th>\n",
" <th>longestNoSmoke</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>182</td>\n",
" <td>0</td>\n",
" <td>patchOnly</td>\n",
" <td>36</td>\n",
" <td>Male</td>\n",
" <td>white</td>\n",
" <td>ft</td>\n",
" <td>26</td>\n",
" <td>heavy</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>14</td>\n",
" <td>1</td>\n",
" <td>patchOnly</td>\n",
" <td>41</td>\n",
" <td>Male</td>\n",
" <td>white</td>\n",
" <td>other</td>\n",
" <td>27</td>\n",
" <td>heavy</td>\n",
" <td>3</td>\n",
" <td>90</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>combination</td>\n",
" <td>25</td>\n",
" <td>Female</td>\n",
" <td>white</td>\n",
" <td>other</td>\n",
" <td>12</td>\n",
" <td>heavy</td>\n",
" <td>3</td>\n",
" <td>21</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-6d514aaa-98f2-4e08-ac7a-d49902b21aed')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
" \n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
" </svg>\n",
" </button>\n",
" \n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" flex-wrap:wrap;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-6d514aaa-98f2-4e08-ac7a-d49902b21aed button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-6d514aaa-98f2-4e08-ac7a-d49902b21aed');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
" </div>\n",
" "
],
"text/plain": [
" ttr relapse grp ... levelSmoking priorAttempts longestNoSmoke\n",
"0 182 0 patchOnly ... heavy 0 0\n",
"1 14 1 patchOnly ... heavy 3 90\n",
"2 5 1 combination ... heavy 3 21\n",
"\n",
"[3 rows x 11 columns]"
]
},
"metadata": {},
"execution_count": 3
}
]
},
{
"cell_type": "code",
"source": [
"from sksurv.datasets import get_x_y\n",
"\n",
"X, y = get_x_y(data, attr_labels=[\"relapse\", \"ttr\"], pos_label=True)"
],
"metadata": {
"id": "6MRPeiGIi6V0"
},
"execution_count": 4,
"outputs": []
},
{
"cell_type": "code",
"source": [
"for c in X.columns:\n",
" if X[c].dtype.kind not in ['i', 'f']:\n",
" X[c] = X[c].astype(\"category\")"
],
"metadata": {
"id": "Nlu5jYKvjDU8"
},
"execution_count": 5,
"outputs": []
},
{
"cell_type": "code",
"source": [
"param_grid_cph = {\n",
" 'alpha': (0.01, 0.1, 0.5),\n",
"}\n",
"\n",
"param_grid_rsf = {\n",
" 'max_features': (\"sqrt\", 0.5, 1),\n",
" 'min_samples_leaf': (1,3,5),\n",
" 'n_estimators': (50, 100, 200),\n",
" 'max_depth': (3,5,7,10),\n",
"}\n",
"\n",
"param_grid_gbs = {\n",
" 'learning_rate': (0.05, 0.1, 0.15),\n",
" 'max_features': (\"sqrt\", 0.5, 1),\n",
" 'min_samples_leaf': (1,3,5),\n",
" 'n_estimators': (50, 100, 200),\n",
" 'subsample': (0.7,0.9,1),\n",
" 'max_depth': (3,5,7,10),\n",
"}\n",
"\n",
"param_distributions = [param_grid_cph, param_grid_rsf, param_grid_gbs]"
],
"metadata": {
"id": "z8BHu-nn0IMK"
},
"execution_count": 6,
"outputs": []
},
{
"cell_type": "code",
"source": [
"def model_fitter(model, X_trn, y_trn, approach):\n",
" if approach=='default':\n",
" model.fit(X_trn, y_trn)\n",
" elif approach=='best':\n",
" model = RandomizedSearchCV(model, param_distributions=param_distributions[i], n_jobs=-1, cv=4, n_iter=50)\n",
" model.fit(X_trn, y_trn)\n",
" return model"
],
"metadata": {
"id": "6qpUwhNI3nVH"
},
"execution_count": 7,
"outputs": []
},
{
"cell_type": "code",
"source": [
"from sklearn.model_selection import KFold\n",
"\n",
"cv = KFold(n_splits=4, shuffle=True, random_state=0)"
],
"metadata": {
"id": "UitD1xgWRnOb"
},
"execution_count": 8,
"outputs": []
},
{
"cell_type": "code",
"source": [
"from sksurv.metrics import as_integrated_brier_score_scorer\n",
"\n",
"def get_ibs(model, modelo, X, y, y_trn, approach, i):\n",
" times = np.arange(y['ttr'].min(), y['ttr'][y['ttr']!=y['ttr'].max()].max()) # perhaps it should be modified\n",
" if approach == 'default':\n",
" survs = modelo.predict_survival_function(X)\n",
" preds = np.asarray([[fn(t) for t in times] for fn in survs]) \n",
" elif approach == 'best':\n",
" new_dict = {f'estimator__{key}': param_distributions[i][key] for key in list(param_distributions[i].keys())}\n",
" gcv_ibs = RandomizedSearchCV(\n",
" as_integrated_brier_score_scorer(model(), times=times),\n",
" param_distributions=new_dict,\n",
" cv=4,\n",
" n_jobs=-1,\n",
" n_iter=1,\n",
" ).fit(X_trn,y_trn)\n",
" best_parameters = gcv_ibs.best_params_\n",
" another_dict = {f'{key}'.replace('estimator__', ''): best_parameters[key] for key in best_parameters}\n",
" rsf = model(**another_dict)\n",
" rsf.fit(X_trn, y_trn)\n",
" survs = rsf.predict_survival_function(X)\n",
" preds = np.asarray([[fn(t) for t in times] for fn in survs])\n",
" ibs = integrated_brier_score(y_trn, y, preds, times)\n",
" return ibs"
],
"metadata": {
"id": "ZM7yupIZPC00"
},
"execution_count": 9,
"outputs": []
},
{
"cell_type": "code",
"source": [
"from sklearn.model_selection import train_test_split\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sksurv.preprocessing import OneHotEncoder\n",
"from sksurv.linear_model import CoxPHSurvivalAnalysis\n",
"from sksurv.ensemble import RandomSurvivalForest\n",
"from sksurv.ensemble import GradientBoostingSurvivalAnalysis\n",
"from sksurv.metrics import concordance_index_censored\n",
"from sklearn.model_selection import RandomizedSearchCV\n",
"from sksurv.metrics import integrated_brier_score\n",
"\n",
"df_results = pd.DataFrame(columns=['model', 'seed', 'hyper', 'ci_trn', 'ci_val', 'ibs_trn', 'ibs_val'], index=None)\n",
"for seed in range(21):\n",
" if seed != 19:\n",
" print(seed)\n",
" X_trn, X_val, y_trn, y_val = train_test_split(X, y, random_state=seed)\n",
" # Preprocessing\n",
" enc = OneHotEncoder()\n",
" scaler = StandardScaler()\n",
" X_trn = enc.fit_transform(X_trn)\n",
" X_trn = pd.DataFrame(scaler.fit_transform(X_trn), columns=X_trn.columns)\n",
" X_val = enc.transform(X_val)\n",
" X_val = pd.DataFrame(scaler.transform(X_val), columns=X_val.columns)\n",
" for i, model in enumerate([CoxPHSurvivalAnalysis, RandomSurvivalForest, GradientBoostingSurvivalAnalysis]):\n",
" print(model())\n",
" if i == 0:\n",
" modelo = model(alpha=.1)\n",
" else:\n",
" modelo = model(random_state=42)\n",
" for approach in ['default', 'best']:\n",
" modelo = model_fitter(modelo, X_trn, y_trn, approach)\n",
" ci_trn = concordance_index_censored(y_trn['relapse'], y_trn['ttr'], modelo.predict(X_trn))\n",
" ci_val = concordance_index_censored(y_val['relapse'], y_val['ttr'], modelo.predict(X_val))\n",
" ibs_trn = get_ibs(model, modelo, X_trn, y_trn, y_trn, approach, i)\n",
" ibs_val = get_ibs(model, modelo, X_val, y_val, y_trn, approach, i)\n",
" df_results = df_results.append({'model': f\"{model}\",\n",
" 'seed': f'{seed}', \n",
" 'hyper': f'{approach}', \n",
" 'ci_trn': f'{ci_trn[0]}', \n",
" 'ci_val': f'{ci_val[0]}',\n",
" 'ibs_trn': f'{ibs_trn}', \n",
" 'ibs_val': f'{ibs_val}'}, ignore_index = True)"
],
"metadata": {
"id": "kEgdfhNPjF6H",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "af7ade86-a41d-47e2-cf69-8a3d18040bce"
},
"execution_count": 21,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"0\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"GradientBoostingSurvivalAnalysis()\n",
"1\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"GradientBoostingSurvivalAnalysis()\n",
"2\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"GradientBoostingSurvivalAnalysis()\n",
"3\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"GradientBoostingSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"4\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n",
"GradientBoostingSurvivalAnalysis()\n",
"5\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n",
"GradientBoostingSurvivalAnalysis()\n",
"6\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n",
"GradientBoostingSurvivalAnalysis()\n",
"7\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"GradientBoostingSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"8\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"GradientBoostingSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"9\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n",
"GradientBoostingSurvivalAnalysis()\n",
"10\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"GradientBoostingSurvivalAnalysis()\n",
"11\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"GradientBoostingSurvivalAnalysis()\n",
"12\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"GradientBoostingSurvivalAnalysis()\n",
"13\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"GradientBoostingSurvivalAnalysis()\n",
"14\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"GradientBoostingSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"15\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"GradientBoostingSurvivalAnalysis()\n",
"16\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n",
"GradientBoostingSurvivalAnalysis()\n",
"17\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n",
"GradientBoostingSurvivalAnalysis()\n",
"18\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n",
"GradientBoostingSurvivalAnalysis()\n",
"20\n",
"CoxPHSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:296: UserWarning: The total space of parameters 3 is smaller than n_iter=50. Running 3 iterations. For exhaustive searches, use GridSearchCV.\n",
" UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"RandomSurvivalForest()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"GradientBoostingSurvivalAnalysis()\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n",
"/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_search.py:972: UserWarning: One or more of the test scores are non-finite: [nan]\n",
" category=UserWarning,\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"df_results.head()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "BwLGXZkcCKAy",
"outputId": "6465e862-797e-44b0-f39f-7b3bfae1d1bf"
},
"execution_count": 47,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"\n",
" <div id=\"df-056100d6-ac90-4eb6-a57d-ce8e126503a2\">\n",
" <div class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>model</th>\n",
" <th>seed</th>\n",
" <th>hyper</th>\n",
" <th>ci_trn</th>\n",
" <th>ci_val</th>\n",
" <th>ibs_trn</th>\n",
" <th>ibs_val</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>CoxPHSurvivalAnalysis</td>\n",
" <td>0</td>\n",
" <td>default</td>\n",
" <td>0.651023</td>\n",
" <td>0.671024</td>\n",
" <td>0.202169</td>\n",
" <td>0.204114</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>CoxPHSurvivalAnalysis</td>\n",
" <td>0</td>\n",
" <td>best</td>\n",
" <td>0.650498</td>\n",
" <td>0.671024</td>\n",
" <td>0.202169</td>\n",
" <td>0.204032</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>RandomSurvivalForest</td>\n",
" <td>0</td>\n",
" <td>default</td>\n",
" <td>0.828264</td>\n",
" <td>0.618736</td>\n",
" <td>0.141371</td>\n",
" <td>0.232152</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>RandomSurvivalForest</td>\n",
" <td>0</td>\n",
" <td>best</td>\n",
" <td>0.820923</td>\n",
" <td>0.594771</td>\n",
" <td>0.184471</td>\n",
" <td>0.238599</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>GradientBoostingSurvivalAnalysis</td>\n",
" <td>0</td>\n",
" <td>default</td>\n",
" <td>0.898794</td>\n",
" <td>0.555556</td>\n",
" <td>0.099822</td>\n",
" <td>0.275302</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-056100d6-ac90-4eb6-a57d-ce8e126503a2')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
" \n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
" </svg>\n",
" </button>\n",
" \n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" flex-wrap:wrap;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-056100d6-ac90-4eb6-a57d-ce8e126503a2 button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-056100d6-ac90-4eb6-a57d-ce8e126503a2');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
" </div>\n",
" "
],
"text/plain": [
" model seed hyper ... ci_val ibs_trn ibs_val\n",
"0 CoxPHSurvivalAnalysis 0 default ... 0.671024 0.202169 0.204114\n",
"1 CoxPHSurvivalAnalysis 0 best ... 0.671024 0.202169 0.204032\n",
"2 RandomSurvivalForest 0 default ... 0.618736 0.141371 0.232152\n",
"3 RandomSurvivalForest 0 best ... 0.594771 0.184471 0.238599\n",
"4 GradientBoostingSurvivalAnalysis 0 default ... 0.555556 0.099822 0.275302\n",
"\n",
"[5 rows x 7 columns]"
]
},
"metadata": {},
"execution_count": 47
}
]
},
{
"cell_type": "code",
"source": [
"df_results['ci_trn'] = df_results['ci_trn'].astype(float)\n",
"df_results['ci_val'] = df_results['ci_val'].astype(float)\n",
"df_results['ibs_trn'] = df_results['ibs_trn'].astype(float)\n",
"df_results['ibs_val'] = df_results['ibs_val'].astype(float)"
],
"metadata": {
"id": "_IUdlXNZ-mMS"
},
"execution_count": 24,
"outputs": []
},
{
"cell_type": "code",
"source": [
"df_results['model'].unique()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "QVOxnH6sm7qm",
"outputId": "8b0f6520-f3d3-43f2-fd1d-51e43d07659e"
},
"execution_count": 33,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array(['CoxPHSurvivalAnalysis', 'RandomSurvivalForest',\n",
" \"<class 'sksurv.ensemble.boosting.GradientBoostingSurvivalAnalysis'>\"],\n",
" dtype=object)"
]
},
"metadata": {},
"execution_count": 33
}
]
},
{
"cell_type": "code",
"source": [
"df_results['model'] = df_results['model'].replace(\"<class 'sksurv.linear_model.coxph.CoxPHSurvivalAnalysis'>\", \"CoxPHSurvivalAnalysis\")"
],
"metadata": {
"id": "jqaK8PPZmoXh"
},
"execution_count": 30,
"outputs": []
},
{
"cell_type": "code",
"source": [
"df_results['model'] = df_results['model'].replace(\"<class 'sksurv.ensemble.forest.RandomSurvivalForest'>\", \"RandomSurvivalForest\")"
],
"metadata": {
"id": "2mlWEwNMnSdH"
},
"execution_count": 32,
"outputs": []
},
{
"cell_type": "code",
"source": [
"df_results['model'] = df_results['model'].replace(\"<class 'sksurv.ensemble.boosting.GradientBoostingSurvivalAnalysis'>\", \"GradientBoostingSurvivalAnalysis\")"
],
"metadata": {
"id": "XYM4N0M5ne05"
},
"execution_count": 34,
"outputs": []
},
{
"cell_type": "code",
"source": [
"df_results.head()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 206
},
"id": "QGzsOAHcnoho",
"outputId": "a74c6a46-18b4-4b0e-f6fd-0cfda2e2ddc6"
},
"execution_count": 35,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"\n",
" <div id=\"df-b15dfc08-fb7a-4589-b415-d54e1709c616\">\n",
" <div class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>model</th>\n",
" <th>seed</th>\n",
" <th>hyper</th>\n",
" <th>ci_trn</th>\n",
" <th>ci_val</th>\n",
" <th>ibs_trn</th>\n",
" <th>ibs_val</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>CoxPHSurvivalAnalysis</td>\n",
" <td>0</td>\n",
" <td>default</td>\n",
" <td>0.651023</td>\n",
" <td>0.671024</td>\n",
" <td>0.202169</td>\n",
" <td>0.204114</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>CoxPHSurvivalAnalysis</td>\n",
" <td>0</td>\n",
" <td>best</td>\n",
" <td>0.650498</td>\n",
" <td>0.671024</td>\n",
" <td>0.202169</td>\n",
" <td>0.204032</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>RandomSurvivalForest</td>\n",
" <td>0</td>\n",
" <td>default</td>\n",
" <td>0.828264</td>\n",
" <td>0.618736</td>\n",
" <td>0.141371</td>\n",
" <td>0.232152</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>RandomSurvivalForest</td>\n",
" <td>0</td>\n",
" <td>best</td>\n",
" <td>0.820923</td>\n",
" <td>0.594771</td>\n",
" <td>0.184471</td>\n",
" <td>0.238599</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>GradientBoostingSurvivalAnalysis</td>\n",
" <td>0</td>\n",
" <td>default</td>\n",
" <td>0.898794</td>\n",
" <td>0.555556</td>\n",
" <td>0.099822</td>\n",
" <td>0.275302</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-b15dfc08-fb7a-4589-b415-d54e1709c616')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
" \n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
" </svg>\n",
" </button>\n",
" \n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" flex-wrap:wrap;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-b15dfc08-fb7a-4589-b415-d54e1709c616 button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-b15dfc08-fb7a-4589-b415-d54e1709c616');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
" </div>\n",
" "
],
"text/plain": [
" model seed hyper ... ci_val ibs_trn ibs_val\n",
"0 CoxPHSurvivalAnalysis 0 default ... 0.671024 0.202169 0.204114\n",
"1 CoxPHSurvivalAnalysis 0 best ... 0.671024 0.202169 0.204032\n",
"2 RandomSurvivalForest 0 default ... 0.618736 0.141371 0.232152\n",
"3 RandomSurvivalForest 0 best ... 0.594771 0.184471 0.238599\n",
"4 GradientBoostingSurvivalAnalysis 0 default ... 0.555556 0.099822 0.275302\n",
"\n",
"[5 rows x 7 columns]"
]
},
"metadata": {},
"execution_count": 35
}
]
},
{
"cell_type": "code",
"source": [
"df_results.groupby('model').mean()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 175
},
"id": "dD9VHHrIohtO",
"outputId": "5e2015d6-ab7a-4587-a34e-eb0a0760ec25"
},
"execution_count": 42,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"\n",
" <div id=\"df-972e6d09-de3e-4153-8799-1020089cf5de\">\n",
" <div class=\"colab-df-container\">\n",
" <div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ci_trn</th>\n",
" <th>ci_val</th>\n",
" <th>ibs_trn</th>\n",
" <th>ibs_val</th>\n",
" </tr>\n",
" <tr>\n",
" <th>model</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>CoxPHSurvivalAnalysis</th>\n",
" <td>0.671753</td>\n",
" <td>0.597232</td>\n",
" <td>0.194346</td>\n",
" <td>0.231873</td>\n",
" </tr>\n",
" <tr>\n",
" <th>GradientBoostingSurvivalAnalysis</th>\n",
" <td>0.870586</td>\n",
" <td>0.517339</td>\n",
" <td>0.081031</td>\n",
" <td>0.279757</td>\n",
" </tr>\n",
" <tr>\n",
" <th>RandomSurvivalForest</th>\n",
" <td>0.802676</td>\n",
" <td>0.545505</td>\n",
" <td>0.145509</td>\n",
" <td>0.235745</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>\n",
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-972e6d09-de3e-4153-8799-1020089cf5de')\"\n",
" title=\"Convert this dataframe to an interactive table.\"\n",
" style=\"display:none;\">\n",
" \n",
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
" width=\"24px\">\n",
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n",
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n",
" </svg>\n",
" </button>\n",
" \n",
" <style>\n",
" .colab-df-container {\n",
" display:flex;\n",
" flex-wrap:wrap;\n",
" gap: 12px;\n",
" }\n",
"\n",
" .colab-df-convert {\n",
" background-color: #E8F0FE;\n",
" border: none;\n",
" border-radius: 50%;\n",
" cursor: pointer;\n",
" display: none;\n",
" fill: #1967D2;\n",
" height: 32px;\n",
" padding: 0 0 0 0;\n",
" width: 32px;\n",
" }\n",
"\n",
" .colab-df-convert:hover {\n",
" background-color: #E2EBFA;\n",
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
" fill: #174EA6;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert {\n",
" background-color: #3B4455;\n",
" fill: #D2E3FC;\n",
" }\n",
"\n",
" [theme=dark] .colab-df-convert:hover {\n",
" background-color: #434B5C;\n",
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
" fill: #FFFFFF;\n",
" }\n",
" </style>\n",
"\n",
" <script>\n",
" const buttonEl =\n",
" document.querySelector('#df-972e6d09-de3e-4153-8799-1020089cf5de button.colab-df-convert');\n",
" buttonEl.style.display =\n",
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
"\n",
" async function convertToInteractive(key) {\n",
" const element = document.querySelector('#df-972e6d09-de3e-4153-8799-1020089cf5de');\n",
" const dataTable =\n",
" await google.colab.kernel.invokeFunction('convertToInteractive',\n",
" [key], {});\n",
" if (!dataTable) return;\n",
"\n",
" const docLinkHtml = 'Like what you see? Visit the ' +\n",
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
" + ' to learn more about interactive tables.';\n",
" element.innerHTML = '';\n",
" dataTable['output_type'] = 'display_data';\n",
" await google.colab.output.renderOutput(dataTable, element);\n",
" const docLink = document.createElement('div');\n",
" docLink.innerHTML = docLinkHtml;\n",
" element.appendChild(docLink);\n",
" }\n",
" </script>\n",
" </div>\n",
" </div>\n",
" "
],
"text/plain": [
" ci_trn ci_val ibs_trn ibs_val\n",
"model \n",
"CoxPHSurvivalAnalysis 0.671753 0.597232 0.194346 0.231873\n",
"GradientBoostingSurvivalAnalysis 0.870586 0.517339 0.081031 0.279757\n",
"RandomSurvivalForest 0.802676 0.545505 0.145509 0.235745"
]
},
"metadata": {},
"execution_count": 42
}
]
},
{
"cell_type": "code",
"source": [
"means = df_results.groupby('model').mean().sort_values(by='ci_val', ascending=False)['ci_val'].values\n",
"medians = df_results.groupby('model').median().sort_values(by='ci_val', ascending=False)['ci_val'].values\n",
"means, medians"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vWUEAeWtctj8",
"outputId": "7e320e4e-d4f1-40d1-ef80-d9614289065a"
},
"execution_count": 36,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(array([0.59723248, 0.54550549, 0.51733946]),\n",
" array([0.59106348, 0.54247669, 0.5205754 ]))"
]
},
"metadata": {},
"execution_count": 36
}
]
},
{
"cell_type": "code",
"source": [
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"plt.rcParams.update({'xtick.labelsize': 13,\n",
" 'ytick.labelsize': 13})\n",
"\n",
"fig, ax = plt.subplots(figsize=(10,10))\n",
"ax = sns.swarmplot(y='model', x='ci_val', alpha=0.5, data=df_results)\n",
"ax.set_xticks([0.4, 0.5, 0.6, 0.7])\n",
"ax.scatter(means, range(len(means)), marker='|', s=800, label='Mean')\n",
"ax.scatter(medians, range(len(medians)), marker='|', s=800, label='Median')\n",
"ax.legend()\n",
"ax.set_xlabel('Concordance index', fontsize=13)\n",
"ax.set_ylabel('')\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 612
},
"id": "DAY8zTr-nuo9",
"outputId": "d657b5c7-108e-489b-af02-c9b5446702fe"
},
"execution_count": 41,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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JCVjAJEkSZKUjAFEkiRJUjIGEEmSJEnJGEAkSZIkJWMAkSRJkpSMAUSSJElSMgYQSZIkSckYQCRJkiQlYwCRJEmSlIwBRJIkSVIyBhBJkiRJyRhAJEmSJCVjAJEkSZKUjAFEkiRJUjIGEEmSJEnJGEAkSZIkJWMAkSRJkpSMAUSSJElSMgYQSZIkSckYQCRJkiQlYwCRJEmSlIwBRJIkSVIyBhBJkiRJyRhAJEmSJCVjAJEkSZKUjAFEkiRJUjIGEEmSJEnJGEAkSZIkJWMAkSRJkpSMAUSSJElSMgYQSZIkSckYQCRJkiQlYwCRJCj6D/wAACAASURBVEmSlIwBRJIkSVIyBhBJkiRJyRhAJEmSJCVjAJEkSZKUjAFEkiRJUjIGEEmSJEnJGEAkSZIkJWMAkSRJkpSMAUSSJElSMgYQSZIkSckYQCRJkiQlYwCRJEmSlIwBRJIkSVIyBhBJkiRJyRhAJEmSJCVjAJEkSZKUjAFEkiRJUjIGEEmSJEnJGEAkSZIkJWMAkSRJkpSMAUSSJElSMgYQSZIkSckYQCRJkiQlYwCRJEmSlIwBRJIkSVIyBhBJkiRJyRhAJEmSJCVjAJEkSZKUjAFEkiRJUjIGEEmSJEnJGEAkSZIkJWMAkSRJkpSMAUSSJElSMgYQSZIkSckYQCRJkiQlYwCRJEmSlIwBRJIkSVIyBhBJkiRJyRhAJEmSJCVjAJEkSZKUjAFEkiRJUjIGEEmSJEnJGEAkSZIkJWMAkSRJkpSMAUSSJElSMgYQSZIkSckYQCRJkiQlYwCRJEmSlIwBRJIkSVIyBhBJkiRJyRhAJEmSJCVjAJEkSZKUjAFEkiRJUjIGEEmSJEnJGEAkSZIkJWMAkSRJkpSMAUSSJElSMgYQSZIkSckYQCRJkiQlYwCRJEmSlIwBRJIkSVIyBhBJkiRJyRhAJEmSJCVjAJEkSZKUjAFEkiRJUjIGEEmSJEnJGEAkSZIkJWMAkSRJkpSMAUSSJElSMgYQSZIkSckYQCRJkiQlYwCRJEmSlIwBRJIkSVIyBhBJkiRJyRhAJEmSJCVjAJEkSZKUjAFEkiRJUjIGEEmSJEnJGEAkSZIkJWMAkSRJkpSMAUSSJElSMgYQSZIkSckYQCRJkiQlYwCRJEmSlIwBRJIkSVIyBhBJkiRJyRhAJEmSJCVjAJEkSZKUjAFEkiRJUjIG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qLWztce09HqX0WhK4RTOn3k+5fnlTC6YzMWzL2Z83vgh3ceyimVce/y1XLP4mpTkdbTZ0rgl5cEXnd6Z6BURkdBzMNIxyDAwsxuAT7m7npc3xMxsDqGnZo679/5tWEPspJNO8rVrB9rRJxK4O/ta91GQW0BOVk7/K4wwd+cHf/xBSiO8dGwpf3ncX2Zc/tX6V3t8yeKJk07klCn9ddCPPlfd/iwAt109mwc2PhCKqyvvocSzed81vx3VyaOk2tq4lV9uSr2HdvLkk4+43laRN8PMXnD3jDXPA/4mdBndzOzMqIjbzOxthNqDgTw6WQYheuTxZ4FfxJl8iBwuM6M0r/SISD4gPOqz+/G83dJfJ5tdMjul5iHbsoe1BiAOUwqnsGL+Co4vO56TPY8VFCj5OMLMKJrB9KLEs3sozi1m8cTFfawh8tYy0C8ilNFvBmH4UBlhGNb/cKi+Q4ZA9OSyVYSHMrxrhMMROSplZ2Vz3ITjqKo/9F0UfT0YYNyYcVy54EqqdlfR4R0smrhoVHyz+Zt1qM5nsE9Kl9HAzHj33HdT3VRNW1cbM4tmZvzCRZG3Kv01HCXc/T7U4zGsogcdpD8pTESG2FnTz6I8v5za5lqmFk7t97GwJWNLOH1afEXIIgNhZim9ICJyiBIQEREZVbIsi0UTF436RyKLiMjhUQ2IiIiIiIjERgmIiIiIiIjERgmIiIiIiIjERgmIiIiIiIjERkXoIiIio8BPbjit58TrHo4/EBGRYaYeEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY0SEBERERERiY25+0jHICIDYGZ1wJaRjmMUKAN2j3QQ8paia07ipOtN4jZc19wsdy/PNEMJiIgcUcxsrbufNNJxyFuHrjmJk643idtIXHMagiUiIiIiIrFRAiIiIiIiIrFRAiIiR5o7RjoAecvRNSdx0vUmcYv9mlMNiIiIiIiIxEY9ICIiIiIiEhslICIiIiIiEhslICIyqphZtpl9zczqzGy/mf3MzMoGsN5HzczN7MY44pSjw2CuNzN7R3SNNSX9rI47ZjmyDfYzzswqzOyHZlZvZo1mVmlmU+OMWY5cg/yM+0La51tT9Jn370MdlxIQERltPgdcDpwCTI+m/bivFcxsFvAp4OXhDU2OQoO93jrdvTDp5/Rhj1CONgO+5swsD3gCaAOOAUqBq4Gm4Q9TjhIDvt7c/ZbkzzfgBMCBu4c6KBWhi8ioYmZbgC+7+53R63nABmC2u2f8Jngzexz4HvBR4HF3/0pc8cqRbTDXm5m9g3B9jYk9UDlqDPKauwG4EZjr7u2xBytHvMP5PzVp3a8D57r7iUMdl3pARGTUMLNSYCbwQvc0d98INAJLe1nnBuCAu/8kliDlqHE41xuQbWbbzGynmT1sZr0tJ9LDYVxz5wJ/AlZGQ7BeM7NPxhKsHPEO8zOue92xwLXA7cMRmxIQERlNiqLf+9KmNwDF6Qub2UzC3cG/Gea45Og0qOsNeA1YBswBjgXWAU9qPL4MwmCvuTJCErIGmAK8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\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"source": [
"medians = df_results.groupby('model').median().sort_values(by='ibs_val', ascending=True)['ibs_val'].values\n",
"order = df_results.groupby('model').median().sort_values(by='ibs_val', ascending=True).index\n",
"means = df_results.groupby('model').mean().loc[order]['ibs_val'].values\n",
"means, medians"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "cHnAAVYwn_7N",
"outputId": "7c3d0772-a50f-4015-ed3f-cc9b12b376dc"
},
"execution_count": 43,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"(array([0.231873 , 0.23574536, 0.27975651]),\n",
" array([0.23165266, 0.23353573, 0.27519234]))"
]
},
"metadata": {},
"execution_count": 43
}
]
},
{
"cell_type": "code",
"source": [
"fig, ax = plt.subplots(figsize=(10,10))\n",
"ax = sns.swarmplot(y='model', x='ibs_val', order=order, alpha=0.5, data=df_results)\n",
"ax.scatter(means, range(len(means)), marker='|', s=800, label='Mean')\n",
"ax.scatter(medians, range(len(medians)), marker='|', s=800, label='Median')\n",
"ax.legend()\n",
"ax.set_xlabel('IBS', fontsize=13)\n",
"ax.set_ylabel('')\n",
"plt.show()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 612
},
"id": "ehs5UEoxoxnN",
"outputId": "d37191f4-348a-4e7a-9cd8-6675ef129c1d"
},
"execution_count": 46,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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AABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAG8d9rQAACAASURBVAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAMbeQ+9xjwg3P/Cqbn7g1XFqEABgvCSOdwMAAJ61N0o1+6XEVKlwoZTA/woAAP7wfx0AuJC01Ehbfyx1d7rlE1ullR+WjBnfdgEALhgMwQKAC0nF1r7wIUkNFVL90fFrDwDggkMAAYALio3zVJznznXWunDVUjPeLQEAxGAIFgBMZN2dUm+3lJw+OvubulI6+bbU0+WWs4qlnJmjs++JoqtdemuD1HTSLRcvlhbdxDAzAJggCCAAMFEdfUU6+gept0cqXCAtfO/ZFYyf2O6Kz/PmSqnZUnqeVLRECkzQzvDaQ9LpI1JGgTR5qRRIGNp2ldv7wockndotTVkh5Y5R0Kra4x6pk6QZa6XkjLE5DgCcJwggADARNVdJh3/ft1y1V5o0XSopHdn+yrdIB57rW84qlub9Ufx1K7ZIZS+7XpKSUmn2Vf57Dyq2Svt/07dcf0xafFP/9drqpJoDUkq2VDDfhamOpv7rxXtuNJx8W9rzdN9y3RGp9GP0tgDAIAggADARNVf1f66leujbt9VLp3ZKgUTXe1C1K/r1plOuPiKjoP/z+yOCytFXpczJUtHCoR235oBU9pIbOjZ1pTRjzdDbHOnE1ujlqt3SRddKSWl9zzWUS9s3uCFqklRwkbT0g1LRIheiQrUtiSlS3pyRtSN8rArXG9XVJk1Z5s5Nkk7ujF6vudp9dlnFZ3c8ADiPEUDOUcaYKyS9ZK09r35mM8bMkLRb0nxr7YlR2N8mSS9Ya//+bPcFeJU704WH0MW1NPSL6LZ6afOPpO4Ot1yxRcqMuSAOJEhJcepKGsvjPzeUANJWL+38hWR73fKh30lpOW742HAFkqKXTYJ7RDr+RvT7U3PAhapJJdL8G6Safe4cp685uxqarjZpx6N9s4c1nnD7LVzQf7iVCYxevQ4AnKcm6MDfc48xZpMxpsMY02yMaTDGbDfGfGi823U2jDErjTG/NsZUG2OajDGHjTE/HMtjWmuPWWszRyN8xGOMscaY1uDnFHp8dCyOdYZ2zAq2pcT3sTHBndotvf6gtOXHUv5cdzGdUeB+/R/qhfypnX3hQ3I3HswoklKy3LIJSLOvjH+hPGn60J6Lp/5YX/gIOX1kaNvGmvmO6JqPGWukxOSYleLM3tXZKm39ibTvWTe9cNZkKbNwZG0IqT8WPXWx5MJOqJ0pme7PxrgakND7DACIix6Q0fVVa+3fG2MSJX1G0iPGmG3W2oPj3bDhMsZkSnpe0rck/bGkDkmzJb3rLPaZZK3tGp0WnpV3W2tfPpsdTKBzgU/1x93FaPaU/r0RXe1umJO1bgjQUAqRe3ul6r1Se72rXzABac+TfUOHqvdJF/+xCx493W64T0eTW07Pi95Xe6MrhE5McfuNlZ4rzVkn1R6QJi+X8uP0ptQddcOapiyXTh92vQvTVrm2Ve+XWmvceWdNjj6Hmn2uFiM1p/8+M4uil3u6peo9UmeLMnqb1BKIc7FurQsyU5a7Xo+iRdKkaX2vnz7ieiGyprhC9d4e93zeHHd+DRV9xzr4W/d+hUJBd4d0apc7t6LFfeEhVuRnk5bX//XQ+5+c4XpYGiulaZdIOXHCWlud+yyT0t0xB5pIILRecoZUuGh07lDf1eZCrRT8Xg6zd6ax0n0XMouk/HlDr20Z6jkDuCDxL8IYsNZ2G2N+IOnbklZIOmiMeUju4j1H0nFJf2+tfUSSjDHrJL0g6TZJX5dUIOk3kj5mrW0KrnORpB9IWiXpsKSHIo9pjEmX9A25sJAm6WVJd1trjwVf3yRpq/pCRJWkT0gykr4jaYak30r6SPCYCyTlS7rfWtsWPMyh4CN0zIcldVtrPx7xXJmkL1hrf2aMuUPSFyQ9IOkvJTUYY56VdJG19v0R26yT9JSkyZIKJR2RNF1Sq6QTktZaa7dHrL9J0kZr7ZeNMbdI+j/B82qR9KSkv7bWtsT9cAZhjLlK0j9KWiipUtK3rbUPRLTxBUl3SvpysJ1ZwSFj/yLpCrmfY5+S9L+ttU3GGCPp74PbZEmqlfTP1tr7Jb0VPOw+Y4yV9A/W2q8Ot83wqGJLdG3ErCuk2e90f+7ukLY85IYgSW72qtK7Br64Ddn9K3eRJklHXnK1GrH35Kg76i6g3/5Pqa7MPVf2srTyNil7qltuPS1tebiv1yN1kjt2R7Nbzix0AaJmv1uu3u9qJfLn9h3n+BvuYj1kzlXSzMvdn/f9t3RiW7CdL0qL3983JGvvU30XuCbgwkrdERcKipe4EBFirRvKVH9ckvTulkptTH93//flwHOuCF1yF7yTpkkKBpCjr0QX509b5S6qU7Ldhe6uX0Tvy/a69yclyxXVb/mx1Frbt6/SO937FSvyszEB917Vlbnzyp0lTSsNfu4Pu4ttyfW4lN4Z3QPSdEra9hMXhiSp8i1p5e39L+SbTkrbftq33ont8dcbjq42NxSvvdEtH3vVfS+HGkJO7Y4OxNNWSfPjfF6xhnrOAC5YDMEaA8aYZEmfCi4G/4+vl+XCSI6kr0h62BizOGKzBEnvlrRc0nxJKyXdHdxfoqSnJe2SVCTpg5L+Iuaw35a0NviYKalG0lPGRA2a/rCkbwbb8Jikn8qFkCslzZILHXdHtPuUpP80xtxsjIm4UhmWWZKmSrpI0qVywWm9MSZyTMSdkn4eGxqstaflAsUdoeeMMXPkLvYfDj7VIOnPguf0zuDjC8NtpDFmtqT/lvR9ueB1h6RvxAyjS5C0Xu6zKTbGpEr6nVzNymxJiyWVSPrX4PrXSvqopDXW2ixJq+W+B5L7nCVpQXDIGeFjojv2evTy8df7ehqq9/aFD0nqbHHDoAbTerrvAldyF8qNFf3Xy5rsLk5D4UNyv96Xv9m3fGJbzJCrBmnONdLC9W7mqMUf6AsfoWNFbi9Jx16Lv9zV5i4gw9tad+6h44TCR2i/PZ3SJXe4X8tba1ywCV3A9nSGw4ckJahb87oi3gPJ9SSd2B6xTxvdtth2Vu91F8bd7dKxV9xQs0jJ6VJ2MLzUHuwLH/HOLST0633keUnS5f9TWvspacWtbjhY9b6+8CG5zz22KL1iS9+FuOR6mBri1NkMdb3hqNrdFz4k13tWtXvg9WMdfy06EFdud5/PmYzFuQA4rxBARtfnjTH1ktrkfvn+uLV2hyRZa39ora211vZYax+VtEPSupjt/85a22ytPSXpV5JC822ukbuQv8da22atPSDpn0MbGWMCche6X7DWVgQv5P+XpEVyF70hP7fWvm6t7ZH0M0lTJH3LWns6eLH/dOiYwV6QNZIOSvqSpP3GmGPGmE8M8z3pCp5Xm7W21Vq7W9I2SbcH254lF6h+NMD2D0m6zRgTqki9Q67342iwnb+21u6y1vYGh7p9T9IAc4uG/doYUx98hG6TfKukrdbah6213dba1+R6bj4es+3fWmsbrLWtkm6UZKy1XwyeX52ke4PtTZDUKSlV0hJjTKq1tspau+2M71gEY8wnjDGbjTGbq6uHMQMSJr54vwanTnJT4yamuAL0aatcr8hIJKa43ofiJX6Hv1gr7XrcBZ7GSunwpr7AMhZ6e6StP3W9N2V/kMrfcDNUhYYMLbtl9M4/Kc0V1QMAzgoBZHR9zVqbIzeE6llJV0suIBhjvmKM2RcsUK+X+wU8shegx1obeYXZIjdsR3K/qlcFL3pDIis7CyWlRD5nrW2WG2YVOSC5MuLPrQM8Fx47YK09aq39S2vtYkl5kv5N0gPGmGsGexNiVFprO2Kee0h9vRp/KqncWvuHAbZ/Tu5C/r3BIU0fVURYMcZca4x5KVgo3yjpHxT9vsZzg7U2J/gIzUE6XdHvqeSGm0W+f71yw+dCZkuaERFm6uWGsVlJk621myR9Tq5HpsoY85wxZlg3cbDWPmitLbXWlhYWnmUhLc5O7HSy09f03cCvcGH0hWlyhlR88eD7S8uNLio3AankUjeEqWiJG/KTP9cFlazJbthPSCDRrRsydaULHCGZRVLe7L7l1Elu/H/ssaLOb2385aS06GFUxrhzD+23OKIj1wTcVLitp6P3FepNSEiOqpHoUaIOJsUU1ielSlNXRB8vsm2x7cyZGd2r0dvj3p9LPyYt+1D0dLj586KnHY49t5CBPptYhQvcuiHJGdLkmM992qroADSpxD1iTSsd2nrDUbTY3XAyJCXLPTdU09dGB+UpK9zncyZDPWcAFyxqQMaAtbbOGPNxSYeMMe+TlCn3S/q7Je221vYaYzbL1V8MRYWkImNMekQImRXxerVckfgsuR6LUBF5kaIvmEfMWtsg6R+MMX8jN5Tsd5Ka5MKWgsdMDB4zUpxqWD0q6dvGmEvkgshDcdYJHbfHGPOT4HoNkrIl/TJ4vGS5nqK/kfQja22bMeYzkj47glM8Lje8KtIcRb9/1tqoAfpHJe231i4ZpP0PSnowWKNzn6RfyNXbxHtfMJFNW+WG98QrQk9MkVbdOfwi9MXvDxZw17sL99RJ0usP9N00r2a/tOxmFyaW/akrMo9XhJ6eJ136cTccKSHZXWTG3jV80U3uArz2gLuQjAwokjR9tZuqt6Hc1ZZEvj7/One+8YrQF75XKlggtZ2W8i9yF7lHNkUPwQm11RjXIxEsQn9ub2P8IvSL3u2O01Ld/3gzL3fF540n3EVtb7d7DyMNdMf0hCTpko+4YUg93e5zGqhOJ/azib1fihT83O9w++vtcWEs9nPPKg5+NhEF2fF6vyLXCxWhn23NRFKaq/kYaRF68WIXsOqOSBmF7vszFFnF0qV/7r6Pg50zgAsWAWSMWGtPG2P+Ra6o/HuSuuWCQiBYnL1cbsjTULwmd7EbCgBTJf11xLF6gxfpXzXG7JZULzdEa6+kN0bSfmPMQkl/IunnckXvSXK1GjmSQr0VWyT9Y7B+4oRcbUtS/71Fs9bWG2N+KTdMba1cL8hgHpa0U2440wZrbWgQcrJcz09dMHwslpt9bCQ2SLrXGPMRSY9IukTSJ9VXyxPP05K+Zoz5nKT7JTXLfTarrbW/NMasDrbvDbmA2CQpOF2PquVCyEWSGBx9rsiZHn+WI8n9Mjxt1fD2FwhE90zUHoq+Y7e1bsamvNnuojr21/VIqdkuRAyktcbdl6OzxRWhz3uXVBLT3tyZ7hHLGKlwvlx5WrxziLlHyLxrpYPPu4v8jAJp1jul1/6fey0hMTysrCXwavy2GuMu+gsuiv963uy+gNTb64rUQzNfJaW5Y9YckHJn9x9+lZjSdxPBwcR+NgNJSnWzXw0mLbd/z83ZrDccSWn9P+fhyJ7iHsOVljP65wLgvMEQrLH1r3J1FlbS63K9ExVyxcovDXUn1tpuSTdJWiY3rOoXkh6MWe2vJG2W9KakY8Hj3hSs9xiJpmA7n5PreaiQK2L/U2ttaED3f8gViW+VG650LLjeUDwk6QZJv7HWVg62orV2n9xF/LWKGH4VHGb2KbkQ1Cw3ROyRIR4/9hhH5HpAPiM3W9VPJd1rrf35INu0SrpG7n3aK/c+/Vauh0hyPV//KjchQK1cD9jNwW3b5OpFNgSHb31+JO3GeSZer8lo3dTu8O9d+JBcUfXh30UXro+mqSuky++WVn/C/ao/lnUTgYC04jZpyQek+ddL6fnSnqelt/9LevMHfTOBAQAmDGNjp3wEMCGVlpbazZs3j3czMNb2PC2dfNv9OS3XTbc7Gje2e/OHUnNV9HOXfTr+FLRj4aH3uP/e+Uz4qZsfcD0gj33ystE5Rl2ZtH1D9HOz3uFuuggA8MoYs8VaG7f2lSFYADCRLLrRDaXqbJFyZgxczzBcxUuiA8ikaf7Chy/xpogdyrSxAACvCCAAMNHE3j18NExf44qwaw9JiamuLuN8kzfH9RaF6mgCCa6wvvItN1sWU+gCwIRAAAGAC4Exbjaiqr0uhNTsk2avk6bHmV72XJWY7Ga5qtji6lt6u6R9z7rXTEC6+I8HLmwHAHhDEToAXCiOv+6mEZbcDFWHfuvuZn4+Sc2W5l7tZvmKvZt52ZDn/gAAjCECCABcKFpqopet7X/TwPOF7XX35ojU0zU+bQEARCGAAMCFIvZGckmpUva08WnLWEtMdoX3kaae4X4dAAAvqAEBgAvF1BWuNuLUTlesPeud7kL9fLVgvbtbenOVlDsreDNFAMB4I4AAwIVkxhr3uBAEAi50AQAmFAIIAGDsRdyAMGTUbkAIADinUAMCAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgAAAMAbAggAAAAAbwggAAAAALwhgAAAAADwhgACAAAAwBsCCAAAAABvCCAAAAAAvCGAAAAAAPCGAAIAAADAGwIIAAAAAG8IIAAAAAC8IYAAAAAA8IYAAgDAhe6h97jHENz8wKu6+YFXx7hBAM5nBBAAAAAA3hBAAAAAAHhDAAEAAADgDQEEAAAAgDcEEAAALnD16tGLatMLR1/QieYT490cAOc5AggAYMh6ba/q2uvU3ds9KvuraavRG5VvaFftLnX1do3KPjE8HT0d+oVatNN0aH/dfj1x6Amdajk13s0CcB5LHO8GAADODTVtNXr28LNq7mpWamKqrp1xraZnTx/x/iqaK/TkoSdlrZUkHaw7qPfNe99Zt/NE8wltq9qmHtujiwsu1pxJc856n+eatu427ajeoebOZs3LnaeZ2TMHXPdo41G1m97wsrVW++v2qzij2EdTz8haqzdOvqG3a95WUiBJpZNLtSR/yXg365yys2antlVtkyStLFqpiwsuHucW4UJHAAEADMlL5S+puatZktTe3a6Nxzfqw4s/LGPMiPb3ds3b4fAhuUBS01ajgrSCEbexqbNJTx16Sj22x+2zqUIfuOgDmpwxecj72Hpqq7ZXb5ckXVJ0iVYUrRhxe8aDtVZPHXpKNW01kqR9dft03azrNDdnbtz10xPT+z+X1P+58XKo/pC2nNoiSers6dTvj/9exenFZ/U9uZBUNlfqxfIXw8svlr+o/NR8TcmcMo6twoVuwg3BMsa8YIy5L/jnGcaYZmPM1HFulnfGmF3GmJvHux1nazTPwxhznzHmhdHY1zCOuckY84VR2M/njDFPjUabgPFS31Eftdzc1azu/9/encfXVdf5H399kmZpkzZJmy6QtnRNCwVKoSBLC4KIyCAU+PkAR37K5jIjP8dtUMblx4jL+FNndHQccQMVRh0FZZNFZKetUPi1YIWC3Uu3dEuarVnuZ/74ntze3NwkN2lysr2fj8d9JDnne875fs5ycz7n+/3e673vipWT4V+Q0btkps2Wmi3J5APAcTYc2JD18lsPbmXljpU0tjTS2NLI8u3LebP2zeT85tZm9jTsIeGJLtYysKoaqpLJR5tX973aafmK4gpmeV7y7/GF4wdVC8PO+p0dpu2q79hFrKm1Sd34Mkg9f7uaJhKnrFtAzOwU4J+ApcAYYA/wIvAf7v54f1TO3bcAxX25TjNzYKm7P5sy7UngDKDtnWsn8F13/1ZfbruT+swANgLT3H1b23R379N3fzObCPwLcCFQAhwEVgPXufuOvtxWqr6OIxMz+yzwJeAad/9pf2+vN9z9KwNdB5EjNWPcjHY3slPHTiUvJ6+LJbq2cOJCNtVsSo4nmVkykwmjJxxRHccVjOswraSgJOvld9Z1vNndWbeTiuIKNhzYwONbH6eptYnivGIumnXRoHwKX5BbgGE4h1uXRo8anbFsTVMNL+x8gXqc4zyfObMv4ejio8mxwfN8cvKYjl3BUqclPMGTW59k3f515FouiyYt4tQpp8ZZxUGtu/0nMhCyeocxs7cDzwHrgcXAWOAE4L+AyzpZpvf/lQbGre5e7O7FwNXAl6O4h4s7CcdtURTjQuAXkPIfqgfMLNds4P9DRXX4ALAP+OAAV0f6yP7G/Ww9uLXPBjoPR/sa97H14FZaE63dF+4DzYlmZoybwZzSOZSPLufY8cdy/vTzs15+b8Neth3c1q6+k4smc+nsS5lTOofzpp3HO2a844jqWN9cTyKRYHbJ7GRLyvRx05k3fl63y9Y117GlZgtlBWUd5k0pmkLCEzy17SmaWpuA0PqzfPvyrOp1qPUQW2q2UNtUm1X5hpYGttRsob65Pqs6N7Y0JqfVN9dTfaiayrLK5LTRo0Zz8qSTO6zb3Xlww4Os27eOndbCX6yJPQ17+iT5aGptYkvNFmqaajrM68m525xopiCngHll88jPzacor4hzpp1DruUm3yNe3/86r+17DXenJdHCCztfyJhIptbrYNPBjPOz3ffZakm0sPXgVvY37u8wb1fdLnbU7mjXDTGT5tZmttZszbgvu9PWInTs+GPJy8kjLyePU6ecekRjt6RzVfVVbK/d3qsW0tqmWrbUbOFQ66E+qUNn51VP34/6S7YtIP8J3OnuN6VMOwjcHb3aWhFWAzOA84CvmNmdwI+AU4B84GXgY+7+YrSMAZ8BPkJoVfkpHG5/z9Q6YGbLgM8Ds4EdwJfc/a5o3jXA54B/B24CioD/Bv7e3VvNbE206kfNLAH80t1vSA/W3Vea2V8ISdYfonUfE633LKAhivtmd2/obn4U55eAawlJwF7gm+7+HaCtTuui1pmvufutZrYJ+Jy732lmbwUeA94LfAUoBx4Brnf3g9H2K4EfAouiffYT4Fvu3rY/zwSudPfdUYy7gZ+l7Otrou3NSZl2B9Di7jekHIsbgE9G+/86M/s3oMLdm6NligktSH/j7k+lxfECR15sYgAAHSJJREFUcFdqy1LU3e4cdz/XzBZG+3ABkAusBG509/XpxyjFO4AKYBnwgJkd7+5/Tlm/E86va4H5wFpCS8lr0fyrgJuBmUAdcB/wCXevS9+Qmf0K2Onu/5Ay7TpCy+Bc4BjgNuAthMRuI/Aed18XxbnE3c+Plvso8HHCsawBfuru/9RFnCPG8u3LWb079L8vyiti2ZxlPXqCPRI8s+0ZXtnzCgDFecUsm7uMcfkdn/z3lb0Ne7lv/X00tDRgGIunLO7RE+bHtzzOa/teA0JrxLI5yyjKK2LdvnU8sfUJEp5gU80mivKKen1jtOHABv6w+Q+0eiu5lsvSqUuZNnZaVudOaj1G5YxiVskstteFj6KdUzKHRCJBfXM9DS0N7ZarPlTd7brfrH2T32/4Pc2JZsyMc6aew3ETjuu0/OaazTyy6RFaEi3kWA5vm/425pbN7VDutX2v8cTWJ3B38nLyuHDmhRxqOcRjWx4j4QlyLZczjjqDssIyKooryMvNY2P1Rh7d9Cit3kqO5XDalNM63BivP7D+iMe87KrbxQMbHuBQ6yEM48yKM1k4cSEAz775LC9XvQx0f+7uadjDfevvo7GlEcM47ajTOGXyKTz75rM8tfWp5Doyje/Z27C3w/SddTt5YMMDNLU2YWYsrVjabjB2tvs+W9WHqrn3r/cmx00tnLiQsyrOIuEJHtzwIFsPbgVCa8Qlsy8hL7fjc9uq+iruW39fcl+ecfQZWR+fPQ17uH/9/cnr9pTJp7B4yuJB1bo1XLg7j2x+JNndc0LhBC6dcymFowqzWn7t3rU8ve1p3J383HwumnkRRxf3bPSBu/PwpofZWL0RgPLR5Vw651IKcguSZXr6ftSfuj0Loxvb2YSn5d25jnADWRL9zAG+R7gxmwK8BNyT0jpyNeEm7NJo/h7g7C7q8nbgx8DHgPHA+4HvmlnqMscAk6M6nwq8G7gKwN0XRmUuiFo7OiQfFpxFuFldEU0bBTxIuLE+BjidkGh8I5v5wNujur7F3ccCpwFtXcDa6jQvqtOtnYSfC1wQla8kJBofTdn+/YRkZjKhVeoDacs/DXzdzD5oZovMLLeT7XTnbwkJ5ljgl0AL8Dcp899N2A9Pd1yU24Fr2v6IErP3E5IlCDfttxASihlALaHlpisfBB5y9wcJCe6HMpS5BriCcLO/FfhOyrzqKKZSQvfCpYQkNpPbgKvNrCBl2g3Ajzw8avgKsIVwDMqj7XZ47BVdU/8CXBydDwsIic+IV9NUw5rda5J/1zXX8dKulwawRoPPgcYDyeQDwpP4toStv7yw64XkzbfjvLjrxayfEFfVVyWTDwg3ZWuq1uDuLN++PPmksCXRwoodK3pdx+e2P5cc+9HqraypWpNV8pGpHjVNNVx3/HVUllXy571/5v4N93P3G3d3aB3J5tO1Vm5fmXwK7e6s2L6iyyf/K7avSLb8JTzB8u3LOzzJTJ/enGhm5Y6VPLf9uWQcrd7Kq/teZUbJjOSN7fLty5P7KOEJVu9eTW7av4K+SPaf3/l88imu4/xpx59obm3mQOOBZPIB3Z+7q3auSrbuOM4LO19gR92ODuuoOdS+ZcDMmDp2aof1rdyxMtmC5e6s3LGy3ZiRbPZ9T6zevTqZfAC8XPUy1Yeq2Vi9MZl8QBjP8vr+1zOuI9O+zPYJ+aqdq9pdty/tfumIn65LZttqt7Uba7a3cS9/2fuXrJZtTbSyYvuK5LnW1NrEyh0re16Hg9uSyQeEBDS9Dj19P+pP2aTBE6OfyRFLZnaJmR0ws2oza0wp+xt3f9yDenff4u73Rb83EG7sphOeFgO8D7jN3V909ybgq4Sb1878A/Btd3/G3RPu/jzhBvV9KWUagC+4+yF3/yvwR0K3se581swOEJ6CPwvcBTwfzTstqvMn3L3O3d+MYrkuuonubn4TUAgsMLNCd9/t7v8/izql+4y717r7LuB3KXGdTrhh/7S7N7j7BuDf0pa9krCvrgWWA3vN7Ftmll16ftg/u/tOd29y91bg59E621wL3O6Z37V/Acw3s0XR3+cSEsnfALj7y+7+RHTsqoF/Bk43s4wfxxJ9OMHFHE5gfkxIENI7O389OhcPAXeQcj64+0PuvjY6n/5KSJjf1knsTxBary6Ltn9stK47ovlNhER6lru3RvHszrCeFkJL3wIzK3b3A+6e8d0mShhXmdmqqqqqTqo1fDQ0N7Trtw5Q19KhMWpEq2/peOPfV91FOtPQ3P7Jf8ITWd/IZKpvQ3MDCU/Q2NrYvuwRxJG+bLbr6qwe1Yeq293o1jXXMWH0BI6bcByTx0xm8eTFnH7U6d3XKy3+ptamdoPkuytf31Lf4Zpo9VYOtbTf/3VNdR1aaNLXlT6/OdHMkoolySSkxHP7ZOxE+r5vSbTQlGjq8bmbXj7hCWoaO3ZDKsov4uypZ1NWWEb56HLeMeMdGROp9G01tTbR3Ho4Aclm3/dE+vocp765PmPMmfZNpumt3trray/hiQ7njfSNTMe0rjm7/10t3tLuPOxsfd3WIYvrq6fvR/0pmwSk7aM0ko8ToqSilPDkO/Vp8KbUBc2s3Mx+ZmZbzKyG8PQZDic1U1OXcfcEsLmLuswEPh0lPweihOEaILWdand0Y9ymjvC0vjtfdvdSdx8DTAOO4/CN7TSgKq1bznpCUjGxu/nu/iShm87ngN1m9qiZZZMUpWp199Q70NS4Kghxp/53abcfo8Tlq+5+BqGF6n2EZKGn3X42pf19O/BOM5tkZrMJXb0yDgR39/2ExKktYbmW0A2urRvbbDO7x8zejM6X56JyEzuuDYDrCWM/Hoj+vhMYTUi2UqUOsm93PpjZ283sGTOrirb5tc62FyVVPyS0ehD9fMDd25LmfyR0u7rfzHaY2XeiLmnp69lA6E73AWC7mT1rZhd0ss0fuPtid188cWJnu2H4mDRmEmWF7Z8yzyvrvv/+SDKlaEqHm6vK8ZWdlO4b6evPdJw6U1FcQVFeUfJvw6gsqyQ3J5c5pXPalT2SONLHeWQz7gPotB6ZbgBavZW3TnsrV1RewWlHnUZuTvcNyenn78ySmeTn5mddvrK0skOXmbycPGaVtm99mT9hfrtxHxnXlTa/sqySBeULeNfsdzHb8ziWvHbdNXorfd9PHTuVoryizOduWefHPH3e5DGTmTt+bod1zCubx5SiKRTnFZPwBPsa9mVsuUiv1/Rx09t93HA2+74n0utfUlDC5KLJHc6BXMvt9COS09dxVNFRWXe3TI9n8pjJlBaWZrWs9Mwx445p193KzLo8t1MV5BYwo2RGu2nZvn+lmj5uervr18w6dCHs6ftRf8pmDMjrwAZCN6buPgI1fdTNV4GjCF2PdpjZWEJ/97ZxCW8SntwDyS45nX9bUripvsPdv55FvTvT7eMMd99mZv9NqP/7CYnTRDMb4+5t/5VmAY1AVRbzcfcfAD+InubfAtxDaA3qi89yfDPa/uiUJGR6F/E1AfdZ+Ejbts6kBwljZlIdTehSlKpdfd39NTN7kdCdrgx4zFM+zSuD24G7zOyLwOW0b234PrAdONHd95rZ8cAr0PFzOaPB59cTuk5ts8PfQ5BL6IZ1Rxd1aFtHPiEhugn4iYfxOjcCn+pisTuAL0bdqP434fwAIEoQPwp81MxmAfdG6/5C+krc/R5Cd8R84MPAvWY2IeX8GZHMjEtnX8rq3as52HyQuaVzO9xojXQ5lhP2UdVq6prrqCyrZGbJzH7d5oIJC8jLyWND9QZK8kt6NEZgVM4oLpt7Gat3r6axpZH54+cnx3mcO+1cxheOp6q+iqOLjz6iL0dbWrGUkoISdtXtYkrRFE4oPyHrZTurR0lBSbtxHr1Jhk+dcipj8saw7eA2JoyewEkTu953Zxx9BsX5xeyo3cGkMZM4ceKJGcudN/08JhROYE/DHiqKKzi+/HhavZXSglJ21+9mStGUDsuedfRZjMsfx866nUwumsyJ5SdSVV8VvjfFmllPM6+9cQ9Xzrsyq+SqMydNOomC3AI212ymrLAseb709Nw9vvx48nLy2FizkZL8EhZNWkSO5bBszrJk96a5ZXOZPnY6d/7lzuTT3ed3Pk9+bn6H+E+edDKFowrZWrOVCaMnJMeltMl232drdulsLpx5IW/sf4PivGJOmnQSOZZDcX4xy+Ys45WqV0h4ggXlCxhfOD7jOhZOXEhBbgGbqje125fZWFC+gFE5o5L7b6h9n81QUjiqkMvnXM6aqjU0JZpCS2kPvsjz/Onns7pqNXsb9jJt7LRejcsYPWo0l88NdWhJtHDchOOYNGZSuzI9fT/qT90mIO7uZvYRwg3SXuC7wDbCk+a3dLP4OKAe2B89Cf5a2vyfA//PzH5LuNH8FKELS2e+BdxhZisJ3YhyCQPFzd1XdRdLZCehu9SznRUwsymEsQxtndGfB/4KfNPMPkm46b2VqKuRmXU3/zRCS9HzwCHCzX5bK00V4aZ+LmG/9sZKQqLwVTP7DCHp+1haTP9K6AL1CqGr0NmELlBfjYqsBiaZ2cXA7wnjcs6m+zEYEJKKjxJaFv6xm7J/IHST+xmwKa3r0TjgDeCAmZUDX+xiPRcSWp5OI6V7IGGMzMNmdoK7v5JxycPyCcdlf5R8HAfc2NUC7l5lZvcSxr80ED4MAAAL33fyPKGVqJqwnzu0bZrZPEJr3tPROqoJifHg/WKBGI3JG8OZFWcOdDUGteL8YpZULIl1m5VllVk/0Us3Ln8cZ0/tOLxvVM4oTpl8ypFWDQgtGYsmLeq+YAad1WPZnGWs2b0meaPbm0TPzDi+/Pisk6scy2HhxIUdbo7TtX0jeKpRNoqTJ5/c6TK5ObkdbkJf3fdquy4YBw4dYFvtti6/OT0bx044lmMnHNthek/P3Xnj53V4GlyUV8RZFWcl/95Ru6ND15LNNZs7JBBmxoIJCzr9jpNs931PzCqZlXGsUPnocs6dfm5W65g/fj7zx8/v1fYz7T/pH6WFpZwz7ZxeLZuXm9cn3R/LCst467S3djq/p+9H/SmrtkV3fxhYQhj8/BJhcPBawkDr87pY9AvAJEK/+ZcJSUPqDdnPCAOC7wd2RWUzDV5uq8ejhG4rXyd0DdtBGOvQk+8K+SzhCfZ+M7stZfrnLXzpYS0h8dhFGJyMu7cQxhpMJdzoPw/8iehJeXfzo/p9O6rzXsJg8iujZRsIn+r1i6hb2Wd7EAsp278EOJmQ0PyOkNw1pRTLISQKuwkDo79HGCT/zWgd6wljbH5A6NZ0IdEnnGXhl4QWn2LCU/+u6pogHPd3RvVJ9XHCIPAa4BkOd63K5EPA76LxQztTXo8QPjwg02D09LrUAn9HSIJrgf8gfLR0d24jfAjAT6J42iwCnuLw9fES4VxNl0+4NnYABwjJ2xXu3pihrIgMkKK8Is6sOJMLZlzQ761MAyV9EDqEhGwoKSko6dBVqrMWBREZHOxIPuFBBi8z+xDwSXfv387hI5CZzSS01Mx0963dle8rixcv9lWrsm3oExHpXvWhau554x4aVv0IgIolN3HJ7EtI6dbawZW3hU8r+9WHzoiljtlYu3ctK7avoKm1iaOKjuLCmRd2+uWLIhIPM3vR3TOOeR5ajzmkU2a2hPBEfQOhW9pNZNd9Snog+sjjTwO/jTP5EBHpDyUFJbxn/nvY9MJ/UYBxzOx3dZl8DFYLJiygsqySptamdh96ICKDkxKQ4WMaoftQOaEb1q85PL5D+kD0yWVPEZK8iwe4OiIifaJwVCHziT4JZwh/SV3bN32LyOCnBGSYcPdfkN2XRUovRR90oEdrIiIiIkdg6D7qEBERERGRIUcJiIiIiIiIxEYJiIiIiIiIxEYJiIiIiIiIxEYJiIiIiIiIxEafgiUiIjLSXftg1kUH0xcQisjQpBYQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERERERGJjRIQERER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QP4Qj/tcYG10Hu8nJNFXpW1vUBzzvj7Xo3IPA7d3sr0ngX3RvtlI6Ds/bgic6zcCb0Tx7gNWAO9OW9+QuM77Mu5hfI13F/eQucb741yPyg3YdW7RRkRERERERPqdxoCIiIiIiEhslICIiIiIiEhslICIiIiIiEhslICIiIiIiEhslICIiIiIiEhslICIiIiIiEhslICIiIiIiEhslICIiIgMU2b2pJl9LvrdzazezGrNrMbMVpnZBSllc8zs82b2hpkdNLO9ZvacmZ07cBGIyHCkBERERGTkuMDdi4Eywrei/9bMSqN5nwb+FrjE3ccCxwC3Ag0DUlMRGbaUgIiIiIww7t4K3AGMAWZFk88E7nf3V6Myte7+sLuvHJhaishwNWqgKyAiIiLxMrM84HpgD7Aumvw0cLOZ7QeeBV5y97oBqqKIDGNKQEREREaOh8ysldDy0Qr8n5Qk4xvADkI3rJuAMWb2MHCju28dkNqKyLCkLlgiIiIjxzvdvRQoBJYAXzazawE8uNPdL3L3MkKXrBnAXQNWWxEZlpSAiIiIjDDunnD3F4FngMs7KfMi8CPgpDjrJiLDnxIQERGREcjMFgJLgTXR358ws3eaWUn091zgfYQkRUSkz2gMiIiIyMjxqJklACMMQL8T+GI0rwb4PDDPzAqAvcBDwOcGoqIiMnyZuw90HUREREREZIRQFywREREREYmNEhAREREREYmNEhAREREREYmNEhAREREREYmNEhAREREREYmNEhAREREREYmNEhAREREREYmNEhAREREREYmNEhAREREREYnN/wAvEdKMFJDxYgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 720x720 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"source": [
""
],
"metadata": {
"id": "FELeA4dYo4r1"
},
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment