Skip to content

Instantly share code, notes, and snippets.

@jminas
Created March 3, 2016 17:49
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/f112e9a3a3345d465b16 to your computer and use it in GitHub Desktop.
Save jminas/f112e9a3a3345d465b16 to your computer and use it in GitHub Desktop.
Read_predict
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"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": 18,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"data = pd.read_csv('/gablab/p/READ/Analysis/readcorr2.txt', sep='\\t')"
]
},
{
"cell_type": "code",
"execution_count": 20,
"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>OUTCOME</th>\n",
" <th>AgeMonths</th>\n",
" <th>Gender_0Female</th>\n",
" <th>IQ_raw</th>\n",
" <th>WordID_raw</th>\n",
" <th>Got_Intervention</th>\n",
" <th>SLFpFA</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1300</td>\n",
" <td>0</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",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2009</td>\n",
" <td>0</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",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2100</td>\n",
" <td>1</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",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2315</td>\n",
" <td>1</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",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2351</td>\n",
" <td>0</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",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ID OUTCOME AgeMonths Gender_0Female IQ_raw WordID_raw \\\n",
"0 1300 0 63 0 15 8 \n",
"1 2009 0 66 1 18 0 \n",
"2 2100 1 80 0 15 3 \n",
"3 2315 1 72 1 22 0 \n",
"4 2351 0 71 1 24 1 \n",
"\n",
" Got_Intervention SLFpFA \n",
"0 0 0.394805 \n",
"1 0 0.398696 \n",
"2 0 0.340614 \n",
"3 0 0.299987 \n",
"4 0 0.466331 "
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = data[['ID', 'OUTCOME', 'AgeMonths', 'Gender_0Female', 'IQ_raw',\n",
" 'WordID_raw', 'Got_Intervention', 'SLFpFA']]\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Index([u'ID', u'OUTCOME', u'AgeMonths', u'Gender_0Female', u'IQ_raw',\n",
" u'WordID_raw', u'Got_Intervention', u'SLFpFA'],\n",
" dtype='object')"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.keys()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"features = [u'AgeMonths', u'Gender_0Female', u'IQ_raw',\n",
" u'WordID_raw', u'Got_Intervention', 'SLFpFA']\n",
"data1 = data[features].values\n",
"target = data['OUTCOME'].values"
]
},
{
"cell_type": "code",
"execution_count": 25,
"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\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.001)\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=1000, n_jobs=4) #<--run in interactive qsub with 8jobs\n",
"\n",
"print(\"Classification score %.2f (pvalue : %.3f)\" % (score, pvalue))"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x2aaaeb7cbd10>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAxAAAAJQCAYAAAAe1oIlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xt4FPWh//FPSLgo2WxAYxJKkMNFSbjLtVxqIdZWOLVe\njoXqUS7uCkgUD7dyEHnAVi6i3O+7RytHShWqthWEPk3UAnoALVVppJyAFkJihJpkQwwxG/b3hyf7\nIwbJbLK7k2Her+fhgczOd/azwzDsZ2dmJyYQCAQEAAAAAAY0MzsAAAAAAOugQAAAAAAwjAIBAAAA\nwDAKBAAAAADDKBAAAAAADKNAAAAAADCMAgEAAADAMAoEAAAAAMMoEAAAAAAMo0AAAAAAMIwCAQAA\nAMAwCgQAAAAAw+LMDgAAANBU+P1++Xw+UzMkJCQoLo63aGi6OALRRLzyyivq1q1b8Fffvn01cuRI\nZWVl6Y033mjQMj/++GOtWbNGpaWlYU4LIJwOHz6sadOmafjw4erRo4cGDRqkiRMn6rXXXtOFCxeC\n+4dTp06ZHRW44vl8PuXm5urUqVOm/MrNzW1wganZVwwYMKDOMvx+v7p166a1a9eGvNz8/Hx169ZN\nr776anDanDlzNHLkyAblPHDggLp166ZDhw4Fp91///26//77DS+jrKxMa9asUW5ubkjP/c11sGbN\nGnXr1k0XLlwIaTkNyRXqa2zKqLdNzOrVq5WSkqKvvvpKp0+f1ttvv60ZM2bo5Zdf1saNG9WyZUvD\ny/r444+1bt063XHHHXI6nRFMDaChfvWrX2np0qX67ne/q1mzZqldu3by+Xzat2+fFixYIIfDYXZE\nwHYcDocSExPNjtFgZWVl8ng8mjFjRliXGxMTc9mfG2PBggUhzV9aWqp169YpNTVVGRkZhse9/PLL\nSk5OrjUtnK/jcrlCfY1NGQWiiUlPT1daWpokqX///vrJT36iH/3oR5o2bZqWLVumefPmhbzMQCAQ\n7pgAwuDQoUNasmSJ7r//fj3++OO1Hhs5cqQmTpyo8vJyjiICCMnQoUP14osvavz48brmmmsi9jzh\nfH/RuXPniGb46quv1KJFC/Xq1avBywjFpZbZ0NfYFHEKkwXceuutyszM1Msvv6zKykpJXx+puPPO\nO9WvXz8NHjxY48aN0wcffBAc88orr2ju3LnB8TWnRhUUFEiSXnzxRY0ZM0aDBg3SgAEDNGbMGL39\n9tvRf3GAjXk8HrVp00azZs265OPt27fXjTfeGPz5iy++0IwZM9SvXz8NHz5cv/zlL/XVV1/VGlPf\nvkH6/6cP5OTk6Mknn9TgwYM1ePBgzZo1S2VlZbXm9fv92rx5s0aNGqVevXrpu9/9rlwul06cOFEr\n1/z58/W9731PPXv21G233aaXX365sasHQANNmTJFkrRhw4bLzldz+s43Neb0pG+6eL81YMAA/fzn\nP6+zn5Hqnt5TXl6uX/ziFxoxYoR69uypIUOGaMKECTpx4oTy8/N1yy23SJKeeOKJ4Huc1157Lbis\ne++9Vzk5ObrjjjvUs2dPbdu2TVLdU5hq5OXl6f7771efPn00bNgwrV69ulYJqDk9rOZ9VI2L16GR\nXN88henEiROaOnWqBgwYoN69e2vMmDHau3fvJZ/jH//4hx566KHgae7r1q0z7UNijkBYxPe+9z39\n6U9/0kcffaT+/furqKhI48aNU7t27VRRUaHf/e53uu+++/TKK6/ohhtu0Pe//31NmTJFGzZsCJ4W\nJUnXXnutJOn06dO6++67lZaWpgsXLignJ0eTJk2Sx+PR8OHDzXypgC1UV1frwIED+sEPfqAWLVoY\nGjN79mz967/+q9auXavDhw9r7dq1cjqdeuSRR4Lz1LdvuNhTTz2lESNGaPny5Tpx4oSWLVum2NhY\nLVmyJDjP9OnTlZ2drXHjxmnIkCE6f/683n//fZ05c0adOnXSuXPn9LOf/UxVVVV65JFH1L59e+3d\nu1cLFizQV199pX//938PzwoDYNh1112n++67Ty+88IImTpyodu3afeu833b6TrhO68nKytKxY8c0\nffp0dezYUTt37tQvfvGLep9z8eLFevPNNzV9+nRdf/31Kikp0V/+8hedO3cuWAKysrI0adIkZWZm\nSlLwDA5J+vTTT/XUU09p6tSpSktLq/dU7qlTp+rf/u3fNGXKFO3du1fr169Xs2bNlJWVVe9rrMl9\n3XXX1Zvr4tdYVFSke++9Vw6HQ/Pnz1d8fLy2bt2qSZMmaePGjfre975XZ13efffdmjBhgnJycrRm\nzRqlpqbqrrvuqjdjuF15BeKll6T586VLtNuocTikJ5+UxowJ2yJTU1MlSWfOnJH09X/8NaqrqzV0\n6FDl5uZq+/btevzxx9W2bdvgBnvxaVE1fv7znwf/fOHCBQ0aNEiffvqptm3bRoGA5Tz77LN69tln\n60yfMWPGJc8BjvT8RhQXF6uyslLf+c53DI/58Y9/HPzP7Lvf/a4+/PBDvf7667UKRH37hosNHDgw\neFrkkCFD9Mknn2j79u3BAvHuu+/qj3/8o+bNm1erCNR8wiZJL7zwggoLC/X666+rQ4cOwWxlZWVa\nu3at7r33XjVrxsFuIJpiYmLkdrv10ksvae3atVq0aNG3zvttn2CH45Pt/fv36y9/+YuWL1+uUaNG\nSfr69Cq3262ioqLLjv3ggw90++236+677w5Ou3jfU/Opf1pa2iVPSyouLtZzzz13ySMsl/LTn/5U\nbrdb0tf7w3Pnzum5557T+PHjFR8ff9mxNeuqRYsW9ea62K9+9SuVlZVp+/btwfdpN998s0aNGqWV\nK1fWKRATJ07UnXfeKenr/ez//M//aOfOnRSIsFi2TDp2zNwMhYXSM8+EtUDUbJw1zfWdd97Rhg0b\ndOzYsVrnR3+zKHybI0eOaM2aNTpy5Ii++OKL4PI7deoUtsxAtJSVlamwsPCS082YP1JuvvnmWj93\n7dpV77zzTq1poewbLrW8r776Sv/85z91zTXXaP/+/YqJidFPf/rTb820d+9e9e7dW9/5znfk9/uD\n04cOHart27crLy+vzpEPAJHndDo1YcIErVu3Tm632/D7g3A6fPiwYmNj9cMf/rDW9NGjR9c5Teeb\nevTooVdeeUWJiYkaMmSIMjIyFBsba/i527dvb7g8SNJtt91W6+dRo0Zp+/btOnbsmG666SbDywnF\noUOH1KdPn1p/N82aNdPo0aO1fv16lZeXq3Xr1sHHLrXP/vjjjyOSrT5XXoGYNatpHIH4lnOaG+qz\nzz6TJCUlJelvf/ubHnroIQ0fPlyLFi1SUlKSmjVrpnnz5gWvkbicwsJCjR8/Xl27dtUTTzyhdu3a\nqVmzZlq1alWt85oBq3A4HMGjdN+cbsb8RiQmJqpVq1Y6ffp0SGMu1qJFi1rXQIS6b/jmIf2aU6lq\n5i0pKZHT6bzsKVZffPGFTp48qe7du9d5LCYmRiUlJYZfH4DwGj9+vF588UWtXr1azzzzTNSf/8yZ\nM0pISKjzxr9t27b1jn3iiSeUlJSk3/72t1qxYoWcTqfuuOMO/cd//IdatWpV7/ikpKSQstac4l2j\n5uLz+o6UNEZpaekl953XXnutAoGAfD5frQJxqf8DjLzvi4Qrr0CMGRPWT/6birfeekutWrVSjx49\n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\nER8fH/Ejf035SEdTPprblLPButgygCaoqqpKktSmTRvDY86dO6fy8vKQC0SoovVpI9cZALhYUz7S\n0ZSP5jblbLCuqBYIp9N5yXOHv+3IxOXUfDIZExOj/Pz8sOQDmoovv/xSJ0+eVGFhoeEx1dXVSkxM\nVElJieExpaWl+vzzz9W6dWvDY4qKitSsWbOQjo588cUXDRpTUlKiL7/8MuRsjGEMY6Izxox8kd73\nlJeX6+jRoyG9LyktLdXZs2dVUVER0edpiIZmKywsDHlbQAPFxEhxcV//Hqb3tJ999pkkRexIflQL\nRJcuXfS///u/daYfP35cnTt3DmlZZ86ckSS1bt1amZmZYckHAAAARFV8/Ne/JCnM72nPnDmj66+/\nPqzLlKJcIEaOHKmnn35ap06dCn4TU35+vg4fPqyZM2eGtKwePXpo69atSkpKUmxsbCTiAgAAAJZT\nXV2tM2fOqEePHhFZfkwgEAhEZMmXUFFRoZ/85Cdq2bKlHnvsMUnSqlWrVFFRwY3kAAAAAAuIaoGQ\npMLCQi1evFj79+9XIBDQkCFDNHfuXLVr1y6aMQAAAAA0QNQLBAAAAADrMv61BAAAAABsjwIBAAAA\nwDAKBAAAAADDKBAAAAAADKNAAAAAADCMAgEAAADAsKjeifqbau4J8c4779S6J0Rqamq9Y7t163bJ\n6a+99lqtxwKBgDZv3qyXXnpJZ8+e1b/8y79o6tSpuvXWW8P2OpqyaKzjkSNHqqCgoM5869atU2aY\nb8neFDVmHUvS8ePHtWrVKh08eFAVFRVKTU3VvffeqwceeCA4j923Yyk665ltuWHreM2aNVq3bt0l\nH2vRooU+/PDD4M9235ajsY7tvh1Ljdtf5Ofna/Xq1Tp48KCKi4uVkpKi2267TZMmTap1w1u25civ\nY7tvy41Zx6dOndKyZcv07rvvyu/3q2fPnpo9e3adO1M3dDs27T4Ql7or9cqVK3X+/HlDd6Xu1q2b\n7rrrLo0dO7bW9BtuuEGtWrUK/rxixQo999xzmj59urp3767XX39d27dv18aNG3XzzTeH/4U1IdFa\nxyNHjlTnzp31yCOP1JqvY8eOSkhICNOraZoau44/+ugjjRs3ToMHD9bdd98th8OhTz/9VF9++aXG\njx8fnM/O27EUvfXMttywdVxUVKSioqJa08rLy+V2u/WDH/xAK1asCE6387YcrXVs5+1Yatx6Li8v\n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\n9+4RFBRE/fr1WbVqFUZGRgCkpqbSs2dPANXE3R07dnDw4EHy8vJIT0/n0qVLLF26lEePHrF27Vps\nbI5SjGUAABO1SURBVGyA0kdW5eXlERYWhomJCfn5+Wzfvp3vvvuO1atX07p169r46TWmJmIcFxdH\naGgoBQUFZGRkkJiYyIoVK7h27RrBwcHv/NXfqsS4fv36FBcXs3PnTgoKClAqlRw5coSvvvqKoUOH\nMmLECABMTU3rdD+Gmomz9OXXj3GZEydOEBMTw5w5c7TO35FjcvXHuK73Y6hanO3s7IiMjOT48eM0\natSIjIwMjh49SkhICA4ODqoXetX143JNxLiu9+WqxLioqIi1a9eSn59PWloap06dYv78+bRt25bg\n4GDVk9uqckyutUnUJiYm7Nq1izVr1jB//ny1V3T//lXxJSUlas8Btre35/jx4xw7doycnBwaNGhA\nly5dWL16tcbVxFmzZmFqasru3bt5+vQp9vb2hISEvPNviYSaibGdnR3Pnj1j7dq1ZGZmYmJigpOT\nE19//bXGmPN3UVViDKVv4WzYsCH79u1jx44dWFpaEhgYyNSpU9Xq1eV+DDUTZ+nLVYsxlE7sbdKk\nCf379y93O3W5L9dEjOt6P4aqxdna2poDBw6wadMmNm7cyG+//Ya1tTWjR49mypQpatuRvly9Ma7r\nfbkqMVYoFDx48ID4+HiysrKwtrbGx8eHzz77TOPxrq/bjxXKuvqGDiGEEEIIIUSl1docCCGEEEII\nIcTbRxIIIYQQQgghhN4kgRBCCCGEEELoTRIIIYQQQgghhN4kgRBCCCGEEELoTRIIIYQQQgghhN4k\ngRBCCCGEEELoTRIIIYQQb61t27bRp08fCgoKarspdUJhYSFubm5s2rSptpsihKhFkkAIIardL7/8\ngqOjI46Ojvz888+13RyhRVZWFsHBwfTp0wdnZ2eGDRtGdHR0pdZx5swZAgIC6NOnD506dcLd3Z3V\nq1fz9OlTjbrJycnMnDmTHj164OzsjKenJ99++22ltpeens62bdv49NNPMTY2rtR3a0N+fj4bNmxg\nwIABODs7M2jQIMLDw7W+cbo8ldlPJSUlhIWF4e7ujpOTE25ubmzYsEFrsrV//37mzJmDu7s7jo6O\n9OzZU+s6jYyMmDJlCuHh4Vr3qxCibnhv+fLly2u7EUKId1t4eDhXrlyhXr16KBQK+vXrV9tNEq8o\n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\ngg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x2aaaea7d8550>"
]
},
"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": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[u'AgeMonths', u'SLFpFA', u'WordID_raw', u'Got_Intervention', u'Gender_0Female', u'IQ_raw']\n",
"[u'AgeMonths', u'SLFpFA', u'WordID_raw', u'Got_Intervention', u'Gender_0Female', u'IQ_raw']\n",
"[u'AgeMonths', u'SLFpFA', u'WordID_raw', u'Got_Intervention', u'Gender_0Female', u'IQ_raw']\n",
"[u'AgeMonths', u'SLFpFA', u'WordID_raw', u'Got_Intervention', u'IQ_raw', u'Gender_0Female']\n",
"[u'AgeMonths', u'SLFpFA', u'WordID_raw', u'Got_Intervention', u'Gender_0Female', u'IQ_raw']\n",
"[u'AgeMonths', u'SLFpFA', u'WordID_raw', u'Got_Intervention', u'Gender_0Female', u'IQ_raw']\n",
"[u'AgeMonths', u'SLFpFA', u'WordID_raw', u'Got_Intervention', u'IQ_raw', u'Gender_0Female']\n",
"[u'SLFpFA', u'AgeMonths', u'WordID_raw', u'Got_Intervention', u'IQ_raw', u'Gender_0Female']\n",
"[u'AgeMonths', u'SLFpFA', u'WordID_raw', u'Got_Intervention', u'IQ_raw', u'Gender_0Female']\n",
"[u'AgeMonths', u'SLFpFA', u'WordID_raw', u'Got_Intervention', u'Gender_0Female', u'IQ_raw']\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"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment