{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction to ML in Practice\n", "\n", "In the previous lecture, we worked through an example of machine learning \"by hand,\" in a very abstract mathematical context. All of the data was given to us as floating point numbers, and there was no messy data preparation to do. This enabled us to go into some detail about what the model was actually doing. We worked with a model with several parameters; generated instances of that model; and saw that selecting the model with the smallest loss led to a good apparent match to the data. \n", "\n", "In practice, the situation is not nearly so neat. There is missing data; some of the data has `na` values; some of the data is formatted as strings. Furthermore, it's arduous to do all of the steps of the machine learning pipeline by hand, and only machine learning researchers do this on a regular basis. Most programming languages offer simplified interfaces for efficiently working with machine learning models. In this lecture, we'll work through a similar machine learning pipeline on a more complex historical data set. Along the way, we'll introduce the `scikit-learn` package, which offers an effective and concise set of tools for carrying out complicated machine learning tasks. " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from matplotlib import pyplot as plt\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To help us get acquainted with the many tools that `scikit-learn` offers us, we are going to work through the \"Hello World\" of machine learning -- the Titanic data set. " ] }, { "cell_type": "code", "execution_count": 3, "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", " \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", "
SurvivedPclassNameSexAgeSiblings/Spouses AboardParents/Children AboardFare
003Mr. Owen Harris Braundmale22.0107.2500
111Mrs. John Bradley (Florence Briggs Thayer) Cum...female38.01071.2833
213Miss. Laina Heikkinenfemale26.0007.9250
311Mrs. Jacques Heath (Lily May Peel) Futrellefemale35.01053.1000
403Mr. William Henry Allenmale35.0008.0500
...........................
88202Rev. Juozas Montvilamale27.00013.0000
88311Miss. Margaret Edith Grahamfemale19.00030.0000
88403Miss. Catherine Helen Johnstonfemale7.01223.4500
88511Mr. Karl Howell Behrmale26.00030.0000
88603Mr. Patrick Dooleymale32.0007.7500
\n", "

887 rows × 8 columns

\n", "
" ], "text/plain": [ " Survived Pclass Name \\\n", "0 0 3 Mr. Owen Harris Braund \n", "1 1 1 Mrs. John Bradley (Florence Briggs Thayer) Cum... \n", "2 1 3 Miss. Laina Heikkinen \n", "3 1 1 Mrs. Jacques Heath (Lily May Peel) Futrelle \n", "4 0 3 Mr. William Henry Allen \n", ".. ... ... ... \n", "882 0 2 Rev. Juozas Montvila \n", "883 1 1 Miss. Margaret Edith Graham \n", "884 0 3 Miss. Catherine Helen Johnston \n", "885 1 1 Mr. Karl Howell Behr \n", "886 0 3 Mr. Patrick Dooley \n", "\n", " Sex Age Siblings/Spouses Aboard Parents/Children Aboard Fare \n", "0 male 22.0 1 0 7.2500 \n", "1 female 38.0 1 0 71.2833 \n", "2 female 26.0 0 0 7.9250 \n", "3 female 35.0 1 0 53.1000 \n", "4 male 35.0 0 0 8.0500 \n", ".. ... ... ... ... ... \n", "882 male 27.0 0 0 13.0000 \n", "883 female 19.0 0 0 30.0000 \n", "884 female 7.0 1 2 23.4500 \n", "885 male 26.0 0 0 30.0000 \n", "886 male 32.0 0 0 7.7500 \n", "\n", "[887 rows x 8 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "url = \"https://philchodrow.github.io/PIC16A/datasets/titanic.csv\"\n", "titanic = pd.read_csv(url)\n", "titanic" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Titanic data set collects information about almost 900 passangers aboard the Titanic during the fateful voyage when it crashed into an iceberg in 1912 and sank. The information includes their age; the fare they paid for their ticket (in British pounds); their sex; and the passenger class `Pclass`, with 1st class corresponding to VIP treatment and 3rd class corresponding to a much less luxurious experience. Crucially, the data set also records whether that passenger survived the sinking of the ship, with `1` indicating that the passenger survived and `0` indicating that the passenger tragically perished. \n", "\n", "We are eventually going to train an algorithm to predict whether a passenger survived the Titanic based on their available information. Before we do, let's get a sense for some trends using familiar `pandas` summarization. \n", "\n", "How wealthy were these passengers? We can't know for certain, but we can get a sense for how much was paid for each passenger class." ] }, { "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", "
Fare
meanlen
Pclass
184.15216.0
220.66184.0
313.71487.0
\n", "
" ], "text/plain": [ " Fare \n", " mean len\n", "Pclass \n", "1 84.15 216.0\n", "2 20.66 184.0\n", "3 13.71 487.0" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.groupby('Pclass')[['Fare']].aggregate([np.mean, len]).round(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- The average price of 84 pounds for a first-class ticket corresponds to nearly \\$15,000 USD today.\n", "- The second-class ticket corresponds to roughly \\$3,500\n", "- The third class ticket corresponds to roughly \\$2,500. \n", "\n", "We can safely assume that the first-class passengers were indeed substantially more wealthy on average than the others. \n", "\n", "This difference in wealth made a considerable difference in how likely passengers were to survive. " ] }, { "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", "
Survived
meanlen
PclassSex
1female0.9794
male0.37122
2female0.9276
male0.16108
3female0.50144
male0.14343
\n", "
" ], "text/plain": [ " Survived \n", " mean len\n", "Pclass Sex \n", "1 female 0.97 94\n", " male 0.37 122\n", "2 female 0.92 76\n", " male 0.16 108\n", "3 female 0.50 144\n", " male 0.14 343" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic.groupby(['Pclass', 'Sex'])[['Survived']].aggregate([np.mean,len ]).round(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This table reflects the famous maritime tradition of prioritizing women and children first into the lifeboats, resulting in vastly higher survival rates among women in these data. Note the role of class: a 1st-class woman was twice as likely to survive as a third class woman, and a 1st-class man was nearly three times as likely to survive as a 3rd class man. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Towards Modeling\n", "\n", "We'd like to develop automated models that can use these trends and others to make predictions about survival. However, we need to do a bit of data cleaning before we're ready for this. In particular, **machine learning algorithms don't really get text**, so we need to transform text data into numbers before we can proceed. Here's how we can encode the `Sex` data, using our first handy tool from `sklearn`. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1,\n", " 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,\n", " 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0,\n", " 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0,\n", " 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1,\n", " 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0,\n", " 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1,\n", " 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1,\n", " 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0,\n", " 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1,\n", " 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1,\n", " 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1,\n", " 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,\n", " 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0,\n", " 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1,\n", " 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,\n", " 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,\n", " 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1,\n", " 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0,\n", " 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1,\n", " 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1,\n", " 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0,\n", " 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1,\n", " 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0,\n", " 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,\n", " 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1,\n", " 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0,\n", " 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0,\n", " 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1,\n", " 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1,\n", " 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1,\n", " 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0,\n", " 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0,\n", " 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1,\n", " 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1,\n", " 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1,\n", " 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1,\n", " 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1,\n", " 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1,\n", " 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1,\n", " 1, 0, 1, 0, 0, 1, 1])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn import preprocessing\n", "le = preprocessing.LabelEncoder()\n", "le.fit_transform(titanic['Sex'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is a binary array in which `0` encodes `female` and `1` encodes `male`. Let's just replace the `Sex` column in the data with the encoded version. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "titanic['Sex'] = le.fit_transform(titanic['Sex'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We also don't really have any use for the actual names of passengers, so let's just remove that column. |" ] }, { "cell_type": "code", "execution_count": 9, "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", " \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", "
SurvivedPclassSexAgeSiblings/Spouses AboardParents/Children AboardFare
003122.0107.2500
111038.01071.2833
213026.0007.9250
311035.01053.1000
403135.0008.0500
........................
88202127.00013.0000
88311019.00030.0000
8840307.01223.4500
88511126.00030.0000
88603132.0007.7500
\n", "

887 rows × 7 columns

\n", "
" ], "text/plain": [ " Survived Pclass Sex Age Siblings/Spouses Aboard \\\n", "0 0 3 1 22.0 1 \n", "1 1 1 0 38.0 1 \n", "2 1 3 0 26.0 0 \n", "3 1 1 0 35.0 1 \n", "4 0 3 1 35.0 0 \n", ".. ... ... ... ... ... \n", "882 0 2 1 27.0 0 \n", "883 1 1 0 19.0 0 \n", "884 0 3 0 7.0 1 \n", "885 1 1 1 26.0 0 \n", "886 0 3 1 32.0 0 \n", "\n", " Parents/Children Aboard Fare \n", "0 0 7.2500 \n", "1 0 71.2833 \n", "2 0 7.9250 \n", "3 0 53.1000 \n", "4 0 8.0500 \n", ".. ... ... \n", "882 0 13.0000 \n", "883 0 30.0000 \n", "884 2 23.4500 \n", "885 0 30.0000 \n", "886 0 7.7500 \n", "\n", "[887 rows x 7 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titanic = titanic.drop(['Name'], axis = 1)\n", "titanic" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This looks better! We have a data frame full of sweet, delicious numbers. Mmmmm.....\n", "\n", "The next thing to do is to separate out the target data `Survived` from the predictor data (everything else). " ] }, { "cell_type": "code", "execution_count": 10, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PclassSexAgeSiblings/Spouses AboardParents/Children AboardFare
03122.0107.2500
11038.01071.2833
23026.0007.9250
31035.01053.1000
43135.0008.0500
.....................
8822127.00013.0000
8831019.00030.0000
884307.01223.4500
8851126.00030.0000
8863132.0007.7500
\n", "

887 rows × 6 columns

\n", "
" ], "text/plain": [ " Pclass Sex Age Siblings/Spouses Aboard Parents/Children Aboard \\\n", "0 3 1 22.0 1 0 \n", "1 1 0 38.0 1 0 \n", "2 3 0 26.0 0 0 \n", "3 1 0 35.0 1 0 \n", "4 3 1 35.0 0 0 \n", ".. ... ... ... ... ... \n", "882 2 1 27.0 0 0 \n", "883 1 0 19.0 0 0 \n", "884 3 0 7.0 1 2 \n", "885 1 1 26.0 0 0 \n", "886 3 1 32.0 0 0 \n", "\n", " Fare \n", "0 7.2500 \n", "1 71.2833 \n", "2 7.9250 \n", "3 53.1000 \n", "4 8.0500 \n", ".. ... \n", "882 13.0000 \n", "883 30.0000 \n", "884 23.4500 \n", "885 30.0000 \n", "886 7.7500 \n", "\n", "[887 rows x 6 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X = titanic.drop(['Survived'], axis = 1)\n", "X" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 0\n", "1 1\n", "2 1\n", "3 1\n", "4 0\n", " ..\n", "882 0\n", "883 1\n", "884 0\n", "885 1\n", "886 0\n", "Name: Survived, Length: 887, dtype: int64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = titanic['Survived']\n", "y" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Modeling\n", "\n", "To use a machine learning model from `scikit-learn`, you should import the relevant model. For example, let's use a decision tree classifier. " ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "from sklearn import tree # scikit-learn is actually called sklearn when importing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In `scikit-learn`, abstract models are represented as classes. To make a specific model, instantiate the class. " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "T = tree.DecisionTreeClassifier(max_depth = 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Arguments passed to the model upon instantiation are typically used to control how complex the model can be. These arguments are often referred to as *hyperparameters*. In practice, we don't usually know what the *right* hyperparameters are, and so we need to resort to various computational techniques (in coming lectures) to select good ones. \n", "\n", "Now, here's the good news. Once we've carefully prepared our data and instantiated a model, actually fitting the model is unreasonably easy. " ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DecisionTreeClassifier(max_depth=2)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T.fit(X, y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remember that part in the last lecture where we defined a loss function and then searched around for models in our specified model family that minimized the loss? Yeah, `scikit-learn` has taken care of all that for us. \n", "\n", "We can then *score* our model to see how we did in terms of accuracy. The `score` method requires both the predictor and target variables. \n", "\n", "What does the `score` function calculate? It depends by model, but in the case of classifiers, the score is the fraction of the time that the model made the correct prediction. The score does the same job as the loss function, but the signs are flipped -- high scores mean good models. " ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.7914317925591883" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "T.score(X, y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hey, not bad! Our model was able to use the predictor variables to be right nearly 80\\% of the time. That's pretty impressive, but there is an important problem here. When doing machine learning, it's not advised to *score* or *evaluate* your model on the same data used for *training* or *fitting* the model. We'll come back to this in the next lecture. \n", "\n", "## Interpretation\n", "\n", "In most cases, you should aim to understand how your model makes the decisions that it does. This is the problem of machine learning *interpretation*. \n", "\n", "Every machine learning algorithm has both strengths and weaknesses when it comes to interpretation. Decision trees are pretty pleasant to interpret, as they correspond to \"flow-chart\" style reasoning that many of us are familiar with. The `tree` module of `scikit-learn` provides a convenient method for visualizing decision trees. " ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, figsize = (10, 10))\n", "p = tree.plot_tree(T, \n", " filled = True, \n", " feature_names = titanic.drop(['Survived'], axis = 1).columns)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The automated decision tree classifier has found the following rule to predict whether a passenger survived the Ttianic. First, check whether `Sex <= 0.5` -- that is, check whether the passenger is female. \n", "- If so, next check whether the passenger was first-class. If so, then they survive with high probability (161/170); otherwise the algorithm isn't sure and gives them a roughly 50-50 chance. \n", "- If the passenger is male, then check how old they are. If they are younger than 13 years old, the algorithm gives them a fair chance of survival (remember: \"women and children.\"). Otherwise, the algorithm gives them very low odds indeed (86/532). \n", "\n", "We've now gone through one cycle of: \n", "\n", "1. Acquiring data.\n", "2. Exploratory analysis.\n", "3. Modeling. \n", "4. Interpreting results.\n", "\n", "In practice, we would not stop here. Having trained our model, we should then ask: \n", "\n", "- What new insights can we gain from our model about the underlying data set? \n", "- Can we improve our model?\n", "- How can we use what we have learned in other data sets?\n", "\n", "These questions, and many others, are part of the *cycle of data science*: \n", "\n", "
\n", " \"A\n", "
\n", " The cycle of data science. Image credit: Hadley Wickham\n", "
\n", "\n", "We've learned to: \n", "\n", "- Import data (`pd.read_csv()`)\n", "- Tidy data (preprocessing)\n", "- Explore data by\n", " - Transforming (e.g. creating new columns)\n", " - Visualizing (`matplotlib`)\n", " - Modeling (basic machine learning)\n", " \n", "In your project, you'll be expected to go around this cycle multiple times, progressively building up your understanding and *communicating* your results." ] } ], "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.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }