{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Kaggle Titanic Survivals" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is my first kernel in Kaggle. The goal of this project is to achieve more than 80% on accurracy of a given passanger has survivied or deceased. In this kernel I'm gonna use Support Vector Machines (http://scikit-learn.org/stable/modules/svm.html) as approach to solve this problem." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Importing libraries to play with data\n", "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Importing the data itself\n", "train_set = pd.read_csv('train.csv')\n", "test_set = pd.read_csv('test.csv')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With the data imported, I want to take a look at it, see the information and the first rows" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 891 entries, 0 to 890\n", "Data columns (total 12 columns):\n", "PassengerId 891 non-null int64\n", "Survived 891 non-null int64\n", "Pclass 891 non-null int64\n", "Name 891 non-null object\n", "Sex 891 non-null object\n", "Age 714 non-null float64\n", "SibSp 891 non-null int64\n", "Parch 891 non-null int64\n", "Ticket 891 non-null object\n", "Fare 891 non-null float64\n", "Cabin 204 non-null object\n", "Embarked 889 non-null object\n", "dtypes: float64(2), int64(5), object(5)\n", "memory usage: 83.6+ KB\n" ] } ], "source": [ "train_set.info()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 418 entries, 0 to 417\n", "Data columns (total 11 columns):\n", "PassengerId 418 non-null int64\n", "Pclass 418 non-null int64\n", "Name 418 non-null object\n", "Sex 418 non-null object\n", "Age 332 non-null float64\n", "SibSp 418 non-null int64\n", "Parch 418 non-null int64\n", "Ticket 418 non-null object\n", "Fare 417 non-null float64\n", "Cabin 91 non-null object\n", "Embarked 418 non-null object\n", "dtypes: float64(2), int64(4), object(5)\n", "memory usage: 36.0+ KB\n" ] } ], "source": [ "test_set.info()" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\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 \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": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "train_set.head()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
08923Kelly, Mr. Jamesmale34.5003309117.8292NaNQ
18933Wilkes, Mrs. James (Ellen Needs)female47.0103632727.0000NaNS
28942Myles, Mr. Thomas Francismale62.0002402769.6875NaNQ
38953Wirz, Mr. Albertmale27.0003151548.6625NaNS
48963Hirvonen, Mrs. Alexander (Helga E Lindqvist)female22.011310129812.2875NaNS
\n", "
" ], "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": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "test_set.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Learning with the data\n", "First I will follow my intuition and see if women and children have more chances of survival." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Importing matlab to plot graphs\n", "import matplotlib as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "train_set.groupby('Sex').Survived.mean().plot(kind='bar')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "train_set.groupby('Age').Survived.mean().plot(kind='line')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we predicted, we have a good rate of survivals amog females and childrens. Let's see if that's enough." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting a Support Vector Machine\n", "Before we start, we have to standartize the data, such as Age and Sex. For the Sex it's just transform 'male' and 'female' into 0 and 1. For the age, we are going to round and predict the Null ones. We are already using a Support Vector Machine to make the Age prediction, but we will explain later." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Transforming the Sex into 0 and 1\n", "train_set['Sex'] = train_set['Sex'].map({'male': 0, 'female': 1}).astype(int)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "# Rounding the Age\n", "train_set['Age'] = train_set.Age.round()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "# Separating the data to predict the missing ages\n", "X_train = train_set[train_set.Age.notnull()][['Pclass','Sex','SibSp','Parch', 'Fare']]\n", "X_test = train_set[train_set.Age.isnull()][['Pclass','Sex','SibSp','Parch', 'Fare']]\n", "y = train_set.Age.dropna()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# Predicting the missing ages\n", "from sklearn.svm import SVC\n", "\n", "age_classifier = SVC()\n", "age_classifier.fit(X_train, y)\n", "prediction = age_classifier.predict(X_test)\n", "agePrediction = pd.DataFrame(data=prediction,index=X_test.index.values,columns=['Age'])\n", "train_set = train_set.combine_first(agePrediction)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Just confirming if there is no more ages missing\n", "train_set.Age.isnull().sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Predicting with Age and Sex\n", "Now we have our data set and our intuition proved in the graphs, let's see how well these feature goes with the SVM. In the code below, we separete the train set given into another training set and a test set with only the Sex and Age features " ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "\n", "# Taking only the features that is important for now\n", "X = train_set[['Sex', 'Age']]\n", "\n", "# Taking the labels (Survived or Not Survived)\n", "Y = train_set['Survived']\n", "\n", "# Spliting into 80% for training set and 20% for testing set so we can see our accuracy\n", "X_train, x_test, Y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=0)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Int64Index: 712 entries, 140 to 684\n", "Data columns (total 2 columns):\n", "Sex 712 non-null int64\n", "Age 712 non-null float64\n", "dtypes: float64(1), int64(1)\n", "memory usage: 16.7 KB\n" ] } ], "source": [ "X_train.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just seeing if everything gone right" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SexAge
140124.0
439031.0
817031.0
378020.0
491021.0
\n", "
" ], "text/plain": [ " Sex Age\n", "140 1 24.0\n", "439 0 31.0\n", "817 0 31.0\n", "378 0 20.0\n", "491 0 21.0" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train.head()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "712" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(Y_train)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "140 0\n", "439 0\n", "817 0\n", "378 0\n", "491 0\n", "Name: Survived, dtype: int64" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Y_train.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Coding a Support Vector Machine\n", "Here we are in fact using a SVM to make prediction on our data. Sickit-learn has some SVMs to use, for this project I choosen C-Support Vector Classification (http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) because I think it's simpler. I will not tune it for now and see how it will go." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.787709497207\n" ] } ], "source": [ "# Importing C-Support Vector Classification from scikit-learn\n", "from sklearn.svm import SVC\n", "\n", "# Declaring the SVC with no tunning\n", "classifier = SVC()\n", "\n", "# Fitting the data. This is where the SVM will learn\n", "classifier.fit(X_train, Y_train)\n", "\n", "# Predicting the result and giving the accuracy\n", "score = classifier.score(x_test, y_test)\n", "\n", "print(score)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "78.77% in the first shot! I'm surprised! We are very close to our goal." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Predicting with Class\n", "Now, we have to get a little better to achieve 80% of accuracy. For second intuition, I think that the richest people got better than the poorer, because, you know, that's how the world is. Let's take a look into the data." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n4GHgd/veYJUkrbAF4w5QVePA+Jy1fX23bwJuGuxokqSl8huqktQg4y5JDTLuktQg4y5JDTLuktQg\n4y5JDTLuktQg4y5JDTLuktQg4y5JDTLuktQg4y5JDTLuktQg4y5JDer0k7+StFQb99wy7BGW1b3v\nun7YI8zLK3dJapBxl6QGGXdJapBxl6QGGXdJapBxl6QGGXdJapBxl6QGGXdJalCnuCfZluRYkqkk\ne+Y5/9okR5J8PcltSZ43+FElSV0tGPckI8Be4DpgC/DqJFvmbPsf4Deq6rnAO4D9gx5UktRdlyv3\nrcBUVR2vqjPAQWB7/4aquq2qvtc7/AqwbrBjSpIWo0vc1wIn+o5P9tbO5g+Az5zPUJKk8zPQX4VM\n8pvMxv3FZzm/E9gJsGHDhkE+tCSpT5cr91PA+r7jdb21n5LkSuCDwPaqenC+O6qq/VU1VlVjo6Oj\nS5lXktRBl7hPAJuTbEqyGtgBHOrfkGQD8HHgdVX1zcGPKUlajAVflqmqmSS7gcPACHCgqo4m2dU7\nvw+4EXgq8P4kADNVNbZ8Y0uSzqXTa+5VNQ6Mz1nb13f7jcAbBzuaJGmp/IaqJDXIuEtSg4y7JDXI\nuEtSg4y7JDXIuEtSg4y7JDXIuEtSg4y7JDXIuEtSg4y7JDXIuEtSg4y7JDXIuEtSg4y7JDXIuEtS\ng4y7JDXIuEtSg4y7JDXIuEtSg4y7JDXIuEtSg4y7JDXIuEtSgzrFPcm2JMeSTCXZM8/5y5N8OcmP\nkrxl8GNKkhZj1UIbkowAe4FrgZPARJJDVXV337bvAm8GXr4sU0qSFqXLlftWYKqqjlfVGeAgsL1/\nQ1V9p6omgB8vw4ySpEXqEve1wIm+45O9NUnSBWpF31BNsjPJZJLJ6enplXxoSbqkdIn7KWB93/G6\n3tqiVdX+qhqrqrHR0dGl3IUkqYMucZ8ANifZlGQ1sAM4tLxjSZLOx4KflqmqmSS7gcPACHCgqo4m\n2dU7vy/J04FJ4OeAR5P8GbClqh5axtklSWexYNwBqmocGJ+ztq/v9reYfblGknQB8BuqktQg4y5J\nDTLuktQg4y5JDTLuktQg4y5JDTLuktQg4y5JDTLuktQg4y5JDTLuktQg4y5JDTLuktQg4y5JDTLu\nktQg4y5JDTLuktQg4y5JDTLuktQg4y5JDTLuktQg4y5JDTLuktQg4y5JDeoU9yTbkhxLMpVkzzzn\nk+Q9vfNHkjx/8KNKkrpaMO5JRoC9wHXAFuDVSbbM2XYdsLn3307gAwOeU5K0CF2u3LcCU1V1vKrO\nAAeB7XP2bAf+sWZ9BXhykl8a8KySpI5WddizFjjRd3wSeGGHPWuB+/s3JdnJ7JU9wOkkxxY17cVl\nDfDASj1YblqpR7pk+PxdvFp/7p7RZVOXuA9MVe0H9q/kYw5LksmqGhv2HFoan7+Ll8/drC4vy5wC\n1vcdr+utLXaPJGmFdIn7BLA5yaYkq4EdwKE5ew4BN/Q+NfOrwPer6v65dyRJWhkLvixTVTNJdgOH\ngRHgQFUdTbKrd34fMA68FJgCfgi8YflGvmhcEi8/Nczn7+LlcwekqoY9gyRpwPyGqiQ1yLhLUoOM\nuyQ1yLhLUoOMuy55SS5P8ttJnjRnfduwZlJ3SbYmeUHv9pYkf57kpcOea9j8tMwyS/KGqvqHYc+h\n+SV5M/DHwD3AVcCfVtWneue+WlX+wukFLMlfMvvDhauAf2P2p1H+HbgWOFxV7xzieENl3JdZkvuq\nasOw59D8knwd+LWqOp1kI/BR4MNV9XdJvlZVvzLUAXVOvefvKuAJwLeAdVX1UJInArdX1ZVDHXCI\nVvS3ZVqV5MjZTgFPW8lZtGiPq6rTAFV1b5JrgI8meQazz58ubDNV9QjwwyT/XVUPAVTVw0keHfJs\nQ2XcB+NpwEuA781ZD3Dbyo+jRfh2kquq6k6A3hX8y4ADwHOHO5o6OJPksqr6IXD1Y4tJfh4w7jpv\nnwae9Fgg+iX5wsqPo0W4AZjpX6iqGWZ/K+nvhzOSFuHXq+pHAFXVH/PHA783nJEuDL7mLkkN8qOQ\nktQg4y5JDTLualaSR5LcmeQbST6S5LJz7H17kres5HzScjLuatnDVXVVVT0HOAPsGvZA0kox7rpU\nfAl4FkCSG5IcSXJXkg/P3ZjkTUkmeuc/9tgVf5JX9f4WcFeSW3trVyT5z97fEI4k2byifyrpLPy0\njJqV5HRVPSnJKuBjwGeBW4FPAC+qqgeSPKWqvpvk7cDpqvqbJE+tqgd79/FXwLer6r29b0Nuq6pT\nSZ5cVf+X5L3AV6rqn3r/DOVIVT08lD+w1Mcrd7XsiUnuBCaB+4APAb8FfKSqHgCoqu/O8/89J8mX\nejF/LXBFb/0/gJuTvInZf3IS4MvAXyR5K/AMw64LhV9iUsserqqr+heSTr8ocDPw8qq6K8nrgWsA\nqmpXkhcC1wN3JLm6qv45ye29tfEkf1hVnx/gn0FaEq/cdan5PPCqJE8FSPKUefb8LHB/kscze+VO\nb+8vV9XtVXUjMA2sT/JM4HhVvQf4FHDJ/lCVLixeueuSUlVHk7wT+GKSR4CvAa+fs+1twO3MBvx2\nZmMP8O7eG6YBPgfcBbwVeF2SHzP7q4R/vex/CKkD31CVpAb5sowkNci4S1KDjLskNci4S1KDjLsk\nNci4S1KDjLskNej/Ado1zSmm4gdIAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "train_set.groupby('Pclass').Survived.mean().plot(kind='bar')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Yep. More than 60% of the people in the First class make it. Let's see these numbers among females." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "train_set.query('Sex == 1').groupby('Pclass').Survived.mean().plot(kind='bar')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wow! Almost every women in the First class, make it! We are definitely in the right direction. Let's put it in our Support Vector machine and see how it goes." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Taking only the features that is important for now\n", "X = train_set[['Sex', 'Age', 'Pclass']]\n", "\n", "# Taking the labels (Survived or Not Survived)\n", "Y = train_set['Survived']\n", "\n", "# Spliting into 80% for training set and 20% for testing set so we can see our accuracy\n", "X_train, x_test, Y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=0)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.810055865922\n" ] } ], "source": [ "# Declaring the SVC with no tunning\n", "classifier = SVC()\n", "\n", "# Fitting the data. This is where the SVM will learn\n", "classifier.fit(X_train, Y_train)\n", "\n", "# Predicting the result and giving the accuracy\n", "score = classifier.score(x_test, y_test)\n", "\n", "print(score)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Yay! We make it! With only three features we got an accuracy of more than 80%! Awesome." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion\n", "With this notebook our goal is to achive 80% of accuracy predicting the survivals of the Titanic disaster and we did it. Also we could see the power and simplicity of Support Vector Machines, with simple and few line of codes we could achieve our goal. For this is a well known fact, I, as anyone, could explore with intuition. It's obvious that children and women from upper class have more chances to survive, but the SVC did a great job classifying tham. Hope you enjoyed." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Appendix\n", "Now let's generate the data to send to the contest. For this, we are going to do the same settings we did with `train_set` but now with the `test_set`" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Transforming the Sex into 0 and 1\n", "test_set['Sex'] = test_set['Sex'].map({'male': 0, 'female': 1}).astype(int)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Rounding the Age\n", "test_set['Age'] = test_set.Age.round()" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "# Separating the data to predict the missing ages\n", "X_train = test_set[test_set.Age.notnull()][['Pclass','Sex','SibSp','Parch']]\n", "X_test = test_set[test_set.Age.isnull()][['Pclass','Sex','SibSp','Parch']]\n", "y = test_set.Age.dropna()" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "age_classifier = SVC()\n", "age_classifier.fit(X_train, y)\n", "prediction = age_classifier.predict(X_test)\n", "agePrediction = pd.DataFrame(data=prediction,index=X_test.index.values,columns=['Age'])\n", "test_set = test_set.combine_first(agePrediction)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we will use the SVM to predict and after that, generate the CSV" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "to_predict = test_set[['Sex', 'Age', 'Pclass']]\n", "predictions = classifier.predict(to_predict)\n", "\n", "dfPrediction = pd.DataFrame(data=predictions,index = test_set.PassengerId.values,columns=['Survived'])\n", "contest_output = dfPrediction.to_csv('contest_output.csv')" ] } ], "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.6.1" } }, "nbformat": 4, "nbformat_minor": 2 }