You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sitc/ml2/3_7_SVM.ipynb

1179 lines
123 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![](images/EscUpmPolit_p.gif \"UPM\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Course Notes for Learning Intelligent Systems"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Department of Telematic Engineering Systems, Universidad Politécnica de Madrid, © 2016 Carlos A. Iglesias"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## [Introduction to Machine Learning II](3_0_0_Intro_ML_2.ipynb)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Introduction SVM "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this notebook we are going to train a classifier with the preprocessed Titanic dataset. \n",
"\n",
"We are going to use the dataset we obtained in the [pandas munging notebook](3_3_Data_Munging_with_Pandas.ipynb) for simplicity. You can try some of the techniques learnt in the previous notebook."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Load and clean"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# General import and load data\n",
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"from pandas import Series, DataFrame\n",
"\n",
"# Training and test spliting\n",
"from sklearn.cross_validation import train_test_split\n",
"from sklearn import preprocessing\n",
"\n",
"# Estimators\n",
"from sklearn.svm import SVC\n",
"\n",
"# Evaluation\n",
"from sklearn import metrics\n",
"from sklearn.cross_validation import cross_val_score, KFold, StratifiedKFold\n",
"from sklearn.metrics import classification_report\n",
"from sklearn.metrics import roc_curve\n",
"from sklearn.metrics import roc_auc_score\n",
"\n",
"# Optimization\n",
"from sklearn.grid_search import GridSearchCV\n",
"\n",
"# Visualisation\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"sns.set(color_codes=True)\n",
"\n",
"\n",
"# if matplotlib is not set inline, you will not see plots\n",
"#alternatives auto gtk gtk2 inline osx qt qt5 wx tk\n",
"#%matplotlib auto\n",
"#%matplotlib qt\n",
"%matplotlib inline\n",
"%run plot_learning_curve"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"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>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Fare</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>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",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>71.2833</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\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",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\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",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\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",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass Sex Age SibSp Parch Fare Embarked\n",
"0 1 0 3 0 22.0 1 0 7.2500 0\n",
"1 2 1 1 1 38.0 1 0 71.2833 1\n",
"2 3 1 3 1 26.0 0 0 7.9250 0\n",
"3 4 1 1 1 35.0 1 0 53.1000 0\n",
"4 5 0 3 0 35.0 0 0 8.0500 0"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#We get a URL with raw content (not HTML one)\n",
"url=\"https://raw.githubusercontent.com/gsi-upm/sitc/master/ml2/data-titanic/train.csv\"\n",
"df = pd.read_csv(url)\n",
"df.head()\n",
"\n",
"\n",
"#Fill missing values\n",
"df['Age'].fillna(df['Age'].mean(), inplace=True)\n",
"df['Sex'].fillna('male', inplace=True)\n",
"df['Embarked'].fillna('S', inplace=True)\n",
"\n",
"# Encode categorical variables\n",
"df['Age'] = df['Age'].fillna(df['Age'].median())\n",
"df.loc[df[\"Sex\"] == \"male\", \"Sex\"] = 0\n",
"df.loc[df[\"Sex\"] == \"female\", \"Sex\"] = 1\n",
"df.loc[df[\"Embarked\"] == \"S\", \"Embarked\"] = 0\n",
"df.loc[df[\"Embarked\"] == \"C\", \"Embarked\"] = 1\n",
"df.loc[df[\"Embarked\"] == \"Q\", \"Embarked\"] = 2\n",
"\n",
"# Drop colums\n",
"df.drop(['Cabin', 'Ticket', 'Name'], axis=1, inplace=True)\n",
"\n",
"#Show proprocessed df\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"PassengerId int64\n",
"Survived int64\n",
"Pclass int64\n",
"Sex object\n",
"Age float64\n",
"SibSp int64\n",
"Parch int64\n",
"Fare float64\n",
"Embarked object\n",
"dtype: object"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Check types are numeric\n",
"df.dtypes"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We have still two columns as objects, so we change the type."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"PassengerId int64\n",
"Survived int64\n",
"Pclass int64\n",
"Sex int64\n",
"Age float64\n",
"SibSp int64\n",
"Parch int64\n",
"Fare float64\n",
"Embarked int64\n",
"dtype: object"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['Sex'] = df['Sex'].astype(np.int64)\n",
"df['Embarked'] = df['Embarked'].astype(np.int64)\n",
"df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"PassengerId False\n",
"Survived False\n",
"Pclass False\n",
"Sex False\n",
"Age False\n",
"SibSp False\n",
"Parch False\n",
"Fare False\n",
"Embarked False\n",
"dtype: bool"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Check there are not missing values\n",
"df.isnull().any()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Train and test splitting"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We use the same techniques we applied in the Iris dataset. \n",
"\n",
"Nevertheless, we need to remove the column 'Survived' "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Features of the model\n",
"features = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']\n",
"# Transform dataframe in numpy arrays\n",
"X = df[features].values\n",
"y = df['Survived'].values\n",
"\n",
"\n",
"\n",
"# Test set will be the 25% taken randomly\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=33)\n",
"\n",
"# Preprocess: normalize\n",
"#scaler = preprocessing.StandardScaler().fit(X_train)\n",
"#X_train = scaler.transform(X_train)\n",
"#X_test = scaler.transform(X_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Define model"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"\n",
"types_of_kernels = ['linear', 'rbf', 'poly']\n",
"\n",
"kernel = types_of_kernels[0]\n",
"gamma = 3.0\n",
"\n",
"# Create kNN model\n",
"model = SVC(kernel=kernel, probability=True, gamma=gamma)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Train and evaluate"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#This step will take some time \n",
"# Train - This is not needed if you use K-Fold\n",
"\n",
"model.fit(X_train, y_train)\n",
"\n",
"predicted = model.predict(X_test)\n",
"expected = y_test"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.81165919282511212"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Accuracy\n",
"metrics.accuracy_score(expected, predicted)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ok, we get around 82% of accuracy! (results depend on the splitting)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Null accuracy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can evaluate the accuracy if the model always predict the most frequent class, following this [refeference](http://blog.kaggle.com/2015/10/23/scikit-learn-video-9-better-evaluation-of-classification-models/)."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0 134\n",
"1 89\n",
"dtype: int64"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Count number of samples per class\n",
"s_y_test = Series(y_test)\n",
"s_y_test.value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.3991031390134529"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Mean of ones\n",
"y_test.mean()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.60089686098654704"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Mean of zeros\n",
"1 - y_test.mean() \n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.60089686098654704"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Calculate null accuracy (binary classification coded as 0/1)\n",
"max(y_test.mean(), 1 - y_test.mean())"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0 0.600897\n",
"dtype: float64"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Calculate null accuracy (multiclass classification)\n",
"s_y_test.value_counts().head(1) / len(y_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So, since our accuracy was 0.82 is better than the null accuracy."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Confussion matrix and F-score"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can obtain more information from the confussion matrix and the metric F1-score.\n",
"In a confussion matrix, we can see:\n",
"\n",
"||**Predicted**: 0| **Predicted: 1**|\n",
"|---------------------------|\n",
"|**Actual: 0**| TN | FP |\n",
"|**Actual: 1**| FN|TP|\n",
"\n",
"* **True negatives (TN)**: actual negatives that were predicted as negatives\n",
"* **False positives (FP)**: actual negatives that were predicted as positives\n",
"* **False negatives (TN)**: actual positives that were predicted as negatives\n",
"* **True negatives (TN)**: actual positives that were predicted as posiives\n",
"\n",
"We can calculate several metrics from the confussion matrix\n",
"\n",
"* **Recall** (also called *sensitivity*): when the actual value is positive, how often the prediction is correct? \n",
"(TP / (TP + FN))\n",
"* **Specificity**: when the actual value is negative, how often the prediction is correct? (TN / (TN + FP))\n",
"* **False Positive Rate**: when the actual value is negative, how often the prediction is incorrect? (FP / (TN + FP))\n",
"* **Precision**: when a positive value is predicted, how many times is correct? (TP / (TP + FP)\n",
"A good metric is F1-score: 2TP / (2TP + FP + FN)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[115 19]\n",
" [ 23 66]]\n"
]
}
],
"source": [
"# Confusion matrix\n",
"print(metrics.confusion_matrix(expected, predicted))"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" 0 0.83 0.86 0.85 134\n",
" 1 0.78 0.74 0.76 89\n",
"\n",
"avg / total 0.81 0.81 0.81 223\n",
"\n"
]
}
],
"source": [
"# Report\n",
"print(classification_report(expected, predicted))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ROC (Receiver Operating Characteristic ) and AUC (Area Under the Curve)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The [ROC](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) curve illustrates the performance of a binary classifier system as its discrimination threshold is varied."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEZCAYAAABy91VnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAH+pJREFUeJzt3XmYXFWd//F39ZJOp9PZSAMJSwhLvoJAZJMkLAFZxpHF\nCDqK4IKCDijo4DKGHw7qOAOI8hNRNICDAoo6IIqoCEgCmEDEkEBA/bIEWQJkT6fTW9Lpmj/OrXSl\n6a6u7q6u6j79eT0Pz1N3qXtPHTqfe+65956bSqfTiIhInMpKXQARERk4CnkRkYgp5EVEIqaQFxGJ\nmEJeRCRiCnkRkYhVlLoAMnSYWTuwHGgH0sAooB640N2XJOuMAr4KnAa0Juv9Bvgvd2/J2tZHgE8C\nI4ERwJ+Af3f3+qL9oF4ws+8DJwM/dfcv9+H7JwDfJNTHJKAceDVZfAVwIPCcu99mZl8Glrn7b/pY\n1tOAE9z9s335vsQlpfvkJV9mtg2Y6O4bsuZ9DjjT3WeZWTnwCLAIuMzdW8xsJHAlcAhwvLu3m9ml\nwD8l31ubfO9a4CB3n13s35WP5Lfv4e6vFWBblwM7ufvF3SyfD1zn7r/s775E1JKX3kgl/wGQhPOe\nwLpk1r8AKXf/fGadpPX+WTNbCrzHzH4PzAWmu/vaZJ1tZvb5ZHmFu7dl79TMTgX+M9l3I3AB4Qzi\naXevTdaZkplOzhI+TjjT2ARUAd/KhKaZXZHsd66ZfTzZXir5HRe5u3fa/8PJx9+b2YXABuC7wE6E\ns5pr3P1WM5tNOFg1Jvt+u7tvzadizexm4GmgGTgcuDo5sPwV+B5QA0wGlgHvd/ctZtZMOICeRDg7\nuNbdv5P8/ve6+2lmtgvwA+AtwDZgnrtfl0+ZJA7qk5femm9my8xsJfAsofvh3GTZTODhbr73R+Bo\nQtg0uvuK7IXu3uLut3cR8DsDtwIfdve3Ebo8rkgWdz4NzZ4+AJjt7u8AbsyU0czKgHOAG83sWODD\nwNHufhhwNfCm1rO7H0s4CBwHPAbcTQjU6cC7gP82syOT1d9KCOFD8g347PK7+/XAX4DPu/uvgfOB\nH7n7UcB+wN7AKcn6VcBqdz8aeB9wlZmN6FQX3w8/wfcHZgHnm9nevSyXDGEKeemt45KwPQWoBhZl\nWuSJym6+V0UInnZ693d3FLDc3ZcDuPtd7n5KD98BeMrdG5PPvwBmJAeMdxL6vlckv2EfYFFypvEN\nYJyZjetmmylgGlCVBDDu/jpwZ7JdgFfc/dVuvt8bmTOmfwfWmtkXCIE9CRidtd7dSTmeIFzbqOm0\nnROAG5J1Nrn7wZ0PsBI3hbz0VgrA3ZcBlwA/NLM9k2ULgWM7f8HMUsn8hYTuh8rOrUkzqzKz35rZ\nrp2+3kanFruZHZTMy/77HcGONmc+uHsT8L/A2cBHCS17CBc/b3X3Q5OW9yGELpaNXfzuTBm6+jdT\nRsfBbXMXy/vjZ4TW/D+Aa4ClZHWZEbp3sqU6Te9Qf2Y21cxqC1xGGcQU8tJn7v4zwkXWa5NZdwCN\nZvbt5IIrZlYNXAc0AL9y9y3AVcD/JC1rzKwK+DYwyt3f6LSbxcD+ZrZ/su4cQvfNRsLB4i3Jemf0\nUNybCAE/k9DyBrgPOCtzYEn62x/o5vuZ8HRgS1IOzGwycCZwfw/77402Og4aJwFfc/f/TcpwJOHg\nlKuM2e6no6tqLKHbbN8CllUGOYW89EZXt2JdBLzTzE5y922E2wwbgSVm9hShf7kByCzH3a8kBO0f\nzOwJQus0Dby788bdfTWhBX5Lsu5nCX3em4AvAvea2WLCRcVuJd0ZW4E7kgMN7n4f4YBzv5ktAz4A\nvCfXb0+uGcwhXEx+knCg+Iq7P5Rr/3nIrtvfAN80sw8BlwK/MrM/A9cDC+gI6VzXJDIuAg5IyvoI\n4VbWpf0sqwwhuoVSRCRiebXkzezI5N7dzvNPM7M/m9lCMzuv8MUTEZH+6DHkk6v6NxLujsieX0G4\nEHQi4dayT5hZ3QCUUURE+iiflvzzdN1PuT/hVrRNyf3Af6KLOytERKR0egx5d7+LcLW/szGEpw4z\nGoCxBSqXiIgUQH+GNdhECPqMWsJtbTml0+l0KtXVnV4iIv338NJXufq2JRw1fTIHTJ1Q6uIUzOnH\n7NOn4OxNyHfewd+AfZOnA5sIXTVX97iRVIo1axp6sdt41dXVqi4SqosOw6Uufr/4JR57ZlXOdSoq\nymhra+/VdptawmgSe+9ay8y37Nzn8sWiNyGfBjCzs4Aad7/JzC4h3CecAm5KHvEWEenRwuVv8Nra\nRqqruo+hshS09+Eu73GjR7DXrnqwF0pzn3x6OLRS8jFcWmz5UF10iKUu2tNpnntlI02tXV3Sg9vu\ne5atbe185zPHdLuNWOqiEOrqage8u0ZEJG9/f2kD3/zZspzrTBhTlXO59J9CXkQGRFNLaMEfst9E\npu3R9cCe++ymG/IGmkJeRPJy/+OvsOiZzuPHdS9zAXT/KeM58fA9BqpY0gOFvIjk5ZGnXufVNZup\nquxuEMw3GzOqkr0mjel5RRkwCnmRyKXTaV5YuYmm1t6+qGpHLVvaGFVVwXf/TQ+2DyUKeZHIPfdq\nPVf+5ImCbGvs6M7vZpHBTiEvErnG5tCCn77PTt1eAM3X3pPV9TLUKORFIjD/iVdZ+HTXF0UzIb//\nlPGc/PY9u1xH4qWQF4nAQ0++xsurNlNR3vWYgzUjK5iiJ0CHJYW8SAlsbt7KP97Y1OWyseubqa9v\n6tX2Wlq3MXJEOddfMrsQxZOIKORFSmDe3c/wzIvrC7rN2lGVPa8kw45CXqQEGpu3Ul6W4t1HT33T\nspqaKhobW3u9TV0Ula4o5EVKpLw8xamz9nrTfA3KJYWU14u8RURkaFJLXmQApNNpXl61efv4LZ01\nb9lW5BLJcKWQFxkAL77ewNdv+UvOdWpG6p+fDDz9lYkMgM3JA0gH7DWeabt3/ZSpLpRKMSjkZVhb\n9PTrPPJk4d9aubklE/ITeNeMKQXfvki+FPIyrM1fupIXVnb9UFJ/VVaUsefOowdk2yL5UsjLkNLc\n2sbLqwp3e2Fz6zbKy1Lc+MXjC7ZNkcFEIS9DxtqNzXzj9qWsrW8p6HarRuT/EgyRoUYhL0PC2vqO\ngD/qwF2ZMGZkwbY9VW8ukogp5GVA/flvq3ho2Ws9rjdiRDlbctw7/traRuobtzDnmKmcftSbhwIQ\nka4p5GVAzX9iJf7Kxn5vp7wsxRnH7t3lMAAi0j2FvHTrjfVNbG7q33tBm1vbALjxi8flXK9uYi1r\n1nZ/QTVFirKyVL/KIjIcKeSlS6+va+T/3bi4INsqL0tRXpZ7mKTy8rIe1xGR3lPIS5cakhb8vruN\nxfbs33tBp+yiNxKJlIpCXnawxFfz0LLXaEye2HzLlPGccezeJS6ViPSVQl528OATK/nbSxsAKEul\n2ENPbIoMaQr5yK3e2Nyri6dNyYXS718ym/LyVLcvhhaRoUEhH7FV65uYe8Njvf5eeVmKyooy3c0i\nEgGFfMQ2NW0BwpC20/bI/+LpnruMVsCLREIhPwzsP2U8Z87ep9TFEJESUIeriEjE1JKPyLr6lu1v\nJAJ4Y11TCUsjIoOBQj4Sqzc08aV5XV9kLVf/usiw1WPIm1kKuB6YDrQA57n7iqzlZwOXAG3Aze7+\ngwEqq+SwqTG04KdOqmW/rHeKlpenOHb65FIVS0RKLJ+W/Bygyt1nmdmRwDXJvIyrgf2BJuCvZna7\nu9cXvqiSjwP2mqCLrCKyXT4XXo8G7gVw98XA4Z2WPwmMB6qT6XTBSiciIv2ST0t+DJDdMm8zszJ3\nb0+mnwGWAJuBX7r7wLwVWXawoaF1h4usqzboIquIvFk+Ib8JyB5GcHvAm9lBwCnAFKAR+ImZnenu\nd+baYF2dRiXM6EtdvLGukc9fv5B0F+dMtaNHDtn6HarlHgiqiw6qi/7JJ+QXAqcCd5jZDGB51rJ6\nQl98q7unzWw1oesmpzVrun85xHBSV1fbp7p4cWU96XQYwnff3cdun19RnuLQfScMyfrta13ESHXR\nQXXRoa8Hu3xC/i7gJDNbmEyfa2ZnATXufpOZ3QD8ycxagReAH/WpJELbtnZu/+NzbGrcknO9xqSb\n5q1TJ/De43SRVUS612PIu3sauKDT7Gezls8D5hW4XMPSy6s2M/+JlXmvP2mnUQNYGhGJgR6GKrJt\n7e2sWt9MGmjelmZ91gXT1RvD5xMO253Tj9or53bKy8oYNVL/+0QkN6VEkd36B+fhJ1/PuU51VTm1\no0YUqUQiEjOFfJGtb2gF4Njpk6mpGUFL844v9CgvT3HMwXpCVUQKQyFfYG3b2vnFg89vH8u9s1dW\nbQbggyfux26Tx+nOAREZUAr5Antl9WYeWPJqznV2GjNSr9UTkaJQyBdIe3uaNRubWVffAsDxh+zW\n7cXTUSMr9eYlESkKhXyB3Hb/syxY2nH7Y3VVBWNHV5WwRCIiCvmCWb8ptOCPOmhXqirLOWb6pBKX\nSEREIb8Df3kDDz/5Wp+G0XxpVbiAes5JRtWI8sIWTESkjxTyWf7w51dY9vzaPn9/fG0VFRXqaxeR\nwWPYhnx7Os26+pYdWu0tW9oA+K/zj6Sqsvet8dHVlZSX6a4ZERk8hm3I3/7Ac/yxm1sdJ9SOVJeL\niERh2IZ85lbHGW/dhYqs1vfuO49WwItINKIN+fb2NHc9soKNyTACnWUulH7oZKO6KtpqEJFhLtp0\nW7m2kd8++lLOdcbWjKCyQn3oIhKvaEO+vT1cUj36oEndPnlaO2qEhhcQkahFG/IZ1VUVTBxXXepi\niIiUhJqxIiIRU8iLiERMIS8iEjGFvIhIxBTyIiIRU8iLiERMIS8iEjGFvIhIxBTyIiIRU8iLiERM\nIS8iEjGFvIhIxBTyIiIRU8iLiERMIS8iEjGFvIhIxKJ7achLbzSw6Ok32NS0pdRFEREpuehC/p5H\n/8ESX7N9elztiNIVRkSkxKIJ+bZt7Wxta2fL1nYAvnT2odSMrGDyxJoSl0xEpHSiCPmGpi3MnfcY\nTa1t2+ftsfNoqqui+HkiIn3WYwqaWQq4HpgOtADnufuKrOVHAN9KJt8AznH3onaIb2hopam1jYlj\nR7J73Wh2q6tRwIuIkN/dNXOAKnefBcwFrum0/Abgo+5+LHAvMKWwRczf2/abyMXvPZgzZ+9TqiKI\niAwq+YT80YTwxt0XA4dnFpjZNGAdcImZLQAmuPtzA1BOERHpg3xCfgxQnzXdZmaZ700EZgLfAU4E\nTjSz4wpaQhER6bN8Oq43AbVZ02Xu3p58Xgc87+7PApjZvYSW/oJcG6yrq821uNcatoTijKoeUfBt\nD7ShVt6BpLrooLrooLron3xCfiFwKnCHmc0AlmctWwGMNrO9k4uxxwA39bTBNWsa+lLWbm3Y0AhA\nU/OWgm97INXV1Q6p8g4k1UUH1UUH1UWHvh7s8gn5u4CTzGxhMn2umZ0F1Lj7TWb2ceB2MwNY5O6/\n71NJRESk4HoMeXdPAxd0mv1s1vIFwJGFLZaIiBSCBigTEYmYQl5EJGIKeRGRiA25Z//T6TTzl65k\n4+bW7fPqN2tYYRGRrgy5kH99XRO33fdsl8tqR2lYYRGRbIM25NvT6S7nb20LDz4dZnWcdPge2+eX\nl6fYa1c9NCEikm1QhvxvH/0Hdz60Iuc640dXMW2PccUpkIjIEDUoQ/7F18MTbvvtPpbystSblpeX\nl3HkAbsUu1giIkPOoAz5jIvOPJjR1ZWlLoaIyJClWyhFRCKmkBcRiZhCXkQkYgp5EZGIKeRFRCKm\nkBcRiZhCXkQkYgp5EZGIKeRFRCKmkBcRiZhCXkQkYgp5EZGIKeRFRCKmkBcRiZhCXkQkYgp5EZGI\nKeRFRCKmkBcRiZhCXkQkYoPqHa+P/301GxpaWb2hqdRFERGJwqAJ+VUbmvj+r57ePl1RXkZlhU40\nRET6Y9CE/Jat7QAcvM9OHDt9MnXjqqmqLC9xqUREhrZBE/IZdeOqOXRaXamLISISBfWHiIhETCEv\nIhIxhbyISMQU8iIiEVPIi4hErMe7a8wsBVwPTAdagPPcfUUX680D1rn7pQUvpYiI9Ek+Lfk5QJW7\nzwLmAtd0XsHMPgkc2JcCbGhoZcHSlTz+91V9+bqIiOSQz33yRwP3Arj7YjM7PHuhmc0EjgDmAW/p\nbQHuWPA8jz7TEfDVVYPu1n0RkSErn0QdA9RnTbeZWZm7t5vZrsDlhNb++/PdaV1dbcdEWTiZ+PT7\n3sboUZUcMq2OUSMr893UkLdDXQxzqosOqosOqov+ySfkNwHZtVzm7u3J5/cBOwG/AyYB1Wb2d3e/\nJdcG16xp2P65tbUNgGmTaxldXUljQwuNDS35/4IhrK6udoe6GM5UFx1UFx1UFx36erDLJ+QXAqcC\nd5jZDGB5ZoG7XwdcB2BmHwGsp4AXEZHiySfk7wJOMrOFyfS5ZnYWUOPuNw1c0UREpL96DHl3TwMX\ndJr9bBfr/bhQhRIRkcLQw1AiIhFTyIuIREwhLyISMYW8iEjEFPIiIhFTyIuIREwhLyISMYW8iEjE\nFPIiIhFTyIuIREwhLyISMYW8iEjEFPIiIhEr2bv2/OUNbNy8hfWbhscLQkRESqEkIb+2vpmrfrp0\n+3RZKkVFeaoURRERiVpJQr6ldRsAtsc43n7ALuw6vpqRI/QCbxGRQitpsu5eN5rjD9mtlEUQEYma\nLryKiERMIS8iEjGFvIhIxBTyIiIRU8iLiERMIS8iEjGFvIhIxBTyIiIRU8iLiERMIS8iEjGFvIhI\nxBTyIiIRU8iLiERMIS8iEjGFvIhIxBTyIiIRU8iLiERMIS8iEjGFvIhIxHp8x6uZpYDrgelAC3Ce\nu6/IWn4W8BlgK7Dc3S8coLKKiEgv5dOSnwNUufssYC5wTWaBmY0EvgbMdvdjgHFmduqAlFRERHot\nn5A/GrgXwN0XA4dnLWsFZrl7azJdQWjti4jIIJBPyI8B6rOm28ysDMDd0+6+BsDMLgJq3P2BwhdT\nRET6osc+eWATUJs1Xebu7ZmJpM/+G8B+wBn57HT8hBoAqqsrqaur7WHtuA33359NddFBddFBddE/\n+YT8QuBU4A4zmwEs77T8BqDZ3efku9MN6xsBaG7eypo1Dfl+LTp1dbXD+vdnU110UF10UF106OvB\nLp+Qvws4ycwWJtPnJnfU1ABLgHOBR8xsPpAGrnX3X/epNCIiUlA9hry7p4ELOs1+tjfbEBGR0tDD\nUCIiEVPIi4hETCEvIhIxhbyISMQU8iIiEVPIi4hETCEvIhIxhbyISMQU8iIiEVPIi4hETCEvIhIx\nhbyISMQU8iIiEVPIi4hETCEvIhIxhbyISMQU8iIiEVPIi4hETCEvIhIxhbyISMQU8iIiEVPIi4hE\nrKLYO7zyx4+zvr652LsVERmWih7yC596bfvnyRNHFXv3IiLDStFDHuCKT8ygdtQIRo0sye5FRIaN\nkvTJ11RXKuBFRIpAF15FRCKmkBcRiZhCXkQkYgp5EZGIKeRFRCKmkBcRiZhCXkQkYgp5EZGIKeRF\nRCKmkBcRiZhCXkQkYj0OIGNmKeB6YDrQApzn7iuylp8GfBnYCtzs7jcNUFlFRKSX8mnJzwGq3H0W\nMBe4JrPAzCqS6ROB44BPmFldro2NHT2CqsryPhdYRETyl0/IHw3cC+Dui4HDs5btDzzn7pvcfSvw\nJ+DYXBv74WUnU1mhXiIRkWLIJ23HAPVZ021mVtbNsgZgbK6NqRUvIlI8+QzqvgmozZouc/f2rGVj\nspbVAht72F6qrq62h1WGD9VFB9VFB9VFB9VF/+TTkl8IvAvAzGYAy7OW/Q3Y18zGmdkIQlfNowUv\npYiI9EkqnU7nXCHr7pqDk1nnAocBNe5+k5mdAlwOpIAfuvsPBrC8IiLSCz2GvIiIDF26zUVEJGIK\neRGRiCnkRUQils8tlH2i4RA65FEXZwGfIdTFcne/sCQFHWA91UPWevOAde5+aZGLWDR5/E0cAXwr\nmXwDOMfdtxS9oEWQR12cDVwCtBGyIvqbO8zsSOBKdz++0/xe5+ZAtuQLOhzCEJerLkYCXwNmu/sx\nwDgzO7U0xRxw3dZDhpl9Ejiw2AUrgZ7q4gbgo+5+LOGJ8ylFLl8x9VQXVwPvIDx9/zkzy/nA5VBn\nZl8AbgSqOs3vU24OZMgXdDiEIS5XXbQCs9y9NZmuILRmYpSrHjCzmcARwLziF63ouq0LM5sGrAMu\nMbMFwAR3f64UhSySnH8XwJPAeKA6mY79lsDngfd0Mb9PuTmQIV/Q4RCGuG7rwt3T7r4GwMwuIjx/\n8EAJylgM3daDme1KeN7i04RnLmKX69/HRGAm8B1Cq+1EMzuuuMUrqlx1AfAMsITwIOY97r6pmIUr\nNne/i9A11VmfcnMgQ77QwyEMZbnqAjNLmdnVwAnAGcUuXBHlqof3ATsBvwO+BHzQzD5c5PIVU666\nWAc87+7PunsboZXbuXUbk27rwswOAk4hdFftBexiZmcWvYSDQ59ycyBDXsMhdMhVFxD6X6vcfU5W\nt02Muq0Hd7/O3Y9w93cAVwI/dfdbSlPMosj1N7ECGG1meyfTxxBas7HKVRf1QBPQ6u5pYDWh62Y4\n6HxG26fcHLAnXjUcQodcdUE4DX0ceCRZlgaudfdfF7ucA62nv4ms9T4C2DC5u6a7fx/HAVclyxa5\n+78Vv5TFkUddfBL4GOH61QvA+ckZTrTMbApwu7vPSu6+63NualgDEZGI6WEoEZGIKeRFRCKmkBcR\niZhCXkQkYgp5EZGIKeRFRCI2YKNQyuBgZt8FjgJGAPvS8VDNte7+4wLu5yOEwZNeItzDOxJ4CLgw\n++nePLf1VeBxd7/HzB5MHpDCzJ5w90P7Wc75wO6ER8JThCcIXwDOzgwv0c33zgc2ufvPe7Gv3YD/\ndPePmdkewPcIT26mgL8CF+XaZ2+Z2T3AeYS6v8zdzzOzw4BPuvsnuvnO9uU9/UYzqwFuAd6bPJgk\nQ4BCPnLu/mnY/nDF/P6GZA9+7e4fS/aXIoT8p4DrerMRd788a/K4rPmFKvvH3D3z8BlmdidhKNu5\nOb4zC5jfy/18G8g80DUP+HEmQM3sS8D3gff2cpvdcvdTk20fB+ydzFsCdBnwXSzP+RvdvdHM7gf+\nlVB2GQIU8sOYmV0OzAAyrcx/AS5394eTg8ICd59qZjsTQmp3oB241N3/mGvb7p42s0XAtGRf5xKC\ntJ3wlO+ngS3A/wBvTb52vbv/0MxuBhYAhybffdTdZ5pZO+Fv9hXgbe6+xszGA08DewInAV9N1nmR\n8GTkhi6Kt72b0sxqCQOCPZZMvy8p50jCqIfnEYZ8PR043sxeJ4yKmLM+zGwfYFLW6JG7AKOyVvku\nyXg0SQv5e0k9lANXufvPk7OjdwITCKF9n7t/KjlD+EmyvXbgYnf/s5m9CMwGrgWmmtl1wB3AV4CL\nCUNFHJTs8xRCuF+TLP961m/cCPwQmOrum5O/hd+6+4HAz5O6UsgPEeqTlyp3P9Ddu/pHmzklv5bw\nCPURwLuBeUkwdcvMdgL+GfiTmR1IaNEe4+7TCWORfIXQcpzg7ocRAvqo7H27+2cA3H1m1rx24BeE\nAc0AzgTuIoxncgVwcrK9+4BvdFO8G81sqZm9Rhj74z7g/ydnH58ATnH3QwjDCnwhCfC7gf9w9/vz\nrI9TCUPBZswFrjazl83sR4RBtx5Kll0G/CXZ3mzgMjPbK1k2kzDs7MHAaWb2VuDjwG/c/e3AvxOG\n6oWO/18XJ9u7KKvelhNGdzwgmXcWcGvW8uzfeDdwDx1nGR8GfgyQHDQbkoHDZAhQyMviPNY5Efia\nmS0Ffk9obe7TxXrvNrMnzGwZ8CBwZ9I9MRu4290zI+bdQHgJxHJgmpndC5xDCKx83AZ8IPl8VjJ9\nJKE1Pz8p56e6KSPAx5MQP5NwcPidu7cl/cxnAO9Mrgt8FBjdxffzqY/9gFczE+5+HzCZcGawmnAA\nuTNre/+abO9hwhlE5uxmkbs3uXszYeCyCcADwBfM7CfAboSzAuh5iObbgA+YWTXJ/5Mc694MfCj5\n/EE6DggALye/T4YAdddIc9bnNB1BUZk1vxx4RyakzWwS4ZV0nW3vk++kc2MiBVS4+4aklX8ioWW7\nNKul2S13X2JmE8zscGA3d3/MzE4HHnH3OUkZR7Dj8LWd94+7P5p0adxqZgcTwvVxwsXFh4CnCAeL\nrn5PT/XRTjImeNKl9GV3v4Rw1nCfmX0deC054yknvN5vWbL+zsB64Gx2fIFMGki5+yIz259wtvB+\nwsHo5J7qDfgp4eD7FPAHd99iZl2umHTZ7WZm7wFWuHv279ua/D4ZAtSSH156aumtpaMFmf1mmj+S\nhF0Swk+xY/9yTxYAp5vZuGT6fEKL+zTgNnf/HeEdtw2E6wPZsl8gkV3+nxL6xX+WTC8GZppZpoV5\nOeG1cT25JvktFxCuH2xz9/8mXID8Z0IAQwjsTKPoQXqujxfoeGVfPaGr5Zys5fsCqwhh/iBwYbK9\nScn2OtfDdmZ2FfBhd78VuAg4pNMq2WXdzt1fJ1zPmEto1XfWxo4H91sILy65udN6UwlvL5IhQCE/\nvPR029s3gE+Z2V/Y8f2SFwMzzOxJ4HbC7YaN+e406Q++AnjYzP5KeJvNZYSujiYze4ZwMe9Od3+m\nUznvBp40s6pO828jvPj5tmQfqwjD0f4iKefbgM91UZwd6sDDy7EvA/6DEFxPmpkTLg430BHUDwCX\nmtkZhGDtqT7uAY5P9tFOGC/9A2b2YvJ7rwJOS7qIvgpUm9nyZD+fd/cXc5T9O8CZSffOnYS7XbKX\n/43wruCubpG9FZjo7gu6WPYAMDf5jRAuslYD24e9tvB+1THu/nQX35dBSEMNiwwQM7uDcLfSkHvh\nR3IR+gJgmrt/Nmv+xcDWbi7UyyCkPnmRgXMJoZV+bqkL0ge/JHQZ/VNmRnIH0Ql0/ZJpGaTUkhcR\niZj65EVEIqaQFxGJmEJeRCRiCnkRkYgp5EVEIqaQFxGJ2P8B66FXmsQymesAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f97c0ef4390>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"y_pred_prob = model.predict_proba(X_test)[:,1]\n",
"fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob)\n",
"plt.plot(fpr, tpr)\n",
"plt.xlim([0.0, 1.0])\n",
"plt.ylim([0.0, 1.0])\n",
"plt.title('ROC curve for Titanic')\n",
"plt.xlabel('False Positive Rate (1 - Recall)')\n",
"plt.xlabel('True Positive Rate (Sensitivity)')\n",
"plt.grid(True)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.74750054, 0.74312762, 0.74298741, 0.73808718, 0.73799308,\n",
" 0.73743733, 0.73736981, 0.73735128, 0.73729214, 0.73709628,\n",
" 0.73699794, 0.73675548, 0.73659304, 0.73639721, 0.73623377,\n",
" 0.73612635, 0.73607305, 0.73572436, 0.7356707 , 0.735536 ,\n",
" 0.73544523, 0.73407999, 0.73200457, 0.7316892 , 0.73139765,\n",
" 0.73080287, 0.20382799, 0.20324215, 0.20255542, 0.202325 ,\n",
" 0.19998395, 0.19993953, 0.19986688, 0.19983705, 0.19891076,\n",
" 0.19881374, 0.19872727, 0.19868889, 0.1986448 , 0.19860251,\n",
" 0.19851757, 0.19851517, 0.19851124, 0.19850688, 0.19843776,\n",
" 0.19841942, 0.19831147, 0.19830402, 0.19816605, 0.19815391,\n",
" 0.19813555, 0.19813539, 0.19803009, 0.19801409, 0.19800118,\n",
" 0.1978783 , 0.19785132, 0.19784528, 0.19783312, 0.19782026,\n",
" 0.19780287, 0.19776301, 0.19774832, 0.19770726, 0.19759125,\n",
" 0.19756794, 0.197232 , 0.19720558, 0.1971321 , 0.197085 ,\n",
" 0.19652697, 0.19651513, 0.19193059, 0.18794571])"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#Threshold used by the decision function, thresholds[0] is the number of \n",
"thresholds"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([<matplotlib.axes._subplots.AxesSubplot object at 0x7f97bea20710>,\n",
" <matplotlib.axes._subplots.AxesSubplot object at 0x7f97be73c8d0>], dtype=object)"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nrkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f97c0ef4c88>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#Histogram of probability vs actual\n",
"dprob = pd.DataFrame(data = {'probability':y_pred_prob, 'actual':y_test})\n",
"dprob.probability.hist(by=dprob.actual, sharex=True, sharey=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ROC curve helps to select a threshold to balance sensitivity and recall."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"#Function to evaluate thresholds of the ROC curve\n",
"def evaluate_threshold(threshold):\n",
" print('Sensitivity:', tpr[thresholds > threshold][-1])\n",
" print('Recall:', 1 - fpr[thresholds > threshold][-1])"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sensitivity: 0.0786516853933\n",
"Recall: 0.992537313433\n"
]
}
],
"source": [
"evaluate_threshold(0.74)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sensitivity: 0.741573033708\n",
"Recall: 0.880597014925\n"
]
}
],
"source": [
"evaluate_threshold(0.5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"By default, the thresdhold to decide a class is 0.5, If we modify it, we should use the new thresdhold.\n",
"\n",
"threshold = 0.8\n",
"\n",
"predicted = model.predict_proba(X) > threshold"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"AUC is the percentage of the ROC plot underneath the curve. Represents the likelihood that the predictor assigns a higher predicted probability to the positive observation. A simple rule to evaluate a classifier based on this summary value is the following:\n",
"* .90-1 = very good (A)\n",
"* .80-.90 = good (B)\n",
"* .70-.80 = not so good (C)\n",
"* .60-.70 = poor (D)\n",
"* .50-.60 = fail (F)"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.799890994466\n"
]
}
],
"source": [
"# AUX\n",
"print(roc_auc_score(expected, predicted))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Train and Evaluate with K-Fold"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is alternative to splitting the dataset into train and test. It will run k times slower than the other method, but it will be more accurate."
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Scores in every iteration [ 0.81564246 0.80337079 0.78089888 0.73595506 0.80337079]\n",
"Accuracy: 0.79 (+/- 0.06)\n"
]
}
],
"source": [
"# This step will take some time\n",
"# Cross-validation\n",
"cv = KFold(X.shape[0], n_folds=5, shuffle=False, random_state=33)\n",
"# StratifiedKFold has is a variation of k-fold which returns stratified folds:\n",
"# each set contains approximately the same percentage of samples of each target class as the complete set.\n",
"#cv = StratifiedKFold(y, n_folds=3, shuffle=False, random_state=33)\n",
"scores = cross_val_score(model, X, y, cv=cv)\n",
"print(\"Scores in every iteration\", scores)\n",
"print(\"Accuracy: %0.2f (+/- %0.2f)\" % (scores.mean(), scores.std() * 2))\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We get 78% of success with K-Fold, quite good!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can plot the [learning curve](http://scikit-learn.org/stable/auto_examples/model_selection/plot_learning_curve.html). The traning scores decreases with the number of samples. The cross-validation reaches the training score at the end. It seems we will not get a better result with more samples."
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<module 'matplotlib.pyplot' from '/home/cif/anaconda3/lib/python3.5/site-packages/matplotlib/pyplot.py'>"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nHuW65vEs8GUAa+2eBDWMFjUEfR3NIuITrHdTRTBb90vhMZMJ1jZan+NyKqWUysJgjbZqGRN/PEGT\nVJmI3BBOTjqBYMLSe8DJ4YSx3wD7E8wXOFdEHuvufbTmoZRS2etPzWNYzPPQ8FBKqewVcrOVUkqp\nYUjDQymlVNY0PJRSSmVNw0MppVTWNDyUUkplTZdkV2qEqn3+v2x48AHiK1cQmzSZMQfPo2L3PXs+\nsAtXXnk5IkvZsGE9TU1NTJkylaqq0fzyl7/u8dh33nmbZ599huOOOynj64sWPceaNas55JD5GV9X\ng0+H6io1AtU+/19WLby20/aJp5zWrwABeOihB/joow859dQzet5Z5VV/hupqzUOpYWjt3Xex+cUX\nunw9uWlTxu2rbryedffcnfG18rm7Uf31IzO+1p1XXnmJa65ZQCwW49BDv0IsFuPee+8mlUphjOHi\niy/hvffe5b777uHCCy/myCO/wuzZO/HRRx8yZsxYLrrotzz88IN8+OEHzJ//NS644KdMmDCBjz/+\nmB12mMmPfnQONTWbuPDC80kkEkybtgUvv/wid93119YyxONxfv7zc6ivr6epqYlTTvk2u+22Bw88\ncB/33Xcvnuex9977cMIJp/DPfz7E3XffSSxWxNSp0/jxj8/j0Ucf5sEH/4bv+5x44qnU1GziT3+6\nA9d1mT17pxEZlBoeSo1EqS5u497V9n5KJOIsXHgLALfffguXXPJ7ioqKuOSSi1m06DnGjavGmOBL\n8MqVK7jyyoWMG1fNt799EkuXLgZoff3jjz/i8suvJhaLccQR89m4cQN/+MMt7LPP55g//3BeeGER\nL7zwfLv3/+STj6mpqeH//m8BGzduYPnyj9i4cSN/+MNt3H77n4hGo1x33VWsWrWKm25ayC233Elx\ncTELFvyO+++/l9LSUsrLK/j1ry+ltraWb3/7JG688XaKior41a9+zosvPs/cubvn5LMrVBoeSg1D\n1V8/sttawge/OJ/4Jx932h6bOo0tL/jVgJdniy2mtz4ePbqKiy66gOLiYpYv/5Add2x/R9+qqirG\njasGoLp6PPF4+7sST5kyjeLiYgDGjh1Hc3OcDz74gIMOCm4tP2dO51uwf+pTW3HooV/hggvOI5lM\ncfjhR7BixSdsvfXWRKNRAE499QzeemsJn/rU1q3nnzNnZ154YREzZsxs/Tt88slyNm3ayI9//D18\n36exsZFPPvlYw0MpNfyNOXhexj6PMV8+OCfvZ0wwsLO+vo4bb1zIvfc+iO/7/OAH/Wvuaemz3Xrr\nrXnzzdfYZpttefPN1zvtt2zZuzQ0NPDb317O+vXrOP30E7n++lv58MMPSSaTRCIRzj//bM488wd8\n8MEympubKCoq5tVXX2LatC0AcJzg7zBp0hQmTJjI7353Fa7r8tBDD7DttrZff4+hSMNDqRGopVN8\nwz8ebBtt9eWD+91Z3pOyslHMnj2HU045jkjEpby8knXr1jJx4qS0vdr6cFuaqtKlb2t5fNRRx/Kr\nX/2cJ598nLFjxxGJuO2OmTp1C2666XqefPIxfN/npJNOp7KyiqOOOoYzzjgZxzF85jP7MHHiRE48\n8VTOPPNUXNdlypSpnH76d3nssUdaz1VVVcURRxzFmWeeTCrlMWnSZPbf/4AB+oSGDh1tpZQa8p57\n7llGjx7D9tvvwIsvPs/tt9/C739/db6LVfB0tFUe+J6H19SEW1qa76IoNeJNnjyFX//6l7iui+d5\nfP/7P853kYY9rXn0ke95JDasxx1Vjht2riml1FCiS7LniTEOXkM9XnNzvouilFKDSsOjn4zjkKqr\nw+swnFAppYYzDY8BYFwNEKXUyKLhMUCMY4IASSTyXRSllMo5DY8BFARIrQaIGhJeXP0qFy26jO88\neQ4XLbqMF1e/2u9zLlv2Hj/5yff53vdO5+STj+XGG68bgJIOnMMOOxCAK674P9asWd3utY8++oDv\nfOfUbo+/554/A8Eqv3//+325KeQQoUN1B5gxDqnNm6GyEsd1ez5AqTx4cfWr3Lz4jtbnK+pXtT6f\nO2GnPp2zrq6OCy/8KRdffClTpkzF931+9rOzuf/+eznssK8OSLn7Lxhc9N3v/jDzqxkmJaa77bYb\n+drXvsEee3x6wEs21Gh45IBxDKnaWqio0ABReXHvuw/wypo3uny9prk24/bblvyJ+997KONrO4+f\nxVe3mdflOf/1r6fYddfdmDJlKhBciM8//5dEIpFOK+uOHj2G66+/hqKiIiorKzn33J+TSCT5xS/O\nxfd94vE4P/rRuWyxxfSMq+G2SCaTHH3017n11jspKirmzjv/gOu6zJ27O1de+Ts8z6OmZhM//OG5\n7LjjrNbjvvOdU/nxj8+jrKyMX/7yZwCMHj2m9fWnnnq808q/9913D5s3b+ayy/4fO+wwkw8//IDT\nTjuTO+/8A0888U8ikQhz5uzCaaedyU03LWTlyhVs3LiB1atX8d3vnsVuu7XN3h8Oq/xqeOSIMZCq\nqdEaiCpIKT/z6rldbe+NdevWMXnylHbbitPmQKWvrPv1rx/GtdfeyNix4/jLX+7illtuZJdddqWy\nsorzz7+Q999fRlNTY8bVcNNFIhE+97nP89RTT3DggV/m0Ucf5vLLr+aFFxZx5pk/YKuttubRRx/m\nH//4W7vwaHHbbTdxwAEHMm/efB5//FHuv/8eAJYv/6jTyr/HHHMC99zzZ84662weeugBjDEsW/Yu\nTz31ONdddwuO43D++T/hP//5NwCxWIxLL72CF15YxF13/bFdeAyHVX41PHLIOIZUTQ2mqgrjaPeS\nGjxf3WZet7WEixZdxor6VZ22Txk1ifN2/0Gf3nPixIm8/ba027Zy5YrWvoWWVWk3bdrEqFFljB07\nDghWrl248GrOOON7LF++nHPOOYtIJMqxx56YcTXc119/leuvvwZjDN/85reYN+8wLr3012yxxXSm\nT9+SiooKqqurueWWGyguLqa+vo6yslEZy7x8+UccemjQpDZ79pzW8Bg9enTryr8ffdR55d8WH374\nATNn7ti6aOLs2Tvx/vvvAbQuljhhwgQSifYjMYfDKr96Rcsx4xiSNTX4npfvoijV6sAt98+4/YvT\n9+vzOT/zmc/y/PPP8Um41HsymWTBgt+1Xkxb+huqqqqor69nw4b1ALzyysutN3AaO3Ycl112Jccc\ncwILF17FsmXvta6G+9Of/oLLL7+E2bN3YsGC67jiimv59Kc/w9Sp0/B9uOOO21tvU3v55Zdy0kmn\nct55v2CrrbZJK2X7xSg+9amteOON1wBYsiS4b0jLyr8XXngx55zzM4qKiro8fvr0LVmyZDGe5+H7\nPq+++krrRb27/pP0VX5b/l5Tp05tXeUX4Pzzz6aqakzrKr9Aj6v8LlhwHV/72jeYObNzLWugac1j\nEBgDydpaIpWVPXbIKTUYWjrF//nhk6ysX82ksgl8cfp+fe4sBygtLeOnP72A3/72Inzfp6Ghgb33\n3of58w/nlVdeavezf/bZ53PeeT/GcRzKy8v56U8vAOAXvziP++77C57ncfzxJzN16jRuumlhu9Vw\nM5k371BuvHEhu+wyF4AvfenLnH/+2VRUVFJdPZ6ampY7JwZlaCnLMcecwIUX/ownnniUSZMmA12v\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4a65d42278>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_learning_curve(model, \"Learning curve with K-Fold\", X, y, cv=cv)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Train and Optimize"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this section we are going to provide an alternative version of the previous one with optimization"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.811659192825\n"
]
}
],
"source": [
"#Tune parameters\n",
"gammas = np.logspace(-6, -1, 10)\n",
"gs = GridSearchCV(model, param_grid=dict(gamma=gammas))\n",
"gs.fit(X_train, y_train)\n",
"scores = gs.score(X_test, y_test)\n",
"print(scores)"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<module 'matplotlib.pyplot' from '/home/cif/anaconda3/lib/python3.5/site-packages/matplotlib/pyplot.py'>"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4a65a12b00>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Refine model\n",
"model = SVC(kernel='linear', gamma=gs.best_estimator_.gamma)\n",
"plot_learning_curve(model, \"optimized with GridSearch\", X, y, cv=cv)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Visualise"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4a65c13588>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4a65d21e10>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4a65bc4588>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f4a65bc4550>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Plot with standard configuration of SVM\n",
"%run plot_svm\n",
"plot_svm(df)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Any value in the blue survived while anyone in the red did not. Checkout the graph for the linear transformation. It created its decision boundary right on 50%! "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# References"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* [Titanic Machine Learning from Disaster](https://www.kaggle.com/c/titanic/forums/t/5105/ipython-notebook-tutorial-for-titanic-machine-learning-from-disaster)\n",
"* [API SVC scikit-learn](http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html)\n",
"* [Better evaluation of classification models](http://blog.kaggle.com/2015/10/23/scikit-learn-video-9-better-evaluation-of-classification-models/)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Licence"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The notebook is freely licensed under under the [Creative Commons Attribution Share-Alike license](https://creativecommons.org/licenses/by/2.0/). \n",
"\n",
"© 2016 Carlos A. Iglesias, Universidad Politécnica de Madrid."
]
}
],
"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": 0
}