· 9 years ago · Oct 31, 2016, 10:24 AM
1{
2 "cells": [
3 {
4 "cell_type": "markdown",
5 "metadata": {},
6 "source": [
7 "# Classifying Yelp Reviews - Kaggle #\n",
8 "\n",
9 "By Beth & Sayan\n",
10 "\n",
11 "October 2016"
12 ]
13 },
14 {
15 "cell_type": "code",
16 "execution_count": 1,
17 "metadata": {
18 "collapsed": false
19 },
20 "outputs": [],
21 "source": [
22 "import pandas as pd\n",
23 "import numpy as np\n",
24 "import matplotlib.pyplot as plt\n",
25 "%matplotlib inline\n",
26 "import nltk\n",
27 "from sklearn.feature_extraction.text import TfidfVectorizer\n",
28 "from sklearn.feature_selection import SelectKBest, chi2, f_classif\n",
29 "from sklearn.pipeline import Pipeline\n",
30 "from sklearn.svm import LinearSVC\n",
31 "from sklearn.metrics import classification_report\n",
32 "from sklearn.metrics import confusion_matrix\n",
33 "from sklearn.metrics import accuracy_score\n",
34 "from sklearn.cross_validation import KFold\n",
35 "from sklearn.grid_search import GridSearchCV\n",
36 "from nltk.corpus import wordnet as wn"
37 ]
38 },
39 {
40 "cell_type": "code",
41 "execution_count": 2,
42 "metadata": {
43 "collapsed": false
44 },
45 "outputs": [
46 {
47 "data": {
48 "text/html": [
49 "<div>\n",
50 "<table border=\"1\" class=\"dataframe\">\n",
51 " <thead>\n",
52 " <tr style=\"text-align: right;\">\n",
53 " <th></th>\n",
54 " <th>ID</th>\n",
55 " <th>Category</th>\n",
56 " <th>Review Text</th>\n",
57 " </tr>\n",
58 " </thead>\n",
59 " <tbody>\n",
60 " <tr>\n",
61 " <th>0</th>\n",
62 " <td>0</td>\n",
63 " <td>2</td>\n",
64 " <td>Don't waste your time. We had two different p...</td>\n",
65 " </tr>\n",
66 " <tr>\n",
67 " <th>1</th>\n",
68 " <td>1</td>\n",
69 " <td>2</td>\n",
70 " <td>I will start by saying we have a nice new deck...</td>\n",
71 " </tr>\n",
72 " <tr>\n",
73 " <th>2</th>\n",
74 " <td>2</td>\n",
75 " <td>2</td>\n",
76 " <td>When I wanted a deck for the back of my home I...</td>\n",
77 " </tr>\n",
78 " <tr>\n",
79 " <th>3</th>\n",
80 " <td>3</td>\n",
81 " <td>5</td>\n",
82 " <td>Our cat went out the other night and must have...</td>\n",
83 " </tr>\n",
84 " <tr>\n",
85 " <th>4</th>\n",
86 " <td>4</td>\n",
87 " <td>5</td>\n",
88 " <td>Greentree Animal clinic is the absolute best! ...</td>\n",
89 " </tr>\n",
90 " </tbody>\n",
91 "</table>\n",
92 "</div>"
93 ],
94 "text/plain": [
95 " ID Category Review Text\n",
96 "0 0 2 Don't waste your time. We had two different p...\n",
97 "1 1 2 I will start by saying we have a nice new deck...\n",
98 "2 2 2 When I wanted a deck for the back of my home I...\n",
99 "3 3 5 Our cat went out the other night and must have...\n",
100 "4 4 5 Greentree Animal clinic is the absolute best! ..."
101 ]
102 },
103 "execution_count": 2,
104 "metadata": {},
105 "output_type": "execute_result"
106 }
107 ],
108 "source": [
109 "df = pd.read_csv(\"yelp_data_official_training.csv\", sep = \"|\", low_memory=False)\n",
110 "df.head()"
111 ]
112 },
113 {
114 "cell_type": "code",
115 "execution_count": 3,
116 "metadata": {
117 "collapsed": false
118 },
119 "outputs": [
120 {
121 "data": {
122 "text/html": [
123 "<div>\n",
124 "<table border=\"1\" class=\"dataframe\">\n",
125 " <thead>\n",
126 " <tr>\n",
127 " <th></th>\n",
128 " <th>ID</th>\n",
129 " <th>Review Text</th>\n",
130 " </tr>\n",
131 " <tr>\n",
132 " <th></th>\n",
133 " <th>count</th>\n",
134 " <th>count</th>\n",
135 " </tr>\n",
136 " <tr>\n",
137 " <th>Category</th>\n",
138 " <th></th>\n",
139 " <th></th>\n",
140 " </tr>\n",
141 " </thead>\n",
142 " <tbody>\n",
143 " <tr>\n",
144 " <th>1</th>\n",
145 " <td>15092</td>\n",
146 " <td>15092</td>\n",
147 " </tr>\n",
148 " <tr>\n",
149 " <th>2</th>\n",
150 " <td>7945</td>\n",
151 " <td>7944</td>\n",
152 " </tr>\n",
153 " <tr>\n",
154 " <th>3</th>\n",
155 " <td>11371</td>\n",
156 " <td>11370</td>\n",
157 " </tr>\n",
158 " <tr>\n",
159 " <th>4</th>\n",
160 " <td>7803</td>\n",
161 " <td>7803</td>\n",
162 " </tr>\n",
163 " <tr>\n",
164 " <th>5</th>\n",
165 " <td>3721</td>\n",
166 " <td>3721</td>\n",
167 " </tr>\n",
168 " <tr>\n",
169 " <th>6</th>\n",
170 " <td>2069</td>\n",
171 " <td>2069</td>\n",
172 " </tr>\n",
173 " </tbody>\n",
174 "</table>\n",
175 "</div>"
176 ],
177 "text/plain": [
178 " ID Review Text\n",
179 " count count\n",
180 "Category \n",
181 "1 15092 15092\n",
182 "2 7945 7944\n",
183 "3 11371 11370\n",
184 "4 7803 7803\n",
185 "5 3721 3721\n",
186 "6 2069 2069"
187 ]
188 },
189 "execution_count": 3,
190 "metadata": {},
191 "output_type": "execute_result"
192 }
193 ],
194 "source": [
195 "df.groupby(['Category']).agg(['count'])"
196 ]
197 },
198 {
199 "cell_type": "code",
200 "execution_count": 4,
201 "metadata": {
202 "collapsed": true
203 },
204 "outputs": [],
205 "source": [
206 "filtered_data = df[\"Review Text\"].notnull()\n",
207 "df_narrative = df[filtered_data]"
208 ]
209 },
210 {
211 "cell_type": "code",
212 "execution_count": 5,
213 "metadata": {
214 "collapsed": false
215 },
216 "outputs": [
217 {
218 "data": {
219 "image/png": "iVBORw0KGgoAAAANSUhEUgAAAecAAAF6CAYAAAAj9ZDJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFXRJREFUeJzt3X2wbWddH/DvL7kkJWDCm5wAkZsQpJQOCnEEbDpyiw4y\n0AbbykhxKtIpMxWnUEANYNuETqXQF5WpQEtFCqnyqkCYAgaKRwck8hJiIgQBYyAEbjC8BJAOkya/\n/rHXxZ3Lfdk3Z++zn3PO5zOz56691tprPb9zzj3f/Tx7nfVUdwcAGMdJ624AAHB7whkABiOcAWAw\nwhkABiOcAWAwwhkABiOcYY+rqq9X1dnrbgfw14QzLElVPaWqPjSF3Q1V9b+r6vwFXndbVT1gO9p4\nJN39Xd193brOD3wn4QxLUFXPSfIrSf59knsnuX+SlyX5Bwu8fC13Aqqqk9dxXuD4hDNsUVWdnuSF\nSZ7R3W/r7v/b3bd29zu6+3lV9YNV9UdV9ZWpR/1fq2rf9No/SFJJrqqqr1XVk6b1f7+qPjq95n1V\n9dC5851XVVdU1c1V9caqen1V/bu57U+vqk9V1U1V9daqus/cttuq6hlV9ckkn5xb94Bp+ZSq+s9V\n9Zmq+kJVvbyqTp223bOq3j616UtT24EVEM6wdT+U5NQkbz3K9luT/Ksk95j2fUySZyRJdz962ueh\n3X16d7+pqh6e5FVJnj695r8nubSq7lRVd0ryu0l+c9r2uiT/8NCJquoxSV6U5CeS3CfJZ5O8/rD2\nPDHJI5I8ZHo+33N/SZIHJvm+6d/7Jfm307bnJrk+yT0zGx14wXG+LsAdJJxh6+6Z5Kbuvu1IG7v7\niu7+YM98Nskrkzz6sN1qbvnpSf5bd394es0lSb6V5FHT4+Tu/vWpd/6WJB+ce+1Tkryqu/+ku29J\n8vwkP1RV95/b50Xd/dXu/tZRzv3s7r65u/8qyYuT/JNp2y2ZBf4507nfv8gXBzhxwhm27ktJ7lVV\nR/z/VFXfOw0Hf6Gqvprkl5Pc6xjH25/kuVX15enxlSRnJbnv9LjhsP2vn1u+b5LPHHoyBeyXMusB\nH/K5o7Tzu5OcluQjh86d5J2ZvflIkv+U5M+TXFZVn66qC49RA7AFwhm27gOZ9Wx//CjbX5HkmiTn\ndvfdkvxSbt9bPdz1SX65u+8xPe7e3Xft7jck+UJuH7RJ8j1zy5/PLNyTJFV1l8zCdT6Qj3YB2k1J\nvpnkb8+d+27dfUaSdPc3uvvnu/vcJBckeU5V/b1j1AHcQcIZtqi7v5bkoiQvq6onVtWdq2pfVT2u\nql6S5K5Jvtbd36yqByf52cMOcTDJ/J9S/Y8k/6KqHpHMAraqHj8F7QeS3FpVP1dVJ1fVoc+PD3ld\nkqdV1fdNF3K9KMnl3T3fuz5aHT2d+9emXnSq6n5V9dhp+QlVde60+9eT/L8kRxzKB7ZGOMMSdPev\nJHlOkn+d5IuZXYj1c0nekuTnk/xUVX0ts4u7Dr9A6+Ikr52Gkn+iuz+S2We/vz4NLX8yyVOn89yS\n5B8l+edJvpLZZ8xvz6znnu7+P0n+TWYXjd2Q5JwkT55v6pGaP7d8YZJPJ7l8GoK/LMmDpm3fm+Q9\nVfX1JO9P8rLudsU2rEDN3iwDO1VVXZ7kFd39mnW3BVgOPWfYYarqh6tqYxrWfmqShyZ517rbBSzP\nvnU3ADhhfzPJGzO7svraJP+4u29cb5OAZTKsDQCDMawNAINZ2rB2VemCA7CndPex7llwhy2159zd\nu/Jx0UUXrb0N6lOf+nbfYzfXthfqWyXD2gAwGOEMAIMRzgs4cODAupuwUurb2dS3c+3m2pLdX98q\nLe1PqaqqVz0GDwCjqKr0TrggDADYOuEMAIMRzgAwGOEMAIMRzgAwGOEMAIMRzgAwGOEMAINZ2qxU\nyewPsgFg3TY29ufgwevW3Yw7bKl3CEvcIQyAEdTKZ45yhzAA2EOEMwAMRjgDwGCEMwAMRjgDwGCE\nMwAMRjgDwGCOG85V9aqqurGqrtqOBgHAXrdIz/nVSX5s1Q0BAGaOG87d/b4kX9mGtgAA8ZkzAAxH\nOAPAYJY6K1Vy8dzygekBADvf5uZmNjc3t+VcC81KVVVnJ3l7dz/0GPuYlQqAQezyWamq6reT/FGS\nB1XVZ6vqaatoCAAwYz5nAHahXd5zBgC2l3AGgMEIZwAYjHAGgMEIZwAYjHAGgMEIZwAYjHAGgMEI\nZwAYjHAGgMEseVaqldzFDABOyMbG/nU3YUuWGs6rvo8pAOwFhrUBYDDCGQAGI5wBYDDCGQAGI5wB\nYDDCGQAGI5wBYDDCGQAGI5wBYDDCGQAGI5wBYDDCGQAGI5wBYDDCGQAGI5wBYDDCGQAGI5wBYDDC\nGQAGI5wBYDDCGQAGI5wBYDDCGQAGI5wBYDDCGQAGI5wBYDDCGQAGs2+ZB6uqZR4OYFgbG/tz8OB1\n624Gu1R193IOVNXJco4FML7Ksn5/sjNVVbp7Jb1Sw9oAMBjhDACDEc4AMBjhDACDEc4AMBjhDACD\nEc4AMJjj3oSkqk5N8odJTpn2f3N3v3DVDQOAvWqhm5BU1Wnd/c2qOjnJ+5M8s7s/eNg+bkIC7CFu\nQrLXrf0mJN39zWnx1Mx6z34iAWBFFgrnqjqpqj6a5GCSd3f3h1bbLADYuxbtOd/W3Q9PclaSR1bV\nQ1bbLADYu05oVqru/lpV/X6SxyX5+HfucfHc8oHpAQA73+bmZjY3N7flXMe9IKyq7pXklu6+uaru\nnOT3kry4u99x2H4uCAP2EBeE7XWrvCBskZ7zfZK8pqpOymwY/A2HBzMAsDzmcwa4Q/Sc97q1/ykV\nALB9hDMADEY4A8BghDMADEY4A8BghDMADEY4A8BghDMADEY4A8BghDMADOaEZqU6vpXcxQxgOBsb\n+9fdBHaxpYaz+8wCwNYZ1gaAwQhnABiMcAaAwQhnABiMcAaAwQhnABiMcAaAwQhnABiMcAaAwQhn\nABiMcAaAwQhnABiMcAaAwQhnABiMcAaAwQhnABiMcAaAwQhnABiMcAaAwQhnABiMcAaAwQhnABiM\ncAaAwQhnABiMcAaAwQhnABjMvmUerKqWeTjgGDY29ufgwevW3QxgBaq7l3Ogqk6WcyxgEZVl/f8F\nTlxVpbtX0is1rA0AgxHOADAY4QwAgxHOADAY4QwAgxHOADAY4QwAgzluOFfVWVX13qr6WFVdXVXP\n3I6GAcBeddybkFTVmUnO7O4rq+quST6S5Ind/YnD9nMTEthWbkIC67TWm5B098HuvnJa/kaSa5Lc\nbxWNAQBO8DPnqjo7ycOS/PEqGgMAnEA4T0Pab07yrKkHDQCswEKzUlXVvsyC+ZLuftvR97x4bvnA\n9ACAnW9zczObm5vbcq6FZqWqqtcmuam7n3OMfVwQBtvKBWGwTqu8IGyRq7XPT/KHSa7OLH07yQu6\n+12H7SecYVsJZ1intYbzwgcSzrDNhDOsk/mcAWAPEc4AMBjhDACDEc4AMBjhDACDEc4AMBjhDACD\nEc4AMBjhDACDWWjii8Wt5EYpwBFsbOxfdxOAFVlqOLuVIABsnWFtABiMcAaAwQhnABiMcAaAwQhn\nABiMcAaAwQhnABiMcAaAwQhnABiMcAaAwQhnABiMcAaAwQhnABiMcAaAwQhnABiMcAaAwQhnABiM\ncAaAwQhnABiMcAaAwQhnABiMcAaAwQhnABiMcAaAwQhnABiMcAaAwexb5sGqapmHA+ZsbOzPwYPX\nrbsZwDao7l7Ogao6Wc6xgCOpLOv/K7B1VZXuXkmv1LA2AAxGOAPAYIQzAAxGOAPAYIQzAAxGOAPA\nYIQzAAxm4XCuqpOq6oqqunSVDQKAve5Ees7PSvLxVTUEAJhZKJyr6qwkj0/yG6ttDgCwaM/5V5P8\nQtyfEwBW7rjhXFVPSHJjd1+ZpKYHALAii8xKdX6SC6rq8UnunOS7quq13f3T37nrxXPLB6YHAOx8\nm5ub2dzc3JZzndCsVFX16CTP7e4LjrDNrFSwUmalgpGYlQoA9hDzOcOOoecMI9FzBoA9RDgDwGCE\nMwAMRjgDwGCEMwAMRjgDwGCEMwAMRjgDwGCEMwAMRjgDwGAWmZXqBJhNElZlY2P/upsAbJOlhrP7\n/gLA1hnWBoDBCGcAGIxwBoDBCGcAGIxwBoDBCGcAGIxwBoDBCGcAGIxwBoDBCGcAGIxwBoDBCGcA\nGIxwBoDBCGcAGIxwBoDBCGcAGIxwBoDBCGcAGIxwBoDBCGcAGIxwBoDBCGcAGIxwBoDBCGcAGIxw\nBoDBCGcAGMy+ZR6sqpZ5OJZkY2N/Dh68bt3NAGBB1d3LOVBVJ8s5FstWWdb3GYCZqkp3r6RXalgb\nAAYjnAFgMMIZAAYjnAFgMMIZAAYjnAFgMMIZAAaz0E1Iquq6JDcnuS3JLd39iFU2CgD2skXvEHZb\nkgPd/ZVVNgYAWHxYu05gXwBgCxYN3E7y7qr6UFU9fZUNAoC9btFh7fO7+wtV9d2ZhfQ13f2+VTYM\nAPaqhcK5u78w/fuXVfWWJI9IcoRwvnhu+cD0AICdb3NzM5ubm9tyruPOSlVVpyU5qbu/UVV3SXJZ\nkhd292WH7WdWqmGZlQpg2VY5K9UiPeeNJG+ZhW/2Jfmtw4MZAFge8znvCXrOAMtmPmcA2EOEMwAM\nRjgDwGCEMwAMRjgDwGCEMwAMRjgDwGCEMwAMRjgDwGCEMwAMZtEpIxe0kruYsUUbG/vX3QQATsBS\nw9n9mwFg6wxrA8BghDMADEY4A8BghDMADEY4A8BghDMADEY4A8BghDMADEY4A8BghDMADEY4A8Bg\nhDMADEY4A8BghDMADEY4A8BghDMADEY4A8BghDMADEY4A8BghDMADEY4A8BghDMADEY4A8BghDMA\nDEY4A8BghDMADGbfMg9WVcs83HA2Nvbn4MHr1t0MAHa56u7lHKiqk+Uca1yVZX29ANjZqirdvZJe\nqWFtABiMcAaAwQhnABiMcAaAwQhnABiMcAaAwQhnABjMQuFcVWdU1Zuq6pqq+lhVPXLVDQOAvWrR\nO4S9NMk7uvtJVbUvyWkrbBMA7GnHvUNYVZ2e5KPdfe5x9nOHMAD2jHXfIeycJDdV1aur6oqqemVV\n3XkVjQEAFgvnfUnOS/Ky7j4vyTeTPG+lrQKAPWyRz5w/l+T67v7w9PzNSS488q4Xzy0fmB4AsPNt\nbm5mc3NzW8610KxUVfUHSZ7e3Z+sqouSnNbdFx62j8+cAdgzVvmZ86Lh/P1JfiPJnZJcm+Rp3X3z\nYfsIZwD2jLWH80IHEs4A7CHrvlobANhGwhkABiOcAWAwwhkABiOcAWAwwhkABiOcAWAwwhkABiOc\nAWAwwhkABrPIrFQnYCV3MRvGxsb+dTcBgD1gqeHsvtMAsHWGtQFgMMIZAAYjnAFgMMIZAAYjnAFg\nMMIZAAYjnAFgMMIZAAYjnBewubm57iaslPp2NvXtXLu5tmT317dKwnkBu/0HTH07m/p2rt1cW7L7\n61sl4QwAgxHOADCYWtZkFVVl1gsA9pTuXsl0jEsLZwBgOQxrA8BghDMADGbL4VxVj6uqT1TVJ6vq\nwmU0atWq6qyqem9Vfayqrq6qZ07r715Vl1XVn1XV71XVGXOveX5Vfaqqrqmqx86tP6+qrprq/7V1\n1HM0VXVSVV1RVZdOz3dNfVV1RlW9aWrvx6rqkbusvmdX1Z9ObfutqjplJ9dXVa+qqhur6qq5dUur\nZ/r6vH56zQeq6v7bV91R6/uPU/uvrKrfqarT57btmPqOVNvctudW1W1VdY+5dTumtun8R6yvqv7l\nVMPVVfXiufXbU1933+FHZuH+6ST7k9wpyZVJHryVY27HI8mZSR42Ld81yZ8leXCSlyT5xWn9hUle\nPC0/JMlHk+xLcvZU86HP6/84yQ9Oy+9I8mPrrm+uzmcn+V9JLp2e75r6kvzPJE+blvclOWO31Jfk\nvkmuTXLK9PwNSZ66k+tL8neTPCzJVXPrllZPkp9N8vJp+SeTvH6A+n40yUnT8ouT/IedWN+RapvW\nn5XkXUn+Isk9pnV/ayfVdozv3YEklyXZNz2/13bXt9WiHpXknXPPn5fkwu38wi7pm/PW6T/SJ5Js\nTOvOTPKJI9WV5J1JHjnt8/G59U9O8op11zO15awk755+yA6F866oL8npSf78COt3S333TfKZJHef\nfglcuht+PjN7Ez//C3Bp9WQWEo+clk9O8pfrru+wbT+e5JKdWt+RakvypiQPze3DecfVdpSfzTck\necwR9tu2+rY6rH2/JNfPPf/ctG7HqKqzM3vXdHlmvyhuTJLuPpjk3tNuh9d5w7TufpnVfMhI9f9q\nkl9IMn85/m6p75wkN1XVq2s2bP/Kqjotu6S+7v58kv+S5LOZtfXm7n5Pdkl9c+69xHq+/ZruvjXJ\nV+eHWgfwzzLrTSW7oL6quiDJ9d199WGbdnxtkwcl+eGquryqfr+qfmBav2317ekLwqrqrknenORZ\n3f2N3D7IcoTnO0JVPSHJjd19ZZJj/Q3ejqwvs97keUle1t3nJfmrzN7R7pbv392SPDGzd/P3TXKX\nqvqp7JL6jmGZ9azkb0/viKr6pSS3dPfrlnnYJR7rxE5cdeckL0hy0apOsaLjnoh9Se7e3Y9K8ouZ\njRIsy0L1bTWcb0gy/+H2WdO64VXVvsyC+ZLuftu0+saq2pi2n5nki9P6G5J8z9zLD9V5tPXrdn6S\nC6rq2iSvS/KYqrokycFdUt/nMnvX/uHp+e9kFta75fv3o0mu7e4vT++035Lk72T31HfIMuv59raq\nOjnJ6d395dU1fTFV9TNJHp/kKXOrd3p952b2eeufVNVfZNbOK6rq3jl6JuyU2g65PsnvJkl3fyjJ\nrVV1z2xjfVsN5w8leWBV7a+qUzIbZ790i8fcLr+Z2WcEL51bd2mSn5mWn5rkbXPrnzxddXdOkgcm\n+eA0FHdzVT2iqirJT8+9Zm26+wXdff/ufkBm35P3dvc/TfL27I76bkxyfVU9aFr1I0k+ll3y/cts\nOPtRVfU3pnb9SJKPZ+fXV7l9r2GZ9Vw6HSNJnpTkvSur4uhuV19VPS6zj5Yu6O5vze23E+v7dm3d\n/afdfWZ3P6C7z8nszfLDu/uLUzt/cofVlnznz+ZbkzwmSabfM6d095eynfUt4YP0x2V2tfOnkjxv\nuz/Iv4NtPj/JrZldXf7RJFdMddwjyXumei5Lcre51zw/syvzrkny2Ln1P5Dk6qn+l667tiPU+uj8\n9QVhu6a+JN+f2ZvDKzN7h3vGLqvvoqmtVyV5TWZ/DbFj60vy20k+n+Rbmb35eFpmF7wtpZ4kpyZ5\n47T+8iRnD1DfpzK7sO+K6fHynVjfkWo7bPu1mS4I22m1HeN7ty/JJVN7P5zk0dtdn9t3AsBg9vQF\nYQAwIuEMAIMRzgAwGOEMAIMRzgAwGOEMAIMRzgAwGOEMAIP5/wZDb12VQmLZAAAAAElFTkSuQmCC\n",
220 "text/plain": [
221 "<matplotlib.figure.Figure at 0x118626550>"
222 ]
223 },
224 "metadata": {},
225 "output_type": "display_data"
226 }
227 ],
228 "source": [
229 "sorted_category_counts = df_narrative.Category.value_counts(ascending=True)\n",
230 "sorted_category_counts.plot(kind='barh', figsize=(8,6), title=\"Categories\");"
231 ]
232 },
233 {
234 "cell_type": "markdown",
235 "metadata": {},
236 "source": [
237 "## Using Peter Norvig's Spelling Corrector\n",
238 "\n",
239 "Did not end up using this in the final code as it didn't increase accuracy, and was too slow to test multiple times."
240 ]
241 },
242 {
243 "cell_type": "code",
244 "execution_count": null,
245 "metadata": {
246 "collapsed": true
247 },
248 "outputs": [],
249 "source": []
250 },
251 {
252 "cell_type": "code",
253 "execution_count": 6,
254 "metadata": {
255 "collapsed": false
256 },
257 "outputs": [],
258 "source": [
259 "import re, string\n",
260 "from collections import Counter\n",
261 "\n",
262 "def words(text): return re.findall(r'\\w+', text.lower())\n",
263 "\n",
264 "WORDS = Counter(words(open('big.txt').read()))\n",
265 "\n",
266 "def P(word, N=sum(WORDS.values())): \n",
267 " \"Probability of `word`.\"\n",
268 " return WORDS[word] / N\n",
269 "\n",
270 "def correction(word): \n",
271 " \"Most probable spelling correction for word.\"\n",
272 " return max(candidates(word), key=P)\n",
273 "\n",
274 "def candidates(word): \n",
275 " \"Generate possible spelling corrections for word.\"\n",
276 " return (known([word]) or known(edits1(word)) or known(edits2(word)) or known(edits2(word)) or [word])\n",
277 "\n",
278 "def known(words): \n",
279 " \"The subset of `words` that appear in the dictionary of WORDS.\"\n",
280 " return set(w for w in words if w in WORDS)\n",
281 "\n",
282 "def edits1(word):\n",
283 " \"All edits that are one edit away from `word`.\"\n",
284 " letters = 'abcdefghijklmnopqrstuvwxyz'\n",
285 " splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]\n",
286 " deletes = [L + R[1:] for L, R in splits if R]\n",
287 " transposes = [L + R[1] + R[0] + R[2:] for L, R in splits if len(R)>1]\n",
288 " replaces = [L + c + R[1:] for L, R in splits if R for c in letters]\n",
289 " inserts = [L + c + R for L, R in splits for c in letters]\n",
290 " return set(deletes + transposes + replaces + inserts)\n",
291 "\n",
292 "def edits2(word): \n",
293 " \"All edits that are two edits away from `word`.\"\n",
294 " return (e2 for e1 in edits1(word) for e2 in edits1(e1))\n",
295 "\n",
296 "def edits3(word): \n",
297 " \"All edits that are three edits away from `word`.\"\n",
298 " return (e3 for e2 in edits2(word) for e2 in edits1(e2))"
299 ]
300 },
301 {
302 "cell_type": "code",
303 "execution_count": 7,
304 "metadata": {
305 "collapsed": false
306 },
307 "outputs": [
308 {
309 "name": "stdout",
310 "output_type": "stream",
311 "text": [
312 "The slowest run took 43.19 times longer than the fastest. This could mean that an intermediate result is being cached.\n",
313 "1 loop, best of 3: 98.9 ms per loop\n",
314 "The slowest run took 9.48 times longer than the fastest. This could mean that an intermediate result is being cached.\n",
315 "1000000 loops, best of 3: 437 ns per loop\n"
316 ]
317 }
318 ],
319 "source": [
320 "from nltk.stem import WordNetLemmatizer\n",
321 "\n",
322 "def check_spelling(word):\n",
323 " if word.lower() not in WORDS.keys() and word not in string.punctuation:\n",
324 " return correction(word)\n",
325 " else:\n",
326 " return word\n",
327 " \n",
328 "def get_word_lemmas(review):\n",
329 " WNL = WordNetLemmatizer()\n",
330 " PS = nltk.stem.PorterStemmer()\n",
331 " sentences = nltk.sent_tokenize(review)\n",
332 " tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]\n",
333 " tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences]\n",
334 " \n",
335 " normed_tagged_words = [PS.stem(WNL.lemmatize(word[0].lower())) for sent in tagged_sentences\n",
336 " for word in sent \n",
337 " if word[0].lower() not in nltk.corpus.stopwords.words('english')\n",
338 " and word[0] not in string.punctuation # remove punctuation\n",
339 " and not re.search(r'''^[\\.,;\"'?!():\\-_`]+$''', word[0])\n",
340 "# and word[1].startswith('N')\n",
341 " ] # include only nouns\n",
342 " \n",
343 " return(\" \".join(normed_tagged_words))\n",
344 "\n",
345 "def get_word_stems(review):\n",
346 " PS = nltk.stem.PorterStemmer()\n",
347 " review_tokens = nltk.word_tokenize(review)\n",
348 " corrected_tokens = [PS.stem(word) for word in review_tokens]\n",
349 " return(\" \".join(corrected_tokens))\n",
350 "\n",
351 "def tokenize_text(corpus):\n",
352 " sent_tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')\n",
353 " raw_sents = sent_tokenizer.tokenize(corpus) # Split text into sentences\n",
354 " \n",
355 " return [nltk.word_tokenize(word) for word in raw_sents]\n",
356 "\n",
357 "def extract_entity_names(t):\n",
358 " entity_names = []\n",
359 "\n",
360 " if hasattr(t, 'label') and t.label:\n",
361 " if t.label() == 'NE':\n",
362 " entity_names.append(' '.join([child[0] for child in t]))\n",
363 " else:\n",
364 " for child in t:\n",
365 " entity_names.extend(extract_entity_names(child))\n",
366 "\n",
367 " return entity_names\n",
368 "\n",
369 "def chunk_for_technical_terms(sent, grammar):\n",
370 " cp = nltk.RegexpParser(grammar)\n",
371 " tree = cp.parse(sent)\n",
372 " return tree\n",
373 "\n",
374 "def print_chunked_tags(tree, tag):\n",
375 " for subtree in tree.subtrees():\n",
376 " if subtree.label() == tag:\n",
377 " print(subtree)\n",
378 " \n",
379 "def get_tagged_chunks(tree, tag):\n",
380 " tagged_chunks = list()\n",
381 " for subtree in tree.subtrees():\n",
382 " if subtree.label() == tag:\n",
383 "# print(subtree)\n",
384 " tagged_chunks.append(subtree)\n",
385 " return tagged_chunks\n",
386 "\n",
387 "\n",
388 "\n",
389 " \n",
390 "\n",
391 "def add_hypernyms(review, stem=True):\n",
392 " PS = nltk.stem.PorterStemmer()\n",
393 " sentences = nltk.sent_tokenize(review)\n",
394 " tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]\n",
395 " tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences]\n",
396 "\n",
397 " chunked_sents = []\n",
398 " grammar = \"NN: {(<NN>|<NNS>|<NP>|<NPS>|<CD>)*<NN>|<NNS>|<NP>|<NPS>|<VBD>|<JJ>|<VB>}\"\n",
399 "\n",
400 " for sent in tagged_sentences:\n",
401 " chunked_sents.append(chunk_for_technical_terms(sent, grammar))\n",
402 " \n",
403 " Names = list()\n",
404 "\n",
405 " for tree in chunked_sents:\n",
406 " Names = Names + get_tagged_chunks(tree, \"NN\")\n",
407 " \n",
408 " name_list = list()\n",
409 "\n",
410 " for name_tree in Names:\n",
411 " name = \"\"\n",
412 " for part in name_tree.leaves():\n",
413 " name = name + \" \" + part[0] \n",
414 " name_list.append(name.strip())\n",
415 " \n",
416 " hypterms = list()\n",
417 " \n",
418 " for term in name_list: # for each term\n",
419 " s = wn.synsets(term.lower(), 'n') # get its nominal synsets\n",
420 " for syn in s: # for each lemma synset\n",
421 " for hyp in syn.hypernyms(): # It has a list of hypernyms\n",
422 " hypterms = hypterms + [hyp.name()]\n",
423 " \n",
424 " if stem:\n",
425 " review = get_word_stems(review)\n",
426 " \n",
427 "# print(hypterms)\n",
428 " return (review + \" \" + \" \".join(hypterms))\n",
429 "\n",
430 "\n",
431 "# def append_top_hypernyms(review):\n",
432 "\n",
433 "review = '''I will start by saying we have a nice new deck. That is where the good part ends.\n",
434 "\n",
435 "Why two stars if we have a nice deck now? Well, it all started in May when we had a man named Al come out and talk to us about the process. He was a true salesman, I'll tell you that. Not a straight shooter, but an excited salesman that wanted to sell... And we bought into it.\n",
436 "\n",
437 "He told us they were backed up with the harsh winter and a lot of jobs, but they could probably start by June 24th. Mind you, this was the end of May we met with him. He said they would have to do a survey of our land and get a permit from Dormont before they started. We felt confident in going with them, and booked it.\n",
438 "\n",
439 "Here's where things fell apart. Weeks went by with no word from them on the process. Finally I called and left messages. Al finally got in touch with me and the conversation was utterly confusing. He must have not understood me because he just kept talking in circles. So I hung up not knowing what was going on. Finally I called back and the admin told me that the survey could take a couple weeks to come back. I wish Al would have told us that.\n",
440 "\n",
441 "So our June 24th date came and went. We finally got our survey. And they were quick to bill us for it, but no word on where we were in the process. I called back a couple times with no real answers from the admin. Apparently they were now waiting for the permit from Dormont.\n",
442 "\n",
443 "A month later, I was frustrated and asked to speak with someone at the company. I spoke with someone who told me that Dormont usually takes a week to process the permit, but we were now going on a month. He told me he would bug the guy about it and we finally got it. \n",
444 "\n",
445 "I completely understand that waiting on the permit is not their fault, but why no communication about it? Just call me and tell me they're waiting for the permit, but they'll work towards asking Dormont what the hold up is. Seems simple.\n",
446 "\n",
447 "Finally we get the permit and work is supposed to start. Tuesday comes and they have to wait for approval from Dormont on holes they're digging. So holes are dug and equipment is put in my backyard and then nothing happens for two days. Where did everyone go? Who knows, because I wasn't informed! \n",
448 "\n",
449 "I was upset and contacted the company owner, Dave, by email. I told him how frustrated I was about the lack of communication. He wrote me two sentences that said \"\"there will be acres there tomorrow morning to finish and most will be done tomorrow.\"\" Well, that didn't happen.\n",
450 "\n",
451 "Then two other dudes show up two days later and did work for about three hours and left. The main guy comes back the next day and says they did it wrong. So apparently the part about how they wouldn't need access to my house changes to they're drilling bolts into my house to secure he deck. \n",
452 "\n",
453 "Finally, the second week into construction, my tiny 10x11 foot deck is done. It was upsetting that they left the deck dirty, and all the dirt and cement they moved around wasn't cleaned up. I even asked them to fill all the holes they dug up and didn't use, and they only filled up one. When you create a construction project, isn't it just good business to clean it up and make it look nice? Didn't happen here.\n",
454 "\n",
455 "My main point is, contractors have a reputation for not being the most trustworthy. Why be that company? Why not be an upstanding company that consumers can trust? My main issues with them were that things were not communicated to me properly up front, nor was the ongoing process communicated to me. Then they left everything unfinished in my eyes, leaving the site dirty. I understand things happen and things get delayed, but just email or call me. It's not that hard to keep me updated, it is 2014 with a million ways to be contacted.\n",
456 "\n",
457 "Even though I have a nice deck (after I clean things up myself!), I would not recommend them to anyone.'''\n",
458 "\n",
459 "%timeit add_hypernyms(review)\n",
460 "%timeit check_spelling(\"Hello\")"
461 ]
462 },
463 {
464 "cell_type": "markdown",
465 "metadata": {},
466 "source": [
467 "## Seperate Training and Dev data \n",
468 "\n",
469 "- Seperate training and dev data in a 70-30 ratio. Not keeping any test data as Kaggle Data will be used for that.\n",
470 "- Train over entire training data set for Kaggle Submissions.\n",
471 "- Read Kaggle Test data "
472 ]
473 },
474 {
475 "cell_type": "code",
476 "execution_count": 8,
477 "metadata": {
478 "collapsed": false
479 },
480 "outputs": [],
481 "source": [
482 "##Shuffle the training data\n",
483 "random_index = np.random.permutation(df_narrative.index)\n",
484 "df_narrative_shuffled = df_narrative.ix[random_index, ['Category', 'Review Text']]\n",
485 "df_narrative_shuffled.reset_index(drop=True, inplace=True)\n",
486 "##Stem words in each review\n",
487 "df_narrative_shuffled['Review Text'] = df_narrative_shuffled['Review Text'].map(get_word_stems)"
488 ]
489 },
490 {
491 "cell_type": "code",
492 "execution_count": 11,
493 "metadata": {
494 "collapsed": false
495 },
496 "outputs": [
497 {
498 "name": "stdout",
499 "output_type": "stream",
500 "text": [
501 "Category 1\n",
502 "Review Text I wa in the need of pedicur in a pinch , on a ...\n",
503 "Name: 0, dtype: object\n"
504 ]
505 }
506 ],
507 "source": [
508 "## get sizes of training and test sets\n",
509 "rows, columns = df_narrative_shuffled.shape\n",
510 "train_size = round(rows*.70)\n",
511 "dev_size = round(rows*.30)\n",
512 "kaggle_train_size = rows\n",
513 "print(df_narrative_shuffled.loc[0])"
514 ]
515 },
516 {
517 "cell_type": "code",
518 "execution_count": 12,
519 "metadata": {
520 "collapsed": false
521 },
522 "outputs": [],
523 "source": [
524 "## create training and test sets (this will be used for the final training)\n",
525 "df_train = df_narrative_shuffled.loc[:train_size]\n",
526 "df_kaggle_train = df_narrative_shuffled.loc[:kaggle_train_size]\n",
527 "df_dev = df_narrative_shuffled.loc[train_size:dev_size+train_size].reset_index(drop=True)\n",
528 "df_test = pd.read_csv(\"yelp_data_official_test_nocategories.csv\", sep = \"|\", low_memory=False)\n",
529 "df_test['Review Text'] = df_test['Review Text'].map(get_word_stems)"
530 ]
531 },
532 {
533 "cell_type": "code",
534 "execution_count": 106,
535 "metadata": {
536 "collapsed": false
537 },
538 "outputs": [
539 {
540 "name": "stdout",
541 "output_type": "stream",
542 "text": [
543 "TfidfVectorizer(analyzer='word', binary=False, decode_error='strict',\n",
544 " dtype=<class 'numpy.int64'>, encoding='utf-8', input='content',\n",
545 " lowercase=True, max_df=1.0, max_features=18000, min_df=5,\n",
546 " ngram_range=(1, 1), norm='l2', preprocessor=None, smooth_idf=True,\n",
547 " stop_words='english', strip_accents=None, sublinear_tf=False,\n",
548 " token_pattern='\\\\b\\\\w+\\\\b', tokenizer=None, use_idf=True,\n",
549 " vocabulary=None)\n",
550 "MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)\n",
551 "SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n",
552 " decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',\n",
553 " max_iter=-1, probability=False, random_state=None, shrinking=True,\n",
554 " tol=0.001, verbose=False)\n",
555 "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n",
556 " metric_params=None, n_jobs=1, n_neighbors=5, p=2,\n",
557 " weights='uniform')\n"
558 ]
559 }
560 ],
561 "source": []
562 },
563 {
564 "cell_type": "code",
565 "execution_count": 103,
566 "metadata": {
567 "collapsed": false
568 },
569 "outputs": [
570 {
571 "name": "stdout",
572 "output_type": "stream",
573 "text": [
574 "Fitting 5 folds for each of 4 candidates, totalling 20 fits\n"
575 ]
576 },
577 {
578 "ename": "JoblibValueError",
579 "evalue": "JoblibValueError\n___________________________________________________________________________\nMultiprocessing exception:\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/runpy.py in _run_module_as_main(mod_name='ipykernel.__main__', alter_argv=1)\n 179 sys.exit(msg)\n 180 main_globals = sys.modules[\"__main__\"].__dict__\n 181 if alter_argv:\n 182 sys.argv[0] = mod_spec.origin\n 183 return _run_code(code, main_globals, None,\n--> 184 \"__main__\", mod_spec)\n mod_spec = ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py')\n 185 \n 186 def run_module(mod_name, init_globals=None,\n 187 run_name=None, alter_sys=False):\n 188 \"\"\"Execute a module's code without importing it\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/runpy.py in _run_code(code=<code object <module> at 0x102a0b4b0, file \"/Use...3.5/site-packages/ipykernel/__main__.py\", line 1>, run_globals={'__builtins__': <module 'builtins' (built-in)>, '__cached__': '/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/__pycache__/__main__.cpython-35.pyc', '__doc__': None, '__file__': '/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object>, '__name__': '__main__', '__package__': 'ipykernel', '__spec__': ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py'), 'app': <module 'ipykernel.kernelapp' from '/Users/sayan.../python3.5/site-packages/ipykernel/kernelapp.py'>}, init_globals=None, mod_name='__main__', mod_spec=ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py'), pkg_name='ipykernel', script_name=None)\n 80 __cached__ = cached,\n 81 __doc__ = None,\n 82 __loader__ = loader,\n 83 __package__ = pkg_name,\n 84 __spec__ = mod_spec)\n---> 85 exec(code, run_globals)\n code = <code object <module> at 0x102a0b4b0, file \"/Use...3.5/site-packages/ipykernel/__main__.py\", line 1>\n run_globals = {'__builtins__': <module 'builtins' (built-in)>, '__cached__': '/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/__pycache__/__main__.cpython-35.pyc', '__doc__': None, '__file__': '/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object>, '__name__': '__main__', '__package__': 'ipykernel', '__spec__': ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py'), 'app': <module 'ipykernel.kernelapp' from '/Users/sayan.../python3.5/site-packages/ipykernel/kernelapp.py'>}\n 86 return run_globals\n 87 \n 88 def _run_module_code(code, init_globals=None,\n 89 mod_name=None, mod_spec=None,\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py in <module>()\n 1 \n 2 \n----> 3 \n 4 if __name__ == '__main__':\n 5 from ipykernel import kernelapp as app\n 6 app.launch_new_instance()\n 7 \n 8 \n 9 \n 10 \n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/traitlets/config/application.py in launch_instance(cls=<class 'ipykernel.kernelapp.IPKernelApp'>, argv=None, **kwargs={})\n 591 \n 592 If a global instance already exists, this reinitializes and starts it\n 593 \"\"\"\n 594 app = cls.instance(**kwargs)\n 595 app.initialize(argv)\n--> 596 app.start()\n app.start = <bound method IPKernelApp.start of <ipykernel.kernelapp.IPKernelApp object>>\n 597 \n 598 #-----------------------------------------------------------------------------\n 599 # utility functions, for convenience\n 600 #-----------------------------------------------------------------------------\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/kernelapp.py in start(self=<ipykernel.kernelapp.IPKernelApp object>)\n 437 \n 438 if self.poller is not None:\n 439 self.poller.start()\n 440 self.kernel.start()\n 441 try:\n--> 442 ioloop.IOLoop.instance().start()\n 443 except KeyboardInterrupt:\n 444 pass\n 445 \n 446 launch_new_instance = IPKernelApp.launch_instance\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/zmq/eventloop/ioloop.py in start(self=<zmq.eventloop.ioloop.ZMQIOLoop object>)\n 157 PollIOLoop.configure(ZMQIOLoop)\n 158 return PollIOLoop.current(*args, **kwargs)\n 159 \n 160 def start(self):\n 161 try:\n--> 162 super(ZMQIOLoop, self).start()\n self.start = <bound method ZMQIOLoop.start of <zmq.eventloop.ioloop.ZMQIOLoop object>>\n 163 except ZMQError as e:\n 164 if e.errno == ETERM:\n 165 # quietly return on ETERM\n 166 pass\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/tornado/ioloop.py in start(self=<zmq.eventloop.ioloop.ZMQIOLoop object>)\n 878 self._events.update(event_pairs)\n 879 while self._events:\n 880 fd, events = self._events.popitem()\n 881 try:\n 882 fd_obj, handler_func = self._handlers[fd]\n--> 883 handler_func(fd_obj, events)\n handler_func = <function wrap.<locals>.null_wrapper>\n fd_obj = <zmq.sugar.socket.Socket object>\n events = 1\n 884 except (OSError, IOError) as e:\n 885 if errno_from_exception(e) == errno.EPIPE:\n 886 # Happens when the client closes the connection\n 887 pass\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/tornado/stack_context.py in null_wrapper(*args=(<zmq.sugar.socket.Socket object>, 1), **kwargs={})\n 270 # Fast path when there are no active contexts.\n 271 def null_wrapper(*args, **kwargs):\n 272 try:\n 273 current_state = _state.contexts\n 274 _state.contexts = cap_contexts[0]\n--> 275 return fn(*args, **kwargs)\n args = (<zmq.sugar.socket.Socket object>, 1)\n kwargs = {}\n 276 finally:\n 277 _state.contexts = current_state\n 278 null_wrapper._wrapped = True\n 279 return null_wrapper\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py in _handle_events(self=<zmq.eventloop.zmqstream.ZMQStream object>, fd=<zmq.sugar.socket.Socket object>, events=1)\n 435 # dispatch events:\n 436 if events & IOLoop.ERROR:\n 437 gen_log.error(\"got POLLERR event on ZMQStream, which doesn't make sense\")\n 438 return\n 439 if events & IOLoop.READ:\n--> 440 self._handle_recv()\n self._handle_recv = <bound method ZMQStream._handle_recv of <zmq.eventloop.zmqstream.ZMQStream object>>\n 441 if not self.socket:\n 442 return\n 443 if events & IOLoop.WRITE:\n 444 self._handle_send()\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py in _handle_recv(self=<zmq.eventloop.zmqstream.ZMQStream object>)\n 467 gen_log.error(\"RECV Error: %s\"%zmq.strerror(e.errno))\n 468 else:\n 469 if self._recv_callback:\n 470 callback = self._recv_callback\n 471 # self._recv_callback = None\n--> 472 self._run_callback(callback, msg)\n self._run_callback = <bound method ZMQStream._run_callback of <zmq.eventloop.zmqstream.ZMQStream object>>\n callback = <function wrap.<locals>.null_wrapper>\n msg = [<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>]\n 473 \n 474 # self.update_state()\n 475 \n 476 \n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py in _run_callback(self=<zmq.eventloop.zmqstream.ZMQStream object>, callback=<function wrap.<locals>.null_wrapper>, *args=([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],), **kwargs={})\n 409 close our socket.\"\"\"\n 410 try:\n 411 # Use a NullContext to ensure that all StackContexts are run\n 412 # inside our blanket exception handler rather than outside.\n 413 with stack_context.NullContext():\n--> 414 callback(*args, **kwargs)\n callback = <function wrap.<locals>.null_wrapper>\n args = ([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],)\n kwargs = {}\n 415 except:\n 416 gen_log.error(\"Uncaught exception, closing connection.\",\n 417 exc_info=True)\n 418 # Close the socket on an uncaught exception from a user callback\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/tornado/stack_context.py in null_wrapper(*args=([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],), **kwargs={})\n 270 # Fast path when there are no active contexts.\n 271 def null_wrapper(*args, **kwargs):\n 272 try:\n 273 current_state = _state.contexts\n 274 _state.contexts = cap_contexts[0]\n--> 275 return fn(*args, **kwargs)\n args = ([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],)\n kwargs = {}\n 276 finally:\n 277 _state.contexts = current_state\n 278 null_wrapper._wrapped = True\n 279 return null_wrapper\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/kernelbase.py in dispatcher(msg=[<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>])\n 271 if self.control_stream:\n 272 self.control_stream.on_recv(self.dispatch_control, copy=False)\n 273 \n 274 def make_dispatcher(stream):\n 275 def dispatcher(msg):\n--> 276 return self.dispatch_shell(stream, msg)\n msg = [<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>]\n 277 return dispatcher\n 278 \n 279 for s in self.shell_streams:\n 280 s.on_recv(make_dispatcher(s), copy=False)\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/kernelbase.py in dispatch_shell(self=<ipykernel.ipkernel.IPythonKernel object>, stream=<zmq.eventloop.zmqstream.ZMQStream object>, msg={'buffers': [], 'content': {'allow_stdin': True, 'code': \"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", 'silent': False, 'stop_on_error': True, 'store_history': True, 'user_expressions': {}}, 'header': {'date': '2016-10-25T20:57:17.365547', 'msg_id': '66CC51C2B1354687B1BE0A315940249A', 'msg_type': 'execute_request', 'session': 'B5B6D29754D84F7A8C686E46A05BEDAC', 'username': 'username', 'version': '5.0'}, 'metadata': {}, 'msg_id': '66CC51C2B1354687B1BE0A315940249A', 'msg_type': 'execute_request', 'parent_header': {}})\n 223 self.log.error(\"UNKNOWN MESSAGE TYPE: %r\", msg_type)\n 224 else:\n 225 self.log.debug(\"%s: %s\", msg_type, msg)\n 226 self.pre_handler_hook()\n 227 try:\n--> 228 handler(stream, idents, msg)\n handler = <bound method Kernel.execute_request of <ipykernel.ipkernel.IPythonKernel object>>\n stream = <zmq.eventloop.zmqstream.ZMQStream object>\n idents = [b'B5B6D29754D84F7A8C686E46A05BEDAC']\n msg = {'buffers': [], 'content': {'allow_stdin': True, 'code': \"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", 'silent': False, 'stop_on_error': True, 'store_history': True, 'user_expressions': {}}, 'header': {'date': '2016-10-25T20:57:17.365547', 'msg_id': '66CC51C2B1354687B1BE0A315940249A', 'msg_type': 'execute_request', 'session': 'B5B6D29754D84F7A8C686E46A05BEDAC', 'username': 'username', 'version': '5.0'}, 'metadata': {}, 'msg_id': '66CC51C2B1354687B1BE0A315940249A', 'msg_type': 'execute_request', 'parent_header': {}}\n 229 except Exception:\n 230 self.log.error(\"Exception in message handler:\", exc_info=True)\n 231 finally:\n 232 self.post_handler_hook()\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/kernelbase.py in execute_request(self=<ipykernel.ipkernel.IPythonKernel object>, stream=<zmq.eventloop.zmqstream.ZMQStream object>, ident=[b'B5B6D29754D84F7A8C686E46A05BEDAC'], parent={'buffers': [], 'content': {'allow_stdin': True, 'code': \"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", 'silent': False, 'stop_on_error': True, 'store_history': True, 'user_expressions': {}}, 'header': {'date': '2016-10-25T20:57:17.365547', 'msg_id': '66CC51C2B1354687B1BE0A315940249A', 'msg_type': 'execute_request', 'session': 'B5B6D29754D84F7A8C686E46A05BEDAC', 'username': 'username', 'version': '5.0'}, 'metadata': {}, 'msg_id': '66CC51C2B1354687B1BE0A315940249A', 'msg_type': 'execute_request', 'parent_header': {}})\n 386 if not silent:\n 387 self.execution_count += 1\n 388 self._publish_execute_input(code, parent, self.execution_count)\n 389 \n 390 reply_content = self.do_execute(code, silent, store_history,\n--> 391 user_expressions, allow_stdin)\n user_expressions = {}\n allow_stdin = True\n 392 \n 393 # Flush output before sending the reply.\n 394 sys.stdout.flush()\n 395 sys.stderr.flush()\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/ipkernel.py in do_execute(self=<ipykernel.ipkernel.IPythonKernel object>, code=\"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", silent=False, store_history=True, user_expressions={}, allow_stdin=True)\n 194 \n 195 reply_content = {}\n 196 # FIXME: the shell calls the exception handler itself.\n 197 shell._reply_content = None\n 198 try:\n--> 199 shell.run_cell(code, store_history=store_history, silent=silent)\n shell.run_cell = <bound method InteractiveShell.run_cell of <ipykernel.zmqshell.ZMQInteractiveShell object>>\n code = \"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\"\n store_history = True\n silent = False\n 200 except:\n 201 status = u'error'\n 202 # FIXME: this code right now isn't being used yet by default,\n 203 # because the run_cell() call above directly fires off exception\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/IPython/core/interactiveshell.py in run_cell(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, raw_cell=\"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", store_history=True, silent=False, shell_futures=True)\n 2718 self.displayhook.exec_result = result\n 2719 \n 2720 # Execute the user code\n 2721 interactivity = \"none\" if silent else self.ast_node_interactivity\n 2722 self.run_ast_nodes(code_ast.body, cell_name,\n-> 2723 interactivity=interactivity, compiler=compiler, result=result)\n interactivity = 'last_expr'\n compiler = <IPython.core.compilerop.CachingCompiler object>\n 2724 \n 2725 # Reset this so later displayed values do not modify the\n 2726 # ExecutionResult\n 2727 self.displayhook.exec_result = None\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/IPython/core/interactiveshell.py in run_ast_nodes(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, nodelist=[<_ast.Assign object>, <_ast.Assign object>, <_ast.Assign object>, <_ast.Expr object>, <_ast.Expr object>, <_ast.Expr object>, <_ast.Expr object>, <_ast.Expr object>, <_ast.Expr object>, <_ast.Expr object>, <_ast.Assign object>, <_ast.For object>], cell_name='<ipython-input-103-1e06a237135d>', interactivity='none', compiler=<IPython.core.compilerop.CachingCompiler object>, result=<IPython.core.interactiveshell.ExecutionResult object>)\n 2820 \n 2821 try:\n 2822 for i, node in enumerate(to_run_exec):\n 2823 mod = ast.Module([node])\n 2824 code = compiler(mod, cell_name, \"exec\")\n-> 2825 if self.run_code(code, result):\n self.run_code = <bound method InteractiveShell.run_code of <ipykernel.zmqshell.ZMQInteractiveShell object>>\n code = <code object <module> at 0x126cad540, file \"<ipython-input-103-1e06a237135d>\", line 12>\n result = <IPython.core.interactiveshell.ExecutionResult object>\n 2826 return True\n 2827 \n 2828 for i, node in enumerate(to_run_interactive):\n 2829 mod = ast.Interactive([node])\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/IPython/core/interactiveshell.py in run_code(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, code_obj=<code object <module> at 0x126cad540, file \"<ipython-input-103-1e06a237135d>\", line 12>, result=<IPython.core.interactiveshell.ExecutionResult object>)\n 2880 outflag = 1 # happens in more places, so it's easier as default\n 2881 try:\n 2882 try:\n 2883 self.hooks.pre_run_code_hook()\n 2884 #rprint('Running code', repr(code_obj)) # dbg\n-> 2885 exec(code_obj, self.user_global_ns, self.user_ns)\n code_obj = <code object <module> at 0x126cad540, file \"<ipython-input-103-1e06a237135d>\", line 12>\n self.user_global_ns = {'BernoulliNB': <class 'sklearn.naive_bayes.BernoulliNB'>, 'Counter': <class 'collections.Counter'>, 'GridSearchCV': <class 'sklearn.grid_search.GridSearchCV'>, 'HashingVectorizer': <class 'sklearn.feature_extraction.text.HashingVectorizer'>, 'In': ['', 'import pandas as pd\\nimport numpy as np\\nimport ma...Fold\\nfrom sklearn.grid_search import GridSearchCV', 'df = pd.read_csv(\"yelp_data_official_training.csv\", sep = \"|\", low_memory=False)\\ndf.head()', \"df.groupby(['Category']).agg(['count'])\", 'filtered_data = df[\"Review Text\"].notnull()\\ndf_narrative = df[filtered_data]', 'sorted_category_counts = df_narrative.Category.v...(kind=\\'barh\\', figsize=(8,6), title=\"Categories\");', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'import re, string\\nfrom collections import Counte... (e3 for e2 in edits2(word) for e2 in edits1(e2))', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', \"random_index = np.random.permutation(df_narrativ...ative_shuffled['Review Text'].map(get_word_stems)\", 'rows, columns = df_narrative_shuffled.shape\\ntrai...n_size = rows\\nprint(df_narrative_shuffled.loc[0])', \"df_train = df_narrative_shuffled.loc[:train_size...xt'] = df_test['Review Text'].map(get_word_stems)\", \"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', \"random_index = np.random.permutation(df_narrativ..._narrative_shuffled['Review Text'].map(get_nouns)\", ...], 'KFold': <class 'sklearn.cross_validation.KFold'>, 'KNeighborsClassifier': <class 'sklearn.neighbors.classification.KNeighborsClassifier'>, 'LinearSVC': <class 'sklearn.svm.classes.LinearSVC'>, 'MultinomialNB': <class 'sklearn.naive_bayes.MultinomialNB'>, 'NearestCentroid': <class 'sklearn.neighbors.nearest_centroid.NearestCentroid'>, ...}\n self.user_ns = {'BernoulliNB': <class 'sklearn.naive_bayes.BernoulliNB'>, 'Counter': <class 'collections.Counter'>, 'GridSearchCV': <class 'sklearn.grid_search.GridSearchCV'>, 'HashingVectorizer': <class 'sklearn.feature_extraction.text.HashingVectorizer'>, 'In': ['', 'import pandas as pd\\nimport numpy as np\\nimport ma...Fold\\nfrom sklearn.grid_search import GridSearchCV', 'df = pd.read_csv(\"yelp_data_official_training.csv\", sep = \"|\", low_memory=False)\\ndf.head()', \"df.groupby(['Category']).agg(['count'])\", 'filtered_data = df[\"Review Text\"].notnull()\\ndf_narrative = df[filtered_data]', 'sorted_category_counts = df_narrative.Category.v...(kind=\\'barh\\', figsize=(8,6), title=\"Categories\");', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'import re, string\\nfrom collections import Counte... (e3 for e2 in edits2(word) for e2 in edits1(e2))', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', \"random_index = np.random.permutation(df_narrativ...ative_shuffled['Review Text'].map(get_word_stems)\", 'rows, columns = df_narrative_shuffled.shape\\ntrai...n_size = rows\\nprint(df_narrative_shuffled.loc[0])', \"df_train = df_narrative_shuffled.loc[:train_size...xt'] = df_test['Review Text'].map(get_word_stems)\", \"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', \"random_index = np.random.permutation(df_narrativ..._narrative_shuffled['Review Text'].map(get_nouns)\", ...], 'KFold': <class 'sklearn.cross_validation.KFold'>, 'KNeighborsClassifier': <class 'sklearn.neighbors.classification.KNeighborsClassifier'>, 'LinearSVC': <class 'sklearn.svm.classes.LinearSVC'>, 'MultinomialNB': <class 'sklearn.naive_bayes.MultinomialNB'>, 'NearestCentroid': <class 'sklearn.neighbors.nearest_centroid.NearestCentroid'>, ...}\n 2886 finally:\n 2887 # Reset our crash handler in place\n 2888 sys.excepthook = old_excepthook\n 2889 except SystemExit as e:\n\n...........................................................................\n/Users/sayan/GoogleDrive/Masters/Classes/INFO 256 - NLP/Kaggle - Yelp Review Classification/<ipython-input-103-1e06a237135d> in <module>()\n 7 'classifier__dual': (True, False),\n 8 'classifier__loss': ('squared_hinge', 'hinge')\n 9 }\n 10 \n 11 grid_search = GridSearchCV(training_classifier, params, n_jobs=-1, verbose=1, cv=5)\n---> 12 grid_search.fit(df_train[\"Review Text\"],df_train.Category)\n 13 \n 14 \n 15 print(\"Performing grid search...\")\n 16 # print(\"pipeline:\", [name for name, _ in pipeline.steps])\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/grid_search.py in fit(self=GridSearchCV(cv=5, error_score='raise',\n e...='2*n_jobs', refit=True, scoring=None, verbose=1), X=0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, y=0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64)\n 799 y : array-like, shape = [n_samples] or [n_samples, n_output], optional\n 800 Target relative to X for classification or regression;\n 801 None for unsupervised learning.\n 802 \n 803 \"\"\"\n--> 804 return self._fit(X, y, ParameterGrid(self.param_grid))\n self._fit = <bound method BaseSearchCV._fit of GridSearchCV(...'2*n_jobs', refit=True, scoring=None, verbose=1)>\n X = 0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object\n y = 0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64\n self.param_grid = {'classifier__dual': (True, False), 'classifier__loss': ('squared_hinge', 'hinge')}\n 805 \n 806 \n 807 class RandomizedSearchCV(BaseSearchCV):\n 808 \"\"\"Randomized search on hyper parameters.\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/grid_search.py in _fit(self=GridSearchCV(cv=5, error_score='raise',\n e...='2*n_jobs', refit=True, scoring=None, verbose=1), X=0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, y=0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, parameter_iterable=<sklearn.grid_search.ParameterGrid object>)\n 548 )(\n 549 delayed(_fit_and_score)(clone(base_estimator), X, y, self.scorer_,\n 550 train, test, self.verbose, parameters,\n 551 self.fit_params, return_parameters=True,\n 552 error_score=self.error_score)\n--> 553 for parameters in parameter_iterable\n parameters = undefined\n parameter_iterable = <sklearn.grid_search.ParameterGrid object>\n 554 for train, test in cv)\n 555 \n 556 # Out is a list of triplet: score, estimator, n_test_samples\n 557 n_fits = len(out)\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py in __call__(self=Parallel(n_jobs=-1), iterable=<generator object BaseSearchCV._fit.<locals>.<genexpr>>)\n 805 if pre_dispatch == \"all\" or n_jobs == 1:\n 806 # The iterable was consumed all at once by the above for loop.\n 807 # No need to wait for async callbacks to trigger to\n 808 # consumption.\n 809 self._iterating = False\n--> 810 self.retrieve()\n self.retrieve = <bound method Parallel.retrieve of Parallel(n_jobs=-1)>\n 811 # Make sure that we get a last message telling us we are done\n 812 elapsed_time = time.time() - self._start_time\n 813 self._print('Done %3i out of %3i | elapsed: %s finished',\n 814 (len(self._output), len(self._output),\n\n---------------------------------------------------------------------------\nSub-process traceback:\n---------------------------------------------------------------------------\nValueError Tue Oct 25 20:57:20 2016\nPID: 12450 Python 3.5.2: /Users/sayan/anaconda/bin/python\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py in __call__(self=<sklearn.externals.joblib.parallel.BatchedCalls object>)\n 67 def __init__(self, iterator_slice):\n 68 self.items = list(iterator_slice)\n 69 self._size = len(self.items)\n 70 \n 71 def __call__(self):\n---> 72 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n self.items = [(<function _fit_and_score>, (Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), 0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, 0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, <function _passthrough_scorer>, array([ 6356, 6374, 6383, ..., 33597, 33598, 33599]), array([ 0, 1, 2, ..., 6878, 6886, 6891]), 1, {'classifier__dual': True, 'classifier__loss': 'squared_hinge'}, {}), {'error_score': 'raise', 'return_parameters': True})]\n 73 \n 74 def __len__(self):\n 75 return self._size\n 76 \n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py in <listcomp>(.0=<list_iterator object>)\n 67 def __init__(self, iterator_slice):\n 68 self.items = list(iterator_slice)\n 69 self._size = len(self.items)\n 70 \n 71 def __call__(self):\n---> 72 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n func = <function _fit_and_score>\n args = (Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), 0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, 0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, <function _passthrough_scorer>, array([ 6356, 6374, 6383, ..., 33597, 33598, 33599]), array([ 0, 1, 2, ..., 6878, 6886, 6891]), 1, {'classifier__dual': True, 'classifier__loss': 'squared_hinge'}, {})\n kwargs = {'error_score': 'raise', 'return_parameters': True}\n 73 \n 74 def __len__(self):\n 75 return self._size\n 76 \n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/cross_validation.py in _fit_and_score(estimator=Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), X=0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, y=0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, scorer=<function _passthrough_scorer>, train=array([ 6356, 6374, 6383, ..., 33597, 33598, 33599]), test=array([ 0, 1, 2, ..., 6878, 6886, 6891]), verbose=1, parameters={'classifier__dual': True, 'classifier__loss': 'squared_hinge'}, fit_params={}, return_train_score=False, return_parameters=True, error_score='raise')\n 1515 fit_params = fit_params if fit_params is not None else {}\n 1516 fit_params = dict([(k, _index_param_value(X, v, train))\n 1517 for k, v in fit_params.items()])\n 1518 \n 1519 if parameters is not None:\n-> 1520 estimator.set_params(**parameters)\n estimator.set_params = <bound method BaseEstimator.set_params of Pipeli..., shrinking=True,\n tol=0.001, verbose=False))])>\n parameters = {'classifier__dual': True, 'classifier__loss': 'squared_hinge'}\n 1521 \n 1522 start_time = time.time()\n 1523 \n 1524 X_train, y_train = _safe_split(estimator, X, y, train)\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/base.py in set_params(self=Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), **params={'classifier__dual': True, 'classifier__loss': 'squared_hinge'})\n 258 raise ValueError('Invalid parameter %s for estimator %s. '\n 259 'Check the list of available parameters '\n 260 'with `estimator.get_params().keys()`.' %\n 261 (name, self))\n 262 sub_object = valid_params[name]\n--> 263 sub_object.set_params(**{sub_name: value})\n sub_object.set_params = <bound method BaseEstimator.set_params of SVC(C=...one, shrinking=True,\n tol=0.001, verbose=False)>\n sub_name = 'dual'\n value = True\n 264 else:\n 265 # simple objects case\n 266 if key not in valid_params:\n 267 raise ValueError('Invalid parameter %s for estimator %s. '\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/base.py in set_params(self=SVC(C=1.5, cache_size=200, class_weight=None, co...None, shrinking=True,\n tol=0.001, verbose=False), **params={'dual': True})\n 265 # simple objects case\n 266 if key not in valid_params:\n 267 raise ValueError('Invalid parameter %s for estimator %s. '\n 268 'Check the list of available parameters '\n 269 'with `estimator.get_params().keys()`.' %\n--> 270 (key, self.__class__.__name__))\n key = 'dual'\n self.__class__.__name__ = 'SVC'\n 271 setattr(self, key, value)\n 272 return self\n 273 \n 274 def __repr__(self):\n\nValueError: Invalid parameter dual for estimator SVC. Check the list of available parameters with `estimator.get_params().keys()`.\n___________________________________________________________________________",
580 "output_type": "error",
581 "traceback": [
582 "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
583 "\u001b[0;31mRemoteTraceback\u001b[0m Traceback (most recent call last)",
584 "\u001b[0;31mRemoteTraceback\u001b[0m: \n\"\"\"\nTraceback (most recent call last):\n File \"/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py\", line 130, in __call__\n return self.func(*args, **kwargs)\n File \"/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py\", line 72, in __call__\n return [func(*args, **kwargs) for func, args, kwargs in self.items]\n File \"/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py\", line 72, in <listcomp>\n return [func(*args, **kwargs) for func, args, kwargs in self.items]\n File \"/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/cross_validation.py\", line 1520, in _fit_and_score\n estimator.set_params(**parameters)\n File \"/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/base.py\", line 263, in set_params\n sub_object.set_params(**{sub_name: value})\n File \"/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/base.py\", line 270, in set_params\n (key, self.__class__.__name__))\nValueError: Invalid parameter dual for estimator SVC. Check the list of available parameters with `estimator.get_params().keys()`.\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/sayan/anaconda/lib/python3.5/multiprocessing/pool.py\", line 119, in worker\n result = (True, func(*args, **kwds))\n File \"/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py\", line 140, in __call__\n raise TransportableException(text, e_type)\nsklearn.externals.joblib.my_exceptions.TransportableException: TransportableException\n___________________________________________________________________________\nValueError Tue Oct 25 20:57:20 2016\nPID: 12450 Python 3.5.2: /Users/sayan/anaconda/bin/python\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py in __call__(self=<sklearn.externals.joblib.parallel.BatchedCalls object>)\n 67 def __init__(self, iterator_slice):\n 68 self.items = list(iterator_slice)\n 69 self._size = len(self.items)\n 70 \n 71 def __call__(self):\n---> 72 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n self.items = [(<function _fit_and_score>, (Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), 0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, 0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, <function _passthrough_scorer>, array([ 6356, 6374, 6383, ..., 33597, 33598, 33599]), array([ 0, 1, 2, ..., 6878, 6886, 6891]), 1, {'classifier__dual': True, 'classifier__loss': 'squared_hinge'}, {}), {'error_score': 'raise', 'return_parameters': True})]\n 73 \n 74 def __len__(self):\n 75 return self._size\n 76 \n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py in <listcomp>(.0=<list_iterator object>)\n 67 def __init__(self, iterator_slice):\n 68 self.items = list(iterator_slice)\n 69 self._size = len(self.items)\n 70 \n 71 def __call__(self):\n---> 72 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n func = <function _fit_and_score>\n args = (Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), 0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, 0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, <function _passthrough_scorer>, array([ 6356, 6374, 6383, ..., 33597, 33598, 33599]), array([ 0, 1, 2, ..., 6878, 6886, 6891]), 1, {'classifier__dual': True, 'classifier__loss': 'squared_hinge'}, {})\n kwargs = {'error_score': 'raise', 'return_parameters': True}\n 73 \n 74 def __len__(self):\n 75 return self._size\n 76 \n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/cross_validation.py in _fit_and_score(estimator=Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), X=0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, y=0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, scorer=<function _passthrough_scorer>, train=array([ 6356, 6374, 6383, ..., 33597, 33598, 33599]), test=array([ 0, 1, 2, ..., 6878, 6886, 6891]), verbose=1, parameters={'classifier__dual': True, 'classifier__loss': 'squared_hinge'}, fit_params={}, return_train_score=False, return_parameters=True, error_score='raise')\n 1515 fit_params = fit_params if fit_params is not None else {}\n 1516 fit_params = dict([(k, _index_param_value(X, v, train))\n 1517 for k, v in fit_params.items()])\n 1518 \n 1519 if parameters is not None:\n-> 1520 estimator.set_params(**parameters)\n estimator.set_params = <bound method BaseEstimator.set_params of Pipeli..., shrinking=True,\n tol=0.001, verbose=False))])>\n parameters = {'classifier__dual': True, 'classifier__loss': 'squared_hinge'}\n 1521 \n 1522 start_time = time.time()\n 1523 \n 1524 X_train, y_train = _safe_split(estimator, X, y, train)\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/base.py in set_params(self=Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), **params={'classifier__dual': True, 'classifier__loss': 'squared_hinge'})\n 258 raise ValueError('Invalid parameter %s for estimator %s. '\n 259 'Check the list of available parameters '\n 260 'with `estimator.get_params().keys()`.' %\n 261 (name, self))\n 262 sub_object = valid_params[name]\n--> 263 sub_object.set_params(**{sub_name: value})\n sub_object.set_params = <bound method BaseEstimator.set_params of SVC(C=...one, shrinking=True,\n tol=0.001, verbose=False)>\n sub_name = 'dual'\n value = True\n 264 else:\n 265 # simple objects case\n 266 if key not in valid_params:\n 267 raise ValueError('Invalid parameter %s for estimator %s. '\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/base.py in set_params(self=SVC(C=1.5, cache_size=200, class_weight=None, co...None, shrinking=True,\n tol=0.001, verbose=False), **params={'dual': True})\n 265 # simple objects case\n 266 if key not in valid_params:\n 267 raise ValueError('Invalid parameter %s for estimator %s. '\n 268 'Check the list of available parameters '\n 269 'with `estimator.get_params().keys()`.' %\n--> 270 (key, self.__class__.__name__))\n key = 'dual'\n self.__class__.__name__ = 'SVC'\n 271 setattr(self, key, value)\n 272 return self\n 273 \n 274 def __repr__(self):\n\nValueError: Invalid parameter dual for estimator SVC. Check the list of available parameters with `estimator.get_params().keys()`.\n___________________________________________________________________________\n\"\"\"",
585 "\nThe above exception was the direct cause of the following exception:\n",
586 "\u001b[0;31mTransportableException\u001b[0m Traceback (most recent call last)",
587 "\u001b[0;32m/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py\u001b[0m in \u001b[0;36mretrieve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 726\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 727\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_output\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 728\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexceptions\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mexception\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
588 "\u001b[0;32m/Users/sayan/anaconda/lib/python3.5/multiprocessing/pool.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 607\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 608\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 609\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
589 "\u001b[0;31mTransportableException\u001b[0m: TransportableException\n___________________________________________________________________________\nValueError Tue Oct 25 20:57:20 2016\nPID: 12450 Python 3.5.2: /Users/sayan/anaconda/bin/python\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py in __call__(self=<sklearn.externals.joblib.parallel.BatchedCalls object>)\n 67 def __init__(self, iterator_slice):\n 68 self.items = list(iterator_slice)\n 69 self._size = len(self.items)\n 70 \n 71 def __call__(self):\n---> 72 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n self.items = [(<function _fit_and_score>, (Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), 0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, 0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, <function _passthrough_scorer>, array([ 6356, 6374, 6383, ..., 33597, 33598, 33599]), array([ 0, 1, 2, ..., 6878, 6886, 6891]), 1, {'classifier__dual': True, 'classifier__loss': 'squared_hinge'}, {}), {'error_score': 'raise', 'return_parameters': True})]\n 73 \n 74 def __len__(self):\n 75 return self._size\n 76 \n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py in <listcomp>(.0=<list_iterator object>)\n 67 def __init__(self, iterator_slice):\n 68 self.items = list(iterator_slice)\n 69 self._size = len(self.items)\n 70 \n 71 def __call__(self):\n---> 72 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n func = <function _fit_and_score>\n args = (Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), 0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, 0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, <function _passthrough_scorer>, array([ 6356, 6374, 6383, ..., 33597, 33598, 33599]), array([ 0, 1, 2, ..., 6878, 6886, 6891]), 1, {'classifier__dual': True, 'classifier__loss': 'squared_hinge'}, {})\n kwargs = {'error_score': 'raise', 'return_parameters': True}\n 73 \n 74 def __len__(self):\n 75 return self._size\n 76 \n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/cross_validation.py in _fit_and_score(estimator=Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), X=0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, y=0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, scorer=<function _passthrough_scorer>, train=array([ 6356, 6374, 6383, ..., 33597, 33598, 33599]), test=array([ 0, 1, 2, ..., 6878, 6886, 6891]), verbose=1, parameters={'classifier__dual': True, 'classifier__loss': 'squared_hinge'}, fit_params={}, return_train_score=False, return_parameters=True, error_score='raise')\n 1515 fit_params = fit_params if fit_params is not None else {}\n 1516 fit_params = dict([(k, _index_param_value(X, v, train))\n 1517 for k, v in fit_params.items()])\n 1518 \n 1519 if parameters is not None:\n-> 1520 estimator.set_params(**parameters)\n estimator.set_params = <bound method BaseEstimator.set_params of Pipeli..., shrinking=True,\n tol=0.001, verbose=False))])>\n parameters = {'classifier__dual': True, 'classifier__loss': 'squared_hinge'}\n 1521 \n 1522 start_time = time.time()\n 1523 \n 1524 X_train, y_train = _safe_split(estimator, X, y, train)\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/base.py in set_params(self=Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), **params={'classifier__dual': True, 'classifier__loss': 'squared_hinge'})\n 258 raise ValueError('Invalid parameter %s for estimator %s. '\n 259 'Check the list of available parameters '\n 260 'with `estimator.get_params().keys()`.' %\n 261 (name, self))\n 262 sub_object = valid_params[name]\n--> 263 sub_object.set_params(**{sub_name: value})\n sub_object.set_params = <bound method BaseEstimator.set_params of SVC(C=...one, shrinking=True,\n tol=0.001, verbose=False)>\n sub_name = 'dual'\n value = True\n 264 else:\n 265 # simple objects case\n 266 if key not in valid_params:\n 267 raise ValueError('Invalid parameter %s for estimator %s. '\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/base.py in set_params(self=SVC(C=1.5, cache_size=200, class_weight=None, co...None, shrinking=True,\n tol=0.001, verbose=False), **params={'dual': True})\n 265 # simple objects case\n 266 if key not in valid_params:\n 267 raise ValueError('Invalid parameter %s for estimator %s. '\n 268 'Check the list of available parameters '\n 269 'with `estimator.get_params().keys()`.' %\n--> 270 (key, self.__class__.__name__))\n key = 'dual'\n self.__class__.__name__ = 'SVC'\n 271 setattr(self, key, value)\n 272 return self\n 273 \n 274 def __repr__(self):\n\nValueError: Invalid parameter dual for estimator SVC. Check the list of available parameters with `estimator.get_params().keys()`.\n___________________________________________________________________________",
590 "\nDuring handling of the above exception, another exception occurred:\n",
591 "\u001b[0;31mJoblibValueError\u001b[0m Traceback (most recent call last)",
592 "\u001b[0;32m<ipython-input-103-1e06a237135d>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mgrid_search\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mGridSearchCV\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtraining_classifier\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn_jobs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcv\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 12\u001b[0;31m \u001b[0mgrid_search\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_train\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"Review Text\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mdf_train\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mCategory\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 13\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
593 "\u001b[0;32m/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/grid_search.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y)\u001b[0m\n\u001b[1;32m 802\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 803\u001b[0m \"\"\"\n\u001b[0;32m--> 804\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_fit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mParameterGrid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparam_grid\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 805\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 806\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
594 "\u001b[0;32m/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/grid_search.py\u001b[0m in \u001b[0;36m_fit\u001b[0;34m(self, X, y, parameter_iterable)\u001b[0m\n\u001b[1;32m 551\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mreturn_parameters\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 552\u001b[0m error_score=self.error_score)\n\u001b[0;32m--> 553\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mparameters\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mparameter_iterable\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 554\u001b[0m for train, test in cv)\n\u001b[1;32m 555\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
595 "\u001b[0;32m/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, iterable)\u001b[0m\n\u001b[1;32m 808\u001b[0m \u001b[0;31m# consumption.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 809\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_iterating\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 810\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretrieve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 811\u001b[0m \u001b[0;31m# Make sure that we get a last message telling us we are done\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 812\u001b[0m \u001b[0melapsed_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_start_time\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
596 "\u001b[0;32m/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py\u001b[0m in \u001b[0;36mretrieve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 755\u001b[0m \u001b[0;31m# a working pool as they expect.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 756\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_initialize_pool\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 757\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mexception\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 758\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 759\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
597 "\u001b[0;31mJoblibValueError\u001b[0m: JoblibValueError\n___________________________________________________________________________\nMultiprocessing exception:\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/runpy.py in _run_module_as_main(mod_name='ipykernel.__main__', alter_argv=1)\n 179 sys.exit(msg)\n 180 main_globals = sys.modules[\"__main__\"].__dict__\n 181 if alter_argv:\n 182 sys.argv[0] = mod_spec.origin\n 183 return _run_code(code, main_globals, None,\n--> 184 \"__main__\", mod_spec)\n mod_spec = ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py')\n 185 \n 186 def run_module(mod_name, init_globals=None,\n 187 run_name=None, alter_sys=False):\n 188 \"\"\"Execute a module's code without importing it\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/runpy.py in _run_code(code=<code object <module> at 0x102a0b4b0, file \"/Use...3.5/site-packages/ipykernel/__main__.py\", line 1>, run_globals={'__builtins__': <module 'builtins' (built-in)>, '__cached__': '/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/__pycache__/__main__.cpython-35.pyc', '__doc__': None, '__file__': '/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object>, '__name__': '__main__', '__package__': 'ipykernel', '__spec__': ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py'), 'app': <module 'ipykernel.kernelapp' from '/Users/sayan.../python3.5/site-packages/ipykernel/kernelapp.py'>}, init_globals=None, mod_name='__main__', mod_spec=ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py'), pkg_name='ipykernel', script_name=None)\n 80 __cached__ = cached,\n 81 __doc__ = None,\n 82 __loader__ = loader,\n 83 __package__ = pkg_name,\n 84 __spec__ = mod_spec)\n---> 85 exec(code, run_globals)\n code = <code object <module> at 0x102a0b4b0, file \"/Use...3.5/site-packages/ipykernel/__main__.py\", line 1>\n run_globals = {'__builtins__': <module 'builtins' (built-in)>, '__cached__': '/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/__pycache__/__main__.cpython-35.pyc', '__doc__': None, '__file__': '/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object>, '__name__': '__main__', '__package__': 'ipykernel', '__spec__': ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py'), 'app': <module 'ipykernel.kernelapp' from '/Users/sayan.../python3.5/site-packages/ipykernel/kernelapp.py'>}\n 86 return run_globals\n 87 \n 88 def _run_module_code(code, init_globals=None,\n 89 mod_name=None, mod_spec=None,\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py in <module>()\n 1 \n 2 \n----> 3 \n 4 if __name__ == '__main__':\n 5 from ipykernel import kernelapp as app\n 6 app.launch_new_instance()\n 7 \n 8 \n 9 \n 10 \n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/traitlets/config/application.py in launch_instance(cls=<class 'ipykernel.kernelapp.IPKernelApp'>, argv=None, **kwargs={})\n 591 \n 592 If a global instance already exists, this reinitializes and starts it\n 593 \"\"\"\n 594 app = cls.instance(**kwargs)\n 595 app.initialize(argv)\n--> 596 app.start()\n app.start = <bound method IPKernelApp.start of <ipykernel.kernelapp.IPKernelApp object>>\n 597 \n 598 #-----------------------------------------------------------------------------\n 599 # utility functions, for convenience\n 600 #-----------------------------------------------------------------------------\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/kernelapp.py in start(self=<ipykernel.kernelapp.IPKernelApp object>)\n 437 \n 438 if self.poller is not None:\n 439 self.poller.start()\n 440 self.kernel.start()\n 441 try:\n--> 442 ioloop.IOLoop.instance().start()\n 443 except KeyboardInterrupt:\n 444 pass\n 445 \n 446 launch_new_instance = IPKernelApp.launch_instance\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/zmq/eventloop/ioloop.py in start(self=<zmq.eventloop.ioloop.ZMQIOLoop object>)\n 157 PollIOLoop.configure(ZMQIOLoop)\n 158 return PollIOLoop.current(*args, **kwargs)\n 159 \n 160 def start(self):\n 161 try:\n--> 162 super(ZMQIOLoop, self).start()\n self.start = <bound method ZMQIOLoop.start of <zmq.eventloop.ioloop.ZMQIOLoop object>>\n 163 except ZMQError as e:\n 164 if e.errno == ETERM:\n 165 # quietly return on ETERM\n 166 pass\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/tornado/ioloop.py in start(self=<zmq.eventloop.ioloop.ZMQIOLoop object>)\n 878 self._events.update(event_pairs)\n 879 while self._events:\n 880 fd, events = self._events.popitem()\n 881 try:\n 882 fd_obj, handler_func = self._handlers[fd]\n--> 883 handler_func(fd_obj, events)\n handler_func = <function wrap.<locals>.null_wrapper>\n fd_obj = <zmq.sugar.socket.Socket object>\n events = 1\n 884 except (OSError, IOError) as e:\n 885 if errno_from_exception(e) == errno.EPIPE:\n 886 # Happens when the client closes the connection\n 887 pass\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/tornado/stack_context.py in null_wrapper(*args=(<zmq.sugar.socket.Socket object>, 1), **kwargs={})\n 270 # Fast path when there are no active contexts.\n 271 def null_wrapper(*args, **kwargs):\n 272 try:\n 273 current_state = _state.contexts\n 274 _state.contexts = cap_contexts[0]\n--> 275 return fn(*args, **kwargs)\n args = (<zmq.sugar.socket.Socket object>, 1)\n kwargs = {}\n 276 finally:\n 277 _state.contexts = current_state\n 278 null_wrapper._wrapped = True\n 279 return null_wrapper\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py in _handle_events(self=<zmq.eventloop.zmqstream.ZMQStream object>, fd=<zmq.sugar.socket.Socket object>, events=1)\n 435 # dispatch events:\n 436 if events & IOLoop.ERROR:\n 437 gen_log.error(\"got POLLERR event on ZMQStream, which doesn't make sense\")\n 438 return\n 439 if events & IOLoop.READ:\n--> 440 self._handle_recv()\n self._handle_recv = <bound method ZMQStream._handle_recv of <zmq.eventloop.zmqstream.ZMQStream object>>\n 441 if not self.socket:\n 442 return\n 443 if events & IOLoop.WRITE:\n 444 self._handle_send()\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py in _handle_recv(self=<zmq.eventloop.zmqstream.ZMQStream object>)\n 467 gen_log.error(\"RECV Error: %s\"%zmq.strerror(e.errno))\n 468 else:\n 469 if self._recv_callback:\n 470 callback = self._recv_callback\n 471 # self._recv_callback = None\n--> 472 self._run_callback(callback, msg)\n self._run_callback = <bound method ZMQStream._run_callback of <zmq.eventloop.zmqstream.ZMQStream object>>\n callback = <function wrap.<locals>.null_wrapper>\n msg = [<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>]\n 473 \n 474 # self.update_state()\n 475 \n 476 \n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py in _run_callback(self=<zmq.eventloop.zmqstream.ZMQStream object>, callback=<function wrap.<locals>.null_wrapper>, *args=([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],), **kwargs={})\n 409 close our socket.\"\"\"\n 410 try:\n 411 # Use a NullContext to ensure that all StackContexts are run\n 412 # inside our blanket exception handler rather than outside.\n 413 with stack_context.NullContext():\n--> 414 callback(*args, **kwargs)\n callback = <function wrap.<locals>.null_wrapper>\n args = ([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],)\n kwargs = {}\n 415 except:\n 416 gen_log.error(\"Uncaught exception, closing connection.\",\n 417 exc_info=True)\n 418 # Close the socket on an uncaught exception from a user callback\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/tornado/stack_context.py in null_wrapper(*args=([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],), **kwargs={})\n 270 # Fast path when there are no active contexts.\n 271 def null_wrapper(*args, **kwargs):\n 272 try:\n 273 current_state = _state.contexts\n 274 _state.contexts = cap_contexts[0]\n--> 275 return fn(*args, **kwargs)\n args = ([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],)\n kwargs = {}\n 276 finally:\n 277 _state.contexts = current_state\n 278 null_wrapper._wrapped = True\n 279 return null_wrapper\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/kernelbase.py in dispatcher(msg=[<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>])\n 271 if self.control_stream:\n 272 self.control_stream.on_recv(self.dispatch_control, copy=False)\n 273 \n 274 def make_dispatcher(stream):\n 275 def dispatcher(msg):\n--> 276 return self.dispatch_shell(stream, msg)\n msg = [<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>]\n 277 return dispatcher\n 278 \n 279 for s in self.shell_streams:\n 280 s.on_recv(make_dispatcher(s), copy=False)\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/kernelbase.py in dispatch_shell(self=<ipykernel.ipkernel.IPythonKernel object>, stream=<zmq.eventloop.zmqstream.ZMQStream object>, msg={'buffers': [], 'content': {'allow_stdin': True, 'code': \"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", 'silent': False, 'stop_on_error': True, 'store_history': True, 'user_expressions': {}}, 'header': {'date': '2016-10-25T20:57:17.365547', 'msg_id': '66CC51C2B1354687B1BE0A315940249A', 'msg_type': 'execute_request', 'session': 'B5B6D29754D84F7A8C686E46A05BEDAC', 'username': 'username', 'version': '5.0'}, 'metadata': {}, 'msg_id': '66CC51C2B1354687B1BE0A315940249A', 'msg_type': 'execute_request', 'parent_header': {}})\n 223 self.log.error(\"UNKNOWN MESSAGE TYPE: %r\", msg_type)\n 224 else:\n 225 self.log.debug(\"%s: %s\", msg_type, msg)\n 226 self.pre_handler_hook()\n 227 try:\n--> 228 handler(stream, idents, msg)\n handler = <bound method Kernel.execute_request of <ipykernel.ipkernel.IPythonKernel object>>\n stream = <zmq.eventloop.zmqstream.ZMQStream object>\n idents = [b'B5B6D29754D84F7A8C686E46A05BEDAC']\n msg = {'buffers': [], 'content': {'allow_stdin': True, 'code': \"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", 'silent': False, 'stop_on_error': True, 'store_history': True, 'user_expressions': {}}, 'header': {'date': '2016-10-25T20:57:17.365547', 'msg_id': '66CC51C2B1354687B1BE0A315940249A', 'msg_type': 'execute_request', 'session': 'B5B6D29754D84F7A8C686E46A05BEDAC', 'username': 'username', 'version': '5.0'}, 'metadata': {}, 'msg_id': '66CC51C2B1354687B1BE0A315940249A', 'msg_type': 'execute_request', 'parent_header': {}}\n 229 except Exception:\n 230 self.log.error(\"Exception in message handler:\", exc_info=True)\n 231 finally:\n 232 self.post_handler_hook()\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/kernelbase.py in execute_request(self=<ipykernel.ipkernel.IPythonKernel object>, stream=<zmq.eventloop.zmqstream.ZMQStream object>, ident=[b'B5B6D29754D84F7A8C686E46A05BEDAC'], parent={'buffers': [], 'content': {'allow_stdin': True, 'code': \"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", 'silent': False, 'stop_on_error': True, 'store_history': True, 'user_expressions': {}}, 'header': {'date': '2016-10-25T20:57:17.365547', 'msg_id': '66CC51C2B1354687B1BE0A315940249A', 'msg_type': 'execute_request', 'session': 'B5B6D29754D84F7A8C686E46A05BEDAC', 'username': 'username', 'version': '5.0'}, 'metadata': {}, 'msg_id': '66CC51C2B1354687B1BE0A315940249A', 'msg_type': 'execute_request', 'parent_header': {}})\n 386 if not silent:\n 387 self.execution_count += 1\n 388 self._publish_execute_input(code, parent, self.execution_count)\n 389 \n 390 reply_content = self.do_execute(code, silent, store_history,\n--> 391 user_expressions, allow_stdin)\n user_expressions = {}\n allow_stdin = True\n 392 \n 393 # Flush output before sending the reply.\n 394 sys.stdout.flush()\n 395 sys.stderr.flush()\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/ipykernel/ipkernel.py in do_execute(self=<ipykernel.ipkernel.IPythonKernel object>, code=\"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", silent=False, store_history=True, user_expressions={}, allow_stdin=True)\n 194 \n 195 reply_content = {}\n 196 # FIXME: the shell calls the exception handler itself.\n 197 shell._reply_content = None\n 198 try:\n--> 199 shell.run_cell(code, store_history=store_history, silent=silent)\n shell.run_cell = <bound method InteractiveShell.run_cell of <ipykernel.zmqshell.ZMQInteractiveShell object>>\n code = \"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\"\n store_history = True\n silent = False\n 200 except:\n 201 status = u'error'\n 202 # FIXME: this code right now isn't being used yet by default,\n 203 # because the run_cell() call above directly fires off exception\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/IPython/core/interactiveshell.py in run_cell(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, raw_cell=\"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", store_history=True, silent=False, shell_futures=True)\n 2718 self.displayhook.exec_result = result\n 2719 \n 2720 # Execute the user code\n 2721 interactivity = \"none\" if silent else self.ast_node_interactivity\n 2722 self.run_ast_nodes(code_ast.body, cell_name,\n-> 2723 interactivity=interactivity, compiler=compiler, result=result)\n interactivity = 'last_expr'\n compiler = <IPython.core.compilerop.CachingCompiler object>\n 2724 \n 2725 # Reset this so later displayed values do not modify the\n 2726 # ExecutionResult\n 2727 self.displayhook.exec_result = None\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/IPython/core/interactiveshell.py in run_ast_nodes(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, nodelist=[<_ast.Assign object>, <_ast.Assign object>, <_ast.Assign object>, <_ast.Expr object>, <_ast.Expr object>, <_ast.Expr object>, <_ast.Expr object>, <_ast.Expr object>, <_ast.Expr object>, <_ast.Expr object>, <_ast.Assign object>, <_ast.For object>], cell_name='<ipython-input-103-1e06a237135d>', interactivity='none', compiler=<IPython.core.compilerop.CachingCompiler object>, result=<IPython.core.interactiveshell.ExecutionResult object>)\n 2820 \n 2821 try:\n 2822 for i, node in enumerate(to_run_exec):\n 2823 mod = ast.Module([node])\n 2824 code = compiler(mod, cell_name, \"exec\")\n-> 2825 if self.run_code(code, result):\n self.run_code = <bound method InteractiveShell.run_code of <ipykernel.zmqshell.ZMQInteractiveShell object>>\n code = <code object <module> at 0x126cad540, file \"<ipython-input-103-1e06a237135d>\", line 12>\n result = <IPython.core.interactiveshell.ExecutionResult object>\n 2826 return True\n 2827 \n 2828 for i, node in enumerate(to_run_interactive):\n 2829 mod = ast.Interactive([node])\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/IPython/core/interactiveshell.py in run_code(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, code_obj=<code object <module> at 0x126cad540, file \"<ipython-input-103-1e06a237135d>\", line 12>, result=<IPython.core.interactiveshell.ExecutionResult object>)\n 2880 outflag = 1 # happens in more places, so it's easier as default\n 2881 try:\n 2882 try:\n 2883 self.hooks.pre_run_code_hook()\n 2884 #rprint('Running code', repr(code_obj)) # dbg\n-> 2885 exec(code_obj, self.user_global_ns, self.user_ns)\n code_obj = <code object <module> at 0x126cad540, file \"<ipython-input-103-1e06a237135d>\", line 12>\n self.user_global_ns = {'BernoulliNB': <class 'sklearn.naive_bayes.BernoulliNB'>, 'Counter': <class 'collections.Counter'>, 'GridSearchCV': <class 'sklearn.grid_search.GridSearchCV'>, 'HashingVectorizer': <class 'sklearn.feature_extraction.text.HashingVectorizer'>, 'In': ['', 'import pandas as pd\\nimport numpy as np\\nimport ma...Fold\\nfrom sklearn.grid_search import GridSearchCV', 'df = pd.read_csv(\"yelp_data_official_training.csv\", sep = \"|\", low_memory=False)\\ndf.head()', \"df.groupby(['Category']).agg(['count'])\", 'filtered_data = df[\"Review Text\"].notnull()\\ndf_narrative = df[filtered_data]', 'sorted_category_counts = df_narrative.Category.v...(kind=\\'barh\\', figsize=(8,6), title=\"Categories\");', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'import re, string\\nfrom collections import Counte... (e3 for e2 in edits2(word) for e2 in edits1(e2))', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', \"random_index = np.random.permutation(df_narrativ...ative_shuffled['Review Text'].map(get_word_stems)\", 'rows, columns = df_narrative_shuffled.shape\\ntrai...n_size = rows\\nprint(df_narrative_shuffled.loc[0])', \"df_train = df_narrative_shuffled.loc[:train_size...xt'] = df_test['Review Text'].map(get_word_stems)\", \"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', \"random_index = np.random.permutation(df_narrativ..._narrative_shuffled['Review Text'].map(get_nouns)\", ...], 'KFold': <class 'sklearn.cross_validation.KFold'>, 'KNeighborsClassifier': <class 'sklearn.neighbors.classification.KNeighborsClassifier'>, 'LinearSVC': <class 'sklearn.svm.classes.LinearSVC'>, 'MultinomialNB': <class 'sklearn.naive_bayes.MultinomialNB'>, 'NearestCentroid': <class 'sklearn.neighbors.nearest_centroid.NearestCentroid'>, ...}\n self.user_ns = {'BernoulliNB': <class 'sklearn.naive_bayes.BernoulliNB'>, 'Counter': <class 'collections.Counter'>, 'GridSearchCV': <class 'sklearn.grid_search.GridSearchCV'>, 'HashingVectorizer': <class 'sklearn.feature_extraction.text.HashingVectorizer'>, 'In': ['', 'import pandas as pd\\nimport numpy as np\\nimport ma...Fold\\nfrom sklearn.grid_search import GridSearchCV', 'df = pd.read_csv(\"yelp_data_official_training.csv\", sep = \"|\", low_memory=False)\\ndf.head()', \"df.groupby(['Category']).agg(['count'])\", 'filtered_data = df[\"Review Text\"].notnull()\\ndf_narrative = df[filtered_data]', 'sorted_category_counts = df_narrative.Category.v...(kind=\\'barh\\', figsize=(8,6), title=\"Categories\");', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'import re, string\\nfrom collections import Counte... (e3 for e2 in edits2(word) for e2 in edits1(e2))', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', \"random_index = np.random.permutation(df_narrativ...ative_shuffled['Review Text'].map(get_word_stems)\", 'rows, columns = df_narrative_shuffled.shape\\ntrai...n_size = rows\\nprint(df_narrative_shuffled.loc[0])', \"df_train = df_narrative_shuffled.loc[:train_size...xt'] = df_test['Review Text'].map(get_word_stems)\", \"training_classifier = Pipeline([('tfidfvect', Tf...ev.Category, trial_predictions)\\n# print(accuracy)\", 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', 'from nltk.stem import WordNetLemmatizer\\n\\ndef che...ipython().magic(\\'timeit check_spelling(\"Hello\")\\')', \"random_index = np.random.permutation(df_narrativ..._narrative_shuffled['Review Text'].map(get_nouns)\", ...], 'KFold': <class 'sklearn.cross_validation.KFold'>, 'KNeighborsClassifier': <class 'sklearn.neighbors.classification.KNeighborsClassifier'>, 'LinearSVC': <class 'sklearn.svm.classes.LinearSVC'>, 'MultinomialNB': <class 'sklearn.naive_bayes.MultinomialNB'>, 'NearestCentroid': <class 'sklearn.neighbors.nearest_centroid.NearestCentroid'>, ...}\n 2886 finally:\n 2887 # Reset our crash handler in place\n 2888 sys.excepthook = old_excepthook\n 2889 except SystemExit as e:\n\n...........................................................................\n/Users/sayan/GoogleDrive/Masters/Classes/INFO 256 - NLP/Kaggle - Yelp Review Classification/<ipython-input-103-1e06a237135d> in <module>()\n 7 'classifier__dual': (True, False),\n 8 'classifier__loss': ('squared_hinge', 'hinge')\n 9 }\n 10 \n 11 grid_search = GridSearchCV(training_classifier, params, n_jobs=-1, verbose=1, cv=5)\n---> 12 grid_search.fit(df_train[\"Review Text\"],df_train.Category)\n 13 \n 14 \n 15 print(\"Performing grid search...\")\n 16 # print(\"pipeline:\", [name for name, _ in pipeline.steps])\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/grid_search.py in fit(self=GridSearchCV(cv=5, error_score='raise',\n e...='2*n_jobs', refit=True, scoring=None, verbose=1), X=0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, y=0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64)\n 799 y : array-like, shape = [n_samples] or [n_samples, n_output], optional\n 800 Target relative to X for classification or regression;\n 801 None for unsupervised learning.\n 802 \n 803 \"\"\"\n--> 804 return self._fit(X, y, ParameterGrid(self.param_grid))\n self._fit = <bound method BaseSearchCV._fit of GridSearchCV(...'2*n_jobs', refit=True, scoring=None, verbose=1)>\n X = 0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object\n y = 0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64\n self.param_grid = {'classifier__dual': (True, False), 'classifier__loss': ('squared_hinge', 'hinge')}\n 805 \n 806 \n 807 class RandomizedSearchCV(BaseSearchCV):\n 808 \"\"\"Randomized search on hyper parameters.\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/grid_search.py in _fit(self=GridSearchCV(cv=5, error_score='raise',\n e...='2*n_jobs', refit=True, scoring=None, verbose=1), X=0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, y=0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, parameter_iterable=<sklearn.grid_search.ParameterGrid object>)\n 548 )(\n 549 delayed(_fit_and_score)(clone(base_estimator), X, y, self.scorer_,\n 550 train, test, self.verbose, parameters,\n 551 self.fit_params, return_parameters=True,\n 552 error_score=self.error_score)\n--> 553 for parameters in parameter_iterable\n parameters = undefined\n parameter_iterable = <sklearn.grid_search.ParameterGrid object>\n 554 for train, test in cv)\n 555 \n 556 # Out is a list of triplet: score, estimator, n_test_samples\n 557 n_fits = len(out)\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py in __call__(self=Parallel(n_jobs=-1), iterable=<generator object BaseSearchCV._fit.<locals>.<genexpr>>)\n 805 if pre_dispatch == \"all\" or n_jobs == 1:\n 806 # The iterable was consumed all at once by the above for loop.\n 807 # No need to wait for async callbacks to trigger to\n 808 # consumption.\n 809 self._iterating = False\n--> 810 self.retrieve()\n self.retrieve = <bound method Parallel.retrieve of Parallel(n_jobs=-1)>\n 811 # Make sure that we get a last message telling us we are done\n 812 elapsed_time = time.time() - self._start_time\n 813 self._print('Done %3i out of %3i | elapsed: %s finished',\n 814 (len(self._output), len(self._output),\n\n---------------------------------------------------------------------------\nSub-process traceback:\n---------------------------------------------------------------------------\nValueError Tue Oct 25 20:57:20 2016\nPID: 12450 Python 3.5.2: /Users/sayan/anaconda/bin/python\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py in __call__(self=<sklearn.externals.joblib.parallel.BatchedCalls object>)\n 67 def __init__(self, iterator_slice):\n 68 self.items = list(iterator_slice)\n 69 self._size = len(self.items)\n 70 \n 71 def __call__(self):\n---> 72 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n self.items = [(<function _fit_and_score>, (Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), 0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, 0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, <function _passthrough_scorer>, array([ 6356, 6374, 6383, ..., 33597, 33598, 33599]), array([ 0, 1, 2, ..., 6878, 6886, 6891]), 1, {'classifier__dual': True, 'classifier__loss': 'squared_hinge'}, {}), {'error_score': 'raise', 'return_parameters': True})]\n 73 \n 74 def __len__(self):\n 75 return self._size\n 76 \n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/externals/joblib/parallel.py in <listcomp>(.0=<list_iterator object>)\n 67 def __init__(self, iterator_slice):\n 68 self.items = list(iterator_slice)\n 69 self._size = len(self.items)\n 70 \n 71 def __call__(self):\n---> 72 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n func = <function _fit_and_score>\n args = (Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), 0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, 0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, <function _passthrough_scorer>, array([ 6356, 6374, 6383, ..., 33597, 33598, 33599]), array([ 0, 1, 2, ..., 6878, 6886, 6891]), 1, {'classifier__dual': True, 'classifier__loss': 'squared_hinge'}, {})\n kwargs = {'error_score': 'raise', 'return_parameters': True}\n 73 \n 74 def __len__(self):\n 75 return self._size\n 76 \n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/cross_validation.py in _fit_and_score(estimator=Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), X=0 On April 2 , 2016 , i wa involv in a 3 ...l ' peopl tha...\nName: Review Text, dtype: object, y=0 3\n1 4\n2 1\n3 5\n4 ...3598 3\n33599 4\nName: Category, dtype: int64, scorer=<function _passthrough_scorer>, train=array([ 6356, 6374, 6383, ..., 33597, 33598, 33599]), test=array([ 0, 1, 2, ..., 6878, 6886, 6891]), verbose=1, parameters={'classifier__dual': True, 'classifier__loss': 'squared_hinge'}, fit_params={}, return_train_score=False, return_parameters=True, error_score='raise')\n 1515 fit_params = fit_params if fit_params is not None else {}\n 1516 fit_params = dict([(k, _index_param_value(X, v, train))\n 1517 for k, v in fit_params.items()])\n 1518 \n 1519 if parameters is not None:\n-> 1520 estimator.set_params(**parameters)\n estimator.set_params = <bound method BaseEstimator.set_params of Pipeli..., shrinking=True,\n tol=0.001, verbose=False))])>\n parameters = {'classifier__dual': True, 'classifier__loss': 'squared_hinge'}\n 1521 \n 1522 start_time = time.time()\n 1523 \n 1524 X_train, y_train = _safe_split(estimator, X, y, train)\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/base.py in set_params(self=Pipeline(steps=[('tfidfvect', TfidfVectorizer(an...e, shrinking=True,\n tol=0.001, verbose=False))]), **params={'classifier__dual': True, 'classifier__loss': 'squared_hinge'})\n 258 raise ValueError('Invalid parameter %s for estimator %s. '\n 259 'Check the list of available parameters '\n 260 'with `estimator.get_params().keys()`.' %\n 261 (name, self))\n 262 sub_object = valid_params[name]\n--> 263 sub_object.set_params(**{sub_name: value})\n sub_object.set_params = <bound method BaseEstimator.set_params of SVC(C=...one, shrinking=True,\n tol=0.001, verbose=False)>\n sub_name = 'dual'\n value = True\n 264 else:\n 265 # simple objects case\n 266 if key not in valid_params:\n 267 raise ValueError('Invalid parameter %s for estimator %s. '\n\n...........................................................................\n/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/base.py in set_params(self=SVC(C=1.5, cache_size=200, class_weight=None, co...None, shrinking=True,\n tol=0.001, verbose=False), **params={'dual': True})\n 265 # simple objects case\n 266 if key not in valid_params:\n 267 raise ValueError('Invalid parameter %s for estimator %s. '\n 268 'Check the list of available parameters '\n 269 'with `estimator.get_params().keys()`.' %\n--> 270 (key, self.__class__.__name__))\n key = 'dual'\n self.__class__.__name__ = 'SVC'\n 271 setattr(self, key, value)\n 272 return self\n 273 \n 274 def __repr__(self):\n\nValueError: Invalid parameter dual for estimator SVC. Check the list of available parameters with `estimator.get_params().keys()`.\n___________________________________________________________________________"
598 ]
599 }
600 ],
601 "source": [
602 "##Grid search for parameter tuning\n",
603 "\n",
604 "\n",
605 "training_classifier = Pipeline([('tfidfvect', TfidfVectorizer(token_pattern=r'\\b\\w+\\b', min_df=5, max_features=30000, stop_words = 'english', sublinear_tf=True) ),\n",
606 " ('feat',SelectKBest(score_func=chi2, k=5000)),\n",
607 " ('classifier',LinearSVC(C = 1.5, loss='hinge'))\n",
608 " ])\n",
609 "\n",
610 "params = {\n",
611 " 'classifier__dual': (True, False),\n",
612 " 'classifier__loss': ('squared_hinge', 'hinge')\n",
613 " }\n",
614 "\n",
615 "grid_search = GridSearchCV(training_classifier, params, n_jobs=-1, verbose=1, cv=5)\n",
616 "grid_search.fit(df_train[\"Review Text\"],df_train.Category)\n",
617 "\n",
618 "\n",
619 "print(\"Performing grid search...\")\n",
620 "# print(\"pipeline:\", [name for name, _ in pipeline.steps])\n",
621 "print(\"parameters:\")\n",
622 "print(params)\n",
623 "# t0 = time()\n",
624 "# grid_search.fit(data.data, data.target)\n",
625 "# print(\"done in %0.3fs\" % (time() - t0))\n",
626 "print()\n",
627 "\n",
628 "print(\"Best score: %0.3f\" % grid_search.best_score_)\n",
629 "print(\"Best parameters set:\")\n",
630 "best_parameters = grid_search.best_estimator_.get_params()\n",
631 "for param_name in sorted(params.keys()):\n",
632 " print(\"\\t%s: %r\" % (param_name, best_parameters[param_name]))\n",
633 "\n",
634 "# training_classifier = training_classifier.fit(df_train[\"Review Text\"],df_train.Category)\n",
635 " \n",
636 "# trial_predictions = training_classifier.predict(df_dev[\"Review Text\"])\n",
637 "# accuracy = accuracy_score(df_dev.Category, trial_predictions)\n",
638 "# print(accuracy)"
639 ]
640 },
641 {
642 "cell_type": "code",
643 "execution_count": null,
644 "metadata": {
645 "collapsed": true
646 },
647 "outputs": [],
648 "source": []
649 },
650 {
651 "cell_type": "code",
652 "execution_count": 109,
653 "metadata": {
654 "collapsed": false
655 },
656 "outputs": [
657 {
658 "name": "stdout",
659 "output_type": "stream",
660 "text": [
661 "0.9003125\n",
662 "0.899270833333\n"
663 ]
664 },
665 {
666 "ename": "KeyboardInterrupt",
667 "evalue": "",
668 "output_type": "error",
669 "traceback": [
670 "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
671 "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
672 "\u001b[0;32m<ipython-input-109-059235089984>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'classifier'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0meclf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m ])\n\u001b[0;32m---> 16\u001b[0;31m \u001b[0mtraining_classifier\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtraining_classifier\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_train\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"Review Text\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mdf_train\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mCategory\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 17\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0mtrial_predictions\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtraining_classifier\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_dev\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"Review Text\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
673 "\u001b[0;32m/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/pipeline.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y, **fit_params)\u001b[0m\n\u001b[1;32m 163\u001b[0m \"\"\"\n\u001b[1;32m 164\u001b[0m \u001b[0mXt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfit_params\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_pre_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 165\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msteps\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mfit_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 166\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 167\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
674 "\u001b[0;32m/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/ensemble/voting_classifier.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y)\u001b[0m\n\u001b[1;32m 124\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 125\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mclf\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mestimators\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 126\u001b[0;31m \u001b[0mfitted_clf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclone\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mclf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mle_\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 127\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mestimators_\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfitted_clf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 128\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
675 "\u001b[0;32m/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/svm/base.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, X, y, sample_weight)\u001b[0m\n\u001b[1;32m 191\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 192\u001b[0m \u001b[0mseed\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrnd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miinfo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'i'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 193\u001b[0;31m \u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msample_weight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msolver_type\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkernel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrandom_seed\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mseed\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 194\u001b[0m \u001b[0;31m# see comment on the other call to np.iinfo in this file\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 195\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
676 "\u001b[0;32m/Users/sayan/anaconda/lib/python3.5/site-packages/sklearn/svm/base.py\u001b[0m in \u001b[0;36m_sparse_fit\u001b[0;34m(self, X, y, sample_weight, solver_type, kernel, random_seed)\u001b[0m\n\u001b[1;32m 271\u001b[0m \u001b[0msample_weight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnu\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcache_size\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mepsilon\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 272\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshrinking\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprobability\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax_iter\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 273\u001b[0;31m random_seed)\n\u001b[0m\u001b[1;32m 274\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 275\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_warn_from_fit_status\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
677 "\u001b[0;32msklearn/svm/libsvm_sparse.pyx\u001b[0m in \u001b[0;36msklearn.svm.libsvm_sparse.libsvm_sparse_train (sklearn/svm/libsvm_sparse.c:2392)\u001b[0;34m()\u001b[0m\n",
678 "\u001b[0;32m/Users/sayan/anaconda/lib/python3.5/site-packages/scipy/sparse/compressed.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, arg1, shape, dtype, copy)\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;34m\"\"\"base matrix class for compressed row and column oriented matrices\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0;32mdef\u001b[0m \u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marg1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mshape\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 25\u001b[0m \u001b[0m_data_matrix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 26\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
679 "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
680 ]
681 }
682 ],
683 "source": [
684 "## Cross validation for checking other classifiers. This is an ensemble classifier being tested. NOT the final algorithm\n",
685 "\n",
686 "from sklearn.ensemble import VotingClassifier\n",
687 "\n",
688 "kf = KFold(rows, 5, shuffle=True)\n",
689 "avg_accuracy = 0\n",
690 "for train_indices, test_indices in kf:\n",
691 " df_train = df_narrative_shuffled.loc[train_indices] \n",
692 " df_dev = df_narrative_shuffled.loc[test_indices] \n",
693 " clf1 = SVC(kernel='linear', probability=True)\n",
694 " clf2 = MultinomialNB()\n",
695 " eclf = VotingClassifier(estimators=[('svc', clf1), ('mnb', clf2)], voting='soft', weights=[2,1])\n",
696 "\n",
697 " training_classifier = Pipeline([('tfidfvect', TfidfVectorizer(ngram_range=(1, 1), token_pattern=r'\\b\\w+\\b', min_df=5, max_features=30000, stop_words = 'english', sublinear_tf=True) ),\n",
698 " ('feat',SelectKBest(chi2, 5000)),\n",
699 " ('classifier', eclf)\n",
700 " ])\n",
701 " training_classifier = training_classifier.fit(df_train[\"Review Text\"],df_train.Category)\n",
702 " \n",
703 " trial_predictions = training_classifier.predict(df_dev[\"Review Text\"])\n",
704 " accuracy = accuracy_score(df_dev.Category, trial_predictions)\n",
705 " print(accuracy)\n",
706 " avg_accuracy += accuracy_score(df_dev.Category, trial_predictions)\n",
707 " \n",
708 "print(avg_accuracy/10)\n",
709 "\n",
710 "\n"
711 ]
712 },
713 {
714 "cell_type": "markdown",
715 "metadata": {},
716 "source": [
717 "Log for methods:\n",
718 "\n",
719 "PreProcessing | Feature Selection | Num Features | Model Selction | CV1 | CV2 | CV3 \n",
720 "--- | --- | --- | --- | --- | --- \n",
721 "Lemmatize | sublinear=True | 18000| LSVC | 0.911748159339 | 0.911602347711 |\n",
722 "None | sublinear=True | 18000| LSVC | 0.91158152306 | 0.910560594221 |\n",
723 "Lemmatize | sublinear=False| 18000| LSVC | 0.910873207092 | 0.911102256547 |\n",
724 "Lemmatize | sublinear=True | 18000| LSVC loss='hinge' | 0.913185650656| 0.914206575155 |\n",
725 "None | sublinear=True | 18000| LSVC loss='hinge' | 0.914060759186| 0.913352256547 | 0.9136649519\n",
726 "Stemming | sublinear=True | 5000 Chi2 from 30K | LSVC loss='hinge' | 0.912727247864| 0.913435646315 |\n",
727 "\n"
728 ]
729 },
730 {
731 "cell_type": "code",
732 "execution_count": 19,
733 "metadata": {
734 "collapsed": true
735 },
736 "outputs": [],
737 "source": [
738 "df_dev.to_csv(\"dev_data.csv\")\n",
739 "\n",
740 "prediction_df = pd.DataFrame(data=trial_predictions, columns=[\"Category\"])\n",
741 "prediction_df[\"Id\"] = prediction_df.index\n",
742 "cols = [\"Id\",\"Category\"]\n",
743 "\n",
744 "prediction_df[cols].to_csv(\"trial_results.csv\", index=False)"
745 ]
746 },
747 {
748 "cell_type": "code",
749 "execution_count": 20,
750 "metadata": {
751 "collapsed": false
752 },
753 "outputs": [],
754 "source": [
755 "class_labels = np.sort(df_dev.Category.unique())\n",
756 "class_labels = [str(x) for x in class_labels]"
757 ]
758 },
759 {
760 "cell_type": "code",
761 "execution_count": 51,
762 "metadata": {
763 "collapsed": false
764 },
765 "outputs": [
766 {
767 "name": "stdout",
768 "output_type": "stream",
769 "text": [
770 " precision recall f1-score support\n",
771 "\n",
772 " 1 0.94 0.94 0.94 4611\n",
773 " 2 0.87 0.89 0.88 2377\n",
774 " 3 0.92 0.94 0.93 3378\n",
775 " 4 0.85 0.85 0.85 2303\n",
776 " 5 0.93 0.90 0.92 1107\n",
777 " 6 0.91 0.79 0.85 624\n",
778 "\n",
779 "avg / total 0.91 0.91 0.91 14400\n",
780 "\n",
781 "\n",
782 "\n",
783 "***Confusion Matrix***\n",
784 "\n",
785 "\n",
786 "[[4319 61 121 99 3 8]\n",
787 " [ 56 2106 36 167 4 8]\n",
788 " [ 96 39 3181 53 7 2]\n",
789 " [ 77 199 61 1959 2 5]\n",
790 " [ 5 6 64 7 1001 24]\n",
791 " [ 28 13 8 23 58 494]]\n"
792 ]
793 }
794 ],
795 "source": [
796 "print(classification_report(df_dev.Category, trial_predictions, target_names=class_labels))\n",
797 "print(\"\\n\\n***Confusion Matrix***\\n\\n\")\n",
798 "print(confusion_matrix(df_dev.Category, trial_predictions))"
799 ]
800 },
801 {
802 "cell_type": "code",
803 "execution_count": 52,
804 "metadata": {
805 "collapsed": true
806 },
807 "outputs": [],
808 "source": [
809 "def plot_confusion_matrix(cm, title, target_names, cmap=plt.cm.coolwarm):\n",
810 " plt.figure(figsize=(8,8))\n",
811 " plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
812 " plt.title(title)\n",
813 " plt.colorbar()\n",
814 " tick_marks = np.arange(len(target_names))\n",
815 " plt.xticks(tick_marks, target_names, rotation=45)\n",
816 " plt.yticks(tick_marks, target_names)\n",
817 " plt.tight_layout()\n",
818 " plt.ylabel('True label')\n",
819 " plt.xlabel('Predicted label')"
820 ]
821 },
822 {
823 "cell_type": "code",
824 "execution_count": 34,
825 "metadata": {
826 "collapsed": false
827 },
828 "outputs": [
829 {
830 "data": {
831 "image/png": "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\n",
832 "text/plain": [
833 "<matplotlib.figure.Figure at 0x125ddfc88>"
834 ]
835 },
836 "metadata": {},
837 "output_type": "display_data"
838 }
839 ],
840 "source": [
841 "trial_cm = confusion_matrix(df_dev.Category, trial_predictions)\n",
842 "plot_confusion_matrix(trial_cm, \"Linear SVC Confusion Matrix\", class_labels)"
843 ]
844 },
845 {
846 "cell_type": "code",
847 "execution_count": 13,
848 "metadata": {
849 "collapsed": false
850 },
851 "outputs": [],
852 "source": [
853 "kaggle_classifier = Pipeline([('tfidfvect', TfidfVectorizer(ngram_range=(1, 1), token_pattern=r'\\b\\w+\\b', min_df=5, max_features=18000, stop_words = 'english', sublinear_tf=True) ),\n",
854 " ('feat',SelectKBest(chi2, 5000)),\n",
855 " ('classifier',LinearSVC(loss='hinge'))\n",
856 " ])\n",
857 "kaggle_classifier = kaggle_classifier.fit(df_kaggle_train[\"Review Text\"],df_kaggle_train.Category)\n",
858 " \n",
859 "kaggle_predictions = kaggle_classifier.predict(df_test[\"Review Text\"])"
860 ]
861 },
862 {
863 "cell_type": "code",
864 "execution_count": 14,
865 "metadata": {
866 "collapsed": false
867 },
868 "outputs": [],
869 "source": [
870 "# accuracy_score(df_dev.Category, nb_kaggle_predictions)\n",
871 "\n",
872 "prediction_df = pd.DataFrame(data=kaggle_predictions, columns=[\"Category\"])\n",
873 "prediction_df[\"Id\"] = prediction_df.index\n",
874 "cols = [\"Id\",\"Category\"]\n",
875 "\n",
876 "prediction_df[cols].to_csv(\"kaggle_final_submission.csv\", index=False)"
877 ]
878 },
879 {
880 "cell_type": "code",
881 "execution_count": null,
882 "metadata": {
883 "collapsed": true
884 },
885 "outputs": [],
886 "source": []
887 }
888 ],
889 "metadata": {
890 "anaconda-cloud": {},
891 "kernelspec": {
892 "display_name": "Python [Root]",
893 "language": "python",
894 "name": "Python [Root]"
895 },
896 "language_info": {
897 "codemirror_mode": {
898 "name": "ipython",
899 "version": 3
900 },
901 "file_extension": ".py",
902 "mimetype": "text/x-python",
903 "name": "python",
904 "nbconvert_exporter": "python",
905 "pygments_lexer": "ipython3",
906 "version": "3.5.2"
907 }
908 },
909 "nbformat": 4,
910 "nbformat_minor": 0
911}