"
],
"text/plain": [
""
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import YouTubeVideo, HTML\n",
"\n",
"HTML('''\n",
"''')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Results: Whole Brain (316 ROIs)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Search Grid With 5-fold Cross Validation\n",
"\n",
"In order to make the model generalizable and avoid overfitting, hyperparameters like: 1) `L2` regularization, 2) `dropout`, and 3) `learning_rate` were optimized using a k-fold nested cross-validation method. Seventy-five different combinations of the aforementioned hyperparameters were used to train and validate the model. Figure below shows the training and validation set performance of the 75 models. The models are arranged in the descending order of their mean validation accuracy. The error bars indicate standard deviation across folds. As the number of classes in the dataset were balanced, accuray was an appropriate metric to evaluate the model performance."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"import pickle\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"sns.set(context=\"talk\",style='whitegrid')\n",
"import pandas as pd\n",
"import numpy as np\n",
"np.random.seed(42)\n",
"import tensorflow as tf\n",
"\n",
"import os\n",
"from joblib import dump, load\n",
"\n",
"from src.preprocess.dataset import *\n",
"from src.models.model_selection import classifier\n",
"\n",
"from sklearn.model_selection import GridSearchCV\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.model_selection import cross_val_score\n",
"\n",
"import plotly\n",
"import plotly.graph_objs as go\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"with open(\"../../results/00-ROI316_last_segment/grid_search.pkl\",\"rb\") as file:\n",
" results, param_grid = pickle.load(file)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"table = pd.DataFrame.from_dict({(i,j,k): results[i][j][k] for i in results.keys() for j in results[i].keys() for k in results[i][j].keys()}).T\n",
"table.reset_index(inplace=True)\n",
"table.rename(columns={'level_0':'model','level_1':'fold','level_2':'set',0:'acc'},inplace=True)\n",
"\n",
"table['mod_num'] = table.model.str[5:].astype(int)\n",
"order = table[table['set']=='val'].groupby('mod_num')['acc'].mean().sort_values(ascending = False).index\n",
"plt.figure(figsize=(20,5))\n",
"sns.barplot(x='mod_num',y='acc',hue='set',ci='sd',data=table,\n",
" palette=['C0','C1'],order=order,errwidth=0.75,\n",
" errcolor='k',capsize=0.25)\n",
"plt.xticks(rotation=90,fontsize=12)\n",
"plt.xlabel('Model Index')\n",
"_=plt.ylabel('Accuracy')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Best performing model yielded mean __training__ and __validation__ accuracies of __0.89__ and __0.82__, respectively. Its hyperparameters were: 1) `L2 = 0.003`, `dropout = 0.3`, and `learning_rate = 0.001`."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"# load data\n",
"dataset = Dataset('../../data/processed/00a-ROI316_withShiftedSegments.pkl')\n",
"dataset.load()\n",
"dataset_df = organize_dataset(selective_segments(dataset.data,5))\n",
"dataset.train_test_split_sid()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"tags": [
"hide-input",
"remove-output"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:Layer gru will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n",
"WARNING:tensorflow:Layer gru_1 will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n",
"WARNING:tensorflow:Layer gru_2 will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n"
]
}
],
"source": [
"# Split the data into train and test sets\n",
"X_train, y_train = query_dataset(dataset_df,dataset.train_idx)\n",
"X_test, y_test = query_dataset(dataset_df,dataset.test_idx)\n",
"\n",
"# load the trained model\n",
"model = tf.keras.models.load_model('../../models/00-ROI316_last_segment/CustomGRU.h5')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"tags": [
"hide-input",
"remove-output"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:From :9: Sequential.predict_classes (from tensorflow.python.keras.engine.sequential) is deprecated and will be removed after 2021-01-01.\n",
"Instructions for updating:\n",
"Please use instead:* `np.argmax(model.predict(x), axis=-1)`, if your model does multi-class classification (e.g. if it uses a `softmax` last-layer activation).* `(model.predict(x) > 0.5).astype(\"int32\")`, if your model does binary classification (e.g. if it uses a `sigmoid` last-layer activation).\n",
"3/3 [==============================] - 0s 5ms/step - loss: 0.3771 - acc: 0.8789\n",
"3/3 [==============================] - 0s 5ms/step - loss: 0.4155 - acc: 0.8525\n",
"3/3 [==============================] - 0s 6ms/step - loss: 0.3721 - acc: 0.8841\n",
"3/3 [==============================] - 0s 5ms/step - loss: 0.4163 - acc: 0.8492\n",
"3/3 [==============================] - 0s 5ms/step - loss: 0.3800 - acc: 0.8679\n",
"3/3 [==============================] - 0s 6ms/step - loss: 0.3328 - acc: 0.8882\n",
"3/3 [==============================] - 0s 5ms/step - loss: 0.4299 - acc: 0.8492\n",
"3/3 [==============================] - 0s 7ms/step - loss: 0.4571 - acc: 0.8090\n",
"3/3 [==============================] - 0s 5ms/step - loss: 0.2960 - acc: 0.9221\n",
"3/3 [==============================] - 0s 5ms/step - loss: 0.5937 - acc: 0.7593\n",
"3/3 [==============================] - 0s 5ms/step - loss: 0.4383 - acc: 0.8261\n",
"3/3 [==============================] - 0s 6ms/step - loss: 0.3329 - acc: 0.8929\n",
"3/3 [==============================] - 0s 7ms/step - loss: 0.6161 - acc: 0.7438\n",
"3/3 [==============================] - 0s 5ms/step - loss: 0.3220 - acc: 0.9048\n",
"3/3 [==============================] - 0s 6ms/step - loss: 0.5757 - acc: 0.7547\n",
"3/3 [==============================] - 0s 7ms/step - loss: 0.4454 - acc: 0.8168\n",
"2/2 [==============================] - 0s 4ms/step - loss: 0.5219 - acc: 0.7857\n",
"3/3 [==============================] - 0s 6ms/step - loss: 0.4648 - acc: 0.7876\n",
"3/3 [==============================] - 0s 5ms/step - loss: 0.6722 - acc: 0.7407\n"
]
}
],
"source": [
"# Evalute the trained model on each participant from the training set individually\n",
"from collections import defaultdict\n",
"from sklearn.metrics import accuracy_score\n",
"\n",
"test_acc = defaultdict(dict)\n",
"for subj_idx in dataset.test_idx:\n",
" subj = dataset.sid()[subj_idx]\n",
" X_test, y_test = query_dataset(dataset_df,[subj_idx])\n",
" y_pred = np.squeeze(model.predict_classes(X_test))\n",
" for tp in range(X_test.shape[1]):\n",
" test_acc[subj]['TP{:02d}'.format(tp)] = accuracy_score(y_test,y_pred[:,tp])\n",
" loss, acc = model.evaluate(X_test,y_test)\n",
" test_acc[subj]['overall'] = acc"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"test_acc_df = pd.DataFrame(columns=['Subj','TP','Accuracy'])\n",
"for SUB in test_acc:\n",
" for TP in test_acc[SUB]:\n",
" temp_df = pd.DataFrame([SUB, TP, test_acc[SUB][TP]], index=['Subj','TP','Accuracy']).T\n",
" test_acc_df = pd.concat([test_acc_df,temp_df],axis=0,ignore_index=True)\n",
" \n",
"test_acc_df['Accuracy'] = test_acc_df['Accuracy'].astype(float)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test Data Performance\n",
"### Accuracy\n",
"\n",
"The trained model was tested on the near-miss segments of the 19 held-out participants. Following figure shows temporal and overall accuracies on the held-out participants. The model performs resonably well from the 1st timepoint (TP) itself, with a mean accuracy of __0.8__. The mean accuracy steadily increases to __0.89__ by the 7th TP. \"Overall\" accuracy is the mean accuracy across TP, which is __0.83__. "
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sns.barplot(x='TP',y='Accuracy',data=test_acc_df,ci=95,palette=['C0']*7+['C1'],errwidth=2,capsize=0.5)\n",
"plt.xticks(ticks=np.arange(8),labels=list(range(7))+['overall'])\n",
"plt.xlabel('Timepoint')\n",
"_=plt.title('Temporal and Overall Accuracy')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Probability of predicting the true class as a function of time\n",
"\n",
"Following figure shows probability of predicting the true class as a function of time. The probability of predicting the true class increases with time."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"## get probabilities of the true class at every timepoint\n",
"prob_df = pd.DataFrame(columns=['Subj','TP','class','prob'])\n",
"for subj_idx in dataset.test_idx:\n",
" subj = dataset.sid()[subj_idx]\n",
" for direction, k_class in zip(['appr','retr'],[1.,0.]):\n",
" X_test, y_test = query_dataset(dataset_df,[subj_idx])\n",
" X_test, y_test = X_test[y_test==k_class], y_test[y_test==k_class]\n",
" if k_class == 1.:\n",
" temp_df = pd.DataFrame(np.squeeze(model.predict(X_test)))\n",
" else:\n",
" temp_df = pd.DataFrame(1-np.squeeze(model.predict(X_test)))\n",
" temp_df['Subj'] = subj\n",
" temp_df['class'] = direction\n",
" temp_df = temp_df.melt(id_vars=['Subj','class'],var_name='TP',value_name='prob')\n",
" prob_df = pd.concat([prob_df,temp_df],axis=0, ignore_index=True)\n",
" \n",
"sns.lineplot(x='TP',y='prob',hue='class',data=prob_df,\n",
" ci=95, markers=True,marker='o',dashes=False,\n",
" hue_order=['appr','retr'],palette=['C0','C1'])\n",
"plt.xlabel('Timepoint')\n",
"plt.legend(loc='upper right',bbox_to_anchor=(1.3,1))\n",
"plt.ylabel('Probability')\n",
"_=plt.title('Probability of predicting the true class')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Chance Accuracy\n",
"\n",
"To assess significance of the observed test accuracy of 0.83, the observed test accuracy was compared against chance accuracy. Chance accuracy is obtained when the model predicts one of the two classes at random. To simulate a chance accuray distribution, the model with best hyperparameter settings was trained on the training data a hundred times, each time with shuffled labels. At every iteration, the model was tested on the test data with non-shuffled (i.e., true) labels, and the accuracy was recorded. From the chance accuracy distribution, it was found that the chance of achieving an accuracy of at least 0.83 was less than 0.009. See the figure below."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"with open('../../results/00-ROI316_last_segment/perm_acc.pkl',\"rb\") as f:\n",
" obs_acc, results_perm = pickle.load(f)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy\n",
"Observed: 0.83\n",
"Chance: 0.50\n",
"Observed > Chance (p = 0.0099)\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.hist(results_perm['val'],bins=int(np.sqrt(len(results_perm['val']))))\n",
"plt.axvline(obs_acc['obs_test_acc'],c='r',label=None)\n",
"plt.xlabel('Accuracy')\n",
"plt.title('Chance Accuracy Distribution')\n",
"_=plt.annotate('Observed = %.3f' %(obs_acc['obs_test_acc']),\n",
" xy=(obs_acc['obs_test_acc'],9.75),\n",
" xytext=(0.6,10),\n",
" arrowprops={'color':'red'},\n",
" fontsize=14)\n",
"p_val = (np.sum(np.array(results_perm['val']) > obs_acc['obs_test_acc'])+1)/(len(results_perm['val'])+1)\n",
"print('Accuracy')\n",
"print('Observed: %.2f'%obs_acc['obs_test_acc'])\n",
"print('Chance: %.2f'%np.mean(results_perm['val']))\n",
"print('Observed > Chance (p = %.4f)' %(p_val))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Comparision with Random Forest\n",
"\n",
"As GRU belongs to the family of recurrent neural networks, it learns class separability from the sequential aspect of the data. Since the data used in this project is fMRI time-series data, GRU was a reasonable model choice. An interesting question that can be asked is, how well would a model that does not take into account the sequential aspect of the data perform? Would it perform as well as the GRU model? Or would it perform poorly? To make this comparison, a Random Forest classifier was trained on the current data. The Random Forest classifier was also fine tuned using the nested cross validation method, and best hyperparameters (n_estimators = 1500, max_feature = ‘sqrt’) were obtained. The test accuracy of Random Forest classifier was only 0.58 which is significantly low compared to that of the GRU model."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [],
"source": [
"n_features = 316\n",
"features = ['feat%i'%i for i in range(1,n_features+1)]\n",
"\n",
"# all participant IDs\n",
"participants = dataset_df.participant.unique()\n",
"\n",
"'''\n",
"Reorganizing the data in the form of datafame to be compatible with \n",
"the format accepted by sklearn models\n",
"'''\n",
"df = pd.DataFrame()\n",
"for ii, row in dataset_df.iterrows():\n",
" tmp_df = pd.DataFrame(row[\"data\"], columns = features)\n",
" tmp_df['subject'] = row[\"participant\"]\n",
" tmp_df['timepoint'] = np.arange(7)+1\n",
" tmp_df['y'] = row[\"label\"]\n",
" df = pd.concat([df,tmp_df],ignore_index=True)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"tags": [
"hide-input"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random forest test accuracy: 0.58\n"
]
}
],
"source": [
"def train_test_split(df):\n",
" '''\n",
" Splits the dataframe into train and test sets\n",
" \n",
" X_train, X_test, y_train, y_test = train_test_split(df)\n",
" '''\n",
" train = df[df['subject'].isin(participants[dataset.train_idx])]\n",
" test = df[df['subject'].isin(participants[dataset.test_idx])]\n",
" return train[features], test[features], train['y'], test['y']\n",
"\n",
"# Split data into train (42 participants) and test (19 participants) \n",
"X_train, X_test, y_train, y_test = train_test_split(df)\n",
"\n",
"# Cross-validate Random forest classifier\n",
"rfc_path = '../../models/00-ROI316_last_segment/rf_classifier.joblib'\n",
"if os.path.exists(rfc_path):\n",
" rfc = load(rfc_path)\n",
"else:\n",
" rfc = RandomForestClassifier(1500,max_features=\"sqrt\")\n",
" # Re-train and test the classifier\n",
" rfc.fit(X_train,y_train)\n",
"\n",
"print('Random forest test accuracy: %.2f'%rfc.score(X_test,y_test))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Temporal Trajectories\n",
"\n",
"GRU outputs hidden states that are typically high dimensional. Hidden states ($h_{t}$) capture spatio-temporal variance that is most useful in maintaning class separability. To visualize dynamics, $h_{t}$ was linearly projected onto a lower (3D) dimensional space, $\\hat{h_{t}}$. This was done by replacing the output layer with a _Dimensionality Reduction Dense Layer (DRDL)_ with three linear units. In essence, this is a supervised non-linear dimensional reduction step. \n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"The 3-dimensional representations of $h_{t}$ ($\\hat{h_{t}}$) for both stimulus class are plotted along the three axes of the coordinate system below. The plot represents the temporal trajectories of the two classes. At the first timepoint the two classes are closest to each other. Distance between them increases with every timepoint. Next plot shows the Euclidean distance between the two classes as a function of time."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"tags": [
"remove-cell"
]
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:Layer gru will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n",
"WARNING:tensorflow:Layer gru_1 will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n",
"WARNING:tensorflow:Layer gru_2 will not use cuDNN kernel since it doesn't meet the cuDNN kernel criteria. It will use generic GPU kernel as fallback when running on GPU\n",
"Model: \"sequential\"\n",
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"gru (GRU) (None, None, 16) 16032 \n",
"_________________________________________________________________\n",
"gru_1 (GRU) (None, None, 16) 1632 \n",
"_________________________________________________________________\n",
"gru_2 (GRU) (None, None, 16) 1632 \n",
"_________________________________________________________________\n",
"time_distributed (TimeDistri (None, None, 3) 51 \n",
"=================================================================\n",
"Total params: 19,347\n",
"Trainable params: 0\n",
"Non-trainable params: 19,347\n",
"_________________________________________________________________\n"
]
}
],
"source": [
"# Make a copy the model\n",
"# (tips: https://stackoverflow.com/questions/57316557/tf-keras-layers-pop-doesnt-work-but-tf-keras-layers-pop-does)\n",
"#tf.random.set_seed(50)\n",
"tf.random.set_seed(47)\n",
"BestModel = tf.keras.models.clone_model(model)\n",
"BestModel.set_weights(model.get_weights())\n",
"\n",
"# Replace the the last Time-Distributed layer with Fully connected layer with only two units\n",
"BestModel = tf.keras.Sequential(BestModel.layers[:-1])\n",
"\n",
"# add a new time-distributes dense layer with 2 units and 'linear' activation function\n",
"BestModel.add(tf.keras.layers.TimeDistributed(tf.keras.layers.Dense(3,activation='linear')))\n",
"\n",
"# Set trainable = False for the layers from BestModel\n",
"for layers in BestModel.layers:\n",
" layers.trainable = False\n",
"\n",
"BestModel.summary()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"trajectory = {}\n",
"for subj_idx in dataset.test_idx:\n",
" subj = dataset.sid()[subj_idx]\n",
" X_test, y_test = query_dataset(dataset_df,[subj_idx])\n",
" y_pred = BestModel.predict(X_test)\n",
" appr = y_pred[y_test==1.,:,:].mean(axis=0)\n",
" retr = y_pred[y_test==0.,:,:].mean(axis=0)\n",
" trajectory[subj] = {'Approach':{'x1':list(appr[:,0]),'x2':list(appr[:,1]),'x3':list(appr[:,2])},\n",
" 'Retreat':{'x1':list(retr[:,0]),'x2':list(retr[:,1]),'x3':list(retr[:,2])}}"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"trajectory_df = pd.DataFrame.from_dict({(i,j,k): trajectory[i][j][k] \n",
" for i in trajectory.keys() \n",
" for j in trajectory[i].keys() \n",
" for k in trajectory[i][j].keys()}).T\n",
"trajectory_df = trajectory_df.stack().unstack(2).stack()\n",
"trajectory_df = trajectory_df.to_frame(name='trajectory')\n",
"trajectory_df.reset_index(inplace=True)\n",
"trajectory_df.rename(columns={'level_0':'Subj','level_1':'Direction','level_2':'TP','level_3':'axis'},inplace=True)\n",
"trajectory_df = trajectory_df.groupby(['Direction','TP','axis'])['trajectory'].mean().unstack(-1).reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"approach_x1 = trajectory_df[trajectory_df['Direction']=='Approach']['x1']\n",
"approach_x2 = trajectory_df[trajectory_df['Direction']=='Approach']['x2']\n",
"approach_x3 = trajectory_df[trajectory_df['Direction']=='Approach']['x3']\n",
"\n",
"retreat_x1 = trajectory_df[trajectory_df['Direction']=='Retreat']['x1']\n",
"retreat_x2 = trajectory_df[trajectory_df['Direction']=='Retreat']['x2']\n",
"retreat_x3 = trajectory_df[trajectory_df['Direction']=='Retreat']['x3']"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"tags": [
"remove-input"
]
},
"outputs": [
{
"data": {
"text/html": [
" \n",
" "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" \n",
" \n",
"
\n",
"\n",
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Configure Plotly to be rendered inline in the notebook.\n",
"plotly.offline.init_notebook_mode()\n",
"\n",
"# Configure trace for approach.\n",
"appr = go.Scatter3d(\n",
" x=approach_x1, # <-- Put your data instead\n",
" y=approach_x2, # <-- Put your data instead\n",
" z=approach_x3, # <-- Put your data instead\n",
" mode='lines+markers',\n",
" marker={\n",
" 'size': 8,\n",
" 'opacity': 0.8,\n",
" 'color':'red'\n",
" },\n",
" name='Approach'\n",
")\n",
"\n",
"retr = go.Scatter3d(\n",
" x=retreat_x1, # <-- Put your data instead\n",
" y=retreat_x2, # <-- Put your data instead\n",
" z=retreat_x3, # <-- Put your data instead\n",
" mode='lines+markers',\n",
" marker={\n",
" 'size': 8,\n",
" 'opacity': 0.8,\n",
" 'color':'green'\n",
" },\n",
" name='Retreat'\n",
")\n",
"\n",
"# Configure the layout.\n",
"layout = go.Layout(\n",
" margin={'l': 0, 'r': 0, 'b': 0, 't': 0}\n",
")\n",
"\n",
"data = [appr,retr]\n",
"\n",
"plot_figure = go.Figure(data=data, layout=layout)\n",
"\n",
"# Render the plot.\n",
"#plotly.offline.iplot(plot_figure)\n",
"# (tip: https://stackoverflow.com/questions/38364435/python-matplotlib-make-3d-plot-interactive-in-jupyter-notebook)\n",
"plotly.offline.plot(plot_figure, filename = 'figures/trajectories.html', config = None)\n",
"display(HTML('figures/trajectories.html'))"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"tags": [
"remove-cell"
]
},
"outputs": [],
"source": [
"# Calculate Euclidean distance between approach and retreat trajectories.\n",
"approach_dim3 = np.stack([approach_x1,approach_x2,approach_x3],axis=1)\n",
"retreat_dim3 = np.stack([retreat_x1,retreat_x2,retreat_x3],axis=1)\n",
"traj_dim3 = np.stack([approach_dim3,retreat_dim3])"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"tags": [
"remove-input"
]
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(np.squeeze(np.linalg.norm(np.diff(traj_dim3,axis=0),\n",
" axis=2)),marker='o')\n",
"plt.xlabel('Timepoint')\n",
"plt.ylabel('Euclidean distance')\n",
"_=plt.title('Euclidean distance between\\nApproach & Retreat trajectories')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Conclusion \n",
"The above trajectories and Euclidean distance plots suggest that the GRU architecture is able to characterize distinct spatio-temporal patterns in the fMRI data, for appraoching and retreating threats."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Demonstration\n",
"\n",
"The following video clip demonstrates model performance on one of the held out participant's fMRI data. The video shows the visual paradigm presented to the participant during his/her fMRI scan, along with model predictions at the top-right of the screen. Prediction is either \"Approach\" or \"Retreat\". If the prediction is correct, the color of the text remains green; and if it is incorrect, it turns red. Note that when the circles touch, the screen turns white and a red wheel appears around the circles to indicate delivery of the physical shock. Also note that the speed of the video has been increased by 4x for quick demonstration purposes."
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"tags": [
"remove-input"
]
},
"outputs": [
{
"data": {
"image/jpeg": "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\n",
"text/html": [
"\n",
" \n",
" "
],
"text/plain": [
""
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"YouTubeVideo('t7kMuK62k8Y', width=800, height=500)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.6.9 (tensorflow)",
"language": "python",
"name": "tensorflow"
},
"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.6.9"
}
},
"nbformat": 4,
"nbformat_minor": 4
}