{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "2C0MKJaprzeU"
},
"source": [
"[](http://rpi.analyticsdojo.com)\n",
"
Fastai - Revisiting Titanic
\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Titanic Fastai"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "jo_XONekrzep"
},
"outputs": [],
"source": [
"from fastai import *\n",
"from fastai.tabular import * \n",
"import numpy as np\n",
"import pandas as pd\n",
"import pandas as pd\n",
"\n",
"train= pd.read_csv('https://raw.githubusercontent.com/rpi-techfundamentals/fall2018-materials/master/input/train.csv')\n",
"test = pd.read_csv('https://raw.githubusercontent.com/rpi-techfundamentals/fall2018-materials/master/input/test.csv')\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 302
},
"colab_type": "code",
"id": "FfTX5TLgVOLb",
"outputId": "319c0f98-29f2-4862-8b6d-7da06f3b43c1"
},
"outputs": [
{
"data": {
"text/plain": [
"PassengerId 0\n",
"Survived 0\n",
"Pclass 0\n",
"Name 0\n",
"Sex 0\n",
"Age 0\n",
"SibSp 0\n",
"Parch 0\n",
"Ticket 0\n",
"Fare 0\n",
"Cabin 687\n",
"Embarked 0\n",
"Title 0\n",
"NameLength 0\n",
"FamilyS 0\n",
"dtype: int64"
]
},
"execution_count": 2,
"metadata": {
"tags": []
},
"output_type": "execute_result"
}
],
"source": [
"#Create a categorical variable from the family count \n",
"def family(x):\n",
" if x < 2:\n",
" return 'Single'\n",
" elif x == 2:\n",
" return 'Couple'\n",
" elif x <= 4:\n",
" return 'InterM'\n",
" else:\n",
" return 'Large'\n",
"\n",
"\n",
"for df in [train, test]:\n",
" df['Title'] = df['Name'].str.split(',').str[1].str.split(' ').str[1]\n",
" df['Title'] = df['Title'].replace(['Lady', 'the Countess', 'Countess', 'Capt', 'Col', 'Don', 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer', 'Dona', 'Ms', 'Mme', 'Mlle'], 'Rare')\n",
" df['Age']=df['Age'].fillna(df['Age'].median())\n",
" df['Fare']=df['Fare'].fillna(df['Fare'].median())\n",
" df['Embarked']=df['Embarked'].fillna('S')\n",
" df['NameLength'] = df['Name'].map(lambda x: len(x))\n",
" df['FamilyS'] = df['SibSp'] + df['Parch'] + 1\n",
" df['FamilyS'] = df['FamilyS'].apply(family)\n",
"train.isnull().sum(axis = 0)\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 493
},
"colab_type": "code",
"id": "gSR2qKc4YPkT",
"outputId": "2722bd27-9459-4fb6-ed61-e035dc2728e2"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" PassengerId | \n",
" Survived | \n",
" Pclass | \n",
" Name | \n",
" Sex | \n",
" Age | \n",
" SibSp | \n",
" Parch | \n",
" Ticket | \n",
" Fare | \n",
" Cabin | \n",
" Embarked | \n",
" Title | \n",
" NameLength | \n",
" FamilyS | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" 0 | \n",
" 3 | \n",
" Braund, Mr. Owen Harris | \n",
" male | \n",
" 22.0 | \n",
" 1 | \n",
" 0 | \n",
" A/5 21171 | \n",
" 7.2500 | \n",
" NaN | \n",
" S | \n",
" Mr. | \n",
" 23 | \n",
" Couple | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" 1 | \n",
" 1 | \n",
" Cumings, Mrs. John Bradley (Florence Briggs Th... | \n",
" female | \n",
" 38.0 | \n",
" 1 | \n",
" 0 | \n",
" PC 17599 | \n",
" 71.2833 | \n",
" C85 | \n",
" C | \n",
" Mrs. | \n",
" 51 | \n",
" Couple | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" 1 | \n",
" 3 | \n",
" Heikkinen, Miss. Laina | \n",
" female | \n",
" 26.0 | \n",
" 0 | \n",
" 0 | \n",
" STON/O2. 3101282 | \n",
" 7.9250 | \n",
" NaN | \n",
" S | \n",
" Miss. | \n",
" 22 | \n",
" Single | \n",
"
\n",
" \n",
" 3 | \n",
" 4 | \n",
" 1 | \n",
" 1 | \n",
" Futrelle, Mrs. Jacques Heath (Lily May Peel) | \n",
" female | \n",
" 35.0 | \n",
" 1 | \n",
" 0 | \n",
" 113803 | \n",
" 53.1000 | \n",
" C123 | \n",
" S | \n",
" Mrs. | \n",
" 44 | \n",
" Couple | \n",
"
\n",
" \n",
" 4 | \n",
" 5 | \n",
" 0 | \n",
" 3 | \n",
" Allen, Mr. William Henry | \n",
" male | \n",
" 35.0 | \n",
" 0 | \n",
" 0 | \n",
" 373450 | \n",
" 8.0500 | \n",
" NaN | \n",
" S | \n",
" Mr. | \n",
" 24 | \n",
" Single | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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 Title NameLength FamilyS \n",
"0 0 A/5 21171 7.2500 NaN S Mr. 23 Couple \n",
"1 0 PC 17599 71.2833 C85 C Mrs. 51 Couple \n",
"2 0 STON/O2. 3101282 7.9250 NaN S Miss. 22 Single \n",
"3 0 113803 53.1000 C123 S Mrs. 44 Couple \n",
"4 0 373450 8.0500 NaN S Mr. 24 Single "
]
},
"execution_count": 3,
"metadata": {
"tags": []
},
"output_type": "execute_result"
}
],
"source": [
"train.head()"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "PKz107Q3XsSL"
},
"outputs": [],
"source": [
"dep_var = 'Survived'\n",
"cat_names = ['Pclass', 'Sex', 'Embarked', 'Title', 'FamilyS']\n",
"cont_names = ['Age', 'Fare', 'SibSp', 'Parch', 'NameLength']\n",
"procs = [FillMissing, Categorify, Normalize]\n",
"test_data = (TabularList.from_df(test, path='.', cat_names=cat_names, cont_names=cont_names, procs=procs))\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "r2P_Y1Ipd_k5"
},
"outputs": [],
"source": [
"\n",
"data = (TabularList.from_df(train, path='.', cat_names=cat_names, cont_names=cont_names, procs=procs)\n",
" .split_by_idx(list(range(0,200)))\n",
" .label_from_df(cols=dep_var)\n",
" .add_test(test_data, label=0)\n",
" .databunch())"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 241
},
"colab_type": "code",
"id": "En78trmC5nPS",
"outputId": "f7defd77-d62c-40d0-9980-45bc1eb3f442"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
" \n",
" Pclass | \n",
" Sex | \n",
" Embarked | \n",
" Title | \n",
" FamilyS | \n",
" Age | \n",
" Fare | \n",
" SibSp | \n",
" Parch | \n",
" NameLength | \n",
" target | \n",
"
\n",
" \n",
" \n",
" \n",
" 2 | \n",
" male | \n",
" S | \n",
" Mr. | \n",
" Couple | \n",
" 0.5653 | \n",
" -0.1432 | \n",
" 0.5043 | \n",
" -0.4658 | \n",
" -0.4163 | \n",
" 0 | \n",
"
\n",
" \n",
" 3 | \n",
" male | \n",
" S | \n",
" Mr. | \n",
" Single | \n",
" -0.3706 | \n",
" -0.4860 | \n",
" -0.4610 | \n",
" -0.4658 | \n",
" -0.6319 | \n",
" 0 | \n",
"
\n",
" \n",
" 3 | \n",
" male | \n",
" S | \n",
" Mr. | \n",
" Single | \n",
" -0.1366 | \n",
" -0.4982 | \n",
" -0.4610 | \n",
" -0.4658 | \n",
" -0.5241 | \n",
" 0 | \n",
"
\n",
" \n",
" 3 | \n",
" male | \n",
" S | \n",
" Mr. | \n",
" Single | \n",
" 3.4510 | \n",
" -0.4883 | \n",
" -0.4610 | \n",
" -0.4658 | \n",
" -0.8475 | \n",
" 0 | \n",
"
\n",
" \n",
" 3 | \n",
" male | \n",
" S | \n",
" Mr. | \n",
" Couple | \n",
" -0.9165 | \n",
" -0.5125 | \n",
" 0.5043 | \n",
" -0.4658 | \n",
" -0.2008 | \n",
" 0 | \n",
"
\n",
" \n",
"
"
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"#Shows the Data\n",
"data.show_batch()"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "TI-X15PcStFy"
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "eYUUnFGE54qO"
},
"outputs": [],
"source": [
"#Define our Learner\n",
"learn = tabular_learner(data, layers=[300,100], metrics=accuracy)\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 449
},
"colab_type": "code",
"id": "EZ0pQLyfTAqX",
"outputId": "a8f9ce9b-8461-4131-d6ee-0a02a73cfc6a"
},
"outputs": [
{
"data": {
"text/html": [],
"text/plain": [
""
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"learn.lr_find()\n",
"learn.recorder.plot()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 366
},
"colab_type": "code",
"id": "MWrIKJCPTDuF",
"outputId": "3545b480-c65b-4e10-e971-a54855166940"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
" \n",
" epoch | \n",
" train_loss | \n",
" valid_loss | \n",
" accuracy | \n",
" time | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0.544682 | \n",
" 0.566284 | \n",
" 0.740000 | \n",
" 00:00 | \n",
"
\n",
" \n",
" 1 | \n",
" 0.490425 | \n",
" 0.473522 | \n",
" 0.845000 | \n",
" 00:00 | \n",
"
\n",
" \n",
" 2 | \n",
" 0.467682 | \n",
" 0.453977 | \n",
" 0.845000 | \n",
" 00:00 | \n",
"
\n",
" \n",
" 3 | \n",
" 0.448043 | \n",
" 0.414292 | \n",
" 0.830000 | \n",
" 00:00 | \n",
"
\n",
" \n",
" 4 | \n",
" 0.434118 | \n",
" 0.406961 | \n",
" 0.865000 | \n",
" 00:00 | \n",
"
\n",
" \n",
" 5 | \n",
" 0.424244 | \n",
" 0.426844 | \n",
" 0.855000 | \n",
" 00:00 | \n",
"
\n",
" \n",
" 6 | \n",
" 0.413750 | \n",
" 0.411579 | \n",
" 0.845000 | \n",
" 00:00 | \n",
"
\n",
" \n",
"
"
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"#fit the learner\n",
"learn.fit(7, 1e-2) #Number of epocs and the learning rate. learn.save('final_train')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 221
},
"colab_type": "code",
"id": "HrKFzLnGdTfN",
"outputId": "a6f5fdf6-69ba-4ba5-db28-188351104eff"
},
"outputs": [
{
"data": {
"text/html": [
"\n",
" \n",
" \n",
" Pclass | \n",
" Sex | \n",
" Embarked | \n",
" Title | \n",
" FamilyS | \n",
" Age | \n",
" Fare | \n",
" SibSp | \n",
" Parch | \n",
" NameLength | \n",
" target | \n",
" prediction | \n",
"
\n",
" \n",
" \n",
" \n",
" 3 | \n",
" male | \n",
" S | \n",
" Mr. | \n",
" Couple | \n",
" -0.6046 | \n",
" -0.4982 | \n",
" 0.5043 | \n",
" -0.4658 | \n",
" -0.4163 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" female | \n",
" C | \n",
" Mrs. | \n",
" Couple | \n",
" 0.6433 | \n",
" 0.7144 | \n",
" 0.5043 | \n",
" -0.4658 | \n",
" 2.6017 | \n",
" 1 | \n",
" 1 | \n",
"
\n",
" \n",
" 3 | \n",
" female | \n",
" S | \n",
" Miss. | \n",
" Single | \n",
" -0.2926 | \n",
" -0.4855 | \n",
" -0.4610 | \n",
" -0.4658 | \n",
" -0.5241 | \n",
" 1 | \n",
" 0 | \n",
"
\n",
" \n",
" 1 | \n",
" female | \n",
" S | \n",
" Mrs. | \n",
" Couple | \n",
" 0.4093 | \n",
" 0.3700 | \n",
" 0.5043 | \n",
" -0.4658 | \n",
" 1.8472 | \n",
" 1 | \n",
" 1 | \n",
"
\n",
" \n",
" 3 | \n",
" male | \n",
" S | \n",
" Mr. | \n",
" Single | \n",
" 0.4093 | \n",
" -0.4831 | \n",
" -0.4610 | \n",
" -0.4658 | \n",
" -0.3085 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
"
"
],
"text/plain": [
""
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"#Show the results\n",
"learn.show_results()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 54
},
"colab_type": "code",
"id": "uC533fQw8i3L",
"outputId": "eb76b970-0633-447c-f423-a2115dfeda48"
},
"outputs": [
{
"data": {
"text/plain": [
"(418,)"
]
},
"execution_count": 11,
"metadata": {
"tags": []
},
"output_type": "execute_result"
}
],
"source": [
"#This will get predictions\n",
"predictions, *_ = learn.get_preds(DatasetType.Test)\n",
"labels = to_np(np.argmax(predictions, 1))\n",
"labels.shape\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "7RpqfVNCa0V8"
},
"outputs": [],
"source": [
"#Writing to File\n",
"submission=pd.DataFrame(test.loc[:,['PassengerId']])\n",
"submission['Survived']=labels\n",
"#Any files you save will be available in the output tab below\n",
"\n",
"submission.to_csv('submission.csv', index=False)"
]
},
{
"cell_type": "code",
"execution_count": 0,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "jGcsZ5ktaa-J"
},
"outputs": [],
"source": [
"from google.colab import files\n",
"files.download('submission.csv')"
]
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"collapsed_sections": [],
"name": "01-titanic-fastai.ipynb",
"provenance": [],
"version": "0.3.2"
},
"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.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 1
}