Skip to content

Instantly share code, notes, and snippets.

@kylekyle
Created April 20, 2020 17:31
Show Gist options
  • Save kylekyle/02586613790b4ce462bca774abf1451f to your computer and use it in GitHub Desktop.
Save kylekyle/02586613790b4ce462bca774abf1451f to your computer and use it in GitHub Desktop.
titanic.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "titanic.ipynb",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyNs/ZVIm71p+sEbzc0kG0ac",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/kylekyle/02586613790b4ce462bca774abf1451f/titanic.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "T-k5daHhc-ik",
"colab_type": "text"
},
"source": [
"# Load dataset"
]
},
{
"cell_type": "code",
"metadata": {
"id": "ou8rlGSWcaPp",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"outputId": "334ded62-fa1b-4984-aa96-2669ec214de2"
},
"source": [
"import pandas as pd\n",
"\n",
"df = pd.read_csv(\"https://drive.google.com/uc?export=download&id=15eLEu3cR96AwP6k9A0Oav7RLI7Zq9D1c\")\n",
"\n",
"df = df.drop(columns=['Name','Ticket','Embarked', 'Cabin', 'PassengerId'])\n",
"df = pd.get_dummies(data=df, columns=['Pclass', 'Sex'], drop_first=True)\n",
"\n",
"df.head()"
],
"execution_count": 1,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Survived</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Fare</th>\n",
" <th>Pclass_2</th>\n",
" <th>Pclass_3</th>\n",
" <th>Sex_male</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>7.2500</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>71.2833</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>7.9250</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>53.1000</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>8.0500</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Survived Age SibSp Parch Fare Pclass_2 Pclass_3 Sex_male\n",
"0 0 22.0 1 0 7.2500 0 1 1\n",
"1 1 38.0 1 0 71.2833 0 0 0\n",
"2 1 26.0 0 0 7.9250 0 1 0\n",
"3 1 35.0 1 0 53.1000 0 0 0\n",
"4 0 35.0 0 0 8.0500 0 1 1"
]
},
"metadata": {
"tags": []
},
"execution_count": 1
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "IBtHAKmrdCHW",
"colab_type": "text"
},
"source": [
"# Split"
]
},
{
"cell_type": "code",
"metadata": {
"id": "LrPLCj01c2dj",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"outputId": "5da2b98f-595e-4a33-eec9-c3dd3130b8cf"
},
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"X, y = df.drop(columns='Survived'), df['Survived']\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)\n",
"\n",
"X_train.head()"
],
"execution_count": 2,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Fare</th>\n",
" <th>Pclass_2</th>\n",
" <th>Pclass_3</th>\n",
" <th>Sex_male</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>217</th>\n",
" <td>42.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>27.0000</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>480</th>\n",
" <td>9.0</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" <td>46.9000</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>590</th>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>7.1250</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>713</th>\n",
" <td>29.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>9.4833</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>258</th>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>512.3292</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Age SibSp Parch Fare Pclass_2 Pclass_3 Sex_male\n",
"217 42.0 1 0 27.0000 1 0 1\n",
"480 9.0 5 2 46.9000 0 1 1\n",
"590 35.0 0 0 7.1250 0 1 1\n",
"713 29.0 0 0 9.4833 0 1 1\n",
"258 35.0 0 0 512.3292 0 0 0"
]
},
"metadata": {
"tags": []
},
"execution_count": 2
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "XWLue-hGjiWL",
"colab_type": "text"
},
"source": [
"# Scale\n",
"\n",
"Remember, you must scale *after* you split, or you'll leak information between the test and validation sets. For instance, the age of people in your validation set will be reflected in the mean and standard deviation in your test set. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "5HLePtb3cjmZ",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"outputId": "68a4f030-14dd-4c4b-d556-ed9ae0467d8f"
},
"source": [
"from sklearn.preprocessing import scale\n",
"\n",
"df[['Age', 'Fare']] = scale(df[['Age', 'Fare']])\n",
"df.head()"
],
"execution_count": 3,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Survived</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Fare</th>\n",
" <th>Pclass_2</th>\n",
" <th>Pclass_3</th>\n",
" <th>Sex_male</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>-0.530377</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>-0.502445</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>0.571831</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0.786845</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>-0.254825</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>-0.488854</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>0.365167</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0.420730</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>0.365167</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>-0.486337</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Survived Age SibSp Parch Fare Pclass_2 Pclass_3 Sex_male\n",
"0 0 -0.530377 1 0 -0.502445 0 1 1\n",
"1 1 0.571831 1 0 0.786845 0 0 0\n",
"2 1 -0.254825 0 0 -0.488854 0 1 0\n",
"3 1 0.365167 1 0 0.420730 0 0 0\n",
"4 0 0.365167 0 0 -0.486337 0 1 1"
]
},
"metadata": {
"tags": []
},
"execution_count": 3
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BqBMRudwkRUy",
"colab_type": "text"
},
"source": [
"# Train"
]
},
{
"cell_type": "code",
"metadata": {
"id": "7T3IP3RDkNFP",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
},
"outputId": "37056439-51f3-4431-d020-ccb64512cfa1"
},
"source": [
"import tensorflow\n",
"from tensorflow.keras.layers import *\n",
"from tensorflow.keras.models import Sequential\n",
"\n",
"model = Sequential()\n",
"model.add(Dense(64, activation='relu', input_dim=X_train.shape[1]))\n",
"model.add(Dense(64, activation='relu'))\n",
"model.add(Dense(1, activation='sigmoid'))\n",
"\n",
"model.compile(loss='binary_crossentropy', optimizer='RMSProp', metrics=['acc'])\n",
"history = model.fit(X_train, y_train, batch_size=1, epochs=5, validation_data=(X_test,y_test))"
],
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"text": [
"Epoch 1/5\n",
"801/801 [==============================] - 1s 1ms/step - loss: nan - acc: 0.6192 - val_loss: nan - val_acc: 0.6222\n",
"Epoch 2/5\n",
"801/801 [==============================] - 1s 1ms/step - loss: nan - acc: 0.6155 - val_loss: nan - val_acc: 0.6222\n",
"Epoch 3/5\n",
"801/801 [==============================] - 1s 1ms/step - loss: nan - acc: 0.6155 - val_loss: nan - val_acc: 0.6222\n",
"Epoch 4/5\n",
"801/801 [==============================] - 1s 1ms/step - loss: nan - acc: 0.6155 - val_loss: nan - val_acc: 0.6222\n",
"Epoch 5/5\n",
"801/801 [==============================] - 1s 1ms/step - loss: nan - acc: 0.6155 - val_loss: nan - val_acc: 0.6222\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "fKgEbWr6l5bL",
"colab_type": "text"
},
"source": [
"# Plot"
]
},
{
"cell_type": "code",
"metadata": {
"id": "YlVcKPCpl4QZ",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 295
},
"outputId": "4a8e50e9-cfc9-4718-c273-98f582ec23a4"
},
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"plt.plot(history.history['acc'])\n",
"plt.plot(history.history['val_acc'])\n",
"plt.title('Model accuracy')\n",
"plt.ylabel('Accuracy')\n",
"plt.xlabel('Epoch')\n",
"plt.legend(['Train', 'Test'], loc='upper left')\n",
"plt.show()"
],
"execution_count": 6,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment