1
0
mirror of https://github.com/gsi-upm/sitc synced 2024-11-25 07:52:27 +00:00
sitc/ml1/2_5_1_kNN_Model.ipynb
Carlos A. Iglesias 762157bfe1 Updated notebooks
2019-03-06 17:44:30 +01:00

572 lines
82 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![](files/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, © Carlos A. Iglesias"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## [Introduction to Machine Learning](2_0_0_Intro_ML.ipynb)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Table of Contents\n",
"* [kNN Model](#kNN-Model)\n",
"* [Load data and preprocessing](#Load-data-and-preprocessing)\n",
"* [Train classifier](#Train-classifier)\n",
"* [Evaluating the algorithm](#Evaluating-the-algorithm)\n",
" * [Precision, recall and f-score](#Precision,-recall-and-f-score)\n",
"\t* [Confusion matrix](#Confusion-matrix)\n",
"\t* [K-Fold validation](#K-Fold-validation)\n",
"* [Tuning the algorithm](#Tuning-the-algorithm)\n",
"* [References](#References)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# kNN Model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The goal of this notebook is to learn how to train a model, make predictions with that model and evaluate these predictions.\n",
"\n",
"The notebook uses the [kNN (k nearest neighbors) algorithm](https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Loading data and preprocessing\n",
"\n",
"The first step is loading and preprocessing the data as explained in the previous notebooks."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# library for displaying plots\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# display plots in the notebook \n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"## First, we repeat the load and preprocessing steps\n",
"\n",
"# Load data\n",
"from sklearn import datasets\n",
"iris = datasets.load_iris()\n",
"\n",
"# Training and test spliting\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"x_iris, y_iris = iris.data, iris.target\n",
"\n",
"# Test set will be the 25% taken randomly\n",
"x_train, x_test, y_train, y_test = train_test_split(x_iris, y_iris, test_size=0.25, random_state=33)\n",
"\n",
"# Preprocess: normalize\n",
"from sklearn import preprocessing\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": [
"## Train classifier"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The usual steps for creating a classifier are:\n",
"1. Create classifier object\n",
"2. Call *fit* to train the classifier\n",
"3. Call *predict* to obtain predictions\n",
"\n",
"Once the model is created, the most relevant methods are:\n",
"* model.fit(x_train, y_train): train the model\n",
"* model.predict(x): predict\n",
"* model.score(x, y): evaluate the prediction"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n",
" metric_params=None, n_jobs=None, n_neighbors=15, p=2,\n",
" weights='uniform')"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.neighbors import KNeighborsClassifier\n",
"import numpy as np\n",
"\n",
"# Create kNN model\n",
"model = KNeighborsClassifier(n_neighbors=15)\n",
"\n",
"# Train the model using the training sets\n",
"model.fit(x_train, y_train) "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Prediction [1 0 1 1 1 0 0 1 0 2 0 0 1 2 0 1 2 2 1 1 0 0 1 0 0 2 1 1 2 2 2 2 0 0 1 1 0\n",
" 1 2 1 2 0 2 0 1 0 2 1 0 2 2 0 0 2 0 0 0 2 2 0 1 0 1 0 1 1 1 1 1 0 1 0 1 2\n",
" 0 0 0 0 2 2 0 1 1 2 1 0 0 2 1 1 0 1 1 0 2 1 2 1 2 0 2 0 0 0 2 1 2 1 2 1 2\n",
" 0]\n",
"Expected [1 0 1 1 1 0 0 1 0 2 0 0 1 2 0 1 2 2 1 1 0 0 2 0 0 2 1 1 2 2 2 2 0 0 1 1 0\n",
" 1 2 1 2 0 2 0 1 0 2 1 0 2 2 0 0 2 0 0 0 2 2 0 1 0 1 0 1 1 1 1 1 0 1 0 1 2\n",
" 0 0 0 0 2 2 0 1 1 2 1 0 0 1 1 1 0 1 1 0 2 2 2 1 2 0 1 0 0 0 2 1 2 1 2 1 2\n",
" 0]\n"
]
}
],
"source": [
"print(\"Prediction \", model.predict(x_train))\n",
"print(\"Expected \", y_train)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy in training 0.9642857142857143\n"
]
}
],
"source": [
"# Evaluate Accuracy in training\n",
"\n",
"from sklearn import metrics\n",
"y_train_pred = model.predict(x_train)\n",
"print(\"Accuracy in training\", metrics.accuracy_score(y_train, y_train_pred))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy in testing 0.9210526315789473\n"
]
}
],
"source": [
"# Now we evaluate error in testing\n",
"y_test_pred = model.predict(x_test)\n",
"print(\"Accuracy in testing \", metrics.accuracy_score(y_test, y_test_pred))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we are going to visualize the Nearest Neighbors classification. It will plot the decision boundaries for each class.\n",
"\n",
"We are going to import a function defined in the file [util_knn.py](files/util_knn.py) using the *magic command* **%run**."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%run util_knn.py\n",
"\n",
"plot_classification_iris()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evaluating the algorithm"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Precision, recall and f-score"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For evaluating classification algorithms, we usually calculate three metrics: precision, recall and F1-score\n",
"\n",
"* **Precision**: This computes the proportion of instances predicted as positives that were correctly evaluated (it measures how right our classifier is when it says that an instance is positive).\n",
"* **Recall**: This counts the proportion of positive instances that were correctly evaluated (measuring how right our classifier is when faced with a positive instance).\n",
"* **F1-score**: This is the harmonic mean of precision and recall, and tries to combine both in a single number."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" setosa 1.00 1.00 1.00 8\n",
" versicolor 0.79 1.00 0.88 11\n",
" virginica 1.00 0.84 0.91 19\n",
"\n",
" micro avg 0.92 0.92 0.92 38\n",
" macro avg 0.93 0.95 0.93 38\n",
"weighted avg 0.94 0.92 0.92 38\n",
"\n"
]
}
],
"source": [
"print(metrics.classification_report(y_test, y_test_pred, target_names=iris.target_names))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Confusion matrix"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Another useful metric is the confusion matrix"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 8 0 0]\n",
" [ 0 11 0]\n",
" [ 0 3 16]]\n"
]
}
],
"source": [
"print(metrics.confusion_matrix(y_test, y_test_pred))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We see we classify well all the 'setosa' and 'versicolor' samples. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### K-Fold validation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In order to avoid bias in the training and testing dataset partition, it is recommended to use **k-fold validation**."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0.93333333 0.8 1. 0.93333333 0.93333333 0.93333333\n",
" 1. 1. 0.86666667 0.93333333]\n"
]
}
],
"source": [
"from sklearn.model_selection import cross_val_score, KFold\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.preprocessing import StandardScaler\n",
"\n",
"# create a composite estimator made by a pipeline of preprocessing and the KNN model\n",
"model = Pipeline([\n",
" ('scaler', StandardScaler()),\n",
" ('kNN', KNeighborsClassifier())\n",
"])\n",
"\n",
"# create a k-fold cross validation iterator of k=10 folds\n",
"cv = KFold(10, shuffle=True, random_state=33)\n",
"\n",
"# by default the score used is the one returned by score method of the estimator (accuracy)\n",
"scores = cross_val_score(model, x_iris, y_iris, cv=cv)\n",
"print(scores)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We get an array of k scores. We can calculate the mean and the standard error to obtain a final figure"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean score: 0.933 (+/- 0.020)\n"
]
}
],
"source": [
"from scipy.stats import sem\n",
"def mean_score(scores):\n",
" return (\"Mean score: {0:.3f} (+/- {1:.3f})\").format(np.mean(scores), sem(scores))\n",
"print(mean_score(scores))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So, we get an average accuracy of 0.940."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Tuning the algorithm"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We are going to tune the algorithm, and calculate which is the best value for the k parameter."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Accuracy')"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"k_range = range(1, 21)\n",
"accuracy = []\n",
"for k in k_range:\n",
" m = KNeighborsClassifier(k)\n",
" m.fit(x_train, y_train)\n",
" y_test_pred = m.predict(x_test)\n",
" accuracy.append(metrics.accuracy_score(y_test, y_test_pred))\n",
"plt.plot(k_range, accuracy)\n",
"plt.xlabel('k value')\n",
"plt.ylabel('Accuracy')\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The result is very dependent of the input data. Execute again the train_test_split and test again how the result changes with k."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## References"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* [KNeighborsClassifier API scikit-learn](http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html)\n",
"* [Learning scikit-learn: Machine Learning in Python](http://proquest.safaribooksonline.com/book/programming/python/9781783281930/1dot-machine-learning-a-gentle-introduction/ch01s02_html), Raúl Garreta; Guillermo Moncecchi, Packt Publishing, 2013.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Licence\n",
"The notebook is freely licensed under under the [Creative Commons Attribution Share-Alike license](https://creativecommons.org/licenses/by/2.0/). \n",
"\n",
"© 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.7.1"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
"autocomplete": true,
"bibliofile": "biblio.bib",
"cite_by": "apalike",
"current_citInitial": 1,
"eqLabelWithNumbers": true,
"eqNumInitial": 1,
"hotkeys": {
"equation": "Ctrl-E",
"itemize": "Ctrl-I"
},
"labels_anchors": false,
"latex_user_defs": false,
"report_style_numbering": false,
"user_envs_cfg": false
}
},
"nbformat": 4,
"nbformat_minor": 1
}