Skip to content

Instantly share code, notes, and snippets.

@jminas
Last active April 28, 2016 17:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jminas/f99121bd39ee0944f5dc21986243f463 to your computer and use it in GitHub Desktop.
Save jminas/f99121bd39ee0944f5dc21986243f463 to your computer and use it in GitHub Desktop.
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"import pandas as pd\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.ensemble import ExtraTreesClassifier\n",
"from sklearn.linear_model import LogisticRegressionCV\n",
"from sklearn.metrics import f1_score\n",
"from sklearn.cross_validation import (StratifiedKFold, StratifiedShuffleSplit, \n",
" permutation_test_score, cross_val_score)\n",
"from sklearn.pipeline import Pipeline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Index([u'ID', u'AgeMos', u'Gender_0F', u'KBITraw', u'WordIDraw',\n",
" u'LangDelay_0No', u'L_SLFp_FA', u'Outcome'],\n",
" dtype='object')"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = pd.read_csv('/gablab/p/READ/Analysis/readcorr3.txt', sep='\\t')\n",
"data.columns"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>ID</th>\n",
" <th>AgeMos</th>\n",
" <th>Gender_0F</th>\n",
" <th>KBITraw</th>\n",
" <th>WordIDraw</th>\n",
" <th>LangDelay_0No</th>\n",
" <th>L_SLFp_FA</th>\n",
" <th>Outcome</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>READ_1300</td>\n",
" <td>63</td>\n",
" <td>0</td>\n",
" <td>15</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>0.394805</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>READ_2009</td>\n",
" <td>66</td>\n",
" <td>1</td>\n",
" <td>18</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.398696</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>READ_2100</td>\n",
" <td>80</td>\n",
" <td>0</td>\n",
" <td>15</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.340614</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>READ_2315</td>\n",
" <td>72</td>\n",
" <td>1</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.299987</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>READ_2351</td>\n",
" <td>71</td>\n",
" <td>1</td>\n",
" <td>24</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0.466331</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ID AgeMos Gender_0F KBITraw WordIDraw LangDelay_0No L_SLFp_FA \\\n",
"0 READ_1300 63 0 15 8 0 0.394805 \n",
"1 READ_2009 66 1 18 0 0 0.398696 \n",
"2 READ_2100 80 0 15 3 0 0.340614 \n",
"3 READ_2315 72 1 22 0 0 0.299987 \n",
"4 READ_2351 71 1 24 1 0 0.466331 \n",
"\n",
" Outcome \n",
"0 0 \n",
"1 0 \n",
"2 1 \n",
"3 1 \n",
"4 0 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = data[[u'ID', u'AgeMos', u'Gender_0F', u'KBITraw', u'WordIDraw',\n",
" u'LangDelay_0No', u'L_SLFp_FA', u'Outcome']]\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Index([u'ID', u'AgeMos', u'Gender_0F', u'KBITraw', u'WordIDraw',\n",
" u'LangDelay_0No', u'L_SLFp_FA', u'Outcome'],\n",
" dtype='object')"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.keys()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"features = [ u'AgeMos', u'Gender_0F', u'KBITraw', u'WordIDraw',\n",
" u'LangDelay_0No', u'L_SLFp_FA']\n",
"data1 = data[features].values\n",
"target = data['Outcome'].values"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Optimizing for accuracy\n",
"\tEvaluating accuracy: mean=0.89 s.d.=0.11\n",
"\tEvaluating f1: mean=0.63 s.d.=0.43"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/om/project/read/env/read_py/lib/python2.7/site-packages/sklearn/metrics/classification.py:958: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n",
" 'precision', 'predicted', average, warn_for)\n",
"/om/project/read/env/read_py/lib/python2.7/site-packages/sklearn/metrics/classification.py:958: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples.\n",
" 'precision', 'predicted', average, warn_for)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\tEvaluating precision: mean=0.65 s.d.=0.45\n",
"\tEvaluating recall: mean=0.65 s.d.=0.45\n",
"Optimizing for f1\n",
"\tEvaluating accuracy: mean=0.89 s.d.=0.11\n",
"\tEvaluating f1: mean=0.63 s.d.=0.43\n",
"\tEvaluating precision: mean=0.65 s.d.=0.45\n",
"\tEvaluating recall: mean=0.65 s.d.=0.45\n",
"Optimizing for precision\n",
"\tEvaluating accuracy: mean=0.89 s.d.=0.11\n",
"\tEvaluating f1: mean=0.63 s.d.=0.43\n",
"\tEvaluating precision: mean=0.65 s.d.=0.45\n",
"\tEvaluating recall: mean=0.65 s.d.=0.45\n",
"Optimizing for recall\n",
"\tEvaluating accuracy: mean=0.89 s.d.=0.11\n",
"\tEvaluating f1: mean=0.63 s.d.=0.43\n",
"\tEvaluating precision: mean=0.65 s.d.=0.45\n",
"\tEvaluating recall: mean=0.65 s.d.=0.45\n",
"Classification score 0.89 (pvalue : 0.000)\n"
]
}
],
"source": [
"cv = StratifiedKFold(target, n_folds=10) \n",
"\n",
"# Optimize classifier for specific metric\n",
"for scoring in ['accuracy', 'f1', 'precision', 'recall']:\n",
" clf = Pipeline([('scaler', StandardScaler()), \n",
" ('model', LogisticRegressionCV(cv=5, scoring=scoring))])\n",
" print('Optimizing for %s' % scoring)\n",
" for scoring2 in ['accuracy', 'f1', 'precision', 'recall']:\n",
" scores = cross_val_score(clf, data1, target, cv=cv, scoring=scoring2)\n",
" print \"\\tEvaluating %s: mean=%.2f s.d.=%.2f\" % (scoring2, scores.mean(), scores.std())\n",
"\n",
"##=====PERMUTATION TEST SCORE===========This will tell us if the accuracy scores are significant\n",
"clf = Pipeline([('scaler', StandardScaler()), \n",
" ('model', LogisticRegressionCV(cv=5, scoring='accuracy'))])\n",
"score, permutation_scores, pvalue = permutation_test_score(clf, data1, target, \n",
" cv=cv, scoring=\"accuracy\", \n",
" n_permutations=5000, n_jobs=4) #<--run in interactive qsub with 8jobs\n",
"\n",
"print(\"Classification score %.2f (pvalue : %.3f)\" % (score, pvalue))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x7f66843573d0>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxoAAAJQCAYAAAAJ9BLsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xt8VNW9//93SEJAMklAY5hI8EKgBBFIJYAS5UA8nNOk\nKoineAOJHBQLSssITRFRvCSgbiDcA2jbnFqq4I3KRR8mlBOwRWxpezxpyiPYNpKMETWZCRwcMiG/\nP/xlf4nZQMasAdHX8/HgAVmz9p41Qbbzzl6fz0Q0Nzc3CwAAAAAM6nSuFwAAAADgm4egAQAAAMA4\nggYAAAAA4wgaAAAAAIwjaAAAAAAwjqABAAAAwDiCBgAAAADjCBoAAAAAjCNoAAAAADCOoAEAAADA\nOIIGAAAAAOMIGgAAAACMizrXCwAAADifBINB+f3+c7qGuLg4RUXxNg5fb9zROI+88sor6t+/v/0r\nPT1dY8aM0cyZM7V9+/avdM6//vWvWrFihXw+n+HVAjBt//79mjVrlq677joNHDhQw4cP1z333KPX\nXntNJ06csK8RH3744bleKvCN5vf7VV5erg8//PCc/CovL//KQaflOpGRkdHmHMFgUP3799fKlStD\nPu+hQ4fUv39/vfrqq/ZYXl6exowZ85XWuXfvXvXv31/79u2zxyZNmqRJkya1+xwNDQ1asWKFysvL\nQ3ruL38PVqxYof79++vEiRMhneerrCvU1/h1RxQ+Dy1fvlw9e/bU8ePHVV1drV27dsnj8eill17S\n2rVrFRMT0+5z/fWvf9WqVas0btw4xcfHh3HVADri5z//uRYvXqxrrrlGc+bMUXJysvx+v3bv3q3H\nHntMLpfrXC8R+FZxuVxKSEg418v4yhoaGrR+/Xp5PB6j542IiDjt1x3x2GOPhTTf5/Np1apVcrvd\nGjBgQLuPe+mll5SUlNRqzOTrON26Qn2NX3cEjfNQWlqaUlJSJElDhw7VzTffrH//93/XrFmz9Mwz\nz2j+/Pkhn7O5udn0MgEYsm/fPi1atEiTJk3Sww8/3OqxMWPG6J577tHRo0e5Mwmg3UaOHKlf/vKX\nmjJlii688MKwPY/J9xd9+vQJ6xqOHz+uzp07a9CgQV/5HKFwOudXfY1fV2yd+oYYO3assrKy9NJL\nLykQCEj64s7H+PHjdfXVV2vEiBG6++679ec//9k+5pVXXtG8efPs41u2ZNXU1EiSfvnLX2rixIka\nPny4MjIyNHHiRO3atevsvzjgW279+vXq3r275syZ4/h4r1699J3vfMf++rPPPpPH49HVV1+t6667\nTk8++aSOHz/e6pgzXR+k/7d1obS0VI8//rhGjBihESNGaM6cOWpoaGg1NxgMat26dcrOztagQYN0\nzTXX6D//8z/1wQcftFrXggULdP311+uqq67S9773Pb300ksd/fYA+Aruv/9+SdKaNWtOO69l29CX\ndWRb1JedfM3KyMjQT37ykzbXGKnttqKjR4/qiSee0OjRo3XVVVfp2muvVW5urj744AMdOnRIN9xw\ngyTpkUcesd/jvPbaa/a57rjjDpWWlmrcuHG66qqrtHHjRkltt061qKys1KRJkzRkyBBlZmZq+fLl\nrcJCy7a0lvdRLU7+HrZnXV/eOvXBBx9oxowZysjI0ODBgzVx4kSVlZU5Psc///lP3Xvvvfb2+lWr\nVp3THyZzR+Mb5Prrr9fbb7+t//mf/9HQoUNVW1uru+++W8nJyTp27Jhef/113XnnnXrllVfUr18/\n/cu//Ivuv/9+rVmzxt6OJUkXXXSRJKm6uloTJkxQSkqKTpw4odLSUt13331av369rrvuunP5UoFv\njaamJu3du1f/+q//qs6dO7frmLlz5+r73/++Vq5cqf3792vlypWKj4/XAw88YM850/XhZE899ZRG\njx6tJUuW6IMPPtAzzzyjyMhILVq0yJ4ze/ZslZSU6O6779a1116rzz//XH/4wx90+PBhXXHFFTpy\n5Ihuv/12NTY26oEHHlCvXr1UVlamxx57TMePH9ddd91l5hsGoF0uvvhi3XnnnfrFL36he+65R8nJ\nyaece6ptQ6a2E82cOVMHDhzQ7Nmzddlll2nr1q164oknzvicBQUF2rlzp2bPnq1LL71U9fX1+uMf\n/6gjR47YYWHmzJm67777lJWVJUn2jhBJ+sc//qGnnnpKM2bMUEpKyhm3kM+YMUO33nqr7r//fpWV\nlWn16tXq1KmTZs6cecbX2LLuiy+++IzrOvk11tbW6o477pDL5dKCBQsUGxurF154Qffdd5/Wrl2r\n66+/vs33csKECcrNzVVpaalWrFght9utW2655YxrDIdvZ9B48UVpwQLJIS2fNS6X9Pjj0sSJxk7p\ndrslSYcPH5b0xZuDFk1NTRo5cqTKy8u1adMmPfzww+rRo4f9H/bJ27Fa/OQnP7H/fOLECQ0fPlz/\n+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\nv/rVr9TY2NjquUJZ15QpU/Tqq6/qnnvu0QMPPKBu3brpV7/6laqqqlRUVNSuddPeFu3SkkhnzZol\n6YtbdBdeeKGuvPJKLV26tFUhVWZmpubPn6+f/exneuutt9SvXz89/fTTWr16datk279/f82cOVMv\nvfSSNm3apObmZpWUlCg1NVXPPPOMli9frh/+8Ie69NJL9dBDD6msrEzvvvvu2X3hAHT33Xdr0KBB\n9ieE19fXq1u3bho4cKAef/xxjR49Wq+++qrjT64iIiJajbf3+tByrJMvjy9dulTr16/Xq6++ql/8\n4hdyuVwaNGiQJv7/21RjY2P161//WqtWrdL69etVW1uruLg4XXHFFRo7dmxHvz3AWRUXFxfSJ02H\naw1fldO/61tuuUUbNmxQVVVVq3GXy6W1a9eqoKBAP/rRj9SzZ0/NmDFD77zzzhnfD3z52nMqK1as\n0FNPPSXLshQZGamsrCw98sgjjm1jTz5fRkaGtm/frnXr1qmpqUkpKSmaN2+e3f2uU6dOevLJJ7V0\n6VLl5uYqGAxq0aJFGjdu3Cm/D6d7HatXr9bjjz+u1atXy+Vy6Yc//KFmzJhhz4uMjNTq1au1cOFC\n5eXlqXv37po8ebKGDBmiVatW2fNCWdfFF1+sX/3qV3r22WftduADBgxQUVGRMjMzz/i9bu/fQbhE\nNPOR0AAAAAAMo0YDAAAAgHEEDQAAAADGETQAAAAAGEfQAAAAAGAcQQMAAACAcQQNAAAAAMYRNAAA\nAAAYR9AAAAAAYBxBAwAAAIBxBA0AAAAAxkWd7sGPPvpI69ev1/vvv6+KigoFAgGVlpYqOTnZnvPO\nO+/o5Zdf1p/+9Cd98sknuvjiizVy5Eg9+OCD6tGjR6vzBQIBLVu2TL/5zW/U0NCgtLQ0PfTQQxo6\ndGirec3NzVq3bp1efPFFffLJJ7r88ss1Y8YMjR071uBLBwAAABAup72j8c9//lM7duxQQkJCmzDQ\n4sUXX1R9fb3uv/9+Pffcc7r33ntVWlqqH/zgB/q///u/VnPnzZunzZs3a9asWSoqKlJiYqKmTp2q\nioqKVvOWLVumlStXatKkSdqwYYMGDx6sWbNmadeuXR18uQAAAADOhojm5ubmUz3Y3NysiIgISdKm\nTZv0yCOPtLmj8dlnn7W5c/Hee+/prrvu0lNPPaUJEyZIkioqKjRu3DgVFBRo/PjxkqSmpibl5OTo\n8ssv15o1ayRJn376qUaNGqXp06dr5syZ9jmnTJmizz77TFu2bDH00gEAAACEy2nvaLSEjNP5csiQ\npIEDB0qSPv74Y3uspKREUVFRys7OtsciIyOVk5Oj3bt3q7GxUZJUVlamYDCom266qdU5b7rpJh04\ncEDV1dVnXBMAAACAcyssxeDvvvuuJKlPnz72WGVlpVJSUhQTE9Nqbp8+fdTY2Kiqqip7XufOndW7\nd+9W81JTU+3HAQAAAHy9GQ8aR44cUX5+vlJTU3XDDTfY4z6fT/Hx8W3mJyQkSJLq6+vteXFxcW3m\ntRzr8/lMLxkAAACAYaftOhWqYDAoj8ejw4cPa+PGjerUie65AAAAwLeRsaBx4sQJ/eQnP9Hvf/97\nFRUVqV+/fq0ej4uLU01NTZvjWu5ktNzZiIuLk9/vbzOv5U6G012RU/n888/1/vvvKzExUZGRke0+\nDgAAAPgma2pq0uHDhzVw4EB16dIlLM9hLGg8+uij2rFjh5YvX64RI0a0eTw1NVVvv/22AoFAqzqN\ngwcPKjo62q7J6Nu3r44fP66qqqpWdRottRkttRrt8f777+vOO+/8qi8JAAAA+EZ74YUXTvkxFh1l\nJGgsWrRImzdv1uLFi5WVleU4JysrSytXrtT27ds1btw4SV9stdq2bZsyMzMVHR0tSbr++usVFRWl\nLVu2tGpvu2XLFvXr10+XXHJJu9eVmJgo6YtvYM+ePb/qywMAAAC+HoYPlz7+WLr4Ymnv3q98mo8+\n+kh33nmn/X45HM4YNHbs2CHpi7sDkrRr1y51795dF154oTIyMrRu3Tr9/Oc/14QJE3TppZfqT3/6\nk33shRdeqJSUFElSWlqasrOzlZ+fr8bGRvXq1UsbN25UTU2NlixZYh/To0cP5ebmat26dYqNjVVa\nWpq2bdumvXv3au3atSG9uJbtUj179lSvXr1COhYAAAD42mluloLBL3438P42nOUFZwwaP/rRj+w/\nR0REaOHChZKkYcOGqbi4WGVlZYqIiNDLL7+sl19+udWx48ePV0FBgf11QUGBli5dqsLCQvn9fqWl\npWnDhg1KS0trddyPf/xjXXDBBSouLtbhw4d1xRVXqLCwUKNGjerQiwUAAABwdpz2k8HPd4cOHVJW\nVpZKSkq4owEAAIDzX3Ky5PVKbrfk0Gipvc7G+2Sj7W3xzWFZlhoaGuRyueTxeM71cgAAAHCeIWjA\n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\ngQO19jp0oT5ip6+5p+nnNiMjA9HR0Th37hxKSkpgY2ODcePG4b333pP30de8A+onfsw9sTVr1mDd\nuvhBOYIAAB1USURBVHVKHzM2NkZaWpr8Z+aeInXix9xTlJmZidWrV+PcuXN48uQJWrdujXfffReT\nJk0S3aRYX3OvPmKnr3kHaBa/u3fvYsWKFTh9+jTKy8vh7u6O2bNnK9wtvLa516Dvo6HsDuGrVq3C\n06dP1bpD+N27dxEQEAAzMzM4ODhg+/btosd9fHzg5OSEqVOnitodHBzQtGlT7bwYHdA0fq6urhgx\nYgSCgoJE7R07doSJiYn855UrVyImJgbTp09Hp06dsG/fPuzatQvffvst+vbtq/0XVg/qK3b6mHua\nxu7y5csICQlBr169MHLkSFhYWOCff/5BcXExQkND5f30Me+A+osfc08sOzsb2dnZoraioiKEh4dj\nwIABWLlypbyduadInfgx98SKioowdOhQAEBERARsbW2RlpaGNWvWwMfHR+9zr75ip495B2gWvydP\nniAgIAAWFhaYOnUqTExMEBMTgytXrmDXrl1wcnKS96117gkN2ObNm4XXX39duHPnjrzt7t27gpub\nmxAbG6vyfsLCwoTIyEhhwoQJwtixYxUe79+/vzBr1ixtDLlB0TR+Li4uwqpVq6rtk5OTI3Tq1ElY\ns2aNqD0kJETw9/ev1bgbgvqInSDoZ+5pEruKigrh3XffFSIiIqrtp695Jwj1Ez9BYO6pYvfu3YKL\ni4tw7NgxeRtzT3XK4icIzL1/O378uODi4iL89ttvovavv/5acHNzE54+fSoIgv7mXn3EThD0M+8E\nQbP4rVu3TnBzcxNtW1xcLHh5eQmffPKJvE2T3GvQazSOHj0KDw8P2Nvby9vatGkDT09PHDlyRKV9\n7N27F9euXcOMGTMAABKJRGk/oeGe2Kk1bcSvpricOHEC5eXlCAgIELUHBATg77//xr1799QfeANQ\nH7FTt9/LQpPYnT17Fjdv3hR9866MvuYdUD/xk2HuVS8xMREtWrRAnz595G3MPdUpi58Mc+9/Kisr\nAQAWFhaidgsLCwiCII+VvuZefcRORt/yDtAsfqmpqXBwcBBta2pqim7duuHYsWPy+GqSew260Lhx\n4wacnZ0V2p2cnHDjxo0at5dKpVi6dClmzZpV42mxX375BR4eHnB3d8eYMWNw+PDhWo+7odA0fgDw\n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\nvQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6671cdb0d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.set_context('poster')\n",
"sns.set_style('white')\n",
"ph1 = plt.hist(permutation_scores, 32, color=(0.6, 0.6, 0.6), alpha=0.3)\n",
"ph2 = plt.axvline(score, color='r')\n",
"ph3 = plt.axvline(0.5, linestyle='--', color='k')\n",
"plt.legend(['Data', 'Chance', 'Null distribution'], \n",
" bbox_to_anchor=(0., 1.02, 1., .102), loc=3,\n",
" ncol=3, mode=\"expand\", borderaxespad=0.)\n",
"plt.xlabel('Accuracy = %.2f (p = %.3f)' % (score, pvalue))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Rough order of importance"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[u'AgeMos', u'L_SLFp_FA', u'WordIDraw', u'LangDelay_0No', u'Gender_0F', u'KBITraw']\n",
"[u'AgeMos', u'L_SLFp_FA', u'WordIDraw', u'LangDelay_0No', u'Gender_0F', u'KBITraw']\n",
"[u'AgeMos', u'L_SLFp_FA', u'WordIDraw', u'LangDelay_0No', u'Gender_0F', u'KBITraw']\n",
"[u'AgeMos', u'L_SLFp_FA', u'WordIDraw', u'LangDelay_0No', u'KBITraw', u'Gender_0F']\n",
"[u'AgeMos', u'L_SLFp_FA', u'WordIDraw', u'LangDelay_0No', u'Gender_0F', u'KBITraw']\n",
"[u'AgeMos', u'L_SLFp_FA', u'WordIDraw', u'LangDelay_0No', u'Gender_0F', u'KBITraw']\n",
"[u'AgeMos', u'L_SLFp_FA', u'WordIDraw', u'LangDelay_0No', u'KBITraw', u'Gender_0F']\n",
"[u'L_SLFp_FA', u'AgeMos', u'WordIDraw', u'LangDelay_0No', u'KBITraw', u'Gender_0F']\n",
"[u'AgeMos', u'L_SLFp_FA', u'WordIDraw', u'LangDelay_0No', u'KBITraw', u'Gender_0F']\n",
"[u'AgeMos', u'L_SLFp_FA', u'WordIDraw', u'LangDelay_0No', u'Gender_0F', u'KBITraw']\n"
]
}
],
"source": [
"import numpy as np\n",
"\n",
"clf = Pipeline([('scaler', StandardScaler()),\n",
" ('model', LogisticRegressionCV(cv=5, scoring=scoring))])\n",
"for train, test in StratifiedKFold(target, 10):\n",
" clf.fit(data1[train], target[train])\n",
" print np.array(features)[np.argsort(np.abs(clf.steps[-1][1].coef_))][0].tolist()[::-1]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment