├── Neural Network.ipynb ├── README.md └── Wide and deep model for income classification.ipynb /Neural Network.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Neural Network" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "## Neural Network For Continuous Input\n", 15 | "\n", 16 | "\n", 17 | "* Load CSV Iris dataset\n", 18 | "* Construct Neural Network Classifier\n", 19 | "* Fit the model with the trainning data\n", 20 | "* Evaluate the accuracy of the model" 21 | ] 22 | }, 23 | { 24 | "cell_type": "markdown", 25 | "metadata": {}, 26 | "source": [ 27 | "## Load the iris CSV data to TensorFlow\n", 28 | "\n", 29 | "Iris data set contains 150 rows of data, comprising 50 samples from each of three related Iris species: Iris setosa, Iris virginica, and Iris versicolor." 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 141, 35 | "metadata": { 36 | "collapsed": false 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "from six.moves import urllib\n", 41 | "import os\n", 42 | "\n", 43 | "def download_file_from_url(source_url, dest_path):\n", 44 | " # Create directory if not already existed\n", 45 | " path_folder = '/'.join(dest_path.split('/')[:-1])\n", 46 | " if not os.path.exists(path_folder):\n", 47 | " os.mkdir(path_folder)\n", 48 | " print (\"Making path_folder: %s\" % path_folder)\n", 49 | " urllib.request.urlretrieve(source_url, dest_path)\n" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 143, 55 | "metadata": { 56 | "collapsed": false 57 | }, 58 | "outputs": [ 59 | { 60 | "name": "stdout", 61 | "output_type": "stream", 62 | "text": [ 63 | "Making path_folder: /tmp/workspace/continuous-dnn\n" 64 | ] 65 | } 66 | ], 67 | "source": [ 68 | "iris_data_path = \"/tmp/workspace/continuous-dnn/iris.data\"\n", 69 | "iris_data_source_url = \"https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data\"\n", 70 | "\n", 71 | "download_file_from_url(iris_data_source_url, iris_data_path)" 72 | ] 73 | }, 74 | { 75 | "cell_type": "code", 76 | "execution_count": 195, 77 | "metadata": { 78 | "collapsed": true 79 | }, 80 | "outputs": [], 81 | "source": [ 82 | "import tensorflow as tf\n", 83 | "IRIS_COLUMNS = [\"sepal_length\", \"sepal_width\", \"petal_length\", \"petal_width\", \"species\"]\n", 84 | "\n", 85 | "IRIS_CONTINUOUS_COLUMNS = [\"sepal_length\", \"sepal_width\", \"petal_length\", \"petal_width\"]\n", 86 | "\n", 87 | "IRIS_LABEL_COLUMN = 'species'" 88 | ] 89 | }, 90 | { 91 | "cell_type": "markdown", 92 | "metadata": {}, 93 | "source": [ 94 | "### Data exploration" 95 | ] 96 | }, 97 | { 98 | "cell_type": "code", 99 | "execution_count": 196, 100 | "metadata": { 101 | "collapsed": true 102 | }, 103 | "outputs": [], 104 | "source": [ 105 | "import pandas as pd\n", 106 | "\n", 107 | "def read_csv_with_column(csv_file_path, column_names):\n", 108 | " return pd.read_csv(csv_file_path, names=column_names, skipinitialspace=True)" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": 328, 114 | "metadata": { 115 | "collapsed": false 116 | }, 117 | "outputs": [], 118 | "source": [ 119 | "df_iris_data = read_csv_with_column(train_data_path, IRIS_COLUMNS)" 120 | ] 121 | }, 122 | { 123 | "cell_type": "markdown", 124 | "metadata": {}, 125 | "source": [ 126 | "## Convert labels to different int values\n", 127 | "\n", 128 | "Since classifier can only work with int32/int64, we need to convert the training and testing lable data" 129 | ] 130 | }, 131 | { 132 | "cell_type": "code", 133 | "execution_count": 327, 134 | "metadata": { 135 | "collapsed": true 136 | }, 137 | "outputs": [], 138 | "source": [ 139 | "# Convert categorical data to real values with pandas.Categorical\n", 140 | "def convert_categorical_nomial(df, column_name):\n", 141 | " return pd.to_numeric(pd.Categorical.from_array(df[column_name]).codes)" 142 | ] 143 | }, 144 | { 145 | "cell_type": "code", 146 | "execution_count": 329, 147 | "metadata": { 148 | "collapsed": false 149 | }, 150 | "outputs": [], 151 | "source": [ 152 | "# Convert the caregorical column to int values\n", 153 | "df_iris_data[IRIS_LABEL_COLUMN] = convert_categorical_nomial(df_iris_data, IRIS_LABEL_COLUMN)" 154 | ] 155 | }, 156 | { 157 | "cell_type": "code", 158 | "execution_count": 334, 159 | "metadata": { 160 | "collapsed": false 161 | }, 162 | "outputs": [], 163 | "source": [ 164 | "# the above computation equals the following\n", 165 | "# df_iris_data[IRIS_LABEL_COLUMN] = df_data[\"species\"].apply(lambda x : 0 if 'Iris-setosa' in x else (1 if 'Iris-virginica' in x else 2))\n" 166 | ] 167 | }, 168 | { 169 | "cell_type": "code", 170 | "execution_count": 335, 171 | "metadata": { 172 | "collapsed": false 173 | }, 174 | "outputs": [ 175 | { 176 | "data": { 177 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAW0AAAELCAYAAAASrNdlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADeFJREFUeJzt3W2MpWddx/Hvb9mA0Epdge4ifUCClkooLZIa4c1REBrE\nbE3MUoLQgiZGQeob0y1qHGJEqwTTRGJMpGRDhFpr+kBFdmmXE0IQqNLS2talL9qqDTsY+2Aan1r6\n98Xc2w7TmZ3TmTPn9D/9fpLJ3uc6132u/54r85trrnPuM6kqJEk97Jh3AZKkyRnaktSIoS1JjRja\nktSIoS1JjRjaktTIzkk6JbkXeBh4HHi0qs5Nsgv4K+B04F5gX1U9vEV1SpKYfKX9ODCqqnOq6tyh\nbT9wY1WdARwGLt2KAiVJT5o0tLNK373AgeH4AHD+tIqSJK1u0tAu4AtJbk7yy0Pb7qpaBKiqo8DJ\nW1GgJOlJE+1pA2+sqm8neQlwKMkRloJ8uVWvh0/idfKStAFVlZVtE4V2VX17+Pffk1wLnAssJtld\nVYtJ9gDfOc75Gyz56UvCGj8/tsjC8DUrmenzOUvOXW/O35RHy1PyGphgeyTJC5KcOByfALwFuB24\nHrho6HYhcN00CpUkrW2SlfZu4Jphm2Mn8JdVdSjJPwBXJXkfcB+wbwvrlCQxQWhX1T3A2au0PwC8\neSuK6mU07wK0YaN5F6BNGc27gLnIVu/RJKntvac9a9t3X9S56835m/JoyaovRHoZuyQ1YmhLUiOG\ntiQ1YmhLUiOGtiQ1YmhLUiOGtiQ1YmhLUiOGtiQ1YmhLUiOGtiQ1YmhLUiOGtiQ1YmhLUiOGtiQ1\nYmhLUiOGtiQ1YmhLUiOGtiQ1YmhLUiOGtiQ1YmhLUiOGtiQ1YmhLUiOGtiQ1YmhLUiOGtiQ1YmhL\nUiOGtiQ1YmhLUiOGtiQ1YmhLUiOGtiQ1YmhLUiOGtiQ1MnFoJ9mR5BtJrh9u70pyKMmRJAeTnLR1\nZUqS4OmttC8G7lx2ez9wY1WdARwGLp1mYZKkp5ootJOcArwN+ItlzXuBA8PxAeD86ZYmSVpp0pX2\nnwC/CdSytt1VtQhQVUeBk6dcmyRphZ3rdUjys8BiVd2aZHScrrXWHQsLC08cj0YjRqPjPYwkPfuM\nx2PG4/G6/VK1ZtYudUg+Avwi8BjwfOD7gWuA1wOjqlpMsgf4YlWducr5td4Y05SE4/z82AbCLJ/P\nWXLuenP+pjxaQlVlZfu62yNV9aGqOq2qXgFcAByuqncDnwUuGrpdCFw3xXolSavYzPu0/xD4mSRH\ngDcNtyVJW2jd7ZFND+D2yJRt31+xnbvenL8pj7bR7RFJ0jOHoS1JjRjaktSIoS1JjRjaktSIoS1J\njRjaktSIoS1JjRjaktSIoS1JjRjaktSIoS1JjRjaktSIoS1JjRjaktSIoS1JjRjaktSIoS1JjRja\nktSIoS1JjRjaktSIoS1JjRjaktSIoS1JjRjaktSIoS1JjRjaktSIoS1JjRjaktSIoS1JjRjaktSI\noS1JjRjaktSIoS1JjRjaktTIuqGd5HlJvpbkliR3JPnI0L4ryaEkR5IcTHLS1pcrSc9u64Z2Vf0v\n8FNVdQ5wFvDTSd4I7AdurKozgMPApVtaqSRpsu2Rqvqv4fB5wzkPAnuBA0P7AeD8qVcnSfoeE4V2\nkh1JbgGOAuOquhPYXVWLAFV1FDh568qUJAHsnKRTVT0OnJPkhcDBJCOgVnabcm2SpBUmCu1jquo/\nk3wOeD2wmGR3VS0m2QN8Z63zFhYWnjgejUaMRqONVStJ29R4PGY8Hq/bL1XHXyAneTHwaFU9nOT5\nwEHgw8BbgAeq6rIklwC7qmr/KufXemNMUxK296I/zPL5nCXnrjfnb8qjJVRVVrZPstJ+KXAgSzOy\nA/hUVd007HFfleR9wH3AvqlWLEl6inVX2psewJX2lG3f1Zpz15vzN+XR1lhpe0WkJDViaEtSI4a2\nJDViaEtSI4a2JDViaEtSI4a2JDViaEtSI4a2JDViaEtSI4a2JDViaEtSI4a2JDViaEtSI4a2JDVi\naEtSI4a2JDViaEtSI4a2JDViaEtSI4a2JDViaEtSI4a2JDViaEtSI4a2JDViaEtSI4a2JDViaEtS\nI4a2JDViaEtSI4a2JDViaEtSI4a2JDViaEtSI4a2JDViaEtSI+uGdpJTkhxOckeS25N8cGjfleRQ\nkiNJDiY5aevLlaRnt1TV8Tske4A9VXVrkhOBfwT2Au8F/qOq/ijJJcCuqtq/yvm13hjTlASY3Xiz\nF2b5fM6Sc9eb8zfl0RKqKivb111pV9XRqrp1OH4EuAs4haXgPjB0OwCcP71yJUmreVp72kleDpwN\nfBXYXVWLsBTswMnTLk6S9L12Ttpx2Bq5Gri4qh5JsvL3hDV/b1hYWHjieDQaMRqNnl6VkrTNjcdj\nxuPxuv3W3dMGSLITuAH4u6q6fGi7CxhV1eKw7/3FqjpzlXPd056q7bsv6tz15vxNebSN7mkPrgDu\nPBbYg+uBi4bjC4HrNlWhJGldk7x75I3Al4DbWfoxWsCHgK8DVwGnAvcB+6rqoVXOd6U9Vdt3tebc\n9eb8TXm0NVbaE22PbHJgQ3uqtu83vnPXm/M35dE2uT0iSXoGMLQlqRFDW5IaMbQlqRFDW5IaMbQl\nqRFDW5IaMbQlqRFDW5IaMbQlqRFDW5IaMbQlqRFDW5IaMbQlqRFDW5IaMbQlqRFDW5IaMbQlqRFD\nW5IaMbQlqRFDW5IaMbQlqRFDW5IaMbQlqRFDW5IaMbQlqRFDW5IaMbQlqRFDW5IaMbQlqRFDW5Ia\nMbQlqRFDW5IaMbQlqRFDW5IaMbQlqZF1QzvJJ5IsJrltWduuJIeSHElyMMlJW1umJAkmW2l/Enjr\nirb9wI1VdQZwGLh02oVJkp5q3dCuqi8DD65o3gscGI4PAOdPuS5J0io2uqd9clUtAlTVUeDk6ZUk\nSVrLzik9Th3vzoWFhSeOR6MRo9FoSsNK0vYwHo8Zj8fr9kvVcfN2qVNyOvDZqjpruH0XMKqqxSR7\ngC9W1ZlrnFuTjDEtSVjnZ0hzYZbP5yw5d705f1MeLaGqsrJ90u2RDF/HXA9cNBxfCFy3qeokSRNZ\nd6Wd5NPACHgRsAj8LnAt8NfAqcB9wL6qemiN811pT9X2Xa05d705f1MebY2V9kTbI5sc2NCequ37\nje/c9eb8TXm0TW6PSJKeAQxtSWrE0JakRgxtSWrE0JakRgxtSWrE0JakRgxtSWrE0JakRgxtSWrE\n0JakRgxtSWrE0JakRgxtSWrE0JakRgxtSWrE0JakRgxtSWrE0JakRgxtSWrE0JakRgxtSWrE0Jak\nRgxtSWrE0JakRgxtSWrE0JakRgxtSWrE0JakRgxtSWrE0JakRgxtSWrE0JakRgxtSWrE0JakRjYV\n2knOS/LPSb6V5JJpFdXLeN4FaMPG8y5AmzKedwFzseHQTrID+FPgrcCrgXcmedW0CutjPO8CtGHj\neRegTRnPu4C52MxK+1zg7qq6r6oeBa4E9k6nLEnSajYT2i8D/nXZ7X8b2iRJW2TnLAZJMothlo84\n4/E+PNPRZv98zpJz15vzt9U2E9r3A6ctu33K0PY9qmr+/0tJ2iY2sz1yM/DKJKcneS5wAXD9dMqS\nJK1mwyvtqvpukg8Ah1gK/09U1V1Tq0yS9BSpqnnXIEmakFdESlIjhrYkNTKTt/xtF8MVn3t58v3o\n9wPXu5cvbb3h++9lwNeq6pFl7edV1efnV9lsudKe0PDZKley9EbUrw9fAT6TZP88a9PmJHnvvGvQ\n8SX5IHAd8OvAPyVZfvX1R+ZT1Xz4QuSEknwLePVwyf7y9ucCd1TVj8ynMm1Wkn+pqtPW76l5SXI7\n8JNV9UiSlwNXA5+qqsuT3FJV58y1wBlye2RyjwM/BNy3ov2lw316Bkty21p3AbtnWYs2ZMexLZGq\nujfJCLg6yenM/jLMuTK0J/cbwE1J7ubJz1w5DXgl8IG5VaVJ7WbpEykfXNEe4CuzL0dP02KSs6vq\nVoBhxf124ArgNfMtbbYM7QlV1eeT/ChLn264/IXIm6vqu/OrTBO6ATjx2Df9cknGsy9HT9N7gMeW\nN1TVY8B7kvz5fEqaD/e0JakR3z0iSY0Y2pLUiKEtSY0Y2tIySW5I8sJ51yGtxRciJakRV9pqJ8kL\nhhXxLUluS7IvyT1JLhtufzXJK4a+L05ydZKvDV9vGNpPSHLF0P/WJD8/tN+T5AeH43cN53wjyZ9l\nyY4knxzO+2aSi+f3TOjZyPdpq6PzgPur6u0Aw3bGZcCDVXVWkncDlwM/N/z7sar6SpJTgYPAjwG/\nAzxUVWcNj3HS8Ng13H4V8A7gDcMf/Pg48C7gTuBly85zK0UzZWiro9uBjyb5A+Bvq+rLwx9cvXK4\n/zPAx4bjNwNn5sm/yHpikhOG9ncce8CqenjFGG8CXgfcPJz7fcAiSxfp/HCSy4HPsfSXm6SZMbTV\nTlXdneR1wNuA30tymKUV8vIXaI4d7wB+YpUP+lrvxZwAB6rqt55yR/Jali6J/xVgH/BLG/qPSBvg\nnrbaSfJS4L+r6tPAR1laEcOTK+cLgL8fjg8CFy8797XD4ReA9y9r/4Fjh8O/NwG/kOQlw/27kpyW\n5EXAc6rqGpa2WJ41ny6nZwZX2uroNcAfJ3kc+D/gV4G/AXYl+SbwP8A7h74XAx8f2p8DfAn4NeD3\nh/bbWfpMiw8D1zKs0KvqriS/DRxKsmMY5/3DY39yaCvAz1LXTPmWP20LSe4BfryqHph3LdJWcntE\n24WrDz0ruNKWpEZcaUtSI4a2JDViaEtSI4a2JDViaEtSI/8P3qXHtm0bg4QAAAAASUVORK5CYII=\n", 178 | "text/plain": [ 179 | "" 180 | ] 181 | }, 182 | "metadata": {}, 183 | "output_type": "display_data" 184 | } 185 | ], 186 | "source": [ 187 | "# enable pylab mode in ipython notebook as pylab has been deprecated\n", 188 | "%matplotlib inline\n", 189 | "def group_n_plot_by_label(df, label_column):\n", 190 | " df.groupby(label_column).size().plot(kind=\"bar\")\n", 191 | " \n", 192 | "group_n_plot_by_label(df_iris_data, IRIS_LABEL_COLUMN)" 193 | ] 194 | }, 195 | { 196 | "cell_type": "code", 197 | "execution_count": 336, 198 | "metadata": { 199 | "collapsed": false 200 | }, 201 | "outputs": [], 202 | "source": [ 203 | "# Divid data into testing data and \n", 204 | "def split_data(df, sample_rate, random_state=15):\n", 205 | " df_train = df.sample(frac=0.8, random_state=random_state)\n", 206 | " df_test = df.drop(df_train.index)\n", 207 | " return df_train, df_test\n", 208 | "\n", 209 | "# Verify that the train data and test data are evenly sampled\n", 210 | "def plot_train_test_data(df_train, df_test, label_column):\n", 211 | " group_n_plot_by_label(df_train, label_column)\n", 212 | " group_n_plot_by_label(df_test, label_column)" 213 | ] 214 | }, 215 | { 216 | "cell_type": "code", 217 | "execution_count": 337, 218 | "metadata": { 219 | "collapsed": false 220 | }, 221 | "outputs": [ 222 | { 223 | "data": { 224 | "image/png": "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\nAABJRU5ErkJggg==\n", 225 | "text/plain": [ 226 | "" 227 | ] 228 | }, 229 | "metadata": {}, 230 | "output_type": "display_data" 231 | } 232 | ], 233 | "source": [ 234 | "df_iris_train, df_iris_test = split_data(df_iris_data, 0.8)\n", 235 | "\n", 236 | "plot_train_test_data(df_iris_train, df_iris_test, IRIS_LABEL_COLUMN)" 237 | ] 238 | }, 239 | { 240 | "cell_type": "markdown", 241 | "metadata": {}, 242 | "source": [ 243 | "## Convert data to tensor\n", 244 | "Since all input are continuous input, use tf.constant is a good choice" 245 | ] 246 | }, 247 | { 248 | "cell_type": "code", 249 | "execution_count": 338, 250 | "metadata": { 251 | "collapsed": false 252 | }, 253 | "outputs": [], 254 | "source": [ 255 | "def input_fn(df, continuous_columns, label_column):\n", 256 | " feature_cols = {k : tf.constant(df[k].values) for k in continuous_columns} \n", 257 | " label = tf.constant(df[label_column].values)\n", 258 | " return feature_cols, label" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "execution_count": 339, 264 | "metadata": { 265 | "collapsed": true 266 | }, 267 | "outputs": [], 268 | "source": [ 269 | "def iris_train_input_fn():\n", 270 | " return input_fn(df_iris_train, IRIS_CONTINUOUS_COLUMNS, IRIS_LABEL_COLUMN)\n", 271 | "\n", 272 | "def iris_test_input_fn():\n", 273 | " return input_fn(df_iris_test, IRIS_CONTINUOUS_COLUMNS, IRIS_LABEL_COLUMN)" 274 | ] 275 | }, 276 | { 277 | "cell_type": "markdown", 278 | "metadata": {}, 279 | "source": [ 280 | "## Create feature columns\n", 281 | "We replaced the 'class' column with 'label' column, so all of them a real valued features: \n", 282 | "* real_valued_column" 283 | ] 284 | }, 285 | { 286 | "cell_type": "code", 287 | "execution_count": 322, 288 | "metadata": { 289 | "collapsed": true 290 | }, 291 | "outputs": [], 292 | "source": [ 293 | "# \"sepal_length\", \"sepal_width\", \"petal_length\", \"petal_width\"\n", 294 | "def create_feature_columns(feature_columns_names):\n", 295 | " feature_columns = []\n", 296 | " for feature_name in feature_columns_names:\n", 297 | " feature = tf.contrib.layers.real_valued_column(feature_name)\n", 298 | " feature_columns.append(feature)\n", 299 | " return feature_columns" 300 | ] 301 | }, 302 | { 303 | "cell_type": "code", 304 | "execution_count": 323, 305 | "metadata": { 306 | "collapsed": true 307 | }, 308 | "outputs": [], 309 | "source": [ 310 | "iris_feature_column = create_feature_columns(IRIS_CONTINUOUS_COLUMNS)" 311 | ] 312 | }, 313 | { 314 | "cell_type": "markdown", 315 | "metadata": {}, 316 | "source": [ 317 | "## Create DNN Model\n", 318 | "* DNNClassifier\n", 319 | "* feature_columns = feature_columns\n", 320 | "* hidden_units = [10, 20, 10], three hidden layers, containing 10, 20, and 10 neurons.\n", 321 | "* n_classes=3, Three target classes, representing the three iris species\n", 322 | "* model_model Tensorflow use it to save check point data during model trainning." 323 | ] 324 | }, 325 | { 326 | "cell_type": "code", 327 | "execution_count": 340, 328 | "metadata": { 329 | "collapsed": false 330 | }, 331 | "outputs": [ 332 | { 333 | "name": "stdout", 334 | "output_type": "stream", 335 | "text": [ 336 | "INFO:tensorflow:Using default config.\n", 337 | "INFO:tensorflow:Using config: {'_save_checkpoints_secs': 600, '_num_ps_replicas': 0, '_keep_checkpoint_max': 5, '_tf_random_seed': None, '_task_type': None, '_environment': 'local', '_is_chief': True, '_cluster_spec': , '_tf_config': gpu_options {\n", 338 | " per_process_gpu_memory_fraction: 1\n", 339 | "}\n", 340 | ", '_task_id': 0, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_evaluation_master': '', '_keep_checkpoint_every_n_hours': 10000, '_master': ''}\n" 341 | ] 342 | } 343 | ], 344 | "source": [ 345 | "model_dir = \"/tmp/workspace/continuous-dnn/\"\n", 346 | "iris_classifier = tf.contrib.learn.DNNClassifier(feature_columns=iris_feature_column,\n", 347 | " hidden_units=[10, 20, 10],\n", 348 | " n_classes=3,\n", 349 | " model_dir=model_dir)" 350 | ] 351 | }, 352 | { 353 | "cell_type": "markdown", 354 | "metadata": {}, 355 | "source": [ 356 | "## Fit the DNNClassifier to the iris training data" 357 | ] 358 | }, 359 | { 360 | "cell_type": "code", 361 | "execution_count": 341, 362 | "metadata": { 363 | "collapsed": false 364 | }, 365 | "outputs": [ 366 | { 367 | "name": "stdout", 368 | "output_type": "stream", 369 | "text": [ 370 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 371 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 372 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 373 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 374 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py:1362: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 375 | "Instructions for updating:\n", 376 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 377 | "INFO:tensorflow:Create CheckpointSaverHook.\n", 378 | "INFO:tensorflow:Saving checkpoints for 6001 into /tmp/workspace/continuous-dnn/model.ckpt.\n", 379 | "INFO:tensorflow:loss = 7.81006, step = 6001\n", 380 | "INFO:tensorflow:global_step/sec: 800.614\n", 381 | "INFO:tensorflow:loss = 0.0777194, step = 6101\n", 382 | "INFO:tensorflow:global_step/sec: 727.728\n", 383 | "INFO:tensorflow:loss = 0.0605825, step = 6201\n", 384 | "INFO:tensorflow:global_step/sec: 690.327\n", 385 | "INFO:tensorflow:loss = 0.0542215, step = 6301\n", 386 | "INFO:tensorflow:global_step/sec: 696.563\n", 387 | "INFO:tensorflow:loss = 0.0505909, step = 6401\n", 388 | "INFO:tensorflow:global_step/sec: 832.896\n", 389 | "INFO:tensorflow:loss = 0.0481317, step = 6501\n", 390 | "INFO:tensorflow:global_step/sec: 737.883\n", 391 | "INFO:tensorflow:loss = 0.0462774, step = 6601\n", 392 | "INFO:tensorflow:global_step/sec: 545.589\n", 393 | "INFO:tensorflow:loss = 0.0449129, step = 6701\n", 394 | "INFO:tensorflow:global_step/sec: 752.582\n", 395 | "INFO:tensorflow:loss = 0.0434973, step = 6801\n", 396 | "INFO:tensorflow:global_step/sec: 778.992\n", 397 | "INFO:tensorflow:loss = 0.0423911, step = 6901\n", 398 | "INFO:tensorflow:global_step/sec: 742.009\n", 399 | "INFO:tensorflow:loss = 0.0414055, step = 7001\n", 400 | "INFO:tensorflow:global_step/sec: 705.095\n", 401 | "INFO:tensorflow:loss = 0.04061, step = 7101\n", 402 | "INFO:tensorflow:global_step/sec: 752.265\n", 403 | "INFO:tensorflow:loss = 0.0397081, step = 7201\n", 404 | "INFO:tensorflow:global_step/sec: 729.145\n", 405 | "INFO:tensorflow:loss = 0.039451, step = 7301\n", 406 | "INFO:tensorflow:global_step/sec: 661.928\n", 407 | "INFO:tensorflow:loss = 0.0382674, step = 7401\n", 408 | "INFO:tensorflow:global_step/sec: 698.016\n", 409 | "INFO:tensorflow:loss = 0.0380904, step = 7501\n", 410 | "INFO:tensorflow:global_step/sec: 593.229\n", 411 | "INFO:tensorflow:loss = 0.0370452, step = 7601\n", 412 | "INFO:tensorflow:global_step/sec: 650.115\n", 413 | "INFO:tensorflow:loss = 0.0366884, step = 7701\n", 414 | "INFO:tensorflow:global_step/sec: 569.856\n", 415 | "INFO:tensorflow:loss = 0.0359754, step = 7801\n", 416 | "INFO:tensorflow:global_step/sec: 726.76\n", 417 | "INFO:tensorflow:loss = 0.0354981, step = 7901\n", 418 | "INFO:tensorflow:Saving checkpoints for 8000 into /tmp/workspace/continuous-dnn/model.ckpt.\n", 419 | "INFO:tensorflow:Loss for final step: 0.0349211.\n" 420 | ] 421 | }, 422 | { 423 | "data": { 424 | "text/plain": [ 425 | "DNNClassifier(params={'head': , 'hidden_units': [10, 20, 10], 'feature_columns': (_RealValuedColumn(column_name='sepal_length', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='sepal_width', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='petal_length', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='petal_width', dimension=1, default_value=None, dtype=tf.float32, normalizer=None)), 'embedding_lr_multipliers': None, 'optimizer': None, 'dropout': None, 'gradient_clip_norm': None, 'activation_fn': , 'input_layer_min_slice_size': None})" 426 | ] 427 | }, 428 | "execution_count": 341, 429 | "metadata": {}, 430 | "output_type": "execute_result" 431 | } 432 | ], 433 | "source": [ 434 | "iris_classifier.fit(input_fn=iris_train_input_fn, steps = 2000)" 435 | ] 436 | }, 437 | { 438 | "cell_type": "markdown", 439 | "metadata": {}, 440 | "source": [ 441 | "### Evaluate the model accuracy\n", 442 | "\n", 443 | "Evaluate the accuracy of the function with test input\n" 444 | ] 445 | }, 446 | { 447 | "cell_type": "code", 448 | "execution_count": 174, 449 | "metadata": { 450 | "collapsed": false 451 | }, 452 | "outputs": [ 453 | { 454 | "name": "stdout", 455 | "output_type": "stream", 456 | "text": [ 457 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 458 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 459 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 460 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 461 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py:1362: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 462 | "Instructions for updating:\n", 463 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 464 | "INFO:tensorflow:Starting evaluation at 2017-03-28-07:05:44\n", 465 | "INFO:tensorflow:Evaluation [1/1]\n", 466 | "INFO:tensorflow:Finished evaluation at 2017-03-28-07:05:44\n", 467 | "INFO:tensorflow:Saving dict for global step 4200: accuracy = 0.966667, auc = 0.998333, global_step = 4200, loss = 0.113523\n", 468 | "WARNING:tensorflow:Skipping summary for global_step, must be a float or np.float32.\n" 469 | ] 470 | } 471 | ], 472 | "source": [ 473 | "iris_results = classifier.evaluate(input_fn=test_input_fn, steps=1)" 474 | ] 475 | }, 476 | { 477 | "cell_type": "code", 478 | "execution_count": 251, 479 | "metadata": { 480 | "collapsed": false 481 | }, 482 | "outputs": [ 483 | { 484 | "data": { 485 | "text/plain": [ 486 | "{'accuracy': 0.96666664,\n", 487 | " 'auc': 0.99833333,\n", 488 | " 'global_step': 4200,\n", 489 | " 'loss': 0.1135229}" 490 | ] 491 | }, 492 | "execution_count": 251, 493 | "metadata": {}, 494 | "output_type": "execute_result" 495 | } 496 | ], 497 | "source": [ 498 | "iris_results" 499 | ] 500 | }, 501 | { 502 | "cell_type": "markdown", 503 | "metadata": {}, 504 | "source": [ 505 | "# Neural Netowrk With Categorical Input\n", 506 | "\n", 507 | "* Load Car Evaluation Data set: http://archive.ics.uci.edu/ml/datasets/Car+Evaluation\n", 508 | "* Load CSV Data\n", 509 | "* Constructy Neural Network Classifier\n", 510 | "* Fit the model with the trainning data\n", 511 | "* Evaluate the accuracy of the model" 512 | ] 513 | }, 514 | { 515 | "cell_type": "code", 516 | "execution_count": 304, 517 | "metadata": { 518 | "collapsed": false 519 | }, 520 | "outputs": [], 521 | "source": [ 522 | "car_data_path = \"/tmp/workspace/categorical-dnn/car.data\"\n", 523 | "car_data_source_url = \"http://archive.ics.uci.edu/ml/machine-learning-databases/car/car.data\"\n", 524 | "\n", 525 | "download_file_from_url(car_data_source_url, car_data_path)" 526 | ] 527 | }, 528 | { 529 | "cell_type": "markdown", 530 | "metadata": {}, 531 | "source": [ 532 | "### Load car CSV data" 533 | ] 534 | }, 535 | { 536 | "cell_type": "code", 537 | "execution_count": 313, 538 | "metadata": { 539 | "collapsed": true 540 | }, 541 | "outputs": [], 542 | "source": [ 543 | "CAR_COLUMNS = ['buying', 'maint', 'doors', 'persons', 'lug_boot', 'safety', 'classes']\n", 544 | "\n", 545 | "CAR_CATEGORICAL_COLUMN = ['buying', 'maint', 'doors', 'persons', 'lug_boot', 'safety']\n", 546 | "\n", 547 | "CAR_LABEL_COLUMN = 'classes'\n", 548 | "\n", 549 | "df_car_data = read_csv_with_column(car_data_path, CAR_COLUMNS)" 550 | ] 551 | }, 552 | { 553 | "cell_type": "markdown", 554 | "metadata": {}, 555 | "source": [ 556 | "### Covnert categorical data to int values" 557 | ] 558 | }, 559 | { 560 | "cell_type": "code", 561 | "execution_count": 342, 562 | "metadata": { 563 | "collapsed": true 564 | }, 565 | "outputs": [], 566 | "source": [ 567 | "def convert_categorical_columns_nomial(df, categorical_columns):\n", 568 | " for column_name in categorical_columns:\n", 569 | " df[column_name] = convert_categorical_nomial(df, column_name)" 570 | ] 571 | }, 572 | { 573 | "cell_type": "code", 574 | "execution_count": 343, 575 | "metadata": { 576 | "collapsed": true 577 | }, 578 | "outputs": [], 579 | "source": [ 580 | "convert_categorical_columns_nomial(df_car_data, CAR_COLUMNS)" 581 | ] 582 | }, 583 | { 584 | "cell_type": "markdown", 585 | "metadata": {}, 586 | "source": [ 587 | "### Split car data into trainning and testing" 588 | ] 589 | }, 590 | { 591 | "cell_type": "code", 592 | "execution_count": 345, 593 | "metadata": { 594 | "collapsed": false 595 | }, 596 | "outputs": [ 597 | { 598 | "data": { 599 | "image/png": "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\n", 600 | "text/plain": [ 601 | "" 602 | ] 603 | }, 604 | "metadata": {}, 605 | "output_type": "display_data" 606 | } 607 | ], 608 | "source": [ 609 | "df_car_train, df_car_test = split_data(df_car_data, 0.8, random_state=20)\n", 610 | "\n", 611 | "plot_train_test_data(df_car_train, df_car_test, CAR_LABEL_COLUMN)" 612 | ] 613 | }, 614 | { 615 | "cell_type": "markdown", 616 | "metadata": {}, 617 | "source": [ 618 | "### def input functions\n", 619 | "\n", 620 | "Convert data to tensor" 621 | ] 622 | }, 623 | { 624 | "cell_type": "code", 625 | "execution_count": 346, 626 | "metadata": { 627 | "collapsed": true 628 | }, 629 | "outputs": [], 630 | "source": [ 631 | "def car_train_input_fn():\n", 632 | " return input_fn(df_car_train, CAR_CATEGORICAL_COLUMN, CAR_LABEL_COLUMN)\n", 633 | "\n", 634 | "def car_test_input_fn():\n", 635 | " return input_fn(df_car_test, CAR_CATEGORICAL_COLUMN, CAR_LABEL_COLUMN)" 636 | ] 637 | }, 638 | { 639 | "cell_type": "markdown", 640 | "metadata": {}, 641 | "source": [ 642 | "### Create Feature Columns" 643 | ] 644 | }, 645 | { 646 | "cell_type": "code", 647 | "execution_count": 347, 648 | "metadata": { 649 | "collapsed": true 650 | }, 651 | "outputs": [], 652 | "source": [ 653 | "car_feature_columns = create_feature_columns(CAR_CATEGORICAL_COLUMN)" 654 | ] 655 | }, 656 | { 657 | "cell_type": "code", 658 | "execution_count": 348, 659 | "metadata": { 660 | "collapsed": false 661 | }, 662 | "outputs": [ 663 | { 664 | "name": "stdout", 665 | "output_type": "stream", 666 | "text": [ 667 | "INFO:tensorflow:Using default config.\n", 668 | "INFO:tensorflow:Using config: {'_save_checkpoints_secs': 600, '_num_ps_replicas': 0, '_keep_checkpoint_max': 5, '_tf_random_seed': None, '_task_type': None, '_environment': 'local', '_is_chief': True, '_cluster_spec': , '_tf_config': gpu_options {\n", 669 | " per_process_gpu_memory_fraction: 1\n", 670 | "}\n", 671 | ", '_task_id': 0, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_evaluation_master': '', '_keep_checkpoint_every_n_hours': 10000, '_master': ''}\n" 672 | ] 673 | } 674 | ], 675 | "source": [ 676 | "model_dir = \"/tmp/workspace/categorical-dnn/\"\n", 677 | "car_classifier = tf.contrib.learn.DNNClassifier(feature_columns=car_feature_columns,\n", 678 | " hidden_units=[10, 20, 10],\n", 679 | " n_classes=4,\n", 680 | " model_dir=model_dir)" 681 | ] 682 | }, 683 | { 684 | "cell_type": "code", 685 | "execution_count": 349, 686 | "metadata": { 687 | "collapsed": false 688 | }, 689 | "outputs": [ 690 | { 691 | "name": "stdout", 692 | "output_type": "stream", 693 | "text": [ 694 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 695 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 696 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 697 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 698 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 699 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 700 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py:1362: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 701 | "Instructions for updating:\n", 702 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 703 | "INFO:tensorflow:Create CheckpointSaverHook.\n", 704 | "INFO:tensorflow:Saving checkpoints for 1 into /tmp/workspace/categorical-dnn/model.ckpt.\n", 705 | "INFO:tensorflow:loss = 1.55783, step = 1\n", 706 | "INFO:tensorflow:global_step/sec: 386.275\n", 707 | "INFO:tensorflow:loss = 0.684059, step = 101\n", 708 | "INFO:tensorflow:global_step/sec: 412.086\n", 709 | "INFO:tensorflow:loss = 0.62062, step = 201\n", 710 | "INFO:tensorflow:global_step/sec: 447.627\n", 711 | "INFO:tensorflow:loss = 0.579463, step = 301\n", 712 | "INFO:tensorflow:global_step/sec: 458.88\n", 713 | "INFO:tensorflow:loss = 0.511961, step = 401\n", 714 | "INFO:tensorflow:global_step/sec: 435.893\n", 715 | "INFO:tensorflow:loss = 0.426289, step = 501\n", 716 | "INFO:tensorflow:global_step/sec: 421.75\n", 717 | "INFO:tensorflow:loss = 0.369106, step = 601\n", 718 | "INFO:tensorflow:global_step/sec: 420.774\n", 719 | "INFO:tensorflow:loss = 0.325434, step = 701\n", 720 | "INFO:tensorflow:global_step/sec: 449.659\n", 721 | "INFO:tensorflow:loss = 0.293356, step = 801\n", 722 | "INFO:tensorflow:global_step/sec: 444.729\n", 723 | "INFO:tensorflow:loss = 0.260331, step = 901\n", 724 | "INFO:tensorflow:global_step/sec: 424.468\n", 725 | "INFO:tensorflow:loss = 0.235651, step = 1001\n", 726 | "INFO:tensorflow:global_step/sec: 456.798\n", 727 | "INFO:tensorflow:loss = 0.204259, step = 1101\n", 728 | "INFO:tensorflow:global_step/sec: 441.334\n", 729 | "INFO:tensorflow:loss = 0.183843, step = 1201\n", 730 | "INFO:tensorflow:global_step/sec: 432.229\n", 731 | "INFO:tensorflow:loss = 0.157291, step = 1301\n", 732 | "INFO:tensorflow:global_step/sec: 451.249\n", 733 | "INFO:tensorflow:loss = 0.144161, step = 1401\n", 734 | "INFO:tensorflow:global_step/sec: 485.991\n", 735 | "INFO:tensorflow:loss = 0.133065, step = 1501\n", 736 | "INFO:tensorflow:global_step/sec: 443.009\n", 737 | "INFO:tensorflow:loss = 0.123993, step = 1601\n", 738 | "INFO:tensorflow:global_step/sec: 445.569\n", 739 | "INFO:tensorflow:loss = 0.115847, step = 1701\n", 740 | "INFO:tensorflow:global_step/sec: 343.731\n", 741 | "INFO:tensorflow:loss = 0.110578, step = 1801\n", 742 | "INFO:tensorflow:global_step/sec: 409.611\n", 743 | "INFO:tensorflow:loss = 0.104435, step = 1901\n", 744 | "INFO:tensorflow:Saving checkpoints for 2000 into /tmp/workspace/categorical-dnn/model.ckpt.\n", 745 | "INFO:tensorflow:Loss for final step: 0.100043.\n" 746 | ] 747 | }, 748 | { 749 | "data": { 750 | "text/plain": [ 751 | "DNNClassifier(params={'head': , 'hidden_units': [10, 20, 10], 'feature_columns': (_RealValuedColumn(column_name='buying', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='maint', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='doors', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='persons', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='lug_boot', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), _RealValuedColumn(column_name='safety', dimension=1, default_value=None, dtype=tf.float32, normalizer=None)), 'embedding_lr_multipliers': None, 'optimizer': None, 'dropout': None, 'gradient_clip_norm': None, 'activation_fn': , 'input_layer_min_slice_size': None})" 752 | ] 753 | }, 754 | "execution_count": 349, 755 | "metadata": {}, 756 | "output_type": "execute_result" 757 | } 758 | ], 759 | "source": [ 760 | "car_classifier.fit(input_fn=car_train_input_fn, steps = 2000)" 761 | ] 762 | }, 763 | { 764 | "cell_type": "markdown", 765 | "metadata": {}, 766 | "source": [ 767 | "### Evaluate the results" 768 | ] 769 | }, 770 | { 771 | "cell_type": "code", 772 | "execution_count": 351, 773 | "metadata": { 774 | "collapsed": false 775 | }, 776 | "outputs": [ 777 | { 778 | "name": "stdout", 779 | "output_type": "stream", 780 | "text": [ 781 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 782 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 783 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 784 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 785 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 786 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 787 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py:1362: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 788 | "Instructions for updating:\n", 789 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 790 | "INFO:tensorflow:Starting evaluation at 2017-03-28-07:59:42\n", 791 | "INFO:tensorflow:Evaluation [1/1]\n", 792 | "INFO:tensorflow:Finished evaluation at 2017-03-28-07:59:43\n", 793 | "INFO:tensorflow:Saving dict for global step 2000: accuracy = 0.933526, auc = 0.991921, global_step = 2000, loss = 0.178961\n", 794 | "WARNING:tensorflow:Skipping summary for global_step, must be a float or np.float32.\n" 795 | ] 796 | } 797 | ], 798 | "source": [ 799 | "car_results = car_classifier.evaluate(input_fn=car_test_input_fn, steps=1)" 800 | ] 801 | }, 802 | { 803 | "cell_type": "code", 804 | "execution_count": 353, 805 | "metadata": { 806 | "collapsed": false 807 | }, 808 | "outputs": [ 809 | { 810 | "data": { 811 | "text/plain": [ 812 | "{'accuracy': 0.93352604,\n", 813 | " 'auc': 0.99192089,\n", 814 | " 'global_step': 2000,\n", 815 | " 'loss': 0.17896064}" 816 | ] 817 | }, 818 | "execution_count": 353, 819 | "metadata": {}, 820 | "output_type": "execute_result" 821 | } 822 | ], 823 | "source": [ 824 | "car_results" 825 | ] 826 | }, 827 | { 828 | "cell_type": "code", 829 | "execution_count": null, 830 | "metadata": { 831 | "collapsed": true 832 | }, 833 | "outputs": [], 834 | "source": [] 835 | } 836 | ], 837 | "metadata": { 838 | "kernelspec": { 839 | "display_name": "Python 2", 840 | "language": "python", 841 | "name": "python2" 842 | }, 843 | "language_info": { 844 | "codemirror_mode": { 845 | "name": "ipython", 846 | "version": 2 847 | }, 848 | "file_extension": ".py", 849 | "mimetype": "text/x-python", 850 | "name": "python", 851 | "nbconvert_exporter": "python", 852 | "pygments_lexer": "ipython2", 853 | "version": "2.7.11" 854 | } 855 | }, 856 | "nbformat": 4, 857 | "nbformat_minor": 0 858 | } 859 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # serverless_computing_with_google_Cloud 2 | This is the code for "Serverless Computing with Google Cloud" By Siraj Raval on Youtube 3 | 4 | 5 | ## Overview 6 | 7 | This is the code for [this](https://youtu.be/tdhVXKf_WSs) video on Youtube by Siraj Raval on serverless computing with [Google Cloud](https://cloud.google.com/ml-engine/) 8 | 9 | ## Usage 10 | 11 | Run it via the 'jupyter notebook' command in terminal. Install jupyter [here](http://jupyter.org/) 12 | 13 | ## Dependencies 14 | 15 | * pandas 16 | * tensorflow 17 | * six 18 | 19 | Install missing dependencies via [pip](https://pypi.org/project/pip/) 20 | 21 | ## Credits 22 | 23 | Credits for this code go to [ZhengZhengYu](https://github.com/ZhengzhengYu/tensorflow/blob/master/Wide%20and%20deep%20model%20for%20income%20classification.ipynb). I've merely created a wrapper to get people started. 24 | -------------------------------------------------------------------------------- /Wide and deep model for income classification.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Wide and deep model for input classification" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "## Data analysis" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "### Download data" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 51, 27 | "metadata": { 28 | "collapsed": false 29 | }, 30 | "outputs": [ 31 | { 32 | "data": { 33 | "text/plain": [ 34 | "('/tmp/workspace/wide_and_deep_model/adult.test',\n", 35 | " )" 36 | ] 37 | }, 38 | "execution_count": 51, 39 | "metadata": {}, 40 | "output_type": "execute_result" 41 | } 42 | ], 43 | "source": [ 44 | "from six.moves import urllib\n", 45 | "\n", 46 | "train_data_path = \"/tmp/workspace/wide_and_deep_model/adult.data\"\n", 47 | "urllib.request.urlretrieve(\"http://mlr.cs.umass.edu/ml/machine-learning-databases/adult/adult.data\", train_data_path)\n", 48 | "\n", 49 | "test_data_path = \"/tmp/workspace/wide_and_deep_model/adult.test\"\n", 50 | "urllib.request.urlretrieve(\"http://mlr.cs.umass.edu/ml/machine-learning-databases/adult/adult.test\", test_data_path)" 51 | ] 52 | }, 53 | { 54 | "cell_type": "markdown", 55 | "metadata": {}, 56 | "source": [ 57 | "### Define columns of the data" 58 | ] 59 | }, 60 | { 61 | "cell_type": "code", 62 | "execution_count": 52, 63 | "metadata": { 64 | "collapsed": true 65 | }, 66 | "outputs": [], 67 | "source": [ 68 | "COLUMNS = [\"age\", \"workclass\", \"fnlwgt\", \"education\", \"education_num\", \"marital_status\", \"occupation\", \"relationship\", \"race\", \"gender\",\n", 69 | " \"capital_gain\", \"capital_loss\", \"hours_per_week\", \"native_country\", \"income_bracket\"]\n", 70 | "LABEL_COLUMN = 'label'\n", 71 | "CATEGORICAL_COLUMNS = [\"workclass\", \"education\", \"marital_status\", \"occupation\",\n", 72 | " \"relationship\", \"race\", \"gender\", \"native_country\"]\n", 73 | "CONTINUOUS_COLUMNS = [\"age\", \"education_num\", \"capital_gain\", \"capital_loss\",\n", 74 | " \"hours_per_week\"]" 75 | ] 76 | }, 77 | { 78 | "cell_type": "markdown", 79 | "metadata": {}, 80 | "source": [ 81 | "### Data visulization" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": 53, 87 | "metadata": { 88 | "collapsed": false 89 | }, 90 | "outputs": [], 91 | "source": [ 92 | "import pandas as pd\n", 93 | "\n", 94 | "df_train = pd.read_csv(train_data_path, names=COLUMNS, skipinitialspace=True)\n", 95 | "df_test = pd.read_csv(test_data_path, names=COLUMNS, skipinitialspace=True, skiprows = 1)\n", 96 | "\n" 97 | ] 98 | }, 99 | { 100 | "cell_type": "code", 101 | "execution_count": 54, 102 | "metadata": { 103 | "collapsed": false 104 | }, 105 | "outputs": [], 106 | "source": [ 107 | "# convert income bracket to int\n", 108 | "df_train[LABEL_COLUMN] = (df_train['income_bracket'].apply(lambda x: '>50K' in x)).astype(int)\n", 109 | "df_test[LABEL_COLUMN] = (df_test['income_bracket'].apply(lambda x: '>50K' in x)).astype(int)" 110 | ] 111 | }, 112 | { 113 | "cell_type": "code", 114 | "execution_count": 55, 115 | "metadata": { 116 | "collapsed": false 117 | }, 118 | "outputs": [ 119 | { 120 | "data": { 121 | "text/html": [ 122 | "
\n", 123 | "\n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | " \n", 207 | " \n", 208 | " \n", 209 | " \n", 210 | " \n", 211 | " \n", 212 | " \n", 213 | " \n", 214 | " \n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | " \n", 260 | " \n", 261 | " \n", 262 | " \n", 263 | " \n", 264 | " \n", 265 | " \n", 266 | " \n", 267 | " \n", 268 | " \n", 269 | " \n", 270 | " \n", 271 | " \n", 272 | " \n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | " \n", 388 | " \n", 389 | " \n", 390 | " \n", 391 | " \n", 392 | " \n", 393 | " \n", 394 | " \n", 395 | " \n", 396 | " \n", 397 | " \n", 398 | " \n", 399 | " \n", 400 | " \n", 401 | " \n", 402 | " \n", 403 | " \n", 404 | " \n", 405 | " \n", 406 | " \n", 407 | " \n", 408 | " \n", 409 | " \n", 410 | " \n", 411 | " \n", 412 | " \n", 413 | " \n", 414 | " \n", 415 | " \n", 416 | " \n", 417 | " \n", 418 | " \n", 419 | " \n", 420 | " \n", 421 | " \n", 422 | " \n", 423 | " \n", 424 | " \n", 425 | " \n", 426 | " \n", 427 | " \n", 428 | " \n", 429 | " \n", 430 | " \n", 431 | " \n", 432 | " \n", 433 | " \n", 434 | " \n", 435 | " \n", 436 | " \n", 437 | " \n", 438 | " \n", 439 | " \n", 440 | " \n", 441 | " \n", 442 | " \n", 443 | " \n", 444 | " \n", 445 | " \n", 446 | " \n", 447 | " \n", 448 | " \n", 449 | " \n", 450 | " \n", 451 | " \n", 452 | " \n", 453 | " \n", 454 | " \n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | " \n", 489 | " \n", 490 | " \n", 491 | " \n", 492 | " \n", 493 | " \n", 494 | " \n", 495 | " \n", 496 | " \n", 497 | " \n", 498 | " \n", 499 | " \n", 500 | " \n", 501 | " \n", 502 | " \n", 503 | " \n", 504 | " \n", 505 | " \n", 506 | " \n", 507 | " \n", 508 | " \n", 509 | " \n", 510 | " \n", 511 | " \n", 512 | " \n", 513 | " \n", 514 | " \n", 515 | " \n", 516 | " \n", 517 | " \n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | " \n", 541 | " \n", 542 | " \n", 543 | " \n", 544 | " \n", 545 | " \n", 546 | " \n", 547 | " \n", 548 | " \n", 549 | " \n", 550 | " \n", 551 | " \n", 552 | " \n", 553 | " \n", 554 | " \n", 555 | " \n", 556 | " \n", 557 | " \n", 558 | " \n", 559 | " \n", 560 | " \n", 561 | " \n", 562 | " \n", 563 | " \n", 564 | " \n", 565 | " \n", 566 | " \n", 567 | " \n", 568 | " \n", 569 | " \n", 570 | " \n", 571 | " \n", 572 | " \n", 573 | " \n", 574 | " \n", 575 | " \n", 576 | " \n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | " \n", 635 | " \n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | " \n", 647 | " \n", 648 | " \n", 649 | " \n", 650 | " \n", 651 | " \n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | " \n", 659 | " \n", 660 | " \n", 661 | " \n", 662 | " \n", 663 | " \n", 664 | " \n", 665 | " \n", 666 | " \n", 667 | " \n", 668 | " \n", 669 | " \n", 670 | " \n", 671 | " \n", 672 | " \n", 673 | " \n", 674 | " \n", 675 | " \n", 676 | " \n", 677 | " \n", 678 | " \n", 679 | " \n", 680 | " \n", 681 | " \n", 682 | " \n", 683 | " \n", 684 | " \n", 685 | " \n", 686 | " \n", 687 | " \n", 688 | " \n", 689 | " \n", 690 | " \n", 691 | " \n", 692 | " \n", 693 | " \n", 694 | " \n", 695 | " \n", 696 | " \n", 697 | " \n", 698 | " \n", 699 | " \n", 700 | " \n", 701 | " \n", 702 | " \n", 703 | " \n", 704 | " \n", 705 | " \n", 706 | " \n", 707 | " \n", 708 | " \n", 709 | " \n", 710 | " \n", 711 | " \n", 712 | " \n", 713 | " \n", 714 | " \n", 715 | " \n", 716 | " \n", 717 | " \n", 718 | " \n", 719 | " \n", 720 | " \n", 721 | " \n", 722 | " \n", 723 | " \n", 724 | " \n", 725 | " \n", 726 | " \n", 727 | " \n", 728 | " \n", 729 | " \n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | " \n", 748 | " \n", 749 | " \n", 750 | " \n", 751 | " \n", 752 | " \n", 753 | " \n", 754 | " \n", 755 | " \n", 756 | " \n", 757 | " \n", 758 | " \n", 759 | " \n", 760 | " \n", 761 | " \n", 762 | " \n", 763 | " \n", 764 | " \n", 765 | " \n", 766 | " \n", 767 | " \n", 768 | " \n", 769 | " \n", 770 | " \n", 771 | " \n", 772 | " \n", 773 | " \n", 774 | " \n", 775 | " \n", 776 | " \n", 777 | " \n", 778 | " \n", 779 | " \n", 780 | " \n", 781 | " \n", 782 | " \n", 783 | " \n", 784 | " \n", 785 | " \n", 786 | " \n", 787 | " \n", 788 | " \n", 789 | " \n", 790 | " \n", 791 | " \n", 792 | " \n", 793 | " \n", 794 | " \n", 795 | " \n", 796 | " \n", 797 | " \n", 798 | " \n", 799 | " \n", 800 | " \n", 801 | " \n", 802 | " \n", 803 | " \n", 804 | " \n", 805 | " \n", 806 | " \n", 807 | " \n", 808 | " \n", 809 | " \n", 810 | " \n", 811 | " \n", 812 | " \n", 813 | " \n", 814 | " \n", 815 | " \n", 816 | " \n", 817 | " \n", 818 | " \n", 819 | " \n", 820 | " \n", 821 | " \n", 822 | " \n", 823 | " \n", 824 | " \n", 825 | " \n", 826 | " \n", 827 | " \n", 828 | " \n", 829 | " \n", 830 | " \n", 831 | " \n", 832 | " \n", 833 | " \n", 834 | " \n", 835 | " \n", 836 | " \n", 837 | " \n", 838 | " \n", 839 | " \n", 840 | " \n", 841 | " \n", 842 | " \n", 843 | " \n", 844 | " \n", 845 | " \n", 846 | " \n", 847 | " \n", 848 | " \n", 849 | " \n", 850 | " \n", 851 | " \n", 852 | " \n", 853 | " \n", 854 | " \n", 855 | " \n", 856 | " \n", 857 | " \n", 858 | " \n", 859 | " \n", 860 | " \n", 861 | " \n", 862 | " \n", 863 | " \n", 864 | " \n", 865 | " \n", 866 | " \n", 867 | " \n", 868 | " \n", 869 | " \n", 870 | " \n", 871 | " \n", 872 | " \n", 873 | " \n", 874 | " \n", 875 | " \n", 876 | " \n", 877 | " \n", 878 | " \n", 879 | " \n", 880 | " \n", 881 | " \n", 882 | " \n", 883 | " \n", 884 | " \n", 885 | " \n", 886 | " \n", 887 | " \n", 888 | " \n", 889 | " \n", 890 | " \n", 891 | " \n", 892 | " \n", 893 | " \n", 894 | " \n", 895 | " \n", 896 | " \n", 897 | " \n", 898 | " \n", 899 | " \n", 900 | " \n", 901 | " \n", 902 | " \n", 903 | " \n", 904 | " \n", 905 | " \n", 906 | " \n", 907 | " \n", 908 | " \n", 909 | " \n", 910 | " \n", 911 | " \n", 912 | " \n", 913 | " \n", 914 | " \n", 915 | " \n", 916 | " \n", 917 | " \n", 918 | " \n", 919 | " \n", 920 | " \n", 921 | " \n", 922 | " \n", 923 | " \n", 924 | " \n", 925 | " \n", 926 | " \n", 927 | " \n", 928 | " \n", 929 | " \n", 930 | " \n", 931 | " \n", 932 | " \n", 933 | " \n", 934 | " \n", 935 | " \n", 936 | " \n", 937 | " \n", 938 | " \n", 939 | " \n", 940 | " \n", 941 | " \n", 942 | " \n", 943 | " \n", 944 | " \n", 945 | " \n", 946 | " \n", 947 | " \n", 948 | " \n", 949 | " \n", 950 | " \n", 951 | " \n", 952 | " \n", 953 | " \n", 954 | " \n", 955 | " \n", 956 | " \n", 957 | " \n", 958 | " \n", 959 | " \n", 960 | " \n", 961 | " \n", 962 | " \n", 963 | " \n", 964 | " \n", 965 | " \n", 966 | " \n", 967 | " \n", 968 | " \n", 969 | " \n", 970 | " \n", 971 | " \n", 972 | " \n", 973 | " \n", 974 | " \n", 975 | " \n", 976 | " \n", 977 | " \n", 978 | " \n", 979 | " \n", 980 | " \n", 981 | " \n", 982 | " \n", 983 | " \n", 984 | " \n", 985 | " \n", 986 | " \n", 987 | " \n", 988 | " \n", 989 | " \n", 990 | " \n", 991 | " \n", 992 | " \n", 993 | " \n", 994 | " \n", 995 | " \n", 996 | " \n", 997 | " \n", 998 | " \n", 999 | " \n", 1000 | " \n", 1001 | " \n", 1002 | " \n", 1003 | " \n", 1004 | " \n", 1005 | " \n", 1006 | " \n", 1007 | " \n", 1008 | " \n", 1009 | " \n", 1010 | " \n", 1011 | " \n", 1012 | " \n", 1013 | " \n", 1014 | " \n", 1015 | " \n", 1016 | " \n", 1017 | " \n", 1018 | " \n", 1019 | " \n", 1020 | " \n", 1021 | " \n", 1022 | " \n", 1023 | " \n", 1024 | " \n", 1025 | " \n", 1026 | " \n", 1027 | " \n", 1028 | " \n", 1029 | " \n", 1030 | " \n", 1031 | " \n", 1032 | " \n", 1033 | " \n", 1034 | " \n", 1035 | " \n", 1036 | " \n", 1037 | " \n", 1038 | " \n", 1039 | " \n", 1040 | " \n", 1041 | " \n", 1042 | " \n", 1043 | " \n", 1044 | " \n", 1045 | " \n", 1046 | " \n", 1047 | " \n", 1048 | " \n", 1049 | " \n", 1050 | " \n", 1051 | " \n", 1052 | " \n", 1053 | " \n", 1054 | " \n", 1055 | " \n", 1056 | " \n", 1057 | " \n", 1058 | " \n", 1059 | " \n", 1060 | " \n", 1061 | " \n", 1062 | " \n", 1063 | " \n", 1064 | " \n", 1065 | " \n", 1066 | " \n", 1067 | " \n", 1068 | " \n", 1069 | " \n", 1070 | " \n", 1071 | " \n", 1072 | " \n", 1073 | " \n", 1074 | " \n", 1075 | " \n", 1076 | " \n", 1077 | " \n", 1078 | " \n", 1079 | " \n", 1080 | " \n", 1081 | " \n", 1082 | " \n", 1083 | " \n", 1084 | " \n", 1085 | " \n", 1086 | " \n", 1087 | " \n", 1088 | " \n", 1089 | " \n", 1090 | " \n", 1091 | " \n", 1092 | " \n", 1093 | " \n", 1094 | " \n", 1095 | " \n", 1096 | " \n", 1097 | " \n", 1098 | " \n", 1099 | " \n", 1100 | " \n", 1101 | " \n", 1102 | " \n", 1103 | " \n", 1104 | " \n", 1105 | " \n", 1106 | " \n", 1107 | " \n", 1108 | " \n", 1109 | " \n", 1110 | " \n", 1111 | " \n", 1112 | " \n", 1113 | " \n", 1114 | " \n", 1115 | " \n", 1116 | " \n", 1117 | " \n", 1118 | " \n", 1119 | " \n", 1120 | " \n", 1121 | " \n", 1122 | " \n", 1123 | " \n", 1124 | " \n", 1125 | " \n", 1126 | " \n", 1127 | " \n", 1128 | " \n", 1129 | " \n", 1130 | " \n", 1131 | " \n", 1132 | " \n", 1133 | " \n", 1134 | " \n", 1135 | " \n", 1136 | " \n", 1137 | " \n", 1138 | " \n", 1139 | " \n", 1140 | " \n", 1141 | " \n", 1142 | " \n", 1143 | " \n", 1144 | " \n", 1145 | " \n", 1146 | " \n", 1147 | " \n", 1148 | " \n", 1149 | " \n", 1150 | " \n", 1151 | " \n", 1152 | " \n", 1153 | " \n", 1154 | " \n", 1155 | " \n", 1156 | " \n", 1157 | " \n", 1158 | " \n", 1159 | " \n", 1160 | " \n", 1161 | " \n", 1162 | " \n", 1163 | " \n", 1164 | " \n", 1165 | " \n", 1166 | " \n", 1167 | " \n", 1168 | " \n", 1169 | " \n", 1170 | " \n", 1171 | " \n", 1172 | " \n", 1173 | " \n", 1174 | " \n", 1175 | " \n", 1176 | " \n", 1177 | " \n", 1178 | " \n", 1179 | " \n", 1180 | " \n", 1181 | " \n", 1182 | " \n", 1183 | " \n", 1184 | " \n", 1185 | " \n", 1186 | " \n", 1187 | " \n", 1188 | " \n", 1189 | " \n", 1190 | " \n", 1191 | " \n", 1192 | " \n", 1193 | " \n", 1194 | " \n", 1195 | " \n", 1196 | " \n", 1197 | " \n", 1198 | " \n", 1199 | " \n", 1200 | " \n", 1201 | " \n", 1202 | " \n", 1203 | " \n", 1204 | " \n", 1205 | " \n", 1206 | " \n", 1207 | " \n", 1208 | " \n", 1209 | " \n", 1210 | " \n", 1211 | " \n", 1212 | " \n", 1213 | " \n", 1214 | " \n", 1215 | " \n", 1216 | " \n", 1217 | " \n", 1218 | " \n", 1219 | " \n", 1220 | " \n", 1221 | " \n", 1222 | " \n", 1223 | " \n", 1224 | " \n", 1225 | " \n", 1226 | " \n", 1227 | " \n", 1228 | " \n", 1229 | " \n", 1230 | " \n", 1231 | " \n", 1232 | " \n", 1233 | " \n", 1234 | " \n", 1235 | " \n", 1236 | " \n", 1237 | " \n", 1238 | " \n", 1239 | " \n", 1240 | " \n", 1241 | " \n", 1242 | " \n", 1243 | " \n", 1244 | " \n", 1245 | " \n", 1246 | " \n", 1247 | " \n", 1248 | " \n", 1249 | " \n", 1250 | " \n", 1251 | " \n", 1252 | " \n", 1253 | " \n", 1254 | " \n", 1255 | " \n", 1256 | " \n", 1257 | " \n", 1258 | " \n", 1259 | " \n", 1260 | " \n", 1261 | " \n", 1262 | " \n", 1263 | " \n", 1264 | " \n", 1265 | " \n", 1266 | " \n", 1267 | " \n", 1268 | " \n", 1269 | " \n", 1270 | " \n", 1271 | " \n", 1272 | " \n", 1273 | " \n", 1274 | " \n", 1275 | " \n", 1276 | " \n", 1277 | " \n", 1278 | " \n", 1279 | " \n", 1280 | " \n", 1281 | " \n", 1282 | " \n", 1283 | " \n", 1284 | " \n", 1285 | " \n", 1286 | " \n", 1287 | " \n", 1288 | " \n", 1289 | " \n", 1290 | " \n", 1291 | " \n", 1292 | " \n", 1293 | " \n", 1294 | " \n", 1295 | " \n", 1296 | " \n", 1297 | " \n", 1298 | " \n", 1299 | " \n", 1300 | " \n", 1301 | " \n", 1302 | " \n", 1303 | " \n", 1304 | " \n", 1305 | " \n", 1306 | "
ageworkclassfnlwgteducationeducation_nummarital_statusoccupationrelationshipracegendercapital_gaincapital_losshours_per_weeknative_countryincome_bracketlabel
039State-gov77516Bachelors13Never-marriedAdm-clericalNot-in-familyWhiteMale2174040United-States<=50K0
150Self-emp-not-inc83311Bachelors13Married-civ-spouseExec-managerialHusbandWhiteMale0013United-States<=50K0
238Private215646HS-grad9DivorcedHandlers-cleanersNot-in-familyWhiteMale0040United-States<=50K0
353Private23472111th7Married-civ-spouseHandlers-cleanersHusbandBlackMale0040United-States<=50K0
428Private338409Bachelors13Married-civ-spouseProf-specialtyWifeBlackFemale0040Cuba<=50K0
537Private284582Masters14Married-civ-spouseExec-managerialWifeWhiteFemale0040United-States<=50K0
649Private1601879th5Married-spouse-absentOther-serviceNot-in-familyBlackFemale0016Jamaica<=50K0
752Self-emp-not-inc209642HS-grad9Married-civ-spouseExec-managerialHusbandWhiteMale0045United-States>50K1
831Private45781Masters14Never-marriedProf-specialtyNot-in-familyWhiteFemale14084050United-States>50K1
942Private159449Bachelors13Married-civ-spouseExec-managerialHusbandWhiteMale5178040United-States>50K1
1037Private280464Some-college10Married-civ-spouseExec-managerialHusbandBlackMale0080United-States>50K1
1130State-gov141297Bachelors13Married-civ-spouseProf-specialtyHusbandAsian-Pac-IslanderMale0040India>50K1
1223Private122272Bachelors13Never-marriedAdm-clericalOwn-childWhiteFemale0030United-States<=50K0
1332Private205019Assoc-acdm12Never-marriedSalesNot-in-familyBlackMale0050United-States<=50K0
1440Private121772Assoc-voc11Married-civ-spouseCraft-repairHusbandAsian-Pac-IslanderMale0040?>50K1
1534Private2454877th-8th4Married-civ-spouseTransport-movingHusbandAmer-Indian-EskimoMale0045Mexico<=50K0
1625Self-emp-not-inc176756HS-grad9Never-marriedFarming-fishingOwn-childWhiteMale0035United-States<=50K0
1732Private186824HS-grad9Never-marriedMachine-op-inspctUnmarriedWhiteMale0040United-States<=50K0
1838Private2888711th7Married-civ-spouseSalesHusbandWhiteMale0050United-States<=50K0
1943Self-emp-not-inc292175Masters14DivorcedExec-managerialUnmarriedWhiteFemale0045United-States>50K1
2040Private193524Doctorate16Married-civ-spouseProf-specialtyHusbandWhiteMale0060United-States>50K1
2154Private302146HS-grad9SeparatedOther-serviceUnmarriedBlackFemale0020United-States<=50K0
2235Federal-gov768459th5Married-civ-spouseFarming-fishingHusbandBlackMale0040United-States<=50K0
2343Private11703711th7Married-civ-spouseTransport-movingHusbandWhiteMale0204240United-States<=50K0
2459Private109015HS-grad9DivorcedTech-supportUnmarriedWhiteFemale0040United-States<=50K0
2556Local-gov216851Bachelors13Married-civ-spouseTech-supportHusbandWhiteMale0040United-States>50K1
2619Private168294HS-grad9Never-marriedCraft-repairOwn-childWhiteMale0040United-States<=50K0
2754?180211Some-college10Married-civ-spouse?HusbandAsian-Pac-IslanderMale0060South>50K1
2839Private367260HS-grad9DivorcedExec-managerialNot-in-familyWhiteMale0080United-States<=50K0
2949Private193366HS-grad9Married-civ-spouseCraft-repairHusbandWhiteMale0040United-States<=50K0
...................................................
3253130?33811Bachelors13Never-married?Not-in-familyAsian-Pac-IslanderFemale0099United-States<=50K0
3253234Private204461Doctorate16Married-civ-spouseProf-specialtyHusbandWhiteMale0060United-States>50K1
3253354Private337992Bachelors13Married-civ-spouseExec-managerialHusbandAsian-Pac-IslanderMale0050Japan>50K1
3253437Private179137Some-college10DivorcedAdm-clericalUnmarriedWhiteFemale0039United-States<=50K0
3253522Private32503312th8Never-marriedProtective-servOwn-childBlackMale0035United-States<=50K0
3253634Private160216Bachelors13Never-marriedExec-managerialNot-in-familyWhiteFemale0055United-States>50K1
3253730Private345898HS-grad9Never-marriedCraft-repairNot-in-familyBlackMale0046United-States<=50K0
3253838Private139180Bachelors13DivorcedProf-specialtyUnmarriedBlackFemale15020045United-States>50K1
3253971?287372Doctorate16Married-civ-spouse?HusbandWhiteMale0010United-States>50K1
3254045State-gov252208HS-grad9SeparatedAdm-clericalOwn-childWhiteFemale0040United-States<=50K0
3254141?202822HS-grad9Separated?Not-in-familyBlackFemale0032United-States<=50K0
3254272?129912HS-grad9Married-civ-spouse?HusbandWhiteMale0025United-States<=50K0
3254345Local-gov119199Assoc-acdm12DivorcedProf-specialtyUnmarriedWhiteFemale0048United-States<=50K0
3254431Private199655Masters14DivorcedOther-serviceNot-in-familyOtherFemale0030United-States<=50K0
3254539Local-gov111499Assoc-acdm12Married-civ-spouseAdm-clericalWifeWhiteFemale0020United-States>50K1
3254637Private198216Assoc-acdm12DivorcedTech-supportNot-in-familyWhiteFemale0040United-States<=50K0
3254743Private260761HS-grad9Married-civ-spouseMachine-op-inspctHusbandWhiteMale0040Mexico<=50K0
3254865Self-emp-not-inc99359Prof-school15Never-marriedProf-specialtyNot-in-familyWhiteMale1086060United-States<=50K0
3254943State-gov255835Some-college10DivorcedAdm-clericalOther-relativeWhiteFemale0040United-States<=50K0
3255043Self-emp-not-inc27242Some-college10Married-civ-spouseCraft-repairHusbandWhiteMale0050United-States<=50K0
3255132Private3406610th6Married-civ-spouseHandlers-cleanersHusbandAmer-Indian-EskimoMale0040United-States<=50K0
3255243Private84661Assoc-voc11Married-civ-spouseSalesHusbandWhiteMale0045United-States<=50K0
3255332Private116138Masters14Never-marriedTech-supportNot-in-familyAsian-Pac-IslanderMale0011Taiwan<=50K0
3255453Private321865Masters14Married-civ-spouseExec-managerialHusbandWhiteMale0040United-States>50K1
3255522Private310152Some-college10Never-marriedProtective-servNot-in-familyWhiteMale0040United-States<=50K0
3255627Private257302Assoc-acdm12Married-civ-spouseTech-supportWifeWhiteFemale0038United-States<=50K0
3255740Private154374HS-grad9Married-civ-spouseMachine-op-inspctHusbandWhiteMale0040United-States>50K1
3255858Private151910HS-grad9WidowedAdm-clericalUnmarriedWhiteFemale0040United-States<=50K0
3255922Private201490HS-grad9Never-marriedAdm-clericalOwn-childWhiteMale0020United-States<=50K0
3256052Self-emp-inc287927HS-grad9Married-civ-spouseExec-managerialWifeWhiteFemale15024040United-States>50K1
\n", 1307 | "

32561 rows × 16 columns

\n", 1308 | "
" 1309 | ], 1310 | "text/plain": [ 1311 | " age workclass fnlwgt education education_num \\\n", 1312 | "0 39 State-gov 77516 Bachelors 13 \n", 1313 | "1 50 Self-emp-not-inc 83311 Bachelors 13 \n", 1314 | "2 38 Private 215646 HS-grad 9 \n", 1315 | "3 53 Private 234721 11th 7 \n", 1316 | "4 28 Private 338409 Bachelors 13 \n", 1317 | "5 37 Private 284582 Masters 14 \n", 1318 | "6 49 Private 160187 9th 5 \n", 1319 | "7 52 Self-emp-not-inc 209642 HS-grad 9 \n", 1320 | "8 31 Private 45781 Masters 14 \n", 1321 | "9 42 Private 159449 Bachelors 13 \n", 1322 | "10 37 Private 280464 Some-college 10 \n", 1323 | "11 30 State-gov 141297 Bachelors 13 \n", 1324 | "12 23 Private 122272 Bachelors 13 \n", 1325 | "13 32 Private 205019 Assoc-acdm 12 \n", 1326 | "14 40 Private 121772 Assoc-voc 11 \n", 1327 | "15 34 Private 245487 7th-8th 4 \n", 1328 | "16 25 Self-emp-not-inc 176756 HS-grad 9 \n", 1329 | "17 32 Private 186824 HS-grad 9 \n", 1330 | "18 38 Private 28887 11th 7 \n", 1331 | "19 43 Self-emp-not-inc 292175 Masters 14 \n", 1332 | "20 40 Private 193524 Doctorate 16 \n", 1333 | "21 54 Private 302146 HS-grad 9 \n", 1334 | "22 35 Federal-gov 76845 9th 5 \n", 1335 | "23 43 Private 117037 11th 7 \n", 1336 | "24 59 Private 109015 HS-grad 9 \n", 1337 | "25 56 Local-gov 216851 Bachelors 13 \n", 1338 | "26 19 Private 168294 HS-grad 9 \n", 1339 | "27 54 ? 180211 Some-college 10 \n", 1340 | "28 39 Private 367260 HS-grad 9 \n", 1341 | "29 49 Private 193366 HS-grad 9 \n", 1342 | "... ... ... ... ... ... \n", 1343 | "32531 30 ? 33811 Bachelors 13 \n", 1344 | "32532 34 Private 204461 Doctorate 16 \n", 1345 | "32533 54 Private 337992 Bachelors 13 \n", 1346 | "32534 37 Private 179137 Some-college 10 \n", 1347 | "32535 22 Private 325033 12th 8 \n", 1348 | "32536 34 Private 160216 Bachelors 13 \n", 1349 | "32537 30 Private 345898 HS-grad 9 \n", 1350 | "32538 38 Private 139180 Bachelors 13 \n", 1351 | "32539 71 ? 287372 Doctorate 16 \n", 1352 | "32540 45 State-gov 252208 HS-grad 9 \n", 1353 | "32541 41 ? 202822 HS-grad 9 \n", 1354 | "32542 72 ? 129912 HS-grad 9 \n", 1355 | "32543 45 Local-gov 119199 Assoc-acdm 12 \n", 1356 | "32544 31 Private 199655 Masters 14 \n", 1357 | "32545 39 Local-gov 111499 Assoc-acdm 12 \n", 1358 | "32546 37 Private 198216 Assoc-acdm 12 \n", 1359 | "32547 43 Private 260761 HS-grad 9 \n", 1360 | "32548 65 Self-emp-not-inc 99359 Prof-school 15 \n", 1361 | "32549 43 State-gov 255835 Some-college 10 \n", 1362 | "32550 43 Self-emp-not-inc 27242 Some-college 10 \n", 1363 | "32551 32 Private 34066 10th 6 \n", 1364 | "32552 43 Private 84661 Assoc-voc 11 \n", 1365 | "32553 32 Private 116138 Masters 14 \n", 1366 | "32554 53 Private 321865 Masters 14 \n", 1367 | "32555 22 Private 310152 Some-college 10 \n", 1368 | "32556 27 Private 257302 Assoc-acdm 12 \n", 1369 | "32557 40 Private 154374 HS-grad 9 \n", 1370 | "32558 58 Private 151910 HS-grad 9 \n", 1371 | "32559 22 Private 201490 HS-grad 9 \n", 1372 | "32560 52 Self-emp-inc 287927 HS-grad 9 \n", 1373 | "\n", 1374 | " marital_status occupation relationship \\\n", 1375 | "0 Never-married Adm-clerical Not-in-family \n", 1376 | "1 Married-civ-spouse Exec-managerial Husband \n", 1377 | "2 Divorced Handlers-cleaners Not-in-family \n", 1378 | "3 Married-civ-spouse Handlers-cleaners Husband \n", 1379 | "4 Married-civ-spouse Prof-specialty Wife \n", 1380 | "5 Married-civ-spouse Exec-managerial Wife \n", 1381 | "6 Married-spouse-absent Other-service Not-in-family \n", 1382 | "7 Married-civ-spouse Exec-managerial Husband \n", 1383 | "8 Never-married Prof-specialty Not-in-family \n", 1384 | "9 Married-civ-spouse Exec-managerial Husband \n", 1385 | "10 Married-civ-spouse Exec-managerial Husband \n", 1386 | "11 Married-civ-spouse Prof-specialty Husband \n", 1387 | "12 Never-married Adm-clerical Own-child \n", 1388 | "13 Never-married Sales Not-in-family \n", 1389 | "14 Married-civ-spouse Craft-repair Husband \n", 1390 | "15 Married-civ-spouse Transport-moving Husband \n", 1391 | "16 Never-married Farming-fishing Own-child \n", 1392 | "17 Never-married Machine-op-inspct Unmarried \n", 1393 | "18 Married-civ-spouse Sales Husband \n", 1394 | "19 Divorced Exec-managerial Unmarried \n", 1395 | "20 Married-civ-spouse Prof-specialty Husband \n", 1396 | "21 Separated Other-service Unmarried \n", 1397 | "22 Married-civ-spouse Farming-fishing Husband \n", 1398 | "23 Married-civ-spouse Transport-moving Husband \n", 1399 | "24 Divorced Tech-support Unmarried \n", 1400 | "25 Married-civ-spouse Tech-support Husband \n", 1401 | "26 Never-married Craft-repair Own-child \n", 1402 | "27 Married-civ-spouse ? Husband \n", 1403 | "28 Divorced Exec-managerial Not-in-family \n", 1404 | "29 Married-civ-spouse Craft-repair Husband \n", 1405 | "... ... ... ... \n", 1406 | "32531 Never-married ? Not-in-family \n", 1407 | "32532 Married-civ-spouse Prof-specialty Husband \n", 1408 | "32533 Married-civ-spouse Exec-managerial Husband \n", 1409 | "32534 Divorced Adm-clerical Unmarried \n", 1410 | "32535 Never-married Protective-serv Own-child \n", 1411 | "32536 Never-married Exec-managerial Not-in-family \n", 1412 | "32537 Never-married Craft-repair Not-in-family \n", 1413 | "32538 Divorced Prof-specialty Unmarried \n", 1414 | "32539 Married-civ-spouse ? Husband \n", 1415 | "32540 Separated Adm-clerical Own-child \n", 1416 | "32541 Separated ? Not-in-family \n", 1417 | "32542 Married-civ-spouse ? Husband \n", 1418 | "32543 Divorced Prof-specialty Unmarried \n", 1419 | "32544 Divorced Other-service Not-in-family \n", 1420 | "32545 Married-civ-spouse Adm-clerical Wife \n", 1421 | "32546 Divorced Tech-support Not-in-family \n", 1422 | "32547 Married-civ-spouse Machine-op-inspct Husband \n", 1423 | "32548 Never-married Prof-specialty Not-in-family \n", 1424 | "32549 Divorced Adm-clerical Other-relative \n", 1425 | "32550 Married-civ-spouse Craft-repair Husband \n", 1426 | "32551 Married-civ-spouse Handlers-cleaners Husband \n", 1427 | "32552 Married-civ-spouse Sales Husband \n", 1428 | "32553 Never-married Tech-support Not-in-family \n", 1429 | "32554 Married-civ-spouse Exec-managerial Husband \n", 1430 | "32555 Never-married Protective-serv Not-in-family \n", 1431 | "32556 Married-civ-spouse Tech-support Wife \n", 1432 | "32557 Married-civ-spouse Machine-op-inspct Husband \n", 1433 | "32558 Widowed Adm-clerical Unmarried \n", 1434 | "32559 Never-married Adm-clerical Own-child \n", 1435 | "32560 Married-civ-spouse Exec-managerial Wife \n", 1436 | "\n", 1437 | " race gender capital_gain capital_loss hours_per_week \\\n", 1438 | "0 White Male 2174 0 40 \n", 1439 | "1 White Male 0 0 13 \n", 1440 | "2 White Male 0 0 40 \n", 1441 | "3 Black Male 0 0 40 \n", 1442 | "4 Black Female 0 0 40 \n", 1443 | "5 White Female 0 0 40 \n", 1444 | "6 Black Female 0 0 16 \n", 1445 | "7 White Male 0 0 45 \n", 1446 | "8 White Female 14084 0 50 \n", 1447 | "9 White Male 5178 0 40 \n", 1448 | "10 Black Male 0 0 80 \n", 1449 | "11 Asian-Pac-Islander Male 0 0 40 \n", 1450 | "12 White Female 0 0 30 \n", 1451 | "13 Black Male 0 0 50 \n", 1452 | "14 Asian-Pac-Islander Male 0 0 40 \n", 1453 | "15 Amer-Indian-Eskimo Male 0 0 45 \n", 1454 | "16 White Male 0 0 35 \n", 1455 | "17 White Male 0 0 40 \n", 1456 | "18 White Male 0 0 50 \n", 1457 | "19 White Female 0 0 45 \n", 1458 | "20 White Male 0 0 60 \n", 1459 | "21 Black Female 0 0 20 \n", 1460 | "22 Black Male 0 0 40 \n", 1461 | "23 White Male 0 2042 40 \n", 1462 | "24 White Female 0 0 40 \n", 1463 | "25 White Male 0 0 40 \n", 1464 | "26 White Male 0 0 40 \n", 1465 | "27 Asian-Pac-Islander Male 0 0 60 \n", 1466 | "28 White Male 0 0 80 \n", 1467 | "29 White Male 0 0 40 \n", 1468 | "... ... ... ... ... ... \n", 1469 | "32531 Asian-Pac-Islander Female 0 0 99 \n", 1470 | "32532 White Male 0 0 60 \n", 1471 | "32533 Asian-Pac-Islander Male 0 0 50 \n", 1472 | "32534 White Female 0 0 39 \n", 1473 | "32535 Black Male 0 0 35 \n", 1474 | "32536 White Female 0 0 55 \n", 1475 | "32537 Black Male 0 0 46 \n", 1476 | "32538 Black Female 15020 0 45 \n", 1477 | "32539 White Male 0 0 10 \n", 1478 | "32540 White Female 0 0 40 \n", 1479 | "32541 Black Female 0 0 32 \n", 1480 | "32542 White Male 0 0 25 \n", 1481 | "32543 White Female 0 0 48 \n", 1482 | "32544 Other Female 0 0 30 \n", 1483 | "32545 White Female 0 0 20 \n", 1484 | "32546 White Female 0 0 40 \n", 1485 | "32547 White Male 0 0 40 \n", 1486 | "32548 White Male 1086 0 60 \n", 1487 | "32549 White Female 0 0 40 \n", 1488 | "32550 White Male 0 0 50 \n", 1489 | "32551 Amer-Indian-Eskimo Male 0 0 40 \n", 1490 | "32552 White Male 0 0 45 \n", 1491 | "32553 Asian-Pac-Islander Male 0 0 11 \n", 1492 | "32554 White Male 0 0 40 \n", 1493 | "32555 White Male 0 0 40 \n", 1494 | "32556 White Female 0 0 38 \n", 1495 | "32557 White Male 0 0 40 \n", 1496 | "32558 White Female 0 0 40 \n", 1497 | "32559 White Male 0 0 20 \n", 1498 | "32560 White Female 15024 0 40 \n", 1499 | "\n", 1500 | " native_country income_bracket label \n", 1501 | "0 United-States <=50K 0 \n", 1502 | "1 United-States <=50K 0 \n", 1503 | "2 United-States <=50K 0 \n", 1504 | "3 United-States <=50K 0 \n", 1505 | "4 Cuba <=50K 0 \n", 1506 | "5 United-States <=50K 0 \n", 1507 | "6 Jamaica <=50K 0 \n", 1508 | "7 United-States >50K 1 \n", 1509 | "8 United-States >50K 1 \n", 1510 | "9 United-States >50K 1 \n", 1511 | "10 United-States >50K 1 \n", 1512 | "11 India >50K 1 \n", 1513 | "12 United-States <=50K 0 \n", 1514 | "13 United-States <=50K 0 \n", 1515 | "14 ? >50K 1 \n", 1516 | "15 Mexico <=50K 0 \n", 1517 | "16 United-States <=50K 0 \n", 1518 | "17 United-States <=50K 0 \n", 1519 | "18 United-States <=50K 0 \n", 1520 | "19 United-States >50K 1 \n", 1521 | "20 United-States >50K 1 \n", 1522 | "21 United-States <=50K 0 \n", 1523 | "22 United-States <=50K 0 \n", 1524 | "23 United-States <=50K 0 \n", 1525 | "24 United-States <=50K 0 \n", 1526 | "25 United-States >50K 1 \n", 1527 | "26 United-States <=50K 0 \n", 1528 | "27 South >50K 1 \n", 1529 | "28 United-States <=50K 0 \n", 1530 | "29 United-States <=50K 0 \n", 1531 | "... ... ... ... \n", 1532 | "32531 United-States <=50K 0 \n", 1533 | "32532 United-States >50K 1 \n", 1534 | "32533 Japan >50K 1 \n", 1535 | "32534 United-States <=50K 0 \n", 1536 | "32535 United-States <=50K 0 \n", 1537 | "32536 United-States >50K 1 \n", 1538 | "32537 United-States <=50K 0 \n", 1539 | "32538 United-States >50K 1 \n", 1540 | "32539 United-States >50K 1 \n", 1541 | "32540 United-States <=50K 0 \n", 1542 | "32541 United-States <=50K 0 \n", 1543 | "32542 United-States <=50K 0 \n", 1544 | "32543 United-States <=50K 0 \n", 1545 | "32544 United-States <=50K 0 \n", 1546 | "32545 United-States >50K 1 \n", 1547 | "32546 United-States <=50K 0 \n", 1548 | "32547 Mexico <=50K 0 \n", 1549 | "32548 United-States <=50K 0 \n", 1550 | "32549 United-States <=50K 0 \n", 1551 | "32550 United-States <=50K 0 \n", 1552 | "32551 United-States <=50K 0 \n", 1553 | "32552 United-States <=50K 0 \n", 1554 | "32553 Taiwan <=50K 0 \n", 1555 | "32554 United-States >50K 1 \n", 1556 | "32555 United-States <=50K 0 \n", 1557 | "32556 United-States <=50K 0 \n", 1558 | "32557 United-States >50K 1 \n", 1559 | "32558 United-States <=50K 0 \n", 1560 | "32559 United-States <=50K 0 \n", 1561 | "32560 United-States >50K 1 \n", 1562 | "\n", 1563 | "[32561 rows x 16 columns]" 1564 | ] 1565 | }, 1566 | "execution_count": 55, 1567 | "metadata": {}, 1568 | "output_type": "execute_result" 1569 | } 1570 | ], 1571 | "source": [ 1572 | "df_train" 1573 | ] 1574 | }, 1575 | { 1576 | "cell_type": "markdown", 1577 | "metadata": {}, 1578 | "source": [ 1579 | "### For continuous input" 1580 | ] 1581 | }, 1582 | { 1583 | "cell_type": "code", 1584 | "execution_count": 56, 1585 | "metadata": { 1586 | "collapsed": false 1587 | }, 1588 | "outputs": [ 1589 | { 1590 | "data": { 1591 | "text/plain": [ 1592 | "" 1593 | ] 1594 | }, 1595 | "execution_count": 56, 1596 | "metadata": {}, 1597 | "output_type": "execute_result" 1598 | }, 1599 | { 1600 | "data": { 1601 | "image/png": "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\n8XK2AS2/ytu66durfZ3nx7fGfp1ncHAwgRwcHMyhoaEEcmhoKDMzBwYGEsiBgYHMzFy2bFkCuWzZ\nsszMXLduXQ4MDOS6detydHQ0FyxYkKOjo5mZed555yWQ5513XmZmrl+/PufNm5fr16/PzZs358KF\nC3Pz5s2Zmblnz5785Cc/mXv27MnMzG3btuWKFSty27ZtmZk5Pj6eO3bsyPHx8Txy5Eju27cvjxw5\nkpl5XLu5b9n8+fMTyPnz5x+3rZeK56K79/KuB4ANwH1N7euB60p9vgRsbmpPAEvbjDcrizUJ5iWM\nJKxKOKnp8UhCTNEenkHf5vbQDOdpbs+kxrmaZ6br1tye9yb2ne3fp1V7cI7mme4x1c08g3O0bt2u\nxUBF61Y+xo5tR4zkokXrcmRkcW7dek2OjCw+2v7pnz7/mL4bN17a5r2jMW+/6Jcw+OfArqb2x4Cb\nSn32AO9raj8ArGsz3qwsVubkv2hGEg4kHEk4rXicxfeRhHuK9oNNfSe3n1bsd1OLbSMJv160dzdt\nP1jqWx631TyTdZRrvKfDvuV5JsfZPY3fb6p5OtU03d/nwYQ9U6xbu3W9rUNND7Zot3tuW/Xt1D5Y\nei6nmqddja2Oi/Ix1a6G3dNY8077jrfpe1OLmqc7z+4W29ut+cdK7c9N8VzvabGt02txcr9r2qxx\np32nt47j4+PFGcHxffvlDKGKMBikD42NjR19XKvVqNVqFY6+HFgL7AfOLh5TfF8GvFK0FzT1ndx+\nFvAMcKDFtmXAt4v24abttwJnNvUtj9tqnsk6ninV+EqHfcvzTI5zeBq/X3ktyvN0qmm6v88C4LYp\n1q3duv428Asdxi23yzV26tuuvRzYx7HP5VTztFu3VsfF5PazinHe26amwy3m6bTG5X3b1X+gRc3l\n46DdPIdbbG/3evpmqf2tot3uuf5q0Z7qmDqLY9ftj4tt5d+3074LaP2aOXYd9+7dy6uvvgqsOq7v\nq68+TS/U63Xq9Xq1g3abJjQuE/1hU3s6l4kO0YPLRHhm0Ob388zAMwPPDN7qZwZVhME83riBPEzj\nBvJ5pT4f5o0byBvo4Q3kN64vnpuN646Tj0dK21q1h2fQt7k9OMN53myNczXPTNetuT3wJvad7d+n\nVXtwjuaZ7jHVzTzzZtC3m3m6XYuBWVi3yXHfaEeM5MKFFxT3DK7OkZHFR9tr1px/TN9j7xkcP0+/\n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\n", 1602 | "text/plain": [ 1603 | "" 1604 | ] 1605 | }, 1606 | "metadata": {}, 1607 | "output_type": "display_data" 1608 | }, 1609 | { 1610 | "data": { 1611 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEPCAYAAABoekJnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAG2ZJREFUeJzt3X+U3XWd3/HnezIJGQJEMIg1kYBCFHeJkCJQhd1RFIO1\nhLrbTXT17HpQgTaFbegW9CwhtV1bOKenXY61HiwlnAUq/kLJrmh0zaiDYmKFgCYBNIuirAR3lSo9\neBDf/eP7nXBzc++dO3xm5jszPh/nzJn7ud/P/X7e93O/c1/z/X7vj8hMJEl6rgaaLkCSNLsZJJKk\nIgaJJKmIQSJJKmKQSJKKGCSSpCKNB0lE3BARj0XEfV2Wvy0idtY/oxFx8nTXKEnqrvEgAW4E3thj\n+V7gdzLzlcB/BD4yLVVJkvoy2HQBmTkaEct7LL+7pXk3sHTqq5Ik9Wsm7JFMxLuAO5suQpL0rMb3\nSPoVEa8F3gmc1XQtkqRnzYogiYiVwPXA6sz8aY9+fnCYJE1QZkbJ7WfKoa2ofw5eEHEs8EngHZn5\nvfFWlJkz6ufqq69uvAZrmjs1zdS6rGn21jQZGt8jiYhbgWHg+RHxA+BqYAGQmXk9cBVwFPChiAjg\n6cw8val6JUkHajxIMvNt4yx/N/DuaSpHkjRBM+XQ1pw1PDzcdAkHsab+zMSaYGbWZU39mYk1TYaY\nrGNkM0FE5Fy6P5I01SKCnCMn2yVJs5RBIkkqYpBIkooYJJKkIgaJJKmIQSJJKmKQSJKKGCSSpCIG\niSSpiEEiSSpikEiSihgkkqQiBokkqYhBIkkqYpBIkooYJJKkIgaJJKmIQSJJKmKQSJKKGCSSpCIG\niSSpSONBEhE3RMRjEXFfjz7XRcRDEXFvRJwynfVJknprPEiAG4E3dlsYEecBL83ME4GLgA9PV2ET\ntXv3bm666SZ279590LK77rqLq6++mrvuuguACy64gMMOO4wLLrgAgHXr1rF48WLWrVsHwOGHH05E\n7P899gNMqD1VfR1ndtU4Xt+hoSEigqGhIQAOOeQQIoJDDjmEo48+mojg6KOPBmDFihVEBCtWrABg\n5cqVDAwMsHLlSs4++2zmz5/P2WefDcDll1/O8uXLufzyywG45JJLeOELX8gll1xy0HZ/7bXXcuqp\np3LttdcCcMstt7BmzRpuueWWcdvt47T/Lbb//bVq7/v444+zY8cOHn/88YP6lti4cSMve9nL2Lhx\n46Sud0bIzMZ/gOXAfV2WfRhY29LeDRzTpW82Zf36yxKGElYkDOX69ZfuX/aGN5xXLzux/j2vrR09\n2oMT6NvePmSK+nZqL5imcQb67Dt/muatZC4msh2U1FiyDU1kzkvnbbBtzGeXRczv0W4fd2xeq7/F\nZcuOP2D5ueee1/Xv9txzz8uhoaNy8eJVOTR0VN5660cn5flh/vxFB9SwYMHQpKx3MtTPm2XP4aUr\nmIyfcYJkC/DqlvYXgVVd+k7GvE7Yrl276o1kZ0LWv4dy165dOTo62rbs7R37wra29uaE9ttu7vO2\n2xL2JRzZ0ndbj9u29729rW97e+y2t7e0j6zX015T620nUlOv9pYOt21td348qvmb6Fy019BPze1z\nsbmt7/sSrhlnTrvN+eY+amxtt29DY8uuG2ecTnPea7uYSE29tuVdHeai12PQbdzLeo4zOjra9e+2\nddyhoaNy3759Rc8PV111Vcdxrrrqqkl6BiozGUEyOH37PtNj06ZN+y8PDw8zPDw85WNu374deDGw\nsr5mJbCM7du3s3fvXmBZy7KvtLVXAkuBRW3tvfVPa9/2drfbLgIeBo5v6buox23b+z7R1re9PXbb\nJ1rax9XreVVbTa233TGBmnq1P011lHNZl3XdxMGPx9icTnQu2mvop+b2udjb1verwM+7rGdsTrvN\n+d4+amxt/1WX9ewcZ5xOc3423beL9sd2vMey07a8DNgO/BEHb1/dHoNu4365xzhL2bp1Ky95yUvo\nvJ08O+78+ct5+OGH9x/Wey5uu+22jjXcdtttvP/973/O632uRkZGGBkZmdyVlibRZPwwsUNbe5hh\nh7bcI3GPxD0S90i6+U3YI2k8RKr7wXHA/V2WvQn46/rymcDdPdYzGfP6nKxff2m2HgNtPUdy7rnn\n1ctOqH/HBNrzCm67YIr6dmovmKZxBvrsO1gwznTNxUTX+1xrLNmGJjLnpfM22Dbms8siBnu028c9\n8NzTi1983AHLDzxHcuDf7dg5kiOOOHVSz5EsWDB0QA2eI5n8ELkVeBT4JfAD4J1Uxy3e09Lng8B3\nqfbHO54fyYaDJLPaM9m8eXPu2rXroGWjo6O5cePGHB0dzczMNWvW5KJFi3LNmjWZmbl27do84ogj\ncu3atZmZedhhhyWw//fYT2ZOqD1VfR1ndtU4Xt+FCxcmkAsXLszMzAULFiSQCxYsyCVLliSQS5Ys\n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\nmsjMGzPztMwcBn4GPNB0TS261fEjqj2nMcvq63qazUESHPgf7dgbHKH3GxynUqc3TzZWV0QsGXs1\nRkQMAW+g+s+osZoy832ZeWxmvgRYB3wpM98BbGmqJoCIOLTemyQiFlEd/7+fZufqMeCRiFhRX3UO\n8J0ma2rxVqp/BMY0WdMDwJkRsbA+MXwO1Qs5Gp2niDi6/n0s8M+pDgM2VVO/z5d3AOvqV70dD5xA\ndW61t+k6+TTJJ45uBR4Ffkl1XPSdVCfavki1UW0FnjfNNb2Gatf1Xqon628Bq4GjmqoLOLmu4x5g\nJ/Bv6+sbq6mtvt/l2ZPtjdZEdT5i7LG7H7hyhtT1SmBHXdungMUzoKZDgceBw1uua7qmP6UK2fuo\nPk18/gyo6StU50ruoXo1YCPzNNHnS6pXcH2X6oUB5/Yzhm9IlCQVmc2HtiRJM4BBIkkqYpBIkooY\nJJKkIgaJJKmIQSJJKmKQSJKKGCSSpCIGiTQJIuL2+lOD7x/75OCIuLD+4qC760/uva6+fklEfCKq\nLx37RkS8utnqpTK+s12aBBHxvMz8WUQspPpIkzcCd1F9ncAvgG3AvZl5aUTcQvWJvl+LiBcDn8/M\nVzRWvFRosOkCpDniTyLigvryMuAdVN//8gRARHwcOLFe/nrgpJZvnjssIg7NzP83rRVLk8QgkQpF\nxO8Cr6P6JrlfRsQ2qg+8O6nbTeq+T09XjdJU8hyJVG4x8NM6RF4OnAkcBvxORCyuv6fm91r6b6X6\nznoAIuKV01qtNMkMEqnc54D5EfEd4APA16m+lOoDVN/l8FWq74N/ou5/GXBaROyMiG8DF01/ydLk\n8WS7NEUiYlFmPhkR86i+te+GfPabM6U5wz0SaepsioixL8raa4hornKPRJJUxD0SSVIRg0SSVMQg\nkSQVMUgkSUUMEklSEYNEklTk/wMC17qbIAPPjwAAAABJRU5ErkJggg==\n", 1612 | "text/plain": [ 1613 | "" 1614 | ] 1615 | }, 1616 | "metadata": {}, 1617 | "output_type": "display_data" 1618 | } 1619 | ], 1620 | "source": [ 1621 | "# scatter for continuous input\n", 1622 | "\n", 1623 | "# plot with matplotlib directly\n", 1624 | "import matplotlib.pylab as plt\n", 1625 | "# enable pylab mode in ipython notebook as pylab has been deprecated\n", 1626 | "%matplotlib inline\n", 1627 | "plt.scatter(df_train.age, df_train.label)\n", 1628 | "\n", 1629 | "# plot with pandas API, which referes to matplotlib\n", 1630 | "df_train.plot(kind='scatter', x='age', y='label')" 1631 | ] 1632 | }, 1633 | { 1634 | "cell_type": "markdown", 1635 | "metadata": {}, 1636 | "source": [ 1637 | "### For categorical column" 1638 | ] 1639 | }, 1640 | { 1641 | "cell_type": "code", 1642 | "execution_count": 57, 1643 | "metadata": { 1644 | "collapsed": false 1645 | }, 1646 | "outputs": [ 1647 | { 1648 | "data": { 1649 | "text/plain": [ 1650 | "array(['Bachelors', 'HS-grad', '11th', 'Masters', '9th', 'Some-college',\n", 1651 | " 'Assoc-acdm', 'Assoc-voc', '7th-8th', 'Doctorate', 'Prof-school',\n", 1652 | " '5th-6th', '10th', '1st-4th', 'Preschool', '12th'], dtype=object)" 1653 | ] 1654 | }, 1655 | "execution_count": 57, 1656 | "metadata": {}, 1657 | "output_type": "execute_result" 1658 | } 1659 | ], 1660 | "source": [ 1661 | "# Get unique value of categorical column\n", 1662 | "df_train.education.unique()" 1663 | ] 1664 | }, 1665 | { 1666 | "cell_type": "code", 1667 | "execution_count": 58, 1668 | "metadata": { 1669 | "collapsed": false 1670 | }, 1671 | "outputs": [ 1672 | { 1673 | "data": { 1674 | "text/plain": [ 1675 | "" 1676 | ] 1677 | }, 1678 | "execution_count": 58, 1679 | "metadata": {}, 1680 | "output_type": "execute_result" 1681 | }, 1682 | { 1683 | "data": { 1684 | "image/png": "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\ncOHCfroZEdFpw8PDDA8PT/h1kypTLGkB8BXbT60eD9m+o7r/18Aeto+QtBNwFrAXZWjmImAH25Z0\nGXAUsAz4GvDBkYu4Y3y/lCmOiJii8coUT3hGL+lsYCHwKEm3AouA/STtAjwArATeCGD7eknnAtcD\n9wJH9mTstwBnAJsC54+X5CMiolnZeKTl2BER0yUbj0REbKCS6CMiOi6JPiKi45LoIyI6Lok+IqLj\nkugjIjouib5FQ0MLkDSp29DQgpnubkR0VObRtxg78/MjYjplHn1ExAYqiT4iouOS6CMiOi6JPiKi\n45LoIyI6Lok+IqLjkugjIjouiT4iouOS6CMiOi6JPiKi45LoIyI6Lok+IqLjkugjIjouiT4iouOS\n6CMiOi6JPiKi45LoIyI6Lok+IqLjkugjIjouiT4iouOS6CMiOi6JPiKi45LoIyI6Lok+IqLjkugj\nIjouiT4iouOS6CMiOi6JPiKi4yZM9JJOk7Ra0oqeti0lLZV0o6QLJc3tee44STdLukHSAT3tu0la\nIekmSR9o/keJiIixTOaM/nTgwFFtxwIX234ScAlwHICknYDDgKcABwGnSFL1mlOBN9jeEdhR0uiY\nERHRggkTve3vAL8c1XwIsKS6vwQ4tLp/MHCO7ftsrwRuBvaUNARsbntZ9XVn9rwmIiJa1O8Y/Ta2\nVwPYvgPYpmqfB9zW83WrqrZ5wO097bdXbRER0bKmLsa6oTgREdGwjft83WpJ29peXQ3L3Fm1rwIe\n1/N186u28drHtXjx4gfvL1y4sM9uRkR01/DwMMPDwxN+neyJT8YlLQC+Yvup1eMTgV/YPlHSMcCW\nto+tLsaeBexFGZq5CNjBtiVdBhwFLAO+BnzQ9gXjfD+P7le5pjvZDw5iMj9X27Hb7HNExGiSsK3R\n7ROe0Us6G1gIPErSrcAi4L3AeZJeD9xCmWmD7eslnQtcD9wLHNmTsd8CnAFsCpw/XpKPiIhmTeqM\nfrrljD4iYurGO6PPytgBNDS0AEmTug0NLZjp7kbEDMsZfYuxBy1uRAy2nNFHRGygkugjIjouiT4i\nouOS6CMiOi6JPiKi45LoIyI6Lok+IqLjkugjIjouiT4iouOS6CMiOi6JPiKi45LoIyI6Lok+IqLj\nkugjIjouiT4iouOS6CMiOi6JPiKi45LoIyI6Lok+IqLjkugjIjouiT4iouOS6CMiOi6JPiKi45Lo\n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\nziXmEKqoAAAAAElFTkSuQmCC\n", 1685 | "text/plain": [ 1686 | "" 1687 | ] 1688 | }, 1689 | "metadata": {}, 1690 | "output_type": "display_data" 1691 | } 1692 | ], 1693 | "source": [ 1694 | "# Plot value count on one column\n", 1695 | "df_train[df_train.label == 1].education.value_counts().plot(kind='bar')" 1696 | ] 1697 | }, 1698 | { 1699 | "cell_type": "code", 1700 | "execution_count": 59, 1701 | "metadata": { 1702 | "collapsed": false 1703 | }, 1704 | "outputs": [ 1705 | { 1706 | "data": { 1707 | "text/plain": [ 1708 | "" 1709 | ] 1710 | }, 1711 | "execution_count": 59, 1712 | "metadata": {}, 1713 | "output_type": "execute_result" 1714 | }, 1715 | { 1716 | "data": { 1717 | "image/png": "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\nQmCC\n", 1718 | "text/plain": [ 1719 | "" 1720 | ] 1721 | }, 1722 | "metadata": {}, 1723 | "output_type": "display_data" 1724 | } 1725 | ], 1726 | "source": [ 1727 | "# group by two columns and count number of records in each \n", 1728 | "edu_labl_col_name = ['education', 'label']\n", 1729 | "df_train.groupby(edu_labl_col_name).size().plot(kind='bar')" 1730 | ] 1731 | }, 1732 | { 1733 | "cell_type": "markdown", 1734 | "metadata": {}, 1735 | "source": [ 1736 | "## Linear model" 1737 | ] 1738 | }, 1739 | { 1740 | "cell_type": "markdown", 1741 | "metadata": {}, 1742 | "source": [ 1743 | "### Converting data to Tensors" 1744 | ] 1745 | }, 1746 | { 1747 | "cell_type": "code", 1748 | "execution_count": 60, 1749 | "metadata": { 1750 | "collapsed": false 1751 | }, 1752 | "outputs": [], 1753 | "source": [ 1754 | "import tensorflow as tf\n", 1755 | "\n", 1756 | "def input_fn(df):\n", 1757 | " # Create a dictionary mapping from each continuous feature column name (k)\n", 1758 | " # to the values of that column stored in a constant Tensor\n", 1759 | " continuous_cols = {k : tf.constant(df[k].values) for k in CONTINUOUS_COLUMNS}\n", 1760 | " \n", 1761 | " # Creates a dictionary mapping from each categorical feature column name(k)\n", 1762 | " # to the values of that column stored in a tf.SparseTensor\n", 1763 | " categorical_cols = {k: tf.SparseTensor(\n", 1764 | " indices=[[i, 0] for i in range(df[k].size)],\n", 1765 | " values=df[k].values,\n", 1766 | " dense_shape=[df[k].size, 1])\n", 1767 | " for k in CATEGORICAL_COLUMNS}\n", 1768 | " \n", 1769 | " # Merge the two dictionaries into one\n", 1770 | " feature_cols = dict(continuous_cols.items() + categorical_cols.items())\n", 1771 | " \n", 1772 | " # Converts the label columns into a constant Tensor\n", 1773 | " label = tf.constant(df[LABEL_COLUMN].values)\n", 1774 | " \n", 1775 | " # Return the feature columns and the label\n", 1776 | " return feature_cols, label\n", 1777 | "\n", 1778 | "def train_input_fn():\n", 1779 | " return input_fn(df_train)\n", 1780 | "\n", 1781 | "def eval_input_fn():\n", 1782 | " return input_fn(df_test)" 1783 | ] 1784 | }, 1785 | { 1786 | "cell_type": "markdown", 1787 | "metadata": {}, 1788 | "source": [ 1789 | "## Selecting and Engineering Features for the Model\n", 1790 | "\n", 1791 | "A feature column can be:\n", 1792 | "* Raw columns in the original dataframe: base feature columns\n", 1793 | "* Derived feature columns through transformation: derived feature columns\n" 1794 | ] 1795 | }, 1796 | { 1797 | "cell_type": "markdown", 1798 | "metadata": {}, 1799 | "source": [ 1800 | "### Base Categorical Feature Columns\n", 1801 | "\n", 1802 | "SparseColumn:\n", 1803 | "* Will assign an integer ID to each category\n", 1804 | "* You can choose to proide the category list with: sparse_column_with_keys()\n", 1805 | "* Or let TensorFlor hash the values into it integer ID by providing a hash_bucket_size" 1806 | ] 1807 | }, 1808 | { 1809 | "cell_type": "code", 1810 | "execution_count": 61, 1811 | "metadata": { 1812 | "collapsed": false 1813 | }, 1814 | "outputs": [ 1815 | { 1816 | "name": "stdout", 1817 | "output_type": "stream", 1818 | "text": [ 1819 | "WARNING:tensorflow:The default value of combiner will change from \"sum\" to \"sqrtn\" after 2016/11/01.\n", 1820 | "WARNING:tensorflow:The default value of combiner will change from \"sum\" to \"sqrtn\" after 2016/11/01.\n", 1821 | "WARNING:tensorflow:The default value of combiner will change from \"sum\" to \"sqrtn\" after 2016/11/01.\n", 1822 | "WARNING:tensorflow:The default value of combiner will change from \"sum\" to \"sqrtn\" after 2016/11/01.\n", 1823 | "WARNING:tensorflow:The default value of combiner will change from \"sum\" to \"sqrtn\" after 2016/11/01.\n", 1824 | "WARNING:tensorflow:The default value of combiner will change from \"sum\" to \"sqrtn\" after 2016/11/01.\n", 1825 | "WARNING:tensorflow:The default value of combiner will change from \"sum\" to \"sqrtn\" after 2016/11/01.\n", 1826 | "WARNING:tensorflow:The default value of combiner will change from \"sum\" to \"sqrtn\" after 2016/11/01.\n" 1827 | ] 1828 | } 1829 | ], 1830 | "source": [ 1831 | "# Provide keys for sparse column wiht keys\n", 1832 | "gender = tf.contrib.layers.sparse_column_with_keys(column_name=\"gender\", keys=[\"Female\", \"Male\"])\n", 1833 | "\n", 1834 | "# Hash category into different ID\n", 1835 | "marital_status = tf.contrib.layers.sparse_column_with_hash_bucket(\"marital_status\", hash_bucket_size=10)\n", 1836 | "race = tf.contrib.layers.sparse_column_with_hash_bucket(\"race\", hash_bucket_size=100)\n", 1837 | "education = tf.contrib.layers.sparse_column_with_hash_bucket(\"education\", hash_bucket_size=1000)\n", 1838 | "relationship = tf.contrib.layers.sparse_column_with_hash_bucket(\"relationship\", hash_bucket_size=100)\n", 1839 | "workclass = tf.contrib.layers.sparse_column_with_hash_bucket(\"workclass\", hash_bucket_size=100)\n", 1840 | "occupation = tf.contrib.layers.sparse_column_with_hash_bucket(\"occupation\", hash_bucket_size=1000)\n", 1841 | "native_country = tf.contrib.layers.sparse_column_with_hash_bucket(\"native_country\", hash_bucket_size=1000)\n" 1842 | ] 1843 | }, 1844 | { 1845 | "cell_type": "markdown", 1846 | "metadata": {}, 1847 | "source": [ 1848 | "### Base Continuous Feature Columns\n", 1849 | "\n", 1850 | "Define a RealValuedColumn for each continuous feature column" 1851 | ] 1852 | }, 1853 | { 1854 | "cell_type": "code", 1855 | "execution_count": 62, 1856 | "metadata": { 1857 | "collapsed": false 1858 | }, 1859 | "outputs": [ 1860 | { 1861 | "data": { 1862 | "text/plain": [ 1863 | "\"_RealValuedColumn(column_name=age, dimension=1, default_value=None, dtype=)\"" 1864 | ] 1865 | }, 1866 | "execution_count": 62, 1867 | "metadata": {}, 1868 | "output_type": "execute_result" 1869 | } 1870 | ], 1871 | "source": [ 1872 | "age = tf.contrib.layers.real_valued_column(\"age\")\n", 1873 | "education_num = tf.contrib.layers.real_valued_column(\"education_num\")\n", 1874 | "capital_gain = tf.contrib.layers.real_valued_column(\"capital_gain\")\n", 1875 | "capital_loss = tf.contrib.layers.real_valued_column(\"capital_loss\")\n", 1876 | "hours_per_week = tf.contrib.layers.real_valued_column(\"hours_per_week\")\n", 1877 | "\n", 1878 | "age.key" 1879 | ] 1880 | }, 1881 | { 1882 | "cell_type": "markdown", 1883 | "metadata": {}, 1884 | "source": [ 1885 | "### Discretization Continuous Features\n", 1886 | "For feature like age, we know that a person's income may grow with age in the early stage of one's career, then growth may slow at some point, and finally the income decreases after retirement. \n", 1887 | "Using 'age' as a real-valued features might not be a good choice, as the linearly model can only learn one of these cases:\n", 1888 | "* Positive correlation\n", 1889 | "* Negative correlation\n", 1890 | "* no correlation\n", 1891 | "\n", 1892 | "One solution is to bucketize the continuous value: dividing the entire range of a continuous feature into a set of consecutive bins/buckets, and then converting the original numerical feature into a bucket ID." 1893 | ] 1894 | }, 1895 | { 1896 | "cell_type": "code", 1897 | "execution_count": 63, 1898 | "metadata": { 1899 | "collapsed": false 1900 | }, 1901 | "outputs": [], 1902 | "source": [ 1903 | "# The 10 boundaries divide the ages into 11 age groups.\n", 1904 | "age_buckets = tf.contrib.layers.bucketized_column(age, boundaries=[18, 25, 30, 35, 40, 45, 50, 55, 60, 65])" 1905 | ] 1906 | }, 1907 | { 1908 | "cell_type": "markdown", 1909 | "metadata": {}, 1910 | "source": [ 1911 | "### Cross Features\n", 1912 | "\n", 1913 | "The base features might not be enouogh to explain the data. Say we only have one weight for education=\"Bachelors\" and education=\"Masters\", we won't be able to capture every single education-occupation combination, say how do you distinguish between:\n", 1914 | "* education=\"Bachelors\" AND occupation=\"Exec-managerial\"\n", 1915 | "* education=\"Bachelors\" AND occupation=\"Craft-repair\"\n", 1916 | "\n", 1917 | "Single weight makes the above feature equals to:\n", 1918 | "* occupation=\"Exec-managerial\"\n", 1919 | "* occupation=\"Craft-repair\"\n", 1920 | "\n", 1921 | "\n", 1922 | "The way to solve this problem is to use: crossed feature columns." 1923 | ] 1924 | }, 1925 | { 1926 | "cell_type": "code", 1927 | "execution_count": 64, 1928 | "metadata": { 1929 | "collapsed": false 1930 | }, 1931 | "outputs": [ 1932 | { 1933 | "name": "stdout", 1934 | "output_type": "stream", 1935 | "text": [ 1936 | "WARNING:tensorflow:The default value of combiner will change from \"sum\" to \"sqrtn\" after 2016/11/01.\n", 1937 | "WARNING:tensorflow:The default value of combiner will change from \"sum\" to \"sqrtn\" after 2016/11/01.\n" 1938 | ] 1939 | } 1940 | ], 1941 | "source": [ 1942 | "# Two feature cross\n", 1943 | "education_x_occupation = tf.contrib.layers.crossed_column([education, occupation], hash_bucket_size=int(1e4))\n", 1944 | "\n", 1945 | "# Three features cross\n", 1946 | "age_buckets_x_education_x_occupation = tf.contrib.layers.crossed_column([age_buckets, education, occupation], hash_bucket_size=int(1e6))" 1947 | ] 1948 | }, 1949 | { 1950 | "cell_type": "code", 1951 | "execution_count": 65, 1952 | "metadata": { 1953 | "collapsed": false 1954 | }, 1955 | "outputs": [ 1956 | { 1957 | "data": { 1958 | "text/plain": [ 1959 | "\"_CrossedColumn(columns=(_SparseColumn(column_name='education', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumn(column_name='occupation', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string)), hash_bucket_size=10000, hash_key=None, combiner='sum', ckpt_to_load_from=None, tensor_name_in_ckpt=None)\"" 1960 | ] 1961 | }, 1962 | "execution_count": 65, 1963 | "metadata": {}, 1964 | "output_type": "execute_result" 1965 | } 1966 | ], 1967 | "source": [ 1968 | "education_x_occupation.key" 1969 | ] 1970 | }, 1971 | { 1972 | "cell_type": "markdown", 1973 | "metadata": {}, 1974 | "source": [ 1975 | "## Logistic Regression Model\n", 1976 | "\n", 1977 | "input columns:\n", 1978 | "* SparseColumn\n", 1979 | "* RealValuedColumn\n", 1980 | "* BuckedizedColumn\n", 1981 | "* CrossedColumn" 1982 | ] 1983 | }, 1984 | { 1985 | "cell_type": "code", 1986 | "execution_count": 76, 1987 | "metadata": { 1988 | "collapsed": false 1989 | }, 1990 | "outputs": [ 1991 | { 1992 | "name": "stdout", 1993 | "output_type": "stream", 1994 | "text": [ 1995 | "INFO:tensorflow:Using default config.\n", 1996 | "INFO:tensorflow:Using config: {'_save_checkpoints_secs': 600, '_num_ps_replicas': 0, '_keep_checkpoint_max': 5, '_tf_random_seed': None, '_task_type': None, '_environment': 'local', '_is_chief': True, '_cluster_spec': , '_tf_config': gpu_options {\n", 1997 | " per_process_gpu_memory_fraction: 1\n", 1998 | "}\n", 1999 | ", '_task_id': 0, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_evaluation_master': '', '_keep_checkpoint_every_n_hours': 10000, '_master': ''}\n" 2000 | ] 2001 | } 2002 | ], 2003 | "source": [ 2004 | "model_dir = \"/tmp/workspace/wide_model_train/\"\n", 2005 | "wide_columns = [gender, native_country, education, occupation, workclass, marital_status, race,\n", 2006 | " age_buckets, education_x_occupation, age_buckets_x_education_x_occupation]\n", 2007 | "m = tf.contrib.learn.LinearClassifier(feature_columns=wide_columns,\n", 2008 | " model_dir=model_dir)\n" 2009 | ] 2010 | }, 2011 | { 2012 | "cell_type": "markdown", 2013 | "metadata": {}, 2014 | "source": [ 2015 | "## Train and Evaluating the Model" 2016 | ] 2017 | }, 2018 | { 2019 | "cell_type": "code", 2020 | "execution_count": 67, 2021 | "metadata": { 2022 | "collapsed": false 2023 | }, 2024 | "outputs": [ 2025 | { 2026 | "name": "stdout", 2027 | "output_type": "stream", 2028 | "text": [ 2029 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/feature_column.py:1883: calling sparse_feature_cross (from tensorflow.contrib.layers.python.ops.sparse_feature_cross_op) with hash_key=None is deprecated and will be removed after 2016-11-20.\n", 2030 | "Instructions for updating:\n", 2031 | "The default behavior of sparse_feature_cross is changing, the default\n", 2032 | "value for hash_key will change to SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY.\n", 2033 | "From that point on sparse_feature_cross will always use FingerprintCat64\n", 2034 | "to concatenate the feature fingerprints. And the underlying\n", 2035 | "_sparse_feature_cross_op.sparse_feature_cross operation will be marked\n", 2036 | "as deprecated.\n", 2037 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/feature_column.py:1883: calling sparse_feature_cross (from tensorflow.contrib.layers.python.ops.sparse_feature_cross_op) with hash_key=None is deprecated and will be removed after 2016-11-20.\n", 2038 | "Instructions for updating:\n", 2039 | "The default behavior of sparse_feature_cross is changing, the default\n", 2040 | "value for hash_key will change to SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY.\n", 2041 | "From that point on sparse_feature_cross will always use FingerprintCat64\n", 2042 | "to concatenate the feature fingerprints. And the underlying\n", 2043 | "_sparse_feature_cross_op.sparse_feature_cross operation will be marked\n", 2044 | "as deprecated.\n", 2045 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py:1362: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2046 | "Instructions for updating:\n", 2047 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2048 | "INFO:tensorflow:Create CheckpointSaverHook.\n", 2049 | "INFO:tensorflow:Saving checkpoints for 1 into /tmp/workspace/wide_model/model.ckpt.\n", 2050 | "INFO:tensorflow:loss = 0.69319, step = 1\n", 2051 | "INFO:tensorflow:global_step/sec: 48.0166\n", 2052 | "INFO:tensorflow:loss = 0.373872, step = 101\n", 2053 | "INFO:tensorflow:Saving checkpoints for 200 into /tmp/workspace/wide_model/model.ckpt.\n", 2054 | "INFO:tensorflow:Loss for final step: 0.36204.\n" 2055 | ] 2056 | }, 2057 | { 2058 | "data": { 2059 | "text/plain": [ 2060 | "LinearClassifier(params={'gradient_clip_norm': None, 'head': , 'joint_weights': False, 'optimizer': None, 'feature_columns': [_SparseColumn(column_name='gender', is_integerized=False, bucket_size=None, lookup_config=_SparseIdLookupConfig(vocabulary_file=None, keys=('Female', 'Male'), num_oov_buckets=0, vocab_size=2, default_value=-1), combiner='sum', dtype=tf.string), _SparseColumn(column_name='native_country', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumn(column_name='education', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumn(column_name='occupation', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumn(column_name='workclass', is_integerized=False, bucket_size=100, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumn(column_name='marital_status', is_integerized=False, bucket_size=10, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumn(column_name='race', is_integerized=False, bucket_size=100, lookup_config=None, combiner='sum', dtype=tf.string), _BucketizedColumn(source_column=_RealValuedColumn(column_name='age', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), boundaries=(18, 25, 30, 35, 40, 45, 50, 55, 60, 65)), _CrossedColumn(columns=(_SparseColumn(column_name='education', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumn(column_name='occupation', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string)), hash_bucket_size=10000, hash_key=None, combiner='sum', ckpt_to_load_from=None, tensor_name_in_ckpt=None), _CrossedColumn(columns=(_BucketizedColumn(source_column=_RealValuedColumn(column_name='age', dimension=1, default_value=None, dtype=tf.float32, normalizer=None), boundaries=(18, 25, 30, 35, 40, 45, 50, 55, 60, 65)), _SparseColumn(column_name='education', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string), _SparseColumn(column_name='occupation', is_integerized=False, bucket_size=1000, lookup_config=None, combiner='sum', dtype=tf.string)), hash_bucket_size=1000000, hash_key=None, combiner='sum', ckpt_to_load_from=None, tensor_name_in_ckpt=None)]})" 2061 | ] 2062 | }, 2063 | "execution_count": 67, 2064 | "metadata": {}, 2065 | "output_type": "execute_result" 2066 | } 2067 | ], 2068 | "source": [ 2069 | "m.fit(input_fn=train_input_fn, steps=200)\n" 2070 | ] 2071 | }, 2072 | { 2073 | "cell_type": "code", 2074 | "execution_count": 68, 2075 | "metadata": { 2076 | "collapsed": false 2077 | }, 2078 | "outputs": [ 2079 | { 2080 | "name": "stdout", 2081 | "output_type": "stream", 2082 | "text": [ 2083 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/feature_column.py:1883: calling sparse_feature_cross (from tensorflow.contrib.layers.python.ops.sparse_feature_cross_op) with hash_key=None is deprecated and will be removed after 2016-11-20.\n", 2084 | "Instructions for updating:\n", 2085 | "The default behavior of sparse_feature_cross is changing, the default\n", 2086 | "value for hash_key will change to SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY.\n", 2087 | "From that point on sparse_feature_cross will always use FingerprintCat64\n", 2088 | "to concatenate the feature fingerprints. And the underlying\n", 2089 | "_sparse_feature_cross_op.sparse_feature_cross operation will be marked\n", 2090 | "as deprecated.\n", 2091 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/feature_column.py:1883: calling sparse_feature_cross (from tensorflow.contrib.layers.python.ops.sparse_feature_cross_op) with hash_key=None is deprecated and will be removed after 2016-11-20.\n", 2092 | "Instructions for updating:\n", 2093 | "The default behavior of sparse_feature_cross is changing, the default\n", 2094 | "value for hash_key will change to SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY.\n", 2095 | "From that point on sparse_feature_cross will always use FingerprintCat64\n", 2096 | "to concatenate the feature fingerprints. And the underlying\n", 2097 | "_sparse_feature_cross_op.sparse_feature_cross operation will be marked\n", 2098 | "as deprecated.\n", 2099 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py:1362: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2100 | "Instructions for updating:\n", 2101 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2102 | "INFO:tensorflow:Starting evaluation at 2017-04-01-15:13:30\n", 2103 | "INFO:tensorflow:Evaluation [1/1]\n", 2104 | "INFO:tensorflow:Finished evaluation at 2017-04-01-15:13:31\n", 2105 | "INFO:tensorflow:Saving dict for global step 200: accuracy = 0.8349, accuracy/baseline_label_mean = 0.236226, accuracy/threshold_0.500000_mean = 0.8349, auc = 0.879261, global_step = 200, labels/actual_label_mean = 0.236226, labels/prediction_mean = 0.241423, loss = 0.358784, precision/positive_threshold_0.500000_mean = 0.711314, recall/positive_threshold_0.500000_mean = 0.50676\n", 2106 | "WARNING:tensorflow:Skipping summary for global_step, must be a float or np.float32.\n", 2107 | "accuracy: 0.8349\n", 2108 | "accuracy/baseline_label_mean: 0.236226\n", 2109 | "accuracy/threshold_0.500000_mean: 0.8349\n", 2110 | "auc: 0.879261\n", 2111 | "global_step: 200\n", 2112 | "labels/actual_label_mean: 0.236226\n", 2113 | "labels/prediction_mean: 0.241423\n", 2114 | "loss: 0.358784\n", 2115 | "precision/positive_threshold_0.500000_mean: 0.711314\n", 2116 | "recall/positive_threshold_0.500000_mean: 0.50676\n" 2117 | ] 2118 | } 2119 | ], 2120 | "source": [ 2121 | "# Evaluate the mode\n", 2122 | "results = m.evaluate(input_fn=eval_input_fn, steps=1)\n", 2123 | "for key in sorted(results):\n", 2124 | " print \"%s: %s\" % (key, results[key])\n", 2125 | "# accuracy is important" 2126 | ] 2127 | }, 2128 | { 2129 | "cell_type": "markdown", 2130 | "metadata": {}, 2131 | "source": [ 2132 | "### Adding Regularization to Prevent Overfitting" 2133 | ] 2134 | }, 2135 | { 2136 | "cell_type": "code", 2137 | "execution_count": 69, 2138 | "metadata": { 2139 | "collapsed": false 2140 | }, 2141 | "outputs": [ 2142 | { 2143 | "name": "stdout", 2144 | "output_type": "stream", 2145 | "text": [ 2146 | "INFO:tensorflow:Using default config.\n", 2147 | "INFO:tensorflow:Using config: {'_save_checkpoints_secs': 600, '_num_ps_replicas': 0, '_keep_checkpoint_max': 5, '_tf_random_seed': None, '_task_type': None, '_environment': 'local', '_is_chief': True, '_cluster_spec': , '_tf_config': gpu_options {\n", 2148 | " per_process_gpu_memory_fraction: 1\n", 2149 | "}\n", 2150 | ", '_task_id': 0, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_evaluation_master': '', '_keep_checkpoint_every_n_hours': 10000, '_master': ''}\n" 2151 | ] 2152 | } 2153 | ], 2154 | "source": [ 2155 | "m = tf.contrib.learn.LinearClassifier(feature_columns=[\n", 2156 | " gender, native_country, education, occupation, workclass, marital_status, race,\n", 2157 | " age_buckets, education_x_occupation, age_buckets_x_education_x_occupation],\n", 2158 | " optimizer=tf.train.FtrlOptimizer(\n", 2159 | " learning_rate=0.1,\n", 2160 | " l1_regularization_strength=1.0,\n", 2161 | " l2_regularization_strength=1.0),\n", 2162 | " model_dir=model_dir)" 2163 | ] 2164 | }, 2165 | { 2166 | "cell_type": "code", 2167 | "execution_count": 70, 2168 | "metadata": { 2169 | "collapsed": false 2170 | }, 2171 | "outputs": [ 2172 | { 2173 | "name": "stdout", 2174 | "output_type": "stream", 2175 | "text": [ 2176 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/feature_column.py:1883: calling sparse_feature_cross (from tensorflow.contrib.layers.python.ops.sparse_feature_cross_op) with hash_key=None is deprecated and will be removed after 2016-11-20.\n", 2177 | "Instructions for updating:\n", 2178 | "The default behavior of sparse_feature_cross is changing, the default\n", 2179 | "value for hash_key will change to SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY.\n", 2180 | "From that point on sparse_feature_cross will always use FingerprintCat64\n", 2181 | "to concatenate the feature fingerprints. And the underlying\n", 2182 | "_sparse_feature_cross_op.sparse_feature_cross operation will be marked\n", 2183 | "as deprecated.\n", 2184 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/feature_column.py:1883: calling sparse_feature_cross (from tensorflow.contrib.layers.python.ops.sparse_feature_cross_op) with hash_key=None is deprecated and will be removed after 2016-11-20.\n", 2185 | "Instructions for updating:\n", 2186 | "The default behavior of sparse_feature_cross is changing, the default\n", 2187 | "value for hash_key will change to SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY.\n", 2188 | "From that point on sparse_feature_cross will always use FingerprintCat64\n", 2189 | "to concatenate the feature fingerprints. And the underlying\n", 2190 | "_sparse_feature_cross_op.sparse_feature_cross operation will be marked\n", 2191 | "as deprecated.\n", 2192 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py:1362: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2193 | "Instructions for updating:\n", 2194 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2195 | "INFO:tensorflow:Create CheckpointSaverHook.\n", 2196 | "INFO:tensorflow:Saving checkpoints for 201 into /tmp/workspace/wide_model/model.ckpt.\n", 2197 | "INFO:tensorflow:loss = 0.361972, step = 201\n", 2198 | "INFO:tensorflow:global_step/sec: 46.4366\n", 2199 | "INFO:tensorflow:loss = 0.42052, step = 301\n", 2200 | "INFO:tensorflow:Saving checkpoints for 400 into /tmp/workspace/wide_model/model.ckpt.\n", 2201 | "INFO:tensorflow:Loss for final step: 0.393979.\n", 2202 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/feature_column.py:1883: calling sparse_feature_cross (from tensorflow.contrib.layers.python.ops.sparse_feature_cross_op) with hash_key=None is deprecated and will be removed after 2016-11-20.\n", 2203 | "Instructions for updating:\n", 2204 | "The default behavior of sparse_feature_cross is changing, the default\n", 2205 | "value for hash_key will change to SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY.\n", 2206 | "From that point on sparse_feature_cross will always use FingerprintCat64\n", 2207 | "to concatenate the feature fingerprints. And the underlying\n", 2208 | "_sparse_feature_cross_op.sparse_feature_cross operation will be marked\n", 2209 | "as deprecated.\n", 2210 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/feature_column.py:1883: calling sparse_feature_cross (from tensorflow.contrib.layers.python.ops.sparse_feature_cross_op) with hash_key=None is deprecated and will be removed after 2016-11-20.\n", 2211 | "Instructions for updating:\n", 2212 | "The default behavior of sparse_feature_cross is changing, the default\n", 2213 | "value for hash_key will change to SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY.\n", 2214 | "From that point on sparse_feature_cross will always use FingerprintCat64\n", 2215 | "to concatenate the feature fingerprints. And the underlying\n", 2216 | "_sparse_feature_cross_op.sparse_feature_cross operation will be marked\n", 2217 | "as deprecated.\n", 2218 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py:1362: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2219 | "Instructions for updating:\n", 2220 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2221 | "INFO:tensorflow:Starting evaluation at 2017-04-01-15:14:03\n", 2222 | "INFO:tensorflow:Evaluation [1/1]\n", 2223 | "INFO:tensorflow:Finished evaluation at 2017-04-01-15:14:04\n", 2224 | "INFO:tensorflow:Saving dict for global step 400: accuracy = 0.823414, accuracy/baseline_label_mean = 0.236226, accuracy/threshold_0.500000_mean = 0.823414, auc = 0.860591, global_step = 400, labels/actual_label_mean = 0.236226, labels/prediction_mean = 0.24621, loss = 0.389817, precision/positive_threshold_0.500000_mean = 0.721386, recall/positive_threshold_0.500000_mean = 0.411336\n", 2225 | "WARNING:tensorflow:Skipping summary for global_step, must be a float or np.float32.\n", 2226 | "accuracy: 0.823414\n", 2227 | "accuracy/baseline_label_mean: 0.236226\n", 2228 | "accuracy/threshold_0.500000_mean: 0.823414\n", 2229 | "auc: 0.860591\n", 2230 | "global_step: 400\n", 2231 | "labels/actual_label_mean: 0.236226\n", 2232 | "labels/prediction_mean: 0.24621\n", 2233 | "loss: 0.389817\n", 2234 | "precision/positive_threshold_0.500000_mean: 0.721386\n", 2235 | "recall/positive_threshold_0.500000_mean: 0.411336\n" 2236 | ] 2237 | } 2238 | ], 2239 | "source": [ 2240 | "m.fit(input_fn=train_input_fn, steps=200)\n", 2241 | "\n", 2242 | "# Evaluate the mode\n", 2243 | "results = m.evaluate(input_fn=eval_input_fn, steps=1)\n", 2244 | "for key in sorted(results):\n", 2245 | " print \"%s: %s\" % (key, results[key])" 2246 | ] 2247 | }, 2248 | { 2249 | "cell_type": "markdown", 2250 | "metadata": {}, 2251 | "source": [ 2252 | "# Deep Model" 2253 | ] 2254 | }, 2255 | { 2256 | "cell_type": "markdown", 2257 | "metadata": { 2258 | "collapsed": true 2259 | }, 2260 | "source": [ 2261 | "## Neural Network with Embeddings\n", 2262 | "\n", 2263 | "A feed-forward neural network. Each of the sparse, high-dimensional categorical features are first converted into a low-dimensional and dense real-valued vector, often referred to as an embedding vector. \n", 2264 | "\n", 2265 | "The embedding vector are then concatenated with the continuous features, and then fed into the hidden layers of neural netowkr in the forward pass." 2266 | ] 2267 | }, 2268 | { 2269 | "cell_type": "code", 2270 | "execution_count": 71, 2271 | "metadata": { 2272 | "collapsed": false 2273 | }, 2274 | "outputs": [ 2275 | { 2276 | "name": "stdout", 2277 | "output_type": "stream", 2278 | "text": [ 2279 | "WARNING:tensorflow:The default value of combiner will change from \"mean\" to \"sqrtn\" after 2016/11/01.\n", 2280 | "WARNING:tensorflow:The default value of combiner will change from \"mean\" to \"sqrtn\" after 2016/11/01.\n", 2281 | "WARNING:tensorflow:The default value of combiner will change from \"mean\" to \"sqrtn\" after 2016/11/01.\n", 2282 | "WARNING:tensorflow:The default value of combiner will change from \"mean\" to \"sqrtn\" after 2016/11/01.\n", 2283 | "WARNING:tensorflow:The default value of combiner will change from \"mean\" to \"sqrtn\" after 2016/11/01.\n", 2284 | "WARNING:tensorflow:The default value of combiner will change from \"mean\" to \"sqrtn\" after 2016/11/01.\n" 2285 | ] 2286 | } 2287 | ], 2288 | "source": [ 2289 | "# Create deep columns\n", 2290 | "deep_columns = [\n", 2291 | " tf.contrib.layers.embedding_column(workclass, dimension=8),\n", 2292 | " tf.contrib.layers.embedding_column(education, dimension=8),\n", 2293 | " tf.contrib.layers.embedding_column(gender, dimension=8),\n", 2294 | " tf.contrib.layers.embedding_column(relationship, dimension=8),\n", 2295 | " tf.contrib.layers.embedding_column(native_country, dimension=8),\n", 2296 | " tf.contrib.layers.embedding_column(occupation, dimension=8),\n", 2297 | " age, education_num, capital_gain, capital_loss, hours_per_week]\n" 2298 | ] 2299 | }, 2300 | { 2301 | "cell_type": "code", 2302 | "execution_count": 72, 2303 | "metadata": { 2304 | "collapsed": false 2305 | }, 2306 | "outputs": [ 2307 | { 2308 | "name": "stdout", 2309 | "output_type": "stream", 2310 | "text": [ 2311 | "INFO:tensorflow:Using default config.\n", 2312 | "INFO:tensorflow:Using config: {'_save_checkpoints_secs': 600, '_num_ps_replicas': 0, '_keep_checkpoint_max': 5, '_tf_random_seed': None, '_task_type': None, '_environment': 'local', '_is_chief': True, '_cluster_spec': , '_tf_config': gpu_options {\n", 2313 | " per_process_gpu_memory_fraction: 1\n", 2314 | "}\n", 2315 | ", '_task_id': 0, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_evaluation_master': '', '_keep_checkpoint_every_n_hours': 10000, '_master': ''}\n" 2316 | ] 2317 | } 2318 | ], 2319 | "source": [ 2320 | "# Create model for neural network\n", 2321 | "deep_model_dir = \"/tmp/workspace/deep_model_train/\"\n", 2322 | "deep_model = tf.contrib.learn.DNNClassifier(model_dir=deep_model_dir,\n", 2323 | " feature_columns=deep_columns,\n", 2324 | " hidden_units=[100, 50])" 2325 | ] 2326 | }, 2327 | { 2328 | "cell_type": "code", 2329 | "execution_count": 73, 2330 | "metadata": { 2331 | "collapsed": false 2332 | }, 2333 | "outputs": [ 2334 | { 2335 | "name": "stdout", 2336 | "output_type": "stream", 2337 | "text": [ 2338 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2339 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2340 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2341 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2342 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2343 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py:1362: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2344 | "Instructions for updating:\n", 2345 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2346 | "INFO:tensorflow:Create CheckpointSaverHook.\n", 2347 | "INFO:tensorflow:Saving checkpoints for 201 into /tmp/workspace/deep_model_dir/model.ckpt.\n", 2348 | "INFO:tensorflow:loss = 0.501267, step = 201\n", 2349 | "INFO:tensorflow:global_step/sec: 6.22435\n", 2350 | "INFO:tensorflow:loss = 0.477296, step = 301\n", 2351 | "INFO:tensorflow:Saving checkpoints for 400 into /tmp/workspace/deep_model_dir/model.ckpt.\n", 2352 | "INFO:tensorflow:Loss for final step: 0.439156.\n", 2353 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2354 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2355 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2356 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2357 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2358 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py:1362: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2359 | "Instructions for updating:\n", 2360 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2361 | "INFO:tensorflow:Starting evaluation at 2017-04-01-15:15:02\n", 2362 | "INFO:tensorflow:Evaluation [1/1]\n", 2363 | "INFO:tensorflow:Finished evaluation at 2017-04-01-15:15:03\n", 2364 | "INFO:tensorflow:Saving dict for global step 400: accuracy = 0.800319, accuracy/baseline_label_mean = 0.236226, accuracy/threshold_0.500000_mean = 0.800319, auc = 0.816603, global_step = 400, labels/actual_label_mean = 0.236226, labels/prediction_mean = 0.203884, loss = 0.423804, precision/positive_threshold_0.500000_mean = 0.834646, recall/positive_threshold_0.500000_mean = 0.192928\n", 2365 | "WARNING:tensorflow:Skipping summary for global_step, must be a float or np.float32.\n", 2366 | "accuracy: 0.800319\n", 2367 | "accuracy/baseline_label_mean: 0.236226\n", 2368 | "accuracy/threshold_0.500000_mean: 0.800319\n", 2369 | "auc: 0.816603\n", 2370 | "global_step: 400\n", 2371 | "labels/actual_label_mean: 0.236226\n", 2372 | "labels/prediction_mean: 0.203884\n", 2373 | "loss: 0.423804\n", 2374 | "precision/positive_threshold_0.500000_mean: 0.834646\n", 2375 | "recall/positive_threshold_0.500000_mean: 0.192928\n" 2376 | ] 2377 | } 2378 | ], 2379 | "source": [ 2380 | "deep_model.fit(input_fn=train_input_fn, steps=200)\n", 2381 | "\n", 2382 | "# Evaluate the mode\n", 2383 | "deep_model_results = deep_model.evaluate(input_fn=eval_input_fn, steps=1)\n", 2384 | "for key in sorted(deep_model_results):\n", 2385 | " print \"%s: %s\" % (key, deep_model_results[key])" 2386 | ] 2387 | }, 2388 | { 2389 | "cell_type": "markdown", 2390 | "metadata": {}, 2391 | "source": [ 2392 | "## Wide and deep model" 2393 | ] 2394 | }, 2395 | { 2396 | "cell_type": "code", 2397 | "execution_count": 83, 2398 | "metadata": { 2399 | "collapsed": false 2400 | }, 2401 | "outputs": [ 2402 | { 2403 | "name": "stdout", 2404 | "output_type": "stream", 2405 | "text": [ 2406 | "INFO:tensorflow:Using default config.\n", 2407 | "INFO:tensorflow:Using config: {'_save_checkpoints_secs': 600, '_num_ps_replicas': 0, '_keep_checkpoint_max': 5, '_tf_random_seed': None, '_task_type': None, '_environment': 'local', '_is_chief': True, '_cluster_spec': , '_tf_config': gpu_options {\n", 2408 | " per_process_gpu_memory_fraction: 1\n", 2409 | "}\n", 2410 | ", '_task_id': 0, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_evaluation_master': '', '_keep_checkpoint_every_n_hours': 10000, '_master': ''}\n" 2411 | ] 2412 | } 2413 | ], 2414 | "source": [ 2415 | "wide_and_deep_model_dir = \"/tmp/workspace/wide_deep_model_train/\"\n", 2416 | "\n", 2417 | "wide_and_deep_model = tf.contrib.learn.DNNLinearCombinedClassifier(\n", 2418 | " model_dir=wide_and_deep_model_dir,\n", 2419 | " linear_feature_columns=wide_columns,\n", 2420 | " dnn_feature_columns=deep_columns,\n", 2421 | " dnn_hidden_units=[100, 50])" 2422 | ] 2423 | }, 2424 | { 2425 | "cell_type": "code", 2426 | "execution_count": 84, 2427 | "metadata": { 2428 | "collapsed": false 2429 | }, 2430 | "outputs": [ 2431 | { 2432 | "name": "stdout", 2433 | "output_type": "stream", 2434 | "text": [ 2435 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2436 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2437 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2438 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2439 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2440 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:91: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2441 | "Instructions for updating:\n", 2442 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2443 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:92: histogram_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2444 | "Instructions for updating:\n", 2445 | "Please switch to tf.summary.histogram. Note that tf.summary.histogram uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in.\n", 2446 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:91: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2447 | "Instructions for updating:\n", 2448 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2449 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:92: histogram_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2450 | "Instructions for updating:\n", 2451 | "Please switch to tf.summary.histogram. Note that tf.summary.histogram uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in.\n", 2452 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:91: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2453 | "Instructions for updating:\n", 2454 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2455 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:92: histogram_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2456 | "Instructions for updating:\n", 2457 | "Please switch to tf.summary.histogram. Note that tf.summary.histogram uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in.\n", 2458 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/feature_column.py:1883: calling sparse_feature_cross (from tensorflow.contrib.layers.python.ops.sparse_feature_cross_op) with hash_key=None is deprecated and will be removed after 2016-11-20.\n", 2459 | "Instructions for updating:\n", 2460 | "The default behavior of sparse_feature_cross is changing, the default\n", 2461 | "value for hash_key will change to SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY.\n", 2462 | "From that point on sparse_feature_cross will always use FingerprintCat64\n", 2463 | "to concatenate the feature fingerprints. And the underlying\n", 2464 | "_sparse_feature_cross_op.sparse_feature_cross operation will be marked\n", 2465 | "as deprecated.\n", 2466 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/feature_column.py:1883: calling sparse_feature_cross (from tensorflow.contrib.layers.python.ops.sparse_feature_cross_op) with hash_key=None is deprecated and will be removed after 2016-11-20.\n", 2467 | "Instructions for updating:\n", 2468 | "The default behavior of sparse_feature_cross is changing, the default\n", 2469 | "value for hash_key will change to SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY.\n", 2470 | "From that point on sparse_feature_cross will always use FingerprintCat64\n", 2471 | "to concatenate the feature fingerprints. And the underlying\n", 2472 | "_sparse_feature_cross_op.sparse_feature_cross operation will be marked\n", 2473 | "as deprecated.\n", 2474 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py:1362: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2475 | "Instructions for updating:\n", 2476 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2477 | "INFO:tensorflow:Create CheckpointSaverHook.\n", 2478 | "INFO:tensorflow:Saving checkpoints for 2 into /tmp/workspace/wide_deep_model_train/model.ckpt.\n", 2479 | "INFO:tensorflow:loss = 152.769, step = 2\n", 2480 | "INFO:tensorflow:global_step/sec: 11.3353\n", 2481 | "INFO:tensorflow:global_step/sec: 11.2437\n", 2482 | "INFO:tensorflow:loss = 0.504183, step = 202\n", 2483 | "INFO:tensorflow:Saving checkpoints for 202 into /tmp/workspace/wide_deep_model_train/model.ckpt.\n", 2484 | "INFO:tensorflow:Loss for final step: 0.504183.\n", 2485 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2486 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2487 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2488 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2489 | "WARNING:tensorflow:Rank of input Tensor (1) should be the same as output_rank (2) for column. Will attempt to expand dims. It is highly recommended that you resize your input, as this behavior may change.\n", 2490 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:91: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2491 | "Instructions for updating:\n", 2492 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2493 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:92: histogram_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2494 | "Instructions for updating:\n", 2495 | "Please switch to tf.summary.histogram. Note that tf.summary.histogram uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in.\n", 2496 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:91: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2497 | "Instructions for updating:\n", 2498 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2499 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:92: histogram_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2500 | "Instructions for updating:\n", 2501 | "Please switch to tf.summary.histogram. Note that tf.summary.histogram uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in.\n", 2502 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:91: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2503 | "Instructions for updating:\n", 2504 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2505 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/dnn_linear_combined.py:92: histogram_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2506 | "Instructions for updating:\n", 2507 | "Please switch to tf.summary.histogram. Note that tf.summary.histogram uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in.\n", 2508 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/feature_column.py:1883: calling sparse_feature_cross (from tensorflow.contrib.layers.python.ops.sparse_feature_cross_op) with hash_key=None is deprecated and will be removed after 2016-11-20.\n", 2509 | "Instructions for updating:\n", 2510 | "The default behavior of sparse_feature_cross is changing, the default\n", 2511 | "value for hash_key will change to SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY.\n", 2512 | "From that point on sparse_feature_cross will always use FingerprintCat64\n", 2513 | "to concatenate the feature fingerprints. And the underlying\n", 2514 | "_sparse_feature_cross_op.sparse_feature_cross operation will be marked\n", 2515 | "as deprecated.\n", 2516 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/layers/python/layers/feature_column.py:1883: calling sparse_feature_cross (from tensorflow.contrib.layers.python.ops.sparse_feature_cross_op) with hash_key=None is deprecated and will be removed after 2016-11-20.\n", 2517 | "Instructions for updating:\n", 2518 | "The default behavior of sparse_feature_cross is changing, the default\n", 2519 | "value for hash_key will change to SPARSE_FEATURE_CROSS_DEFAULT_HASH_KEY.\n", 2520 | "From that point on sparse_feature_cross will always use FingerprintCat64\n", 2521 | "to concatenate the feature fingerprints. And the underlying\n", 2522 | "_sparse_feature_cross_op.sparse_feature_cross operation will be marked\n", 2523 | "as deprecated.\n", 2524 | "WARNING:tensorflow:From /Users/xozhang/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/tensorflow/contrib/learn/python/learn/estimators/head.py:1362: scalar_summary (from tensorflow.python.ops.logging_ops) is deprecated and will be removed after 2016-11-30.\n", 2525 | "Instructions for updating:\n", 2526 | "Please switch to tf.summary.scalar. Note that tf.summary.scalar uses the node name instead of the tag. This means that TensorFlow will automatically de-duplicate summary names based on the scope they are created in. Also, passing a tensor or list of tags to a scalar summary op is no longer supported.\n", 2527 | "INFO:tensorflow:Starting evaluation at 2017-04-01-15:36:08\n", 2528 | "INFO:tensorflow:Evaluation [1/1]\n", 2529 | "INFO:tensorflow:Finished evaluation at 2017-04-01-15:36:10\n", 2530 | "INFO:tensorflow:Saving dict for global step 202: accuracy = 0.8228, accuracy/baseline_label_mean = 0.236226, accuracy/threshold_0.500000_mean = 0.8228, auc = 0.864459, global_step = 202, labels/actual_label_mean = 0.236226, labels/prediction_mean = 0.252666, loss = 0.724603, precision/positive_threshold_0.500000_mean = 0.67441, recall/positive_threshold_0.500000_mean = 0.483099\n", 2531 | "WARNING:tensorflow:Skipping summary for global_step, must be a float or np.float32.\n", 2532 | "accuracy: 0.8228\n", 2533 | "accuracy/baseline_label_mean: 0.236226\n", 2534 | "accuracy/threshold_0.500000_mean: 0.8228\n", 2535 | "auc: 0.864459\n", 2536 | "global_step: 202\n", 2537 | "labels/actual_label_mean: 0.236226\n", 2538 | "labels/prediction_mean: 0.252666\n", 2539 | "loss: 0.724603\n", 2540 | "precision/positive_threshold_0.500000_mean: 0.67441\n", 2541 | "recall/positive_threshold_0.500000_mean: 0.483099\n" 2542 | ] 2543 | } 2544 | ], 2545 | "source": [ 2546 | "wide_and_deep_model.fit(input_fn=train_input_fn, steps=200)\n", 2547 | "\n", 2548 | "# Evaluate the mode\n", 2549 | "wide_deep_model_results = wide_and_deep_model.evaluate(input_fn=eval_input_fn, steps=1)\n", 2550 | "for key in sorted(wide_deep_model_results):\n", 2551 | " print \"%s: %s\" % (key, wide_deep_model_results[key])" 2552 | ] 2553 | }, 2554 | { 2555 | "cell_type": "code", 2556 | "execution_count": null, 2557 | "metadata": { 2558 | "collapsed": true 2559 | }, 2560 | "outputs": [], 2561 | "source": [] 2562 | } 2563 | ], 2564 | "metadata": { 2565 | "anaconda-cloud": {}, 2566 | "kernelspec": { 2567 | "display_name": "Python 2", 2568 | "language": "python", 2569 | "name": "python2" 2570 | }, 2571 | "language_info": { 2572 | "codemirror_mode": { 2573 | "name": "ipython", 2574 | "version": 2 2575 | }, 2576 | "file_extension": ".py", 2577 | "mimetype": "text/x-python", 2578 | "name": "python", 2579 | "nbconvert_exporter": "python", 2580 | "pygments_lexer": "ipython2", 2581 | "version": "2.7.12" 2582 | } 2583 | }, 2584 | "nbformat": 4, 2585 | "nbformat_minor": 0 2586 | } 2587 | --------------------------------------------------------------------------------