Skip to content

Instantly share code, notes, and snippets.

@Swarchal
Created August 25, 2017 11:53
Show Gist options
  • Save Swarchal/6dfcf0e9237ea4cb11601decb9cd1ccc to your computer and use it in GitHub Desktop.
Save Swarchal/6dfcf0e9237ea4cb11601decb9cd1ccc to your computer and use it in GitHub Desktop.
kaggle titanic
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Kaggle Titanic dataset\n",
"\n",
"Predicting passenger survival."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import sklearn\n",
"from sklearn.model_selection import cross_val_score, train_test_split, GridSearchCV\n",
"\n",
"from IPython.display import Image\n",
"from IPython.core.display import HTML \n",
"\n",
"%matplotlib inline\n",
"sns.set_style(\"ticks\")\n",
"np.random.seed(42)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>male</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>female</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>female</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>female</td>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>male</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 Braund, Mr. Owen Harris male 22.0 1 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
"2 Heikkinen, Miss. Laina female 26.0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
"4 Allen, Mr. William Henry male 35.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked \n",
"0 0 A/5 21171 7.2500 NaN S \n",
"1 0 PC 17599 71.2833 C85 C \n",
"2 0 STON/O2. 3101282 7.9250 NaN S \n",
"3 0 113803 53.1000 C123 S \n",
"4 0 373450 8.0500 NaN S "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# load data\n",
"train = pd.read_csv(\"../raw_data/train.csv\")\n",
"test = pd.read_csv(\"../raw_data/test.csv\")\n",
"\n",
"train.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>892</td>\n",
" <td>3</td>\n",
" <td>Kelly, Mr. James</td>\n",
" <td>male</td>\n",
" <td>34.5</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>330911</td>\n",
" <td>7.8292</td>\n",
" <td>NaN</td>\n",
" <td>Q</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>893</td>\n",
" <td>3</td>\n",
" <td>Wilkes, Mrs. James (Ellen Needs)</td>\n",
" <td>female</td>\n",
" <td>47.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>363272</td>\n",
" <td>7.0000</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>894</td>\n",
" <td>2</td>\n",
" <td>Myles, Mr. Thomas Francis</td>\n",
" <td>male</td>\n",
" <td>62.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>240276</td>\n",
" <td>9.6875</td>\n",
" <td>NaN</td>\n",
" <td>Q</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>895</td>\n",
" <td>3</td>\n",
" <td>Wirz, Mr. Albert</td>\n",
" <td>male</td>\n",
" <td>27.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>315154</td>\n",
" <td>8.6625</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>896</td>\n",
" <td>3</td>\n",
" <td>Hirvonen, Mrs. Alexander (Helga E Lindqvist)</td>\n",
" <td>female</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>3101298</td>\n",
" <td>12.2875</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Pclass Name Sex \\\n",
"0 892 3 Kelly, Mr. James male \n",
"1 893 3 Wilkes, Mrs. James (Ellen Needs) female \n",
"2 894 2 Myles, Mr. Thomas Francis male \n",
"3 895 3 Wirz, Mr. Albert male \n",
"4 896 3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female \n",
"\n",
" Age SibSp Parch Ticket Fare Cabin Embarked \n",
"0 34.5 0 0 330911 7.8292 NaN Q \n",
"1 47.0 1 0 363272 7.0000 NaN S \n",
"2 62.0 0 0 240276 9.6875 NaN Q \n",
"3 27.0 0 0 315154 8.6625 NaN S \n",
"4 22.0 1 1 3101298 12.2875 NaN S "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We'll join the training and test dataset for now. Can't always do this in real-world problems, but it makes thinkgs like encoding categories a bit easier."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1309, 13)\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# make identifying columns so we can separate them later\n",
"test[\"dataset\"] = \"test\"\n",
"train[\"dataset\"] = \"train\"\n",
"\n",
"all_data = pd.concat([train, test])\n",
"\n",
"# sanity check\n",
"print(all_data.shape)\n",
"all_data.shape[0] == test.shape[0] + train.shape[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Simple feature engineering\n",
"\n",
"We'll so some really simple feature engineering, like converting `Sex` from a string into 1 and 0, and one-hot-encoding `Embarked`."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# binarise Sex\n",
"all_data.Sex = [1 if i == \"male\" else 0 for i in all_data.Sex]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now one-hot-encode `Embarked`. This is tranforming a categorical feature with $n$ categories into $n$ binary columns."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Embarked__C</th>\n",
" <th>Embarked__Q</th>\n",
" <th>Embarked__S</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Embarked__C Embarked__Q Embarked__S\n",
"0 0.0 0.0 1.0\n",
"1 1.0 0.0 0.0\n",
"2 0.0 0.0 1.0\n",
"3 0.0 0.0 1.0\n",
"4 0.0 0.0 1.0"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ohc_embarked = pd.get_dummies(all_data.Embarked, prefix=\"Embarked_\")\n",
"ohc_embarked.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# remove original embarked column\n",
"all_data.drop(\"Embarked\", axis=1, inplace=True)\n",
"# add new columns to train dataframe\n",
"all_data = pd.concat([all_data, ohc_embarked], axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Missing data\n",
"\n",
"Which columns contain missing values?"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Age', 'Cabin', 'Fare', 'Survived'], dtype='object')"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"missing = all_data.columns[all_data.isnull().any()]\n",
"missing"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So we can impute the missing values for `Age` and `Fare`.\n",
"\n",
"Simple method is to just use the median."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"new_vals = all_data[[\"Age\", \"Fare\"]].apply(lambda x: x.fillna(np.mean(x)))\n",
"\n",
"all_data[[\"Age\", \"Fare\"]] = new_vals\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Benchmark\n",
"\n",
"Now let's try some models on this basic dataset to set a baseline prediction accuracy. We can then see if later fiddling actually improves predictions or just\n",
" makes things worse."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"to_drop = [\"PassengerId\", \"Name\", \"Cabin\", \"Ticket\"]\n",
"\n",
"simple_df = all_data.drop(to_drop, axis=1)\n",
"\n",
"X = simple_df[simple_df.dataset == \"train\"].drop(\"dataset\", axis=1)\n",
"\n",
"y = X.pop(\"Survived\").values.astype(int)\n",
"\n",
"# split into train, and validation sets\n",
"X_train, X_test, y_train, y_test = train_test_split(\n",
" X, y, test_size=0.3)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Random forest\n",
"\n",
"Just try the default parameters for now."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"training score = 0.798\n",
"validation score = 0.795\n"
]
}
],
"source": [
"from sklearn.ensemble import RandomForestClassifier\n",
"\n",
"r_forest = RandomForestClassifier()\n",
"\n",
"train_score = cross_val_score(r_forest, X_train, y_train, cv=5).mean()\n",
"val_score = r_forest.fit(X_train, y_train).score(X_test, y_test)\n",
"\n",
"print(\"training score = {:.3f}\".format(train_score))\n",
"print(\"validation score = {:.3f}\".format(val_score))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Logistic Regression\n",
"\n",
"Since we're predicting binary outcomes, logistic regression makes a lot of sense as a model."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"training score = 0.791\n",
"validation score = 0.795\n"
]
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"\n",
"logit = LogisticRegression()\n",
"\n",
"train_score = cross_val_score(logit, X, y, cv=5).mean()\n",
"test_score = logit.fit(X_train, y_train).score(X_test, y_test)\n",
"\n",
"print(\"training score = {:.3f}\".format(train_score))\n",
"print(\"validation score = {:.3f}\".format(val_score))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---------\n",
"\n",
"Both randomforest and logistic regression have similar predictions accuracies on the training data using the default settings.\n",
"\n",
"Now we'll try to get more features from the data and compare accuracies to out benchmark. Then we'll try to optimise the models with parameter searching."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def convert_cabin(cabins):\n",
" \"\"\"Convert Cabin feature into two features, letter and numbers\"\"\"\n",
" cabin_letter = []\n",
" cabin_number = []\n",
" for i in cabins:\n",
" # deal with nan values\n",
" if i != i: # hack\n",
" letter = np.nan\n",
" number = np.nan\n",
" # some values are just a single letter\n",
" elif len(i) == 1:\n",
" letter = i\n",
" number = np.nan\n",
" else:\n",
" # some values list multiple cabins, detect these with a space\n",
" if \" \" in i:\n",
" # just get the second room\n",
" i = i.split(\" \")[1]\n",
" letter = i[0]\n",
" number = int(i[1:])\n",
" cabin_letter.append(letter)\n",
" cabin_number.append(number)\n",
" return pd.DataFrame({\"Cabin_letter\" : cabin_letter,\n",
" \"Cabin_number\" : cabin_number})\n",
"\n",
"\n",
"all_data = all_data.join(convert_cabin(all_data.Cabin))\n",
"\n",
"all_data = all_data.drop(\"Cabin\", axis=1)\n",
"\n",
"# one-hot-encode cabin letters, set nan values to all 0\n",
"ohc_cabin_letter = pd.get_dummies(all_data.Cabin_letter,\n",
" prefix=\"Cabin_letter\",\n",
" dummy_na=0)\n",
"\n",
"all_data = pd.concat([all_data, ohc_cabin_letter], axis=1)\n",
"all_data = all_data.drop(\"Cabin_letter\", axis=1)\n",
"\n",
"# fill missing cabin numbers with the mean value\n",
"all_data.head()\n",
"all_data.Cabin_number.fillna(all_data.Cabin_number.median(), inplace=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Binarise `Pclass`, see if that helps."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"all_data = pd.concat([all_data, pd.get_dummies(all_data.Pclass, prefix=\"Pclass\")], axis=1)\n",
"all_data = all_data.drop(\"Pclass\", axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Benchmark cabin data\n",
"\n",
"See if adding cabin letters and numbers has improved predictions."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"random forest = 0.79\n",
"logistic regression = 0.80\n"
]
}
],
"source": [
"to_drop = [\"PassengerId\", \"Name\", \"Ticket\"]\n",
"\n",
"simple_df = all_data.drop(to_drop, axis=1)\n",
"\n",
"X = simple_df[simple_df.dataset == \"train\"].drop(\"dataset\", axis=1)\n",
"\n",
"y = X.pop(\"Survived\").values.astype(int)\n",
"\n",
"rforest = cross_val_score(RandomForestClassifier(), X, y, cv=5).mean()\n",
"logit = cross_val_score(LogisticRegression(), X, y, cv=5).mean()\n",
"\n",
"print(\"random forest = {:.2f}\".format(rforest))\n",
"print(\"logistic regression = {:.2f}\".format(logit))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks like there is a slight increase in prediction accuracy once we have extracted cabin letters and numbers."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Get the titles from the names\n",
"\n",
"The names contain titles, which are likely another indicator of class/importance/wealth, and might be a good predictor."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'Billiard,',\n",
" 'Brito,',\n",
" 'Capt.',\n",
" 'Carlo,',\n",
" 'Col.',\n",
" 'Cruyssen,',\n",
" 'Don.',\n",
" 'Dr.',\n",
" 'Gordon,',\n",
" 'Impe,',\n",
" 'Jonkheer.',\n",
" 'Khalil,',\n",
" 'Major.',\n",
" 'Master.',\n",
" 'Melkebeke,',\n",
" 'Messemaeker,',\n",
" 'Miss.',\n",
" 'Mlle.',\n",
" 'Mme.',\n",
" 'Mr.',\n",
" 'Mrs.',\n",
" 'Ms.',\n",
" 'Mulder,',\n",
" 'Palmquist,',\n",
" 'Pelsmaeker,',\n",
" 'Planke,',\n",
" 'Rev.',\n",
" 'Shawah,',\n",
" 'Steen,',\n",
" 'Velde,',\n",
" 'Walle,',\n",
" 'der',\n",
" 'the',\n",
" 'y'}"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"set([i.split(\" \")[1] for i in all_data.Name])"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"important_titles = [\"Capt.\",\n",
" \"Col.\",\n",
" \"Don.\",\n",
" \"Dr.\",\n",
" \"Major.\",\n",
" \"Rev.\",\n",
" \" the \",\n",
" \"Jonkheer.\",\n",
" \" y \"]\n",
"\n",
"\n",
"is_important = []\n",
"for name in all_data.Name:\n",
" if any(title in name for title in important_titles):\n",
" is_important.append(1)\n",
" else:\n",
" is_important.append(0)\n",
"\n",
"all_data[\"important_title\"] = is_important"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Is ticket number related to anything?"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# gonna be a pain in the arse to extract ticket number\n",
"import re\n",
"\n",
"# pre-allocate array\n",
"ticket_nums = np.empty(all_data.shape[0], dtype=float)\n",
"\n",
"\n",
"for idx, ticket_code in enumerate(all_data.Ticket):\n",
" try:\n",
" num = int(re.findall(\"\\d+\", ticket_code)[-1])\n",
" except IndexError: # no numbers in ticket code\n",
" num = np.nan\n",
" ticket_nums[idx] = num\n",
"\n",
" \n",
"# replace missing values (nan) with median\n",
"ticket_nums[np.isnan(ticket_nums)] = np.nanmedian(ticket_nums)\n",
"\n",
"all_data[\"TicketNumber\"] = ticket_nums"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6fbd1039b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"train = all_data[all_data.dataset == \"train\"]\n",
"\n",
"plt.figure(figsize=[4, 6])\n",
"tmp = train.copy()\n",
"tmp.Survived = tmp.Survived.astype(int)\n",
"g = sns.boxplot(x=\"Survived\", y=\"TicketNumber\", data=tmp, width=0.5)\n",
"plt.ylim([-100000, 500000])\n",
"plt.title(\"Ticket # and survival\", fontweight=\"bold\", loc=\"left\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Might actually be something in the `TicketNumber`, survivors have earlier ticket numbers?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Last benchmark before tuning"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"random forest = 0.83\n",
"logistic regression = 0.80\n"
]
}
],
"source": [
"to_drop = [\"PassengerId\", \"Name\", \"Ticket\", \"TicketNumber\"]\n",
"\n",
"simple_df = all_data.drop(to_drop, axis=1)\n",
"\n",
"X = simple_df[simple_df.dataset == \"train\"].drop(\"dataset\", axis=1)\n",
"\n",
"y = X.pop(\"Survived\").values.astype(int)\n",
"\n",
"rforest = cross_val_score(RandomForestClassifier(), X, y, cv=5).mean()\n",
"logit = cross_val_score(LogisticRegression(), X, y, cv=5).mean()\n",
"\n",
"print(\"random forest = {:.2f}\".format(rforest))\n",
"print(\"logistic regression = {:.2f}\".format(logit))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Logistic regression accuracy has taken a bit hit. Let's try scaling to features."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"random forest = 0.80\n",
"logistic regression = 0.80\n"
]
}
],
"source": [
"X_scaled = sklearn.preprocessing.scale(X)\n",
"\n",
"rforest = cross_val_score(RandomForestClassifier(), X_scaled, y, cv=5).mean()\n",
"logit = cross_val_score(LogisticRegression(), X_scaled, y, cv=5).mean()\n",
"\n",
"print(\"random forest = {:.2f}\".format(rforest))\n",
"print(\"logistic regression = {:.2f}\".format(logit))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Doesn't look like the features are adding much.\n",
"\n",
"## Tune parameters\n",
"\n",
"The models come with lots of parameters you can adjust. If you have no idea what you're doing, then you can do a grid-search of lots of combinations of parameters and find the best ones to use."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"rf_param_grid = {\n",
" \"n_estimators\" : [10, 50, 100, 250, 500, 1000],\n",
" \"max_features\" : [0.5, 0.9, None, \"sqrt\", \"log2\"],\n",
" \"min_samples_split\" : [2, 3, 4, 5, 10],\n",
"}\n",
"\n",
"logit_param_grid = {\n",
" \"penalty\" : [\"l1\", \"l2\"],\n",
" \"C\" : np.linspace(0.001, 20, 10),\n",
" \"class_weight\" : [\"balanced\", {0: 0.7, 1:0.3}, {0:0.8, 1:0.2}]\n",
"}\n",
"\n",
"# split into training and validation data\n",
"X_train, X_test, y_train, y_test = train_test_split(\n",
" X_scaled, y, test_size=0.33)\n",
"\n",
"# defaults to the best model, so fit using that\n",
"rf_model = GridSearchCV(RandomForestClassifier(),\n",
" rf_param_grid, cv=5, n_jobs=-1).fit(X_train, y_train)\n",
"rf_best_params = rf_model.best_params_ # record best parameters\n",
"\n",
"logit_model = GridSearchCV(LogisticRegression(),\n",
" logit_param_grid, cv=5, n_jobs=-1).fit(X_train, y_train)\n",
"logit_best_params = logit_model.best_params_ # record best parameters"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"random forest training acc. = 0.815\n",
"logistic reg. training acc. = 0.782\n",
"\n",
"random forest best parameters = {'n_estimators': 100, 'max_features': None, 'min_samples_split': 5}\n",
"logistic reg. best parameters = {'C': 2.2231111111111108, 'class_weight': 'balanced', 'penalty': 'l2'}\n"
]
}
],
"source": [
"print(\"random forest training acc. = {:.3f}\".format(rf_model.best_score_))\n",
"print(\"logistic reg. training acc. = {:.3f}\\n\".format(logit_model.best_score_))\n",
"\n",
"print(\"random forest best parameters = {}\".format(rf_best_params))\n",
"print(\"logistic reg. best parameters = {}\".format(logit_best_params))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now test on the validation data."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"random forest validation acc = 0.837\n",
"logistic reg. validation acc = 0.803\n"
]
}
],
"source": [
"rf_val_score = rf_model.score(X_test, y_test)\n",
"\n",
"logit_score = logit_model.score(X_test, y_test)\n",
"\n",
"print(\"random forest validation acc = {:.3f}\".format(rf_val_score))\n",
"print(\"logistic reg. validation acc = {:.3f}\".format(logit_score))"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_dat = all_data[all_data.dataset == \"test\"]\n",
"test_dat = test_dat.drop(to_drop + [\"Survived\", \"dataset\"], axis=1)\n",
"\n",
"# check the columns are the same, and in the same order\n",
"all(test_dat.columns == X.columns)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"predictions = rf_model.predict(test_dat)\n",
"\n",
"submit_df = pd.DataFrame({\"PassengerID\" : test.PassengerId,\n",
" \"Survived\" : predictions})\n",
"\n",
"submit_df.to_csv(\"kaggle_submission_1.csv\", index=False)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.metrics import roc_curve, auc\n",
"\n",
"predictions = rf_model.predict(X_test)\n",
"fpr, tpr, thresholds = roc_curve(y_test, predictions)\n",
"AUC = auc(fpr, tpr)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6fb03da0f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(fpr, tpr)\n",
"plt.title(\"AUC = {:.3f}\".format(AUC))\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Kaggle prediction accuracy = 0.7799\n",
"\n",
"meh"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# DL\n",
"\n",
"Definitely the wrong approach.\n",
"\n",
"----------------"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using Theano backend.\n",
"WARNING (theano.sandbox.cuda): The cuda backend is deprecated and will be removed in the next release (v0.10). Please switch to the gpuarray backend. You can get more information about how to switch at this URL:\n",
" https://github.com/Theano/Theano/wiki/Converting-to-the-new-gpu-back-end%28gpuarray%29\n",
"\n",
"Using gpu device 0: NVS 310 (CNMeM is disabled, cuDNN not available)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"train nn with dropout\n",
"train nn without dropout\n"
]
}
],
"source": [
"from keras.models import Sequential\n",
"from keras.layers import Dense, Dropout\n",
"\n",
"N_EPOCHS=1000\n",
"BATCH_SIZE=128\n",
"\n",
"def make_nn(n_input_features, dropout=True):\n",
" model = Sequential()\n",
" model.add(Dense(128, input_dim=n_input_features))\n",
" if dropout:\n",
" model.add(Dropout(0.3))\n",
" model.add(Dense(64, activation=\"tanh\"))\n",
" if dropout:\n",
" model.add(Dropout(0.3))\n",
" model.add(Dense(24, activation=\"tanh\"))\n",
" if dropout:\n",
" model.add(Dropout(0.3))\n",
" model.add(Dense(12, activation=\"tanh\"))\n",
" if dropout:\n",
" model.add(Dropout(0.5)) # reduces overfitting\n",
" model.add(Dense(1, activation=\"sigmoid\"))\n",
" model.compile(loss=\"binary_crossentropy\", optimizer=\"adam\", metrics=[\"accuracy\"])\n",
" return model\n",
"\n",
"model_dropout = make_nn(X_test.shape[1])\n",
"model_no_dropout = make_nn(X_test.shape[1], dropout=False)\n",
"\n",
"print(\"train nn with dropout\")\n",
"history_dropout = model_dropout.fit(np.asarray(X_train), y_train, epochs=N_EPOCHS,\n",
" batch_size=BATCH_SIZE, verbose=0, validation_data=(X_test, y_test))\n",
"\n",
"print(\"train nn without dropout\")\n",
"history_no_dropout = model_no_dropout.fit(np.asarray(X_train), y_train, epochs=N_EPOCHS,\n",
" batch_size=BATCH_SIZE, verbose=0, validation_data=(X_test, y_test))"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n+/JUBTR1syMuNZvuTVz5cv9VPD0cOBmhuZ8vR7Zk6vozZdb5GQ8HolNisTQzxsjICDtLM2Xf+E51\nGNuhDu3WHjsBAAAgAElEQVSL/PhYPbYNy/8MI+R6IlXMTcgq/PEz2LMGS57zpKaDFQVqNXmqAsxM\n7vz4CHm/OyqV+oEF3lCB2U7Onj1LrVq18PDwwNzcnL59+xIUFKRTJiwsDB8fHwB8fHz09gsh7o8+\nffqwe/duAgMD6dWrF2lpaVSrVg0zMzOOHTtWag8zQJs2bdi5cycA//zzD1euXAEgIyMDKysrbG1t\nSUhI4NChO4/5qlSpQkaGfsPt5eXF/v37ycrKIjMzk/379+Pl5XXX95SRkYGzszN5eXns2LFD2d6u\nXTt++eUXQBNQpqWl4ePjw++//05SkmY8onbYSc2aNblw4QIAf/zxh07wXVRaWhr29vZYWVkRFhbG\nmTOaL46WLVty8uRJZXx50eEsw4cP56233qJXr16YmDy4Rv1eSZstHhctZgfy0uoTBvclZ+ZSe8Yu\nNp6MLNe5Biz9i9ozdtFk5u8AyrCFNccilDIzNp+l0f9+5+U1J6k9Y5fyLzuvgNsZudR5dzfHrt2m\nzru7afS/36k9Y5fONeq8u5unZ++l3nu7qfPubuV4qyI95oOW/cXLa04B+kNJysPOsuy+1rHta/Pb\npA4sftaTn1705r2+TQyWa+FuTz1nG9a/7MMrXerp7a/nbMPbvRqxYUI7mte0Z/trHZjse+dHvJON\nBQDmJsasCGgNQF3nKoTO7MGB6V0xLfwB0/tpN6Vcce/1aUINBys2v9pO2da1kQs/vejN7tc74WBt\nzq00TQdJTQdr6rvYYGVuQhULUxysdYf52FiYYm9txoNUYT3fcXFxyuNI0GROOHv2rE6Zxo0bs3fv\nXl544QX27dtHRkYGSUlJVK1alZycHIYMGYKpqSkvv/yy3mQwIUT5NWjQgIyMDFxcXHBxcaF///68\n+uqr9O/fn+bNm1O3bumzu5977jneffddevfuTb169WjWrBmg+T/ctGlTevfuTfXq1WnVqpVyzIgR\nIxg3bhwuLi6sWbNG2d6sWTOGDBnC8OHDAc2Ey6ZNmxIVFXVX9zRlyhSGDx+Oo6MjzzzzjBLov//+\n+8ycOZPNmzdjbGzM7Nmz8fT05JVXXiEgIABjY2OaNm3Kp59+yogRI5g4cSIDBgygU6dOOr3dRXXu\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6fbbb83c50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=[12, 8])\n",
"plt.subplot(221)\n",
"plt.plot(range(N_EPOCHS), history_dropout.history[\"acc\"], label=\"training accuracy\")\n",
"plt.plot(range(N_EPOCHS), history_dropout.history[\"val_acc\"], label=\"validation_accuracy\")\n",
"plt.legend()\n",
"plt.xlabel(\"# epochs\")\n",
"plt.ylabel(\"accuracy\")\n",
"plt.ylim([0.7, 1])\n",
"plt.title(\"Training accuracy with dropout\", loc=\"left\")\n",
"\n",
"plt.subplot(222)\n",
"plt.plot(range(N_EPOCHS), history_no_dropout.history[\"acc\"], label=\"training accuracy\")\n",
"plt.plot(range(N_EPOCHS), history_no_dropout.history[\"val_acc\"], label=\"validation_accuracy\")\n",
"plt.legend()\n",
"plt.xlabel(\"# epochs\")\n",
"plt.ylim([0.7, 1])\n",
"plt.title(\"Training accuracy without dropout\", loc=\"left\")\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks like it's overfitting past around 100 epochs even with lots of dropout, so train again with fewer epochs, then predict."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6f9bf88048>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"N_EPOCHS = 20\n",
"\n",
"model2 = make_nn(X_test.shape[1], dropout=True)\n",
"history2 = model2.fit(np.asarray(X_train), y_train, epochs=N_EPOCHS, batch_size=BATCH_SIZE, verbose=0,\n",
" validation_data=(X_test, y_test))\n",
"\n",
"plt.figure(figsize=[8, 6])\n",
"plt.plot(range(N_EPOCHS), history2.history[\"acc\"], label=\"training accuracy\")\n",
"plt.plot(range(N_EPOCHS), history2.history[\"val_acc\"], label=\"validation_accuracy\")\n",
"plt.legend()\n",
"plt.xlabel(\"# epochs\")\n",
"plt.ylabel(\"accuracy\")\n",
"plt.title(\"Training accuracy\", loc=\"left\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\r",
" 32/418 [=>............................] - ETA: 0s"
]
}
],
"source": [
"nn_predictions = model2.predict_classes(np.array(test_dat))"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,\n",
" 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,\n",
" 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0,\n",
" 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,\n",
" 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0,\n",
" 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,\n",
" 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0,\n",
" 1, 0, 0, 0], dtype=int32)"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nn_predictions.flatten()"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"submit_df = pd.DataFrame({\"PassengerID\" : test.PassengerId,\n",
" \"Survived\" : nn_predictions.flatten()})\n",
"\n",
"submit_df.to_csv(\"kaggle_submission_nn.csv\", index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Kaggle score 0.69\n",
"\n",
"Even worse than good ol' random forest."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment