{ "cells": [ { "cell_type": "markdown", "id": "understanding-messaging", "metadata": {}, "source": [ "# Predict BMI\n", "\n", "This script shows a real world example using BPt to study the relationship between BMI and the brain. The data used in this notebook cannot be made public as it is from the ABCD Study, which requires a data use agreement in order to use the data.\n", "\n", "This notebook covers a number of different topics:\n", "\n", "- Preparing Data\n", "- Evaluating a single pipeline\n", "- Considering different options for how to use a test set\n", "- Introduce and use the Evaluate input option" ] }, { "cell_type": "code", "execution_count": 1, "id": "illegal-account", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import BPt as bp\n", "import numpy as np\n", "\n", "# Don't show sklearn convergence warnings\n", "from warnings import simplefilter\n", "from sklearn.exceptions import ConvergenceWarning\n", "simplefilter(\"ignore\", category=ConvergenceWarning)\n", "\n", "# Display tables up to five decimals\n", "pd.options.display.float_format = \"{:,.5f}\".format" ] }, { "cell_type": "markdown", "id": "approximate-swift", "metadata": {}, "source": [ "## Preparing Data" ] }, { "cell_type": "markdown", "id": "swiss-external", "metadata": {}, "source": [ "We will first load in the underlying dataset for this project which has been saved as a csv. It contains multi-modal change in ROI data from two timepoints of the ABCD Study (difference from follow up and baseline).\n", "\n", "This saved dataset doesn't include the real family ids, but an interesting piece of the ABCD study derived data is that there are a number of subjects from the same family. We will handle that in this example (granted with a fake family structure which we will generate below) by ensuring that for any cross-validation split, members of the same family stay in the same training or testing fold." ] }, { "cell_type": "code", "execution_count": 2, "id": "smart-defensive", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['Unnamed: 0',\n", " 'src_subject_id',\n", " 'b_averaged_puberty',\n", " 'b_agemos',\n", " 'b_sex',\n", " 'b_race_ethnicity_categories',\n", " 'b_demo_highest_education_categories',\n", " 'b_site_id_l',\n", " 'b_subjects_no_missing_data',\n", " 'bmi_keep']" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = pd.read_excel('data/structure_base.xlsx')\n", "list(data)[:10]" ] }, { "cell_type": "markdown", "id": "chinese-thirty", "metadata": {}, "source": [ "This dataset contains a number of columns we don't need. We will use the next cell to both group variables of interest together, and then select only the relvant columns to keep." ] }, { "cell_type": "code", "execution_count": 3, "id": "chubby-length", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(9724, 668)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Our target variable\n", "targets = ['b_bmi']\n", "\n", "# Columns with different traditional 'co-variates'.\n", "covars = ['b_sex', 'b_demo_highest_education_categories','b_race_ethnicity_categories',\n", " 'b_agemos', 'b_mri_info_deviceserialnumber']\n", "\n", "# Let's also note which of these are categorical\n", "cat_covars = ['b_mri_info_deviceserialnumber',\n", " 'b_demo_highest_education_categories',\n", " 'b_race_ethnicity_categories',\n", " 'b_sex']\n", "\n", "# These variables are any which we might want to use\n", "# but not directly as input features! E.g., we\n", "# might want to use them to inform choice of cross-validation.\n", "non_input = ['b_rel_family_id']\n", "\n", "# The different imaging features\n", "thick = [d for d in list(data) if 'thick' in d]\n", "area = [d for d in list(data) if 'smri_area_cort' in d]\n", "subcort = [d for d in list(data) if 'smri_vol' in d]\n", "dti_fa = [d for d in list(data) if 'dmri_dti_full_fa_' in d]\n", "dti_md = [d for d in list(data) if 'dmri_dti_full_md_' in d]\n", "brain = thick + area + subcort + dti_fa + dti_md\n", "\n", "# All to keep\n", "to_keep = brain + targets + covars + non_input\n", "\n", "data = data[to_keep]\n", "data.shape" ] }, { "cell_type": "markdown", "id": "editorial-vehicle", "metadata": {}, "source": [ "Now let's convert from a pandas DataFrame to a BPt Dataset." ] }, { "cell_type": "code", "execution_count": 4, "id": "mobile-berlin", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(9724, 668)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = bp.Dataset(data)\n", "\n", "# This is optional, to print some extra statements.\n", "data.verbose = 1\n", "data.shape" ] }, { "cell_type": "markdown", "id": "macro-matrix", "metadata": {}, "source": [ "Next, we perform some actions specific to the Dataset class. These include specifying which columns are 'target' and 'non input', with any we don't set to one these roles treated as the default role, 'data'." ] }, { "cell_type": "code", "execution_count": 5, "id": "random-commissioner", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Setting NaN threshold to: 0.5\n", "Dropped 8 Rows\n" ] }, { "data": { "text/html": [ "
\n", "

Data

\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
b_agemosb_demo_highest_education_categoriesb_mri_info_deviceserialnumberb_race_ethnicity_categoriesb_sexdmri_dti_full_fa_subcort_aseg_accumbens_area_lhdmri_dti_full_fa_subcort_aseg_accumbens_area_rhdmri_dti_full_fa_subcort_aseg_amygdala_lhdmri_dti_full_fa_subcort_aseg_amygdala_rhdmri_dti_full_fa_subcort_aseg_caudate_lh...smri_vol_scs_subcorticalgvsmri_vol_scs_suprateialvsmri_vol_scs_tplhsmri_vol_scs_tprhsmri_vol_scs_vedclhsmri_vol_scs_vedcrhsmri_vol_scs_wholebsmri_vol_scs_wmhintsmri_vol_scs_wmhintlhsmri_vol_scs_wmhintrh
01242HASHe4f6957a210.171950.173890.199230.166540.15518...52,440.00000935,475.835146,220.900005,787.400003,554.800003,427.900001,045,923.63514478.400000.000000.00000
11225HASH1314a204120.168970.164770.200000.177130.15848...62,550.000001,078,644.862578,222.600007,571.400003,872.500003,837.400001,197,394.06258769.700000.000000.00000
21143HASH69f406fa110.228810.252500.232210.222980.22545...60,695.000001,133,471.504607,040.500006,752.900004,588.800004,631.500001,291,126.704601,114.700000.000000.00000
31305HASH1314a204120.167370.188400.151350.162150.18848...65,614.000001,055,580.451878,365.700007,656.400004,600.100004,920.600001,189,841.051871,788.500000.000000.00000
41155HASHc3bf3d9c120.189020.213750.239450.205810.20100...59,174.000001,010,567.332706,577.900006,612.700003,434.300003,942.600001,144,069.732701,036.300000.000000.00000
\n", "

5 rows × 666 columns

\n", "
\n", "
\n", "

Target

\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
b_bmi
015.17507
116.45090
224.43703
317.38701
417.59670
\n", "
\n", "
\n", "

Non Input

\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
b_rel_family_id
02257
111328
27607
311324
47608
\n", "
\n" ], "text/plain": [ " smri_thick_cort_destrieux_g_and_s_frontomargin_lh \\\n", "0 2.34300 \n", "1 2.74300 \n", "2 2.45400 \n", "3 2.96600 \n", "4 2.48500 \n", "\n", " smri_thick_cort_destrieux_g_and_s_occipital_inf_lh \\\n", "0 2.43700 \n", "1 2.31000 \n", "2 2.80100 \n", "3 2.60500 \n", "4 2.68100 \n", "\n", " smri_thick_cort_destrieux_g_and_s_paracentral_lh \\\n", "0 2.41200 \n", "1 2.86600 \n", "2 2.70300 \n", "3 3.19700 \n", "4 2.65500 \n", "\n", " smri_thick_cort_destrieux_g_and_s_subcentral_lh \\\n", "0 2.81300 \n", "1 3.33100 \n", "2 2.45700 \n", "3 3.09100 \n", "4 2.60800 \n", "\n", " smri_thick_cort_destrieux_g_and_s_transv_frontopol_lh \\\n", "0 2.69700 \n", "1 3.07600 \n", "2 2.62100 \n", "3 3.25200 \n", "4 3.05000 \n", "\n", " smri_thick_cort_destrieux_g_and_s_cingul_ant_lh \\\n", "0 2.92300 \n", "1 3.24900 \n", "2 3.17200 \n", "3 3.12600 \n", "4 3.23100 \n", "\n", " smri_thick_cort_destrieux_g_and_s_cingul_mid_ant_lh \\\n", "0 2.91300 \n", "1 3.23000 \n", "2 3.13800 \n", "3 3.24100 \n", "4 2.95600 \n", "\n", " smri_thick_cort_destrieux_g_and_s_cingul_mid_post_lh \\\n", "0 2.75700 \n", "1 3.08100 \n", "2 2.84600 \n", "3 3.05700 \n", "4 2.84400 \n", "\n", " smri_thick_cort_destrieux_g_cingul_post_dorsal_lh \\\n", "0 3.18000 \n", "1 3.49000 \n", "2 3.43000 \n", "3 3.44800 \n", "4 3.15200 \n", "\n", " smri_thick_cort_destrieux_g_cingul_post_ventral_lh ... \\\n", "0 2.40700 ... \n", "1 2.38600 ... \n", "2 2.90700 ... \n", "3 3.21400 ... \n", "4 2.41400 ... \n", "\n", " dmri_dti_full_md_subcort_aseg_amygdala_rh \\\n", "0 0.67408 \n", "1 0.66106 \n", "2 0.73185 \n", "3 0.67879 \n", "4 0.71735 \n", "\n", " dmri_dti_full_md_subcort_aseg_accumbens_area_rh \\\n", "0 0.64020 \n", "1 0.63493 \n", "2 0.66539 \n", "3 0.61966 \n", "4 0.72282 \n", "\n", " dmri_dti_full_md_subcort_aseg_ventraldc_rh b_bmi b_sex \\\n", "0 0.48485 15.17507 1 \n", "1 0.51481 16.45090 2 \n", "2 0.55961 24.43703 1 \n", "3 0.50990 17.38701 2 \n", "4 0.56224 17.59670 2 \n", "\n", " b_demo_highest_education_categories b_race_ethnicity_categories b_agemos \\\n", "0 2 2 124 \n", "1 5 1 122 \n", "2 3 1 114 \n", "3 5 1 130 \n", "4 5 1 115 \n", "\n", " b_mri_info_deviceserialnumber b_rel_family_id \n", "0 HASHe4f6957a 2257 \n", "1 HASH1314a204 11328 \n", "2 HASH69f406fa 7607 \n", "3 HASH1314a204 11324 \n", "4 HASHc3bf3d9c 7608 \n", "\n", "[5 rows x 668 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Set's targets to target role\n", "data = data.set_role(targets, 'target')\n", "\n", "# Set non input to non input role\n", "data = data.set_role(non_input, 'non input')\n", "\n", "# Drop any missing values in the target variable\n", "data = data.drop_subjects_by_nan(scope='target')\n", "\n", "# We can optional add the categories we made as scopes!\n", "data.add_scope(covars, 'covars', inplace=True)\n", "data.add_scope(cat_covars, 'cat covars', inplace=True)\n", "data.add_scope(thick, 'thick', inplace=True)\n", "data.add_scope(area, 'area', inplace=True)\n", "data.add_scope(subcort, 'subcort', inplace=True)\n", "data.add_scope(dti_fa, 'dti_fa', inplace=True)\n", "data.add_scope(dti_md, 'dti_md', inplace=True)\n", "data.add_scope(brain, 'brain', inplace=True )\n", "\n", "# Drop all NaN from any column\n", "# Though BPt can generally handle NaN data fine,\n", "# it makes certain pieces easier for this example as we don't have to worry\n", "# about imputation.\n", "data = data.dropna()\n", "\n", "# Just show the first few rows\n", "data.head()" ] }, { "cell_type": "markdown", "id": "civilian-display", "metadata": {}, "source": [ "The scopes we defined are nice, as it lets use check columns, or compose different scopes together. For example\n", "we can check the scope we set 'cat covars' as composed with another variable as:" ] }, { "cell_type": "code", "execution_count": 6, "id": "unusual-rental", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['b_demo_highest_education_categories',\n", " 'b_mri_info_deviceserialnumber',\n", " 'b_race_ethnicity_categories',\n", " 'b_rel_family_id',\n", " 'b_sex']" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.get_cols([cat_covars, 'b_rel_family_id'])" ] }, { "cell_type": "markdown", "id": "renewable-correction", "metadata": {}, "source": [ "These are notably the columns we want to make sure are categorical, so lets ordinalize them, then plot." ] }, { "cell_type": "code", "execution_count": 7, "id": "homeless-bahamas", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "b_demo_highest_education_categories: 9478 rows\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "b_mri_info_deviceserialnumber: 9478 rows\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "b_race_ethnicity_categories: 9478 rows\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "b_rel_family_id: 9478 rows\n", "b_sex: 9478 rows\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/sage/anaconda3/envs/bpt/lib/python3.9/site-packages/BPt/dataset/helpers.py:167: UserWarning: Skipping plot: b_rel_family_id as >= categories!\n", " warnings.warn(as_str)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "data = data.ordinalize([cat_covars, 'b_rel_family_id'])\n", "\n", "# Then plot just the categorical variables\n", "data.plot(scope='category', subjects='all', decode_values=True)" ] }, { "cell_type": "markdown", "id": "municipal-worcester", "metadata": {}, "source": [ "Let's plot the target variables as well." ] }, { "cell_type": "code", "execution_count": 8, "id": "thousand-nickname", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "b_bmi: 9478 rows\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAcoElEQVR4nO3dfZRddX3v8ffnnJkJKBIg5AokaILgQ7AKGMH61K6iEKQY24I3EWv04qW20JZa2qbasoDL7S3eFm4VrMYLNaYKwVBwrOEiCnorasyE54ApQ8QVAoVAYiBICJP59o/9O2f2ObOTOZNkzzkz83ktZs0+++n89pxhPvk97N9WRGBmZtas0u4CmJlZZ3JAmJlZIQeEmZkVckCYmVkhB4SZmRVyQJiZWSEHhJmZFXJAWMeQ9Kik94zymF+X9Ng+LMNaSb++F8efLenbZZRH0sWS/nkfnvtTkv7vvjqfTTwOCLOciDg2Ir5XtE3SlyXtkPRc+npA0v+SNDV3/Fcj4pSR3ied67K9Kc9oFAVpRPxNRHx8b89tE5cDwmx0PhMRrwCmAx8D3gbcKenl+/JNJHXty/OZ7QkHhHWat0p6UNIWSf8kab9WDkrNJU+nZqqzc+u/LOnzkm6RtE3SnZIOk/R/0nv8VNLxuf1bauaKiO0RsRp4PzCNLCyQ9FFJP0jLknSlpKckPSvpfklvlHQucDbw56lM38y9919Iug94XlJXQXn2k7Q81WDukvTmXNlD0tFN135ZCq9bgCPS+22TdERzk5Wk96cmrV9I+p6kNzT9XC6UdJ+krakMLX02Nn45IKzTnA2cCrwGeC3wVy0ccxhwKDADWAQskfS63PYPpvMcCrwI/Ai4K71eAVyxp4WNiOeA24B3FWw+BXg32XVMTeV4JiKWAF8lq40cEBFn5I5ZCJwOHBQRAwXnnA98HTgE+Bpws6TuEcr4PHAa8Hh6vwMi4vH8PpJeC1wHXEBWO1oJfFNST263DwLzgNnAm4CP7u59bfxzQFinuSoiNkTEZuB/kv3BbMVfR8SLEfF94Ftkf8xqboqINRGxHbgJ2B4RX4mIncBy4PiC843G42R/sJu9BLwCeD2giHgoIp4Y4VyfTdf/wi62r4mIFRHxElmw7UfWzLW3/ivwrYi4LZ3774D9gbc3le3x9Nl8EzhuH7yvdTAHhHWaDbnlnwNHtHDMlvSv5F0d92Ru+YWC1weMtpBNZgCbm1dGxO3AVcDVwFOSlkg6cIRzbWh1e0QMAo/R2s9oJEeQ/dzy595Adm01/5Fb/iV7/3OzDueAsE5zZG75VWT/Oh/JwU2dxK0et9ckHQC8B/i3ou0R8dmIeAswh6yp6c9qm3ZxypHm36//fCRVgJkMXesvgZfl9j1sFOd9HHh17txK77VxhONsAnNAWKc5T9JMSYcAnyZrAmrFJZJ6JL0L+E2ydvrSSJoi6S3AzcAW4J8K9nmrpJNSH8HzwHZgMG1+EjhqD976LZJ+O41yuoCsT+XHads9wIckVSXNA34td9yTwLT8kNwmNwCnSzo5lfdP07l/uAdltAnCAWGd5mvAt4H1wCPAiPcKkDV9bCH7V/BXgU9ExE9LKt+fS3oOeAb4CrAGeHtTE1fNgcCXUtl+no7532nbNcCcNGLo5lG8/zfI+gu2AL8L/HbqMwD4Y+AM4Bdknf3186afx3XA+vSeDc1SEbEO+DDwOeDpdJ4zImLHKMpmE4z8RDkzMyviGoSZmRVyQFjHSzfBbSv4uqXdZTObyNzEZGZmhSbMfC+HHnpozJo1q93FMDMbV9asWfN0REwv2jZhAmLWrFn09fW1uxhmZuOKpJ/vapv7IMzMrJADwszMCjkgzMyskAPCzMwKOSDMzKxQqQEhaZ6kdZL6JS0u2D4lPZmqX9IqSbPS+lmSXpB0T/r6QpnlNDOz4Uob5iqpSjYP/nvJ5qxfLak3Ih7M7XYO2Vz+R0taAFxONhEZwCMRcVxZ5TMzs90rswZxItAfEevTjJDXkz0uMW8+sDQtrwBOTvPQj5nBweCFHTsZ2Dk48s5mZpNImQExg8anYz1G49OpGvZJz9/dSvYAeIDZku6W9P00x/8wks6V1Cepb9OmTXtUyPs2buUNF/0//u3hp/foeDOziapTO6mfAF4VEccDnwS+VvSoxohYEhFzI2Lu9OmFd4qPqJLqKzsHPSeVmVlemQGxkcbHR85k+OML6/ukJ2RNBZ5JD59/BiAi1pA9OOa1ZRSyklq0dnrSQjOzBmUGxGrgGEmzJfUAC4Depn16gUVp+Uzg9ogISdNTJzeSjgKOIXvC2D5XTVWIQdcgzMwalDaKKSIGJJ0P3ApUgWsjYq2kS4G+iOgle+ziMkn9wGayEAF4N3CppJfInuH7iYjYXEY5awHhGoSZWaNSZ3ONiJXAyqZ1F+WWtwNnFRx3I3BjmWWrqTcxuQZhZtagUzupx0ytBuEKhJlZo0kfEB7FZGZWzAHhUUxmZoUmfUB4FJOZWTEHhEcxmZkVmvQBUWticg3CzKzRpA+Ieg3CAWFm1mDSB0RtFJPzwcyskQOi1kntPggzswaTPiCqvpPazKyQA8KjmMzMCk36gPAoJjOzYpM+IIZGMbW5IGZmHWbSB8TQKCbXIMzM8iZ9QEhCckCYmTWb9AEB2Ugmj2IyM2vkgCC7F8KjmMzMGjkgyGoQHsVkZtbIAUE2ksmjmMzMGjkgyEYyuZPazKyRA4KsD8IBYWbWyAGBRzGZmRVxQOAahJlZEQcErkGYmRVxQOBRTGZmRRwQQKUC4SYmM7MGDgiyKb99J7WZWSMHBO6DMDMr4oDAo5jMzIo4IHANwsysiAOCNJurRzGZmTVwQABVj2IyMxum1ICQNE/SOkn9khYXbJ8iaXnavkrSrKbtr5K0TdKFZZbTo5jMzIYrLSAkVYGrgdOAOcBCSXOadjsH2BIRRwNXApc3bb8CuKWsMtZU3AdhZjZMmTWIE4H+iFgfETuA64H5TfvMB5am5RXAyZIEIOkDwM+AtSWWEcjupPYoJjOzRmUGxAxgQ+71Y2ld4T4RMQBsBaZJOgD4C+CSEstX51FMZmbDdWon9cXAlRGxbXc7STpXUp+kvk2bNu3xm1UqMOhRTGZmDbpKPPdG4Mjc65lpXdE+j0nqAqYCzwAnAWdK+gxwEDAoaXtEXJU/OCKWAEsA5s6du8dVgGpFDHicq5lZgzIDYjVwjKTZZEGwAPhQ0z69wCLgR8CZwO2RjTd9V20HSRcD25rDYV/yKCYzs+FKC4iIGJB0PnArUAWujYi1ki4F+iKiF7gGWCapH9hMFiJjriIx6D4IM7MGZdYgiIiVwMqmdRfllrcDZ41wjotLKVxOteIahJlZs07tpB5T2X0Q7S6FmVlncUCQTbXhJiYzs0YOCNzEZGZWxAEBSL6T2sysmQOC7E5qNzGZmTVyQOAmJjOzIg4IavdBtLsUZmadxQFBNorJk/WZmTVyQOAmJjOzIg4IslFMfuSomVkjBwR+HoSZWREHBKmJyQFhZtbAAUEaxeR8MDNr4IDAo5jMzIo4IICKRzGZmQ3jgCBrYvIoJjOzRg4IPIrJzKyIA4KsiWkwcC3CzCzHAUFWgwA8ksnMLMcBQTaKCTySycwszwFB1sQE+KFBZmY5DgjyTUwOCDOzGgcE2TBXcBOTmVmeA4JcE5MfGmRmVueAAKpZPvhuajOzHAcE2Wyu4CYmM7M8BwQexWRmVsQBgUcxmZkVcUDgUUxmZkUcEHgUk5lZEQcEuak23MRkZlbngMBNTGZmRRwQDA1zdSe1mdmQUgNC0jxJ6yT1S1pcsH2KpOVp+ypJs9L6EyXdk77ulfRbZZbTo5jMzIYrLSAkVYGrgdOAOcBCSXOadjsH2BIRRwNXApen9Q8AcyPiOGAe8EVJXSWWFXATk5lZXpk1iBOB/ohYHxE7gOuB+U37zAeWpuUVwMmSFBG/jIiBtH4/oNS/3FWPYjIzG6algJD0L5JOlzSaQJkBbMi9fiytK9wnBcJWYFp6z5MkrQXuBz6RC4x8uc6V1Cepb9OmTaMoWiOPYjIzG67VP/ifBz4EPCzpbyW9rsQyARARqyLiWOCtwF9K2q9gnyURMTci5k6fPn2P38ujmMzMhmspICLiOxFxNnAC8CjwHUk/lPQxSd27OGwjcGTu9cy0rnCf1McwFXim6b0fArYBb2ylrHvCo5jMzIZruclI0jTgo8DHgbuBfyALjNt2cchq4BhJsyX1AAuA3qZ9eoFFaflM4PaIiHRMV3rfVwOvJwumUtRHMbkGYWZW19LIIEk3Aa8DlgFnRMQTadNySX1Fx0TEgKTzgVuBKnBtRKyVdCnQFxG9wDXAMkn9wGayEAF4J7BY0kvAIPAHEfH0nl1iS9cHuA/CzCyv1aGjX4qIlfkVkqZExIsRMXdXB6VjVjatuyi3vB04q+C4ZWRhNCY8isnMbLhWm5guK1j3o31ZkHbyKCYzs+F2W4OQdBjZUNT9JR0PpIdzciDwspLLNmYq7oMwMxtmpCamU8k6pmcCV+TWPwd8qqQyjTk/ctTMbLjdBkRELAWWSvqdiLhxjMo05irupDYzG2akJqYPR8Q/A7MkfbJ5e0RcUXDYuFMLiHBAmJnVjdTE9PL0/YCyC9JOQ01MbS6ImVkHGamJ6Yvp+yVjU5z28CgmM7PhWp2s7zOSDpTULem7kjZJ+nDZhRsrHsVkZjZcq/dBnBIRzwK/STblxdHAn5VVqLHmUUxmZsO1GhC1pqjTga9HxNaSytMWHsVkZjZcq1Nt/KuknwIvAL8vaTqwvbxija1KxaOYzMyatTrd92Lg7WSPAX0JeJ7hT4cbt6ryKCYzs2ajec7z68nuh8gf85V9XJ62qHgUk5nZMK1O970MeA1wD7AzrQ4mSED4eRBmZsO1WoOYC8yJCdpI71FMZmbDtTqK6QHgsDIL0k4VP3LUzGyYVmsQhwIPSvoJ8GJtZUS8v5RSjbF6E5MDwsysrtWAuLjMQrRbxaOYzMyGaSkgIuL7kl4NHBMR35H0MrLnTE8ItVFMrkGYmQ1pdS6m/w6sAL6YVs0Abi6pTGNu6D4IB4SZWU2rndTnAe8AngWIiIeB/1JWocaaRzGZmQ3XakC8GBE7ai/SzXIT5q+pJCQ3MZmZ5bUaEN+X9Clgf0nvBb4OfLO8Yo29quSAMDPLaTUgFgObgPuB3wNWAn9VVqHaoSJ5FJOZWU6ro5gGJd0M3BwRm8otUntUKm5iMjPL220NQpmLJT0NrAPWpafJXTQ2xRs7Vcmd1GZmOSM1Mf0J2eilt0bEIRFxCHAS8A5Jf1J66cZQpeKAMDPLGykgfhdYGBE/q62IiPXAh4GPlFmwsVatuJPazCxvpIDojoinm1emfojucorUHh7FZGbWaKSA2LGH28YdeRSTmVmDkUYxvVnSswXrBexXQnnaplrxA4PMzPJ2GxARMWEm5BtJVfIjR83Mclq9UW7Cq1TkGoSZWU6pASFpnqR1kvolLS7YPkXS8rR9laRZaf17Ja2RdH/6/htllhOyUUyuQZiZDSktICRVgauB04A5wEJJc5p2OwfYEhFHA1cCl6f1TwNnRMSvAIuAZWWVsyYbxVT2u5iZjR9l1iBOBPojYn2aCfZ6YH7TPvOBpWl5BXCyJEXE3RHxeFq/lmySwCklljWbzdUJYWZWV2ZAzAA25F4/ltYV7hMRA8BWYFrTPr8D3BURLzatR9K5kvok9W3atHdTRFV9J7WZWYOO7qSWdCxZs9PvFW2PiCURMTci5k6fPn2v3qviUUxmZg3KDIiNwJG51zPTusJ90kOIpgLPpNczgZuAj0TEIyWWE0hTbbgGYWZWV2ZArAaOkTRbUg+wAOht2qeXrBMa4Ezg9ogISQcB3wIWR8SdJZaxzqOYzMwalRYQqU/hfOBW4CHghohYK+lSSe9Pu10DTJPUD3yS7MFEpOOOBi6SdE/6KvUZ2BVP921m1qClBwbtqYhYSfb0ufy6i3LL24GzCo67DLiszLI1qwhcgTAzG9LRndRjyaOYzMwaOSASj2IyM2vkgEg8isnMrJEDIvEoJjOzRg6IpCLXIMzM8hwQSUV4sj4zsxwHROJRTGZmjRwQSUVi0H0QZmZ1Doiku1rhpZ2D7S6GmVnHcEAk3VUx4CYmM7M6B0TSXa3w0oBrEGZmNQ6IpLurwo6drkGYmdU4IJLuitwHYWaW44BI3EltZtbIAZF0d1UYcBOTmVmdAyLprlbYsXOQ8L0QZmaAA6KuuyIAD3U1M0scEEl3V/ajcD+EmVnGAZF0V2sB4RqEmRk4IOp6qlkTk2sQZmYZB0QyVINwQJiZgQOirqsWEANuYjIzAwdEXXetiWnQNQgzM3BA1PW4icnMrIEDIul2E5OZWQMHRNKVmph2uAZhZgY4IOrcxGRm1sgBkdTupPaEfWZmGQdE4vsgzMwaOSCSror7IMzM8hwQSY8n6zMza+CASGpNTO6DMDPLlBoQkuZJWiepX9Ligu1TJC1P21dJmpXWT5N0h6Rtkq4qs4w13R7mambWoLSAkFQFrgZOA+YACyXNadrtHGBLRBwNXAlcntZvB/4auLCs8jXzMFczs0Zl1iBOBPojYn1E7ACuB+Y37TMfWJqWVwAnS1JEPB8RPyALijExNFmfA8LMDMoNiBnAhtzrx9K6wn0iYgDYCkxr9Q0knSupT1Lfpk2b9qqw9cn63AdhZgaM807qiFgSEXMjYu706dP36lz1+yA8m6uZGVBuQGwEjsy9npnWFe4jqQuYCjxTYpl2yZP1mZk1KjMgVgPHSJotqQdYAPQ27dMLLErLZwK3R0Rb/kJXK6Iid1KbmdV0lXXiiBiQdD5wK1AFro2ItZIuBfoiohe4BlgmqR/YTBYiAEh6FDgQ6JH0AeCUiHiwrPJCVotwQJiZZUoLCICIWAmsbFp3UW55O3DWLo6dVWbZivRUK+6kNjNLxnUn9b7W3eUahJlZjQMip7sqB4SZWeKAyOmqVDzVhplZ4oDI6elyH4SZWY0DIqe7KgZcgzAzAxwQDTzM1cxsiAMip6taYYebmMzMAAdEg56qPJurmVnigMjprlYY8GR9ZmaAA6JBt5uYzMzqHBA53dWKm5jMzBIHRI7vpDYzG+KAyMn6INzEZGYGDogG3dUKO9zEZGYGOCAa9HS5icnMrMYBkdNV8Z3UZmY1Doicbj8wyMyszgGR0+0mJjOzOgdETo8n6zMzq3NA5HRVKgwG7PRQVzMzB0Red5cAXIswM8MB0aCnmv04HBBmZg6IBt31gHATk5mZAyKn2zUIM7M6B0ROVzXrg/B0G2ZmDogG7oMwMxvigMipNTF5RlczMwdEg243MZmZ1TkgctxJbWY2xAGR42GuZmZDHBA5tSamAdcgzMwcEHndXdmPY4cDwszMAZHX4yYmM7O6UgNC0jxJ6yT1S1pcsH2KpOVp+ypJs3Lb/jKtXyfp1DLLWVO7Uc6d1GZmJQaEpCpwNXAaMAdYKGlO027nAFsi4mjgSuDydOwcYAFwLDAP+Hw6X6mm7t8NwPLVG3hu+0tlv52ZWUfrKvHcJwL9EbEeQNL1wHzgwdw+84GL0/IK4CpJSuuvj4gXgZ9J6k/n+1GJ5eXwqfvzPz7wRi7pXctxl95GVYLsP7JrACGk3Z5mTESbW8GC9jfDtf9n0AE6oBDt/l1o9+8BtP9jOP1XDuezC4/f5+ctMyBmABtyrx8DTtrVPhExIGkrMC2t/3HTsTOa30DSucC56eU2Sev2oJyHAk/vwXGdaKJcy0S5DvC1dKKJch2QruVzwOc+tMfnePWuNpQZEKWLiCXAkr05h6S+iJi7j4rUVhPlWibKdYCvpRNNlOuA8q+lzE7qjcCRudcz07rCfSR1AVOBZ1o81szMSlRmQKwGjpE0W1IPWadzb9M+vcCitHwmcHtERFq/II1ymg0cA/ykxLKamVmT0pqYUp/C+cCtQBW4NiLWSroU6IuIXuAaYFnqhN5MFiKk/W4g69AeAM6LiJ0lFXWvmqg6zES5lolyHeBr6UQT5Tqg5GtRdMIQADMz6zi+k9rMzAo5IMzMrNCkDoiRpgLpNJIelXS/pHsk9aV1h0i6TdLD6fvBab0kfTZd232STmhz2a+V9JSkB3LrRl12SYvS/g9LWlT0Xm26loslbUyfzT2S3pfbVjhtTLt//yQdKekOSQ9KWivpj9P6cfe57OZaxtXnImk/ST+RdG+6jkvS+tnKpiPqVzY9UU9aX+50RRExKb/IOs4fAY4CeoB7gTntLtcIZX4UOLRp3WeAxWl5MXB5Wn4fcAvZjeBvA1a1uezvBk4AHtjTsgOHAOvT94PT8sEdci0XAxcW7Dsn/W5NAWan37lqJ/z+AYcDJ6TlVwD/nso77j6X3VzLuPpc0s/2gLTcDaxKP+sbgAVp/ReA30/LfwB8IS0vAJbv7vpGW57JXIOoTwUSETuA2lQg4818YGlaXgp8ILf+K5H5MXCQpMPbUD4AIuL/k41Uyxtt2U8FbouIzRGxBbiNbK6uMbWLa9mV+rQxEfEzoDZtTNt//yLiiYi4Ky0/BzxENmPBuPtcdnMtu9KRn0v62W5LL7vTVwC/QTYdEQz/TGqf1QrgZKlxuqKm6xuVyRwQRVOB7O4XqhME8G1Ja5RNMwLwyoh4Ii3/B/DKtDwerm+0Ze/0azo/Nb1cW2uWYZxcS2qaOJ7sX6zj+nNpuhYYZ5+LpKqke4CnyML2EeAXETFQUKaG6YqA/HRFe30dkzkgxqN3RsQJZDPknifp3fmNkdUtx+W45fFc9uQfgdcAxwFPAH/f1tKMgqQDgBuBCyLi2fy28fa5FFzLuPtcImJnRBxHNoPEicDr21WWyRwQ4246j4jYmL4/BdxE9svzZK3pKH1/Ku0+Hq5vtGXv2GuKiCfT/9iDwJcYqs539LVI6ib7g/rViPiXtHpcfi5F1zJePxeAiPgFcAfwq2TNebUbm/NlKnW6oskcEK1MBdIxJL1c0itqy8ApwAM0TleyCPhGWu4FPpJGnrwN2JprNugUoy37rcApkg5OTQWnpHVt19S/81tknw3setqYtv/+pbbqa4CHIuKK3KZx97ns6lrG2+ciabqkg9Ly/sB7yfpT7iCbjgiGfyblTVc0Vr3znfhFNirj38na+D7d7vKMUNajyEYl3AusrZWXrL3xu8DDwHeAQ2JoNMTV6druB+a2ufzXkVXxXyJrDz1nT8oO/DeyDrd+4GMddC3LUlnvS/9zHp7b/9PpWtYBp3XK7x/wTrLmo/uAe9LX+8bj57KbaxlXnwvwJuDuVN4HgIvS+qPI/sD3A18HpqT1+6XX/Wn7USNd32i+PNWGmZkVmsxNTGZmthsOCDMzK+SAMDOzQg4IMzMr5IAwM7NCDgizEaRZQk9tWneBpH/cxf7fk1Tag+TNxooDwmxk15Eeh5uzIK03m7AcEGYjWwGcnpuDfxZwBLBQUl9+3v5mkrblls+U9OW0PF3SjZJWp693pPW/pqFnF9xdu3verB26Rt7FbHKLiM2SfkI2SeI3yGoPNwB/k7ZVge9KelNE3Nfiaf8BuDIifiDpVWRTU7wBuBA4LyLuTBPPbd/nF2TWItcgzFqTb2aqNS99UNJdZFMjHEv2kJZWvQe4Kk3r3AscmALhTuAKSX8EHBRDUzybjTkHhFlrvkH2MJYTgJeRPTDoQuDkiHgT8C2yeXGa5eeyyW+vAG+LiOPS14yI2BYRfwt8HNgfuFNS26Z6NnNAmLUgsqd83QFcS1Z7OBB4Htgq6ZVkzU9FnpT0BkkVstlEa74N/GHthaTj0vfXRMT9EXE52cyiDghrGweEWeuuA94MXBcR95I1Lf0U+BpZ01CRxcC/Aj8kmwG25o+AuelJZw8Cn0jrL5D0gKT7yGaLvWXfX4ZZazybq5mZFXINwszMCjkgzMyskAPCzMwKOSDMzKyQA8LMzAo5IMzMrJADwszMCv0nhiT4lbDln38AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "data.plot('target')" ] }, { "cell_type": "markdown", "id": "jewish-short", "metadata": {}, "source": [ "Okay, we note that there are some extreme outliers." ] }, { "cell_type": "code", "execution_count": 9, "id": "numeric-helping", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dropped 1 Rows\n" ] }, { "data": { "text/plain": [ "b_bmi 53.90845\n", "dtype: float64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = data.filter_outliers_by_std(n_std=10, scope='target')\n", "data['target'].max()" ] }, { "cell_type": "code", "execution_count": 10, "id": "afraid-specialist", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "b_bmi: 9477 rows\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "data.plot('target')" ] }, { "cell_type": "markdown", "id": "comparable-market", "metadata": {}, "source": [ "Okay this maximum seem much more reasonable. Let's also assume that there may be some extreme values present in the input data as well, and that these represet corrupted data that we therefore want to drop." ] }, { "cell_type": "code", "execution_count": 11, "id": "public-office", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dropped 62 Rows\n", "Dropped 14 Rows\n" ] } ], "source": [ "# Repeat it twice, to deal with outliers at multiple scales\n", "data = data.filter_outliers_by_std(n_std=10, scope='float')\n", "data = data.filter_outliers_by_std(n_std=10, scope='float')" ] }, { "cell_type": "markdown", "id": "verified-spray", "metadata": {}, "source": [ "Next, we consider splitting up out data with a global train and test split. This can be useful in some instances. Note that we also define a cv strategy which says to perform the train test split keeping members of the same family in the same fold." ] }, { "cell_type": "code", "execution_count": 12, "id": "urban-edinburgh", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Performing test split on: 9401 subjects.\n", "random_state: 5\n", "Test split size: 0.2\n", "\n", "Performed train/test split\n", "Train size: 7481\n", "Test size: 1920\n" ] }, { "data": { "text/html": [ "
\n", "

Data

\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
b_agemosb_demo_highest_education_categoriesb_mri_info_deviceserialnumberb_race_ethnicity_categoriesb_sexdmri_dti_full_fa_subcort_aseg_accumbens_area_lhdmri_dti_full_fa_subcort_aseg_accumbens_area_rhdmri_dti_full_fa_subcort_aseg_amygdala_lhdmri_dti_full_fa_subcort_aseg_amygdala_rhdmri_dti_full_fa_subcort_aseg_caudate_lh...smri_vol_scs_subcorticalgvsmri_vol_scs_suprateialvsmri_vol_scs_tplhsmri_vol_scs_tprhsmri_vol_scs_vedclhsmri_vol_scs_vedcrhsmri_vol_scs_wholebsmri_vol_scs_wmhintsmri_vol_scs_wmhintlhsmri_vol_scs_wmhintrh
0124126100.171950.173890.199230.166540.15518...52,440.00000935,475.835146,220.900005,787.400003,554.800003,427.900001,045,923.63514478.400000.000000.00000
112242010.168970.164770.200000.177130.15848...62,550.000001,078,644.862578,222.600007,571.400003,872.500003,837.400001,197,394.06258769.700000.000000.00000
2114213000.228810.252500.232210.222980.22545...60,695.000001,133,471.504607,040.500006,752.900004,588.800004,631.500001,291,126.704601,114.700000.000000.00000
313042010.167370.188400.151350.162150.18848...65,614.000001,055,580.451878,365.700007,656.400004,600.100004,920.600001,189,841.051871,788.500000.000000.00000
4115420010.189020.213750.239450.205810.20100...59,174.000001,010,567.332706,577.900006,612.700003,434.300003,942.600001,144,069.732701,036.300000.000000.00000
..................................................................
971711912210.163920.172220.199060.178290.15375...47,422.00000893,537.356066,066.300005,342.000002,808.400003,469.60000999,770.356061,152.400000.000000.00000
972012947010.234690.253380.259710.263210.22641...59,348.000001,070,071.008127,036.600006,669.100003,817.400004,103.400001,198,435.10812794.900000.000000.00000
972110820100.154690.202230.171450.153000.15900...63,328.000001,093,051.508978,123.200007,346.200003,992.800004,219.800001,213,030.80897805.500000.000000.00000
9722110217010.165300.224840.195240.160840.16671...57,037.00000997,648.582736,692.500006,437.900003,833.400003,887.700001,127,133.482731,477.900000.000000.00000
9723113426010.150500.160660.169820.164840.15355...61,090.00000989,701.562667,113.500006,835.300004,029.600003,826.000001,134,202.762662,304.800000.000000.00000
\n", "

9401 rows × 666 columns

\n", "

7481 rows × 666 columns - Train Set

1920 rows × 666 columns - Test Set

\n", "
\n", "

Target

\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
b_bmi
015.17507
116.45090
224.43703
317.38701
417.59670
......
971716.26895
972031.95732
972114.19771
972224.42694
972318.25486
\n", "

9401 rows × 1 columns

\n", "

7481 rows × 1 columns - Train Set

1920 rows × 1 columns - Test Set

\n", "
\n", "

Non Input

\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
b_rel_family_id
01589
17867
25174
37864
45175
......
97178070
97201814
97215719
97226412
97231740
\n", "

9401 rows × 1 columns

\n", "

7481 rows × 1 columns - Train Set

1920 rows × 1 columns - Test Set

\n" ], "text/plain": [ " smri_thick_cort_destrieux_g_and_s_frontomargin_lh \\\n", "0 2.34300 \n", "1 2.74300 \n", "2 2.45400 \n", "3 2.96600 \n", "4 2.48500 \n", "... ... \n", "9717 2.71000 \n", "9720 2.42100 \n", "9721 2.69000 \n", "9722 2.56400 \n", "9723 2.66500 \n", "\n", " smri_thick_cort_destrieux_g_and_s_occipital_inf_lh \\\n", "0 2.43700 \n", "1 2.31000 \n", "2 2.80100 \n", "3 2.60500 \n", "4 2.68100 \n", "... ... \n", "9717 2.45900 \n", "9720 2.63900 \n", "9721 2.71200 \n", "9722 2.52600 \n", "9723 2.91500 \n", "\n", " smri_thick_cort_destrieux_g_and_s_paracentral_lh \\\n", "0 2.41200 \n", "1 2.86600 \n", "2 2.70300 \n", "3 3.19700 \n", "4 2.65500 \n", "... ... \n", "9717 2.70200 \n", "9720 2.50500 \n", "9721 2.61900 \n", "9722 2.80000 \n", "9723 2.66100 \n", "\n", " smri_thick_cort_destrieux_g_and_s_subcentral_lh \\\n", "0 2.81300 \n", "1 3.33100 \n", "2 2.45700 \n", "3 3.09100 \n", "4 2.60800 \n", "... ... \n", "9717 2.79600 \n", "9720 3.20100 \n", "9721 2.86100 \n", "9722 3.10400 \n", "9723 3.11400 \n", "\n", " smri_thick_cort_destrieux_g_and_s_transv_frontopol_lh \\\n", "0 2.69700 \n", "1 3.07600 \n", "2 2.62100 \n", "3 3.25200 \n", "4 3.05000 \n", "... ... \n", "9717 2.56900 \n", "9720 2.69200 \n", "9721 2.96000 \n", "9722 2.89300 \n", "9723 2.96800 \n", "\n", " smri_thick_cort_destrieux_g_and_s_cingul_ant_lh \\\n", "0 2.92300 \n", "1 3.24900 \n", "2 3.17200 \n", "3 3.12600 \n", "4 3.23100 \n", "... ... \n", "9717 2.94600 \n", "9720 3.16600 \n", "9721 2.92900 \n", "9722 3.08100 \n", "9723 3.16700 \n", "\n", " smri_thick_cort_destrieux_g_and_s_cingul_mid_ant_lh \\\n", "0 2.91300 \n", "1 3.23000 \n", "2 3.13800 \n", "3 3.24100 \n", "4 2.95600 \n", "... ... \n", "9717 2.88900 \n", "9720 2.87400 \n", "9721 3.00500 \n", "9722 3.07900 \n", "9723 3.05800 \n", "\n", " smri_thick_cort_destrieux_g_and_s_cingul_mid_post_lh \\\n", "0 2.75700 \n", "1 3.08100 \n", "2 2.84600 \n", "3 3.05700 \n", "4 2.84400 \n", "... ... \n", "9717 2.72600 \n", "9720 2.79800 \n", "9721 2.88300 \n", "9722 2.86700 \n", "9723 2.97600 \n", "\n", " smri_thick_cort_destrieux_g_cingul_post_dorsal_lh \\\n", "0 3.18000 \n", "1 3.49000 \n", "2 3.43000 \n", "3 3.44800 \n", "4 3.15200 \n", "... ... \n", "9717 3.26200 \n", "9720 3.36600 \n", "9721 3.17500 \n", "9722 3.42400 \n", "9723 3.35500 \n", "\n", " smri_thick_cort_destrieux_g_cingul_post_ventral_lh ... \\\n", "0 2.40700 ... \n", "1 2.38600 ... \n", "2 2.90700 ... \n", "3 3.21400 ... \n", "4 2.41400 ... \n", "... ... ... \n", "9717 2.62300 ... \n", "9720 2.70900 ... \n", "9721 3.05500 ... \n", "9722 2.43600 ... \n", "9723 2.16800 ... \n", "\n", " dmri_dti_full_md_subcort_aseg_amygdala_rh \\\n", "0 0.67408 \n", "1 0.66106 \n", "2 0.73185 \n", "3 0.67879 \n", "4 0.71735 \n", "... ... \n", "9717 0.68056 \n", "9720 0.73108 \n", "9721 0.66988 \n", "9722 0.67194 \n", "9723 0.69006 \n", "\n", " dmri_dti_full_md_subcort_aseg_accumbens_area_rh \\\n", "0 0.64020 \n", "1 0.63493 \n", "2 0.66539 \n", "3 0.61966 \n", "4 0.72282 \n", "... ... \n", "9717 0.63070 \n", "9720 0.68669 \n", "9721 0.63930 \n", "9722 0.64405 \n", "9723 0.66166 \n", "\n", " dmri_dti_full_md_subcort_aseg_ventraldc_rh b_bmi b_sex \\\n", "0 0.48485 15.17507 0 \n", "1 0.51481 16.45090 1 \n", "2 0.55961 24.43703 0 \n", "3 0.50990 17.38701 1 \n", "4 0.56224 17.59670 1 \n", "... ... ... ... \n", "9717 0.53454 16.26895 1 \n", "9720 0.53526 31.95732 1 \n", "9721 0.51814 14.19771 0 \n", "9722 0.52716 24.42694 1 \n", "9723 0.50890 18.25486 1 \n", "\n", " b_demo_highest_education_categories b_race_ethnicity_categories \\\n", "0 1 1 \n", "1 4 0 \n", "2 2 0 \n", "3 4 0 \n", "4 4 0 \n", "... ... ... \n", "9717 1 2 \n", "9720 4 0 \n", "9721 2 1 \n", "9722 2 0 \n", "9723 4 0 \n", "\n", " b_agemos b_mri_info_deviceserialnumber b_rel_family_id \n", "0 124 26 1589 \n", "1 122 2 7867 \n", "2 114 13 5174 \n", "3 130 2 7864 \n", "4 115 20 5175 \n", "... ... ... ... \n", "9717 119 2 8070 \n", "9720 129 7 1814 \n", "9721 108 0 5719 \n", "9722 110 17 6412 \n", "9723 113 26 1740 \n", "\n", "[9401 rows x 668 columns]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Let's say we want to keep family members in the same train or test split\n", "cv_strategy = bp.CVStrategy(groups='b_rel_family_id')\n", "\n", "# Test split\n", "data = data.set_test_split(.2, random_state=5, cv_strategy=cv_strategy)\n", "data" ] }, { "cell_type": "markdown", "id": "enormous-construction", "metadata": {}, "source": [ "## Single Training Set Evaluation" ] }, { "cell_type": "markdown", "id": "composed-inquiry", "metadata": {}, "source": [ "Our Dataset is now fully prepared. We can now define and evaluate a machine learning pipeline.\n", "We will start by considering a pipeline which a few steps, these are:\n", "\n", "1. Winsorize just the brain data.\n", "2. Perform Robust Scaling on any 'float' type columns, 'brain' or 'covars'\n", "3. One Hot Encode any categorical features\n", "4. Fit an Elastic-Net Regression with nested random hyper-parameter search\n", "\n", "Let's use one other feature of the toolbox, that is a custom cross-validation strategy. This is the same idea that we used when defining the train-test split, but now we want it to apply both during the evaluation and during the splits made when evaluating hyper-parameters." ] }, { "cell_type": "code", "execution_count": 13, "id": "collect-tribe", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Pipeline(steps=[Scaler(extra_params={'quantile_range': (2, 98)},\n", " obj='winsorize', scope='brain'),\n", " Scaler(obj='standard'),\n", " Transformer(obj='one hot encoder', scope='category'),\n", " Model(obj='elastic',\n", " param_search=ParamSearch(cv=CV(cv_strategy=CVStrategy(groups='b_rel_family_id')),\n", " n_iter=60),\n", " params=1)])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#1\n", "w_scaler = bp.Scaler('winsorize', quantile_range=(2, 98), scope='brain')\n", "\n", "#2\n", "s_scaler = bp.Scaler('standard', scope='float')\n", "\n", "#3\n", "ohe = bp.Transformer('one hot encoder', scope='category')\n", "\n", "#4\n", "param_search=bp.ParamSearch('RandomSearch', n_iter=60,\n", " cv=bp.CV(splits=3, cv_strategy=cv_strategy))\n", "elastic = bp.Model('elastic', params=1,\n", " param_search=param_search)\n", "\n", "# Now we can actually defined the pipeline\n", "pipe = bp.Pipeline(steps=[w_scaler, s_scaler, ohe, elastic])\n", "pipe" ] }, { "cell_type": "markdown", "id": "ancient-ancient", "metadata": {}, "source": [ "Let's say we want to use a 5-fold CV to evaluate this model on just the training set. We can first define the cv, the same as for the param_search above, but this time with splits=5. " ] }, { "cell_type": "code", "execution_count": 14, "id": "executive-infrastructure", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "CV(cv_strategy=CVStrategy(groups='b_rel_family_id'), splits=5)" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cv=bp.CV(splits=5, n_repeats=1, cv_strategy=cv_strategy)\n", "cv" ] }, { "cell_type": "markdown", "id": "elect-necklace", "metadata": {}, "source": [ "And we will make a problem_spec to store some common params. In this case the random state for reproducibility of results and the number of jobs to use." ] }, { "cell_type": "code", "execution_count": 15, "id": "cultural-logic", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ProblemSpec(n_jobs=8, random_state=10)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Use problem spec just to store n jobs and random state\n", "ps = bp.ProblemSpec(n_jobs=8, random_state=10)\n", "ps" ] }, { "cell_type": "markdown", "id": "wired-charleston", "metadata": {}, "source": [ "Now we are ready to evaluate this pipeline, let's check an example using the function evaluate.\n", "\n", "We will set just one specific parameter to start, which is a scope of 'brain' to say\n", "we just want to run a model with just the brain features (i.e., not the co-variates)\n" ] }, { "cell_type": "code", "execution_count": 16, "id": "pleased-panic", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "779b2929beec46d4852596afd5e13ddd", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Folds: 0%| | 0/5 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mean_scores_explained_variancemean_scores_neg_mean_squared_errorstd_scores_explained_variancestd_scores_neg_mean_squared_errormean_timing_fitmean_timing_score
scope
covars0.11317-14.517610.011921.452434.737120.03311
brain0.25656-12.152310.023941.1099615.581190.05231
all0.27908-11.787510.022941.1053715.453470.07103
thick0.10118-14.695640.027111.389718.069420.01529
area0.02774-15.896530.009911.462887.712400.01417
subcort0.05189-15.506150.008311.394054.389060.02439
dti_fa0.10302-14.667910.006591.393668.242340.01827
dti_md0.14541-13.962970.011271.218648.315850.01754
\n", "" ], "text/plain": [ " mean_scores_explained_variance mean_scores_neg_mean_squared_error \\\n", "scope \n", "covars 0.11317 -14.51761 \n", "brain 0.25656 -12.15231 \n", "all 0.27908 -11.78751 \n", "thick 0.10118 -14.69564 \n", "area 0.02774 -15.89653 \n", "subcort 0.05189 -15.50615 \n", "dti_fa 0.10302 -14.66791 \n", "dti_md 0.14541 -13.96297 \n", "\n", " std_scores_explained_variance std_scores_neg_mean_squared_error \\\n", "scope \n", "covars 0.01192 1.45243 \n", "brain 0.02394 1.10996 \n", "all 0.02294 1.10537 \n", "thick 0.02711 1.38971 \n", "area 0.00991 1.46288 \n", "subcort 0.00831 1.39405 \n", "dti_fa 0.00659 1.39366 \n", "dti_md 0.01127 1.21864 \n", "\n", " mean_timing_fit mean_timing_score \n", "scope \n", "covars 4.73712 0.03311 \n", "brain 15.58119 0.05231 \n", "all 15.45347 0.07103 \n", "thick 8.06942 0.01529 \n", "area 7.71240 0.01417 \n", "subcort 4.38906 0.02439 \n", "dti_fa 8.24234 0.01827 \n", "dti_md 8.31585 0.01754 " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "compare_scopes = bp.Compare(['covars', 'brain', 'all',\n", " 'thick', 'area', 'subcort',\n", " 'dti_fa', 'dti_md'])\n", "\n", "evaluators = bp.evaluate(pipeline=pipe,\n", " scope=compare_scopes,\n", " dataset=data,\n", " problem_spec=ps,\n", " cv=cv)\n", "\n", "# Look at a summary of the results - note this option is only available after a call to evaluate with\n", "# Compare's has been made!\n", "evaluators.summary()" ] }, { "cell_type": "markdown", "id": "whole-mason", "metadata": {}, "source": [ "We can also try another method available which will run a pairwise model ttest comparison between all options" ] }, { "cell_type": "code", "execution_count": 24, "id": "entertaining-beaver", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
scope (1)scope (2)t_statp_val
0covarsbrain-11.368250.00478
1covarsall-14.323680.00193
2covarsthick0.864501.00000
3covarsarea7.665060.02180
4covarssubcort9.073010.01145
5covarsdti_fa1.973691.00000
6covarsdti_md-4.568560.14381
7brainall-15.678120.00135
8brainthick30.461950.00010
9brainarea17.321170.00091
10brainsubcort17.400240.00090
11braindti_fa12.946960.00287
12braindti_md11.988640.00388
13allthick31.580270.00008
14allarea19.162810.00061
15allsubcort20.494400.00047
16alldti_fa15.581720.00139
17alldti_md15.373220.00146
18thickarea5.109270.09713
19thicksubcort3.323720.40987
20thickdti_fa-0.145991.00000
21thickdti_md-3.562520.32946
22areasubcort-2.769530.70498
23areadti_fa-11.382680.00476
24areadti_md-12.599380.00320
25subcortdti_fa-7.999380.01854
26subcortdti_md-31.206960.00009
27dti_fadti_md-6.475800.04102
\n", "
" ], "text/plain": [ " scope (1) scope (2) t_stat p_val\n", "0 covars brain -11.36825 0.00478\n", "1 covars all -14.32368 0.00193\n", "2 covars thick 0.86450 1.00000\n", "3 covars area 7.66506 0.02180\n", "4 covars subcort 9.07301 0.01145\n", "5 covars dti_fa 1.97369 1.00000\n", "6 covars dti_md -4.56856 0.14381\n", "7 brain all -15.67812 0.00135\n", "8 brain thick 30.46195 0.00010\n", "9 brain area 17.32117 0.00091\n", "10 brain subcort 17.40024 0.00090\n", "11 brain dti_fa 12.94696 0.00287\n", "12 brain dti_md 11.98864 0.00388\n", "13 all thick 31.58027 0.00008\n", "14 all area 19.16281 0.00061\n", "15 all subcort 20.49440 0.00047\n", "16 all dti_fa 15.58172 0.00139\n", "17 all dti_md 15.37322 0.00146\n", "18 thick area 5.10927 0.09713\n", "19 thick subcort 3.32372 0.40987\n", "20 thick dti_fa -0.14599 1.00000\n", "21 thick dti_md -3.56252 0.32946\n", "22 area subcort -2.76953 0.70498\n", "23 area dti_fa -11.38268 0.00476\n", "24 area dti_md -12.59938 0.00320\n", "25 subcort dti_fa -7.99938 0.01854\n", "26 subcort dti_md -31.20696 0.00009\n", "27 dti_fa dti_md -6.47580 0.04102" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "evaluators.pairwise_t_stats(metric='explained_variance')" ] }, { "cell_type": "markdown", "id": "announced-dodge", "metadata": {}, "source": [ "We can also explicitly compare two evaluators" ] }, { "cell_type": "code", "execution_count": 25, "id": "peaceful-florence", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " This method is designed to perform a statistical comparison\n", " between the results from the evaluation stored in this object\n", " and another instance of :class:`BPtEvaluator`. The statistics\n", " produced here are explained in:\n", " https://scikit-learn.org/stable/auto_examples/model_selection/plot_grid_search_stats.html\n", "\n", " .. note::\n", " In the case that the sizes of the training and validation sets\n", " at each fold vary dramatically, it is unclear if this\n", " statistics are still valid.\n", " In that case, the mean train size and mean validation sizes\n", " are employed when computing statistics.\n", "\n", " Parameters\n", " ------------\n", " other : :class:`BPtEvaluator`\n", " Another instance of :class:`BPtEvaluator` in which\n", " to compare which. The cross-validation used\n", " should be the same in both instances, otherwise\n", " statistics will not be generated.\n", "\n", " rope_interval : list or dict of\n", " | This parameter allows for passing in a custom\n", " region of practical equivalence interval (or rope interval)\n", " a concept from bayesian statistics. If passed as\n", " a list, this should be a list with two elements, describing\n", " the difference in score which should be treated as two\n", " models or runs being practically equivalent.\n", "\n", " | Alternatively, in the case of multiple underlying\n", " scorers / metrics. A dictionary, where keys correspond\n", " to scorer / metric names can be passed with a separate\n", " rope_interval for each. For example:\n", "\n", " ::\n", "\n", " rope_interval = {'explained_variance': [-0.01, 0.01],\n", " 'neg_mean_squared_error': [-1, 1]}\n", "\n", " This example would define separate rope regions depending\n", " on the metric.\n", "\n", " ::\n", "\n", " default = [-0.01, 0.01]\n", "\n", " Returns\n", " -------\n", " compare_df : pandas DataFrame\n", " | The returned DataFrame will generate separate rows\n", " for all overlapping metrics / scorers between the\n", " evaluators being compared. Further, columns with\n", " statistics of interest will be generated:\n", "\n", " - 'mean_diff'\n", " The mean score minus other's mean score\n", "\n", " - 'std_diff'\n", " The std minus other's std\n", "\n", " | Further, only in the case that the cross-validation\n", " folds are identical between the comparisons,\n", " the following additional columns will be generated:\n", "\n", " - 't_stat'\n", " Corrected paired ttest statistic.\n", "\n", " - 'p_val'\n", " The p value for the corrected paired ttest statistic.\n", "\n", " - 'better_prob'\n", " The probability that this evaluated option is better than\n", " the other evaluated option under a bayesian framework and\n", " the passed value of rope_interval. See sklearn example\n", " for more details.\n", "\n", " - 'worse_prob'\n", " The probability that this evaluated option is worse than\n", " the other evaluated option under a bayesian framework and\n", " the passed value of rope_interval. See sklearn example\n", " for more details.\n", "\n", " - 'rope_prob'\n", " The probability that this evaluated option is equivalent to\n", " the other evaluated option under a bayesian framework and\n", " the passed value of rope_interval. See sklearn example\n", " for more details.\n", "\n", " \n", "\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mean_diffstd_difft_statp_valbetter_probworse_probrope_prob
explained_variance-0.14339-0.01202-11.368250.000170.000130.999770.00009
neg_mean_squared_error-2.365300.34247-8.096970.000630.000620.999360.00002
\n", "
" ], "text/plain": [ " mean_diff std_diff t_stat p_val better_prob \\\n", "explained_variance -0.14339 -0.01202 -11.36825 0.00017 0.00013 \n", "neg_mean_squared_error -2.36530 0.34247 -8.09697 0.00063 0.00062 \n", "\n", " worse_prob rope_prob \n", "explained_variance 0.99977 0.00009 \n", "neg_mean_squared_error 0.99936 0.00002 " ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "e1 = evaluators['scope=covars']\n", "e2 = evaluators['scope=brain']\n", "\n", "# Look at function docstring\n", "print(' ', e1.compare.__doc__)\n", "print()\n", "\n", "e1.compare(e2)" ] }, { "cell_type": "markdown", "id": "sufficient-poker", "metadata": {}, "source": [ "Okay so it looks like it ran all the different combinations, but how do we look at each indivudal evaluator / the full results?? There are few different ways to index the object storing the different evaluators, but its essentially a dictionary. We can index one run as follows:" ] }, { "cell_type": "code", "execution_count": 26, "id": "increasing-throw", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "BPtEvaluator\n", "------------\n", "mean_scores = {'explained_variance': 0.11316930054010477, 'neg_mean_squared_error': -14.517611278919068}\n", "std_scores = {'explained_variance': 0.011916342728361404, 'neg_mean_squared_error': 1.4524277905958483}\n", "\n", "Saved Attributes: ['estimators', 'preds', 'timing', 'train_subjects', 'val_subjects', 'feat_names', 'ps', 'mean_scores', 'std_scores', 'weighted_mean_scores', 'scores', 'fis_', 'coef_']\n", "\n", "Available Methods: ['get_preds_dfs', 'get_fis', 'get_coef_', 'permutation_importance']\n", "\n", "Evaluated with:\n", "ProblemSpec(n_jobs=8, problem_type='regression', random_state=10,\n", " scope='covars',\n", " scorer={'explained_variance': make_scorer(explained_variance_score),\n", " 'neg_mean_squared_error': make_scorer(mean_squared_error, greater_is_better=False)},\n", " subjects='train', target='b_bmi')" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "evaluators['scope=covars']" ] }, { "cell_type": "code", "execution_count": 27, "id": "informational-honolulu", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "b_demo_highest_education_categories=1 0.59780\n", "b_demo_highest_education_categories=2 0.62281\n", "b_demo_highest_education_categories=4 -0.79331\n", "b_demo_highest_education_categories=5 -1.12268\n", "b_mri_info_deviceserialnumber='HASH03db707f' 0.17417\n", "b_mri_info_deviceserialnumber='HASH11ad4ed5' -0.60833\n", "b_mri_info_deviceserialnumber='HASH1314a204' -0.70919\n", "b_mri_info_deviceserialnumber='HASH311170b9' -0.14871\n", "b_mri_info_deviceserialnumber='HASH3935c89e' -0.42419\n", "b_mri_info_deviceserialnumber='HASH4b0b8b05' 0.02187\n", "b_mri_info_deviceserialnumber='HASH5ac2b20b' -0.00810\n", "b_mri_info_deviceserialnumber='HASH5b0cf1bb' 0.02770\n", "b_mri_info_deviceserialnumber='HASH5b2fcf80' -0.32682\n", "b_mri_info_deviceserialnumber='HASH65b39280' 0.44976\n", "b_mri_info_deviceserialnumber='HASH69f406fa' 0.00030\n", "b_mri_info_deviceserialnumber='HASH6b4422a7' 0.09136\n", "b_mri_info_deviceserialnumber='HASH7911780b' 0.73788\n", "b_mri_info_deviceserialnumber='HASH7f91147d' -0.05698\n", "b_mri_info_deviceserialnumber='HASH96a0c182' -0.01863\n", "b_mri_info_deviceserialnumber='HASHa3e45734' -0.09858\n", "b_mri_info_deviceserialnumber='HASHb640a1b8' 0.56248\n", "b_mri_info_deviceserialnumber='HASHc3bf3d9c' 0.10516\n", "b_mri_info_deviceserialnumber='HASHd422be27' 0.00579\n", "b_mri_info_deviceserialnumber='HASHd7cb4c6d' 0.01132\n", "b_mri_info_deviceserialnumber='HASHdb2589d4' 0.00784\n", "b_mri_info_deviceserialnumber='HASHe4f6957a' -0.19978\n", "b_mri_info_deviceserialnumber='HASHfeb7e81a' 0.03217\n", "b_race_ethnicity_categories=1 -0.73047\n", "b_race_ethnicity_categories=2 0.87523\n", "b_race_ethnicity_categories=3 0.74217\n", "b_race_ethnicity_categories=4 -0.32284\n", "b_sex=1 -0.08126\n", "b_sex=2 0.07723\n", "b_agemos 0.39502\n", "dtype: float64" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Note, with get_fis, if mean=True it will return\n", "# the mean and only non-null, and non-zero features directly.\n", "evaluators['scope=covars'].get_fis(mean=True)" ] }, { "cell_type": "markdown", "id": "suburban-corner", "metadata": {}, "source": [ "Warning: This doesn't mean that this mean features were selected! Remember this is the average over training 5 models, so it means that if a feature shows up it was selected at least once in one of the models!" ] }, { "cell_type": "code", "execution_count": 28, "id": "sexual-biodiversity", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dict_keys([Options(scope=covars), Options(scope=brain), Options(scope=all), Options(scope=thick), Options(scope=area), Options(scope=subcort), Options(scope=dti_fa), Options(scope=dti_md)])" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# These are the different options\n", "evaluators.keys()" ] }, { "cell_type": "code", "execution_count": null, "id": "residential-signature", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "african-thanksgiving", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3.9.1 64-bit ('bpt': conda)", "language": "python", "name": "python39164bitbptconda7805b3f5d58e4b658b79cb94739371e6" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.1" } }, "nbformat": 4, "nbformat_minor": 5 }