Skip to content

Instantly share code, notes, and snippets.

@sarguido
Created February 13, 2014 04:46
Show Gist options
  • Save sarguido/8969870 to your computer and use it in GitHub Desktop.
Save sarguido/8969870 to your computer and use it in GitHub Desktop.
A Beginner's Guide to Machine Learning with Scikit-Learn: Supervised Learning
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"%pylab inline"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"prompt_number": 9
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Supervised Learning in Scikit-Learn\n",
"\n",
"Supervised learning is the task of learning from labeled data. Using a set of labeled data, called training data, you can train supervised algorithms to infer the relationship between each data instance and its label. That relationship can then be mapped to new data, in order to predict patterns or categories. For example, if you have a dataset with observations about email spam, each instance might have a label of \"spam\" or \"not spam\", or something like a 1 for spam and a 0 for not spam. Or, as another example, you might want to predict the relationship between housing prices and square footage based off of data where that relationship is already apparent.\n",
"\n",
"The two main types of supervised learning are classification and regression.\n",
"\n",
"### Classification\n",
"\n",
"Classification algorithms predict categorical labels, like our email spam example, and can tell us the likelihood that a new data instance belongs to a certain category. The categories can be discrete, nominal, ordinal, integer-valued, or real-valued. Our much-loved email spam example is an example of classification. \n",
"\n",
"#### Naive Bayes Classification\n",
"\n",
"In Naive Bayes classification, the classifier assumes that the features in your dataset are independent of each other; that is, one feature being a certain way has no effect on what values the other features take. This is a naive assumption because this doesn't always hold true in reality, but despite this naivety and oversimplified assumptions, the classifier performs decently and even quite well in certain classification situations.\n",
"\n",
"In scikit-learn, the Naive Bayes classifier is fast. However, some of the more sophisticated methods we'll discuss have been shown to perform better. Scikit-learn comes with several different variations on the Naive Bayes classifer, like Gaussian Naive Bayes, which is what I'll show in the example.\n",
"\n",
"To build the classifier, first create the model by setting a variable equal to the Naive Bayes object. The GaussianNB() estimator assumes a normal distribution. Then, fit the model to the training dataset and the training labels. Finally, predict on a new set of data."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from sklearn import datasets\n",
"from sklearn.cross_validation import train_test_split\n",
"from sklearn.naive_bayes import GaussianNB\n",
"\n",
"digits = datasets.load_digits()\n",
"\n",
"train_X, test_X, train_y, test_y = train_test_split(digits.data, digits.target, test_size=0.33)\n",
"\n",
"nb_estimator = GaussianNB()\n",
"nb_estimator.fit(train_X, train_y)\n",
"pred = nb_estimator.predict(test_X)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Comparing the first 8 predicted labels to what the first 8 labels actually are:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print 'Predicted labels:', pred[0:8]\n",
"print 'Actual labels:', test_y[0:8]"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Predicted labels: [6 0 7 5 6 8 0 0]\n",
"Actual labels: [6 0 7 5 1 3 0 0]\n"
]
}
],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Regression\n",
"\n",
"Regression is used to predict continuous target variables, like the relationship between housing prices and square footage. In a regression model, we look at how the value of a dependent variable changes when the other independent variables change. \n",
"\n",
"#### Linear Regression\n",
"\n",
"Linear regression is used when the target value is expected to be a linear combination of the input variables. The goal of linear regression, in creating a linear model, is to minimize the sum of squared residuals between the observed data and the responses predicted by linear approximation. \n",
"\n",
"Linear regression models make a few assumptions about the dataset you're using to train them. Feature independence, similar to that in the Naive Bayes algorithm, is assumed, as is linearity, which means that the target value is a linear combination of the parameters and the predictor variables. \n",
"\n",
"Here's linear regression used on housing prices."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from sklearn import linear_model\n",
"import matplotlib.pyplot as plt\n",
"\n",
"houses = datasets.load_boston()\n",
"# Use only one feature\n",
"houses_X = houses.data[:, np.newaxis]\n",
"houses_X_temp = houses_X[:, :, 2]\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(houses_X_temp, houses.target, test_size=0.33)\n",
"\n",
"lreg = linear_model.LinearRegression()\n",
"lreg.fit(X_train, y_train)\n",
"\n",
"plt.scatter(X_test, y_test, color='black')\n",
"plt.plot(X_test, lreg.predict(X_test), color='green', linewidth=3)\n",
"\n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x109de8ad0>"
]
}
],
"prompt_number": 18
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment