Created
November 3, 2019 04:38
-
-
Save Gabrock94/afcd0da7dbe46ca111c023c0bb78e1d9 to your computer and use it in GitHub Desktop.
Notebook for the analysis of Infant's cry and PPD (Linear SVC)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import os\n", | |
"import numpy as np\n", | |
"import scipy as sp\n", | |
"import pandas as pd\n", | |
"import sklearn as skl\n", | |
"from sklearn import neighbors\n", | |
"from sklearn import svm\n", | |
"from sklearn.preprocessing import StandardScaler\n", | |
"from sklearn.model_selection import GridSearchCV \n", | |
"from sklearn import ensemble\n", | |
"import matplotlib.pyplot as plt\n", | |
"from scipy import stats\n", | |
"from prettytable import PrettyTable\n", | |
"import math\n", | |
"import time" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"start = time.time()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"BASEPATH = '/home/giulio/Dropbox (Maestral)/Experiments/CryDep/'\n", | |
"RAWFOLDER = BASEPATH + 'Raw/'\n", | |
"PROCESSEDFOLDER = BASEPATH + 'Processed/'\n", | |
"DB = PROCESSEDFOLDER + 'db.csv'" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"df shape: (715, 26)\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<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>voc</th>\n", | |
" <th>cryID</th>\n", | |
" <th>f0</th>\n", | |
" <th>f1</th>\n", | |
" <th>f2</th>\n", | |
" <th>f3</th>\n", | |
" <th>f4</th>\n", | |
" <th>Int</th>\n", | |
" <th>Depression5months</th>\n", | |
" <th>...</th>\n", | |
" <th>mem_as.5</th>\n", | |
" <th>mem_ba.5</th>\n", | |
" <th>mem_nh.5</th>\n", | |
" <th>mem_ot.5</th>\n", | |
" <th>mem_wc.5</th>\n", | |
" <th>hsp_lt.5</th>\n", | |
" <th>f1ratio</th>\n", | |
" <th>f2ratio</th>\n", | |
" <th>f3ratio</th>\n", | |
" <th>f4ratio</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <td>0</td>\n", | |
" <td>m127</td>\n", | |
" <td>11a.wav</td>\n", | |
" <td>m127_11a.wav</td>\n", | |
" <td>564.422951</td>\n", | |
" <td>1725.273643</td>\n", | |
" <td>2162.818873</td>\n", | |
" <td>3624.636332</td>\n", | |
" <td>4359.668498</td>\n", | |
" <td>72.372931</td>\n", | |
" <td>True</td>\n", | |
" <td>...</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.528352</td>\n", | |
" <td>1.277304</td>\n", | |
" <td>1.605461</td>\n", | |
" <td>1.544823</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>1</td>\n", | |
" <td>m116</td>\n", | |
" <td>16a.wav</td>\n", | |
" <td>m116_16a.wav</td>\n", | |
" <td>394.571899</td>\n", | |
" <td>968.039133</td>\n", | |
" <td>2076.879461</td>\n", | |
" <td>3023.069605</td>\n", | |
" <td>4271.873667</td>\n", | |
" <td>63.062903</td>\n", | |
" <td>False</td>\n", | |
" <td>...</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.226695</td>\n", | |
" <td>1.754542</td>\n", | |
" <td>1.915411</td>\n", | |
" <td>2.165321</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>2</td>\n", | |
" <td>m175</td>\n", | |
" <td>10a.wav</td>\n", | |
" <td>m175_10a.wav</td>\n", | |
" <td>355.905000</td>\n", | |
" <td>848.390480</td>\n", | |
" <td>2147.324836</td>\n", | |
" <td>3124.068797</td>\n", | |
" <td>4291.430300</td>\n", | |
" <td>64.055348</td>\n", | |
" <td>False</td>\n", | |
" <td>...</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.191878</td>\n", | |
" <td>2.011140</td>\n", | |
" <td>2.194454</td>\n", | |
" <td>2.411559</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>3</td>\n", | |
" <td>m263</td>\n", | |
" <td>02a.wav</td>\n", | |
" <td>m263_02a.wav</td>\n", | |
" <td>410.795556</td>\n", | |
" <td>1116.132646</td>\n", | |
" <td>2432.455690</td>\n", | |
" <td>3192.500234</td>\n", | |
" <td>4474.406104</td>\n", | |
" <td>66.180819</td>\n", | |
" <td>False</td>\n", | |
" <td>...</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.358501</td>\n", | |
" <td>1.973776</td>\n", | |
" <td>1.942877</td>\n", | |
" <td>2.178410</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <td>4</td>\n", | |
" <td>m643</td>\n", | |
" <td>18a.wav</td>\n", | |
" <td>m643_18a.wav</td>\n", | |
" <td>410.284697</td>\n", | |
" <td>871.846517</td>\n", | |
" <td>2050.203215</td>\n", | |
" <td>3154.675875</td>\n", | |
" <td>4619.492037</td>\n", | |
" <td>71.674138</td>\n", | |
" <td>True</td>\n", | |
" <td>...</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1.062490</td>\n", | |
" <td>1.665675</td>\n", | |
" <td>1.922248</td>\n", | |
" <td>2.251847</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"<p>5 rows × 26 columns</p>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" ID voc cryID f0 f1 f2 \\\n", | |
"0 m127 11a.wav m127_11a.wav 564.422951 1725.273643 2162.818873 \n", | |
"1 m116 16a.wav m116_16a.wav 394.571899 968.039133 2076.879461 \n", | |
"2 m175 10a.wav m175_10a.wav 355.905000 848.390480 2147.324836 \n", | |
"3 m263 02a.wav m263_02a.wav 410.795556 1116.132646 2432.455690 \n", | |
"4 m643 18a.wav m643_18a.wav 410.284697 871.846517 2050.203215 \n", | |
"\n", | |
" f3 f4 Int Depression5months ... mem_as.5 \\\n", | |
"0 3624.636332 4359.668498 72.372931 True ... 0.0 \n", | |
"1 3023.069605 4271.873667 63.062903 False ... 0.0 \n", | |
"2 3124.068797 4291.430300 64.055348 False ... 0.0 \n", | |
"3 3192.500234 4474.406104 66.180819 False ... 0.0 \n", | |
"4 3154.675875 4619.492037 71.674138 True ... 1.0 \n", | |
"\n", | |
" mem_ba.5 mem_nh.5 mem_ot.5 mem_wc.5 hsp_lt.5 f1ratio f2ratio \\\n", | |
"0 0.0 0.0 0.0 1.0 0.0 1.528352 1.277304 \n", | |
"1 0.0 0.0 0.0 1.0 0.0 1.226695 1.754542 \n", | |
"2 0.0 0.0 0.0 1.0 0.0 1.191878 2.011140 \n", | |
"3 0.0 0.0 0.0 1.0 0.0 1.358501 1.973776 \n", | |
"4 0.0 0.0 0.0 0.0 0.0 1.062490 1.665675 \n", | |
"\n", | |
" f3ratio f4ratio \n", | |
"0 1.605461 1.544823 \n", | |
"1 1.915411 2.165321 \n", | |
"2 2.194454 2.411559 \n", | |
"3 1.942877 2.178410 \n", | |
"4 1.922248 2.251847 \n", | |
"\n", | |
"[5 rows x 26 columns]" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"df = pd.read_csv(DB)\n", | |
"if('Unnamed: 0' in df.columns):\n", | |
" df = df.drop('Unnamed: 0',axis=1)\n", | |
"print('df shape:',df.shape)\n", | |
"#for one participants there no information about mathernal depression (ID = m366)\n", | |
"df = df[df['ID']!='m366']\n", | |
"df['gender'] = df['gender'].replace('M',0).replace('F',1)\n", | |
"df.shape\n", | |
"df.head()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"df = df.dropna().replace({True:1,False:0})" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"smdf = df[['ID','f0','f1ratio','f2ratio','f3ratio','f4ratio','age','Depression5months']]\n", | |
"tokeep = []\n", | |
"for x in smdf.ID.unique():\n", | |
" if len(smdf[smdf.ID == x]) >= 1 :\n", | |
" tokeep.append(x)\n", | |
" \n", | |
"smdf = smdf[df.ID.isin(tokeep)]" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"+---------+----+------+--------+\n", | |
"| MinSamp | N | NDep | LSVC |\n", | |
"+---------+----+------+--------+\n", | |
"| 1 | 53 | 27 | 0.5063 |\n", | |
"| 2 | 46 | 22 | 0.5106 |\n", | |
"| 3 | 40 | 19 | 0.5381 |\n", | |
"| 4 | 38 | 18 | 0.5427 |\n", | |
"| 5 | 33 | 15 | 0.5547 |\n", | |
"| 6 | 33 | 15 | 0.5547 |\n", | |
"| 7 | 32 | 15 | 0.5369 |\n", | |
"| 8 | 28 | 13 | 0.5048 |\n", | |
"| 9 | 27 | 13 | 0.5084 |\n", | |
"| 10 | 24 | 11 | 0.5088 |\n", | |
"| 11 | 22 | 10 | 0.548 |\n", | |
"| 12 | 22 | 10 | 0.548 |\n", | |
"| 13 | 21 | 10 | 0.5125 |\n", | |
"| 14 | 17 | 10 | 0.4977 |\n", | |
"| 15 | 13 | 7 | 0.5039 |\n", | |
"| 16 | 13 | 7 | 0.5039 |\n", | |
"| 17 | 11 | 5 | 0.5041 |\n", | |
"| 18 | 10 | 4 | 0.5344 |\n", | |
"| 19 | 10 | 4 | 0.5344 |\n", | |
"| 20 | 9 | 3 | 0.5803 |\n", | |
"| 21 | 8 | 3 | 0.5593 |\n", | |
"| 22 | 8 | 3 | 0.5593 |\n", | |
"| 23 | 8 | 3 | 0.5593 |\n", | |
"| 24 | 7 | 3 | 0.5621 |\n", | |
"| 25 | 7 | 3 | 0.5621 |\n", | |
"+---------+----+------+--------+\n" | |
] | |
} | |
], | |
"source": [ | |
"def myFilter(df,targetlabel,targetfeatures,nstd = 2):\n", | |
" newdf = pd.DataFrame()\n", | |
" for labelvalue in df[targetlabel].unique():\n", | |
" temp = df[df[targetlabel] == labelvalue]\n", | |
" for column in targetfeatures:\n", | |
" mean = temp[column].mean() \n", | |
" std = temp[column].std()\n", | |
" temp = temp[temp[column].between(mean - nstd*std, mean+nstd*std)]\n", | |
" newdf = newdf.append(temp)\n", | |
" return(newdf)\n", | |
"\n", | |
"table = PrettyTable()\n", | |
"table.field_names = ['MinSamp',\"N\",\"NDep\", \"LSVC\"]\n", | |
" \n", | |
"x = []\n", | |
"y = []\n", | |
"\n", | |
"for MINSAMP in range(1,26):\n", | |
" smdf = df[['ID','f0','f1','f2','f3','f4','age','Depression5months']]\n", | |
"\n", | |
" tokeep = [x for x in smdf.ID.unique() if len(smdf[smdf['ID'] == x]) > MINSAMP]\n", | |
"\n", | |
" smdf = smdf[smdf.ID.isin(tokeep)]\n", | |
"\n", | |
" scoreLSVC = []\n", | |
"\n", | |
" #Leave one out\n", | |
" for participant in smdf.ID.unique():\n", | |
" test = smdf[smdf['ID'] == participant]\n", | |
" train = smdf[smdf['ID'] != participant]\n", | |
"\n", | |
" train = myFilter(train ,'Depression5months',['f1','f2','f3','f4'],nstd=1)\n", | |
"\n", | |
" train_X = train[['f0','f1','f2','f3','f4']]\n", | |
" train_Y = train[['Depression5months']]\n", | |
"\n", | |
" test_X = test[['f0','f1','f2','f3','f4']]\n", | |
" test_Y = test[['Depression5months']]\n", | |
"\n", | |
" s = StandardScaler()\n", | |
" s = s.fit(train_X)\n", | |
" train_X = s.transform(train_X)\n", | |
" test_X = s.transform(test_X)\n", | |
"\n", | |
" predictions = []\n", | |
"\n", | |
" #clfLSVC = svm.SVC(gamma='scale',probability=True)\n", | |
" clfLSVC = svm.LinearSVC(max_iter=1000, C = 1, dual=False)\n", | |
" clfLSVC.fit(train_X,train_Y.values.ravel())\n", | |
" scoreLSVC.append(clfLSVC.score(test_X,test_Y.values.ravel()))\n", | |
" predictions.append(stats.mode(clfLSVC.predict(test_X))[0][0])\n", | |
" table.add_row([MINSAMP, \n", | |
" len(smdf.ID.unique()),\n", | |
" len(smdf[smdf.Depression5months == True].ID.unique()),\n", | |
" round(np.mean(scoreLSVC),4),\n", | |
" ])\n", | |
" \n", | |
" x.append(MINSAMP)\n", | |
" y.append(round(np.mean(scoreLSVC),4))\n", | |
" \n", | |
"print(table)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"Text(0.5, 1.0, 'SVC accuracy by minimum number\\nof samples per participant')" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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8gDhnHMulQcI55xzqTxAOOecS+UBwjnnXCoPEM4551J5gHDOOZfKA4RzzrlUHiCcc86l8gDhnHMulQcI55xzqTxAOOecS+UBwjnnXCoPEM4551J5gHDOOZfKA4RzzrlUHiCcc86l8gDhnHMulQcI55xzqTxAOOecS+UBwjnnXCoPEM4551J5gHDOOZfKA4RzzrlUHiBcg5gwYQK9evWiV69eTJgwITXNihUrGDx4ML169WLw4MF8+OGHNbZPnTqVVq1acf/9929ct2jRIo4++mj69u1Lv379WLhwYSEvwzmX4AHCbbEVK1Zw9dVX8/LLLzNlyhSuvvrqWl/+AOPGjeOoo45i/vz5HHXUUYwbN27jtg0bNvCjH/2Io48+usY+Z555JmPGjGHOnDlMmTKFnXbaqeDX45wLPECUmYULF9KnTx9GjBhB3759GT58OJ9++ukWHXPy5MkMHjyYTp060bFjRwYPHsxjjz1WK91DDz3EWWedBcBZZ53FxIkTN2777W9/y4knnlgjAMyePZv169czePBgALbddlu22WabLcqrcy53HiDK0Lx587jwwguZM2cO7du353e/+12tNOPHj6d///61HhdffHGttFVVVXTv3n3jcrdu3aiqqqqV7t1336VLly4A7LLLLrz77rsb93/wwQe54IILaqR/44036NChAyeccAIDBgxgzJgxbNiwYYuu3TmXu4IGCEnHSpon6U1JY1O2j5S0XNKM+BiV2Ha9pNclzZF0oyQVMq/lpHv37hx66KEAnH766fzzn/+slWbMmDHMmDGj1uPGG29skDxIIvOWfu973+O6666jRYuaH8f169fz/PPPc8MNNzB16lQWLFjAHXfc0SDnd6Vl4vQqDh33NLuPfYRDxz3NxOm1f4C4hteqUAeW1BK4GRgMLAGmSppkZrOzkt5rZqOz9v0ycCiwX1z1T+BrwLOFym85yY61abF3/Pjx/OUvf6m1/qtf/WqtING1a1eeffbZjctLlizh8MMPr7XvzjvvzLJly+jSpQvLli3bWJ1UWVnJKaecAsD777/Po48+SqtWrejWrRv9+/dnjz32AGDYsGG89NJLnHPOOXldryttE6dXcfkDs1izLpQeq1au4fIHZgEwbEDXYmat2StYgAAGAW+a2QIASfcAQ4HsAJHGgK2B1oCArYB3C5TPsrNo0SJefPFFDjnkEO666y4OO+ywWmnGjBnDmDFjcjreMcccw49//OONDdOPP/441157ba10Q4YMYcKECYwdO5YJEyYwdOhQAN56662NaUaOHMnxxx/PsGHD2LBhAytXrmT58uV07tyZp59+moqKis25ZFfCxk+etzE4ZKxZt4Hxk+d5gCiwQlYxdQUWJ5aXxHXZTpQ0U9L9kroDmNmLwDPAsviYbGZzCpjXstK7d29uvvlm+vbty4cfflir7j9fnTp14oorrmDgwIEMHDiQK6+8kk6dOgEwatQoKisrARg7dixPPPEEvXr14sknn2Ts2Fq1jjW0bNmSG264gaOOOop9990XM+M73/nOFuXVlZ6lK9fktd41HJlZYQ4sDQeONbNRcfkM4KBkdZKkHYBVZrZW0nnAyWZ2pKQ9gd8AJ8ekTwA/NLPns85xLnAuQI8ePQ58++23C3ItzcnChQs5/vjjee2114qdFedycui4p6lKCQZdO7TlhbFHFiFHzYukaWaWWjQvZAmiCuieWO4W121kZh+Y2dq4eCtwYHz+TeAlM1tlZquAfwCHZJ/AzH5vZhVmVtG5c+cGvwDnXPGNOaY3bbdqWWNd261aMuaY3kXKUfkoZICYCvSStLuk1sApwKRkAkldEotDgEw10iLga5JaSdqK0EDtVUwNoGfPnl56cCVl2ICuXHvCvnTt0BYRSg7XnrCvtz80goI1UpvZekmjgclAS+A2M3td0jVApZlNAi6WNARYD6wARsbd7weOBGYRGqwfM7OHC5VX51zTNmxAVw8IRVCwNojGVlFRYZnGUOecc7kpVhuEc865EuYBwjnnXCoPEM4551J5gHDOOZfKA4RzzrlUHiDK3Keffso3vvEN+vTpw957773J4S9yNW3aNPbdd1/23HNPLr74YtLulps7dy6HHHIIbdq04YYbbqixbeXKlQwfPpw+ffrQt29fXnzxRQCuuOIK9ttvP/r378/RRx/N0qVLGyS/zrnaPECUscyX9mWXXcbcuXOZPn06L7zwAv/4xz+2+NgXXHABf/jDH5g/fz7z589PnUCoU6dO3HjjjVx22WW1tl1yySUce+yxzJ07l1dffZW+ffsCYRDBmTNnMmPGDI4//niuueaaLc6rcy6dB4gys3DhQnr37s2ZZ57JPvvsw/LlyzniiCMAaN26NQcccABLlizZonMsW7aMjz/+mIMPPhhJnHnmmTVmj8vYaaedGDhwIFtttVWN9R999BHPPffcxmG9W7duTYcOHQBo3779xnSrV69OHarcOdcwCjnct2ui5s+fz4QJEzj44INrrF+5ciUPP/wwl1xySa19nnnmGS699NJa67fZZhv+9a9/1VhXVVVFt27dNi7XNcNcXd566y06d+7M2WefzauvvsqBBx7Ib37zG9q1awfAT37yE+6880623357nnnmmZyP65zLj5cgytBuu+1WKzisX7+eU089lYsvvnjjBD1JRxxxROoMc9nBoSGsX7+eV155hQsuuIDp06fTrl07xo0bt3H7L37xCxYvXsyIESO46aabGvz8zrnAA0QZyvwSTzr33HPp1asX3/ve91L3eeaZZ1LnqP7yl79cK23Xrl1rVFMtWbKErl1zH0enW7dudOvWjYMOOgiA4cOH88orr9RKN2LECP72t7/lfFznXH68isnx05/+lI8++ohbb721zjSZEkQuunTpQvv27XnppZc46KCDuPPOO7noootyzs8uu+xC9+7dmTdvHr179+app56iX79+QKge69WrFwAPPfQQffr0yfm4zrn8+GB9ZSZ7wqAlS5bQvXt3+vTpQ5s2bQAYPXo0o0aN2qLzVFZWMnLkSNasWcNxxx3Hb3/7WyRxyy23AHD++efzzjvvUFFRwccff0yLFi3YdtttmT17Nu3bt2fGjBmMGjWKzz//nD322IPbb7+djh07cuKJJzJv3jxatGjBbrvtxi233JJX6cQ5V1N9g/V5gHDOuTLmo7k655zLmwcI55xzqTxAOOecS+UBwjnnXCoPEM4551J5gHDOOZfKA4RzzrlUHiCcc86l8gDhnHMulQcI55xzqXywPuecK6CJ06sYP3keS1euYdcObRlzTG+GDUgfPyyftI3BA4RzzhXIxOlVXP7ALNas2wBA1co1XP7ALIBaX/z5pG0sXsXknHMFMn7yvI1f+Blr1m1g/OR5W5S2sRQ0QEg6VtI8SW9KGpuyfaSk5ZJmxMeoxLYekh6XNEfSbEk9C5lX55xraEtXrsl5fT5pG0vBAoSklsDNwHFAP+BUSf1Skt5rZv3jIzljzZ3AeDPrCwwC3itUXp1zrhB27dA25/X5pG0shSxBDALeNLMFZvY5cA8wNJcdYyBpZWZPAJjZKjP7tHBZdc41JxOnV3HouKfZfewjHDruaSZOr2qQ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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"plt.scatter(x,y)\n", | |
"slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)\n", | |
"plt.plot([0,26],[intercept, intercept+26*slope], color='red')\n", | |
"plt.text(5,0.58, 'p = '+str(round(p_value,3)))\n", | |
"plt.text(5,0.57, 'r2 = '+str(round(r_value**2,3)))\n", | |
"plt.xlabel('Minimum number of samples per participants')\n", | |
"plt.ylabel('Accuracy')\n", | |
"plt.title('SVC accuracy by minimum number\\nof samples per participant')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": { | |
"scrolled": true | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"(0.533412, 0.02443653526996003)" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"np.mean(y), np.std(y)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"11.522342443466187\n" | |
] | |
} | |
], | |
"source": [ | |
"end = time.time()\n", | |
"print(end-start)" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.8" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment