Está en la página 1de 71

{

"nbformat": 4,
"nbformat_minor": 0,
"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.9.4"
},
"colab": {
"name": "EX1_python_basics_kmeans_and_knn_(1).ipynb",
"provenance": [],
"collapsed_sections": [
"MBiOJQCxpu42"
]
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "ELQ-EyTmpu4K"
},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2RaRqeefpu4N"
},
"source": [
"<div style=\"display: flex; justify-content: left; flex-flow: row
wrap\">\n",
" <div style=\"width:20%; padding-right:50px\">\n",
" <img
src=\"https://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/Escudo-
UdeA.svg/1200px-Escudo-UdeA.svg.png\" height=200px>\n",
" </div>\n",
" <div style=\"width: 80%; \"> \n",
" <h1 style=\"font-size: 3em; color: #008\"> Curso analítica de
datos </h1>\n",
" <h4 style=\"color: #8c8c8c\"> <em>Departamento de Matemáticas</em>
</h4>\n",
" <h4 style=\"color: #8c8c8c\"> <em>Semestre 2021/I</em></h4>\n",
" </div>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "TiGcw1TUpu4Q"
},
"source": [
"**INTEGRANTES**: \n",
"\n",
" - Jáider Luis Cogollo\n",
" - "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1qm0SF3rpu4R"
},
"source": [
"### Indicaciones generales\n",
"\n",
"Este notebook esta diseñado para que realice la actividad de forma guiada
y para que escriba la solucion a los problemas propuestos. Algunas recomendaciones
generales son:\n",
"\n",
" 1. La solucion la debe escribir dentro del espacio indicado por \n",
" ```python\n",
" #===== START CODE HERE =====\n",
"\n",
" raise NotImplementedError()\n",
" #===== END CODE HERE =====\n",
" ```\n",
"\n",
" 2. Cuando comience a escribir la solución, puede comentar o eliminar la
linea `raise NotImplementedError()`\n",
" 3. El nombre de las funciones no las debe cambiar. Solo debe implementar
la solucion en el espacio indicado por el item 1.\n",
" 4. Puede importar otras librerias si las considera necesarias, pero estas
no deben alterar la estructura de las respuestas\n",
" 5. Si la pregunta requiere de que escriba una respuesta textual, debe
hacerlo donde le aparezca el siguiente encabezado:\n",
" ```\n",
" YOUR ANSWER HERE\n",
" ```\n",
" Puede borrar dicha linea y comenzar a escribir su respuesta."
]
},
{
"cell_type": "code",
"metadata": {
"id": "9vo7_CRGpu4T"
},
"source": [
""
],
"execution_count": 123,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "DRz1vJYlpu4U"
},
"source": [
"### Condiciones de entrega\n",
"\n",
" - Debe subir a classroom este mismo notebook con las soluciones
implementadas\n",
" - Debe subir el archivo txt\n",
" - Pueden trabajar y discutir en grupo pero no deben entregar soluciones
idénticas. Tenga la libertad de cambiar algunos\n",
" colores de los graficos si lo desean.\n",
" - El trabajo se debe entregar de manera individual\n",
" \n",
" \n",
"Como recomendacion final, escojan un entorno de trabajo adecuado. Si
tienen problemas trabajando online, prueben trabajar en sus maquinas o viceversa.
Debe tener presente que si trabaja local, debe verificar tener instaladas las
librerias que se estan importando."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "JxbJe9vopu4V"
},
"source": [
"## PARTE 1 - ALGORITMO DE KMEANS"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3jhqx0Gbpu4X"
},
"source": [
"Para esta parte de la actividad, debe desarrollar desde cero el método de
kmeans en python. Este método hace parte de los métodos no supervisados de machine
learning, que consiste en definir un número de cluster y clasificar cierto conjunto
de datos acorde al cluster al cual deberia corresponder. Para mayor información
puede consultar las siguientes fuentes:\n",
"\n",
" - https://realpython.com/k-means-clustering-python/\n",
" - https://es.wikipedia.org/wiki/K-medias\n",
" - https://scikit-learn.org/stable/modules/clustering.html#k-means\n",
"\n",
"Puede consultar otras fuentes, pero no deben copiar y pegar de forma
textual y mucho menos sin referenciar. Al final del notebook pueden colocar links
de donde han extraido información que hayan usado en el notebook."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AE6MUns2pu4Z"
},
"source": [
"#### Importando librerias\n",
"\n",
"Se van a importar las librerias que se van a requerir para la solucion del
problema"
]
},
{
"cell_type": "code",
"metadata": {
"id": "V-Ap8wwbpu4a"
},
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy.spatial.distance import cdist"
],
"execution_count": 124,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "k78VQ7tppu4b"
},
"source": [
"**NOTA**: Consultar para que se usa la funcion cdist"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OeSr_-Rwpu4c"
},
"source": [
"### 1. Generación de puntos ficticios que se van a clasificar"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yeUqc9LOpu4d"
},
"source": [
"Se van a generar un conjunto de puntos de forma aleatoría, los cuales se
van a usar como el set de datos a clasificar. \n",
"\n",
"<!--<p style=\"color: red\"> <b>EJERCICIO</b> </p>-->\n",
"\n",
"Para esto, se va a usar de una funcion de distribucion gaussiana
multivariada a la cual se le va a suministrar la matriz de covarianza y las medias,
para generar 3 clusters aleatoriamente."
]
},
{
"cell_type": "code",
"metadata": {
"id": "JSIrOJhDpu4e"
},
"source": [
"# Elementos de la diagonal de la matriz de covarianza de cada grupo\n",
"covs_diag = [[10,10],\n",
" [8,16],\n",
" [5,5]]\n",
"\n",
"\n",
"\n",
"# Medias mu_x y mu_y para cada grupo de puntos\n",
"means = [[40,20],\n",
" [30,40],\n",
" [45,45]]"
],
"execution_count": 125,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "yoi9UUTgpu4f"
},
"source": [
"A continuacion debe completar la función que permite generar los puntos de
los 3 clusters. Para ello deben consultar que funcion de NumPy les permite generar
datos aleatoriamente siguiendo una distribución gaussiana multivariada. Procure
usar lo mas que pueda funciones de NumPy\n",
"\n",
"**Ayuda**: Puede usar un ciclo for y la funcion zip. El resto deben ser
funciones de numpy."
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "79bc3e9dc8860cc2eb79ccbb1661b8d7",
"grade": false,
"grade_id": "generate_gaussian_points",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
},
"id": "UlmfEAzNpu4f"
},
"source": [
"def generate_gaussian_points(means, covs,t, points_by_group=3):\n",
" for i , j in zip(means, covs):\n",
" \n",
" arreglo=np.random.multivariate_normal(i, np.diagflat(j), t)\n",
" \n",
" return arreglo\n",
"#np.diagflat toma las diagonales y forma una matriz\n",
"\n",
" \"\"\"\n",
" This function generate a set of ngroups of data following a
multivariate\n",
" gaussian distribution.\n",
" \n",
" Parameters\n",
" ----------\n",
" means: list\n",
" value of means in x and y for each group. It must be a 2-
dimensional \n",
" array where the length indicate the number of clusters.\n",
" covs: list\n",
" diagonal values of covariance matrix\n",
" point_by_groups: int\n",
" number of points by group\n",
" Returns\n",
" ----------\n",
" points: numpy.array\n",
" 2-dimensional array with the set of points. It must be a \n",
" \"\"\"\n",
" \n",
" points = np.empty((0,2)) # What does it do this function?\n",
" \n",
" # Seed to generate the same random point. DO NOT CHANGE\n",
" np.random.seed(100)\n",
" \n",
" #===== START CODE HERE =====\n",
" \n",
" #raise NotImplementedError()\n",
" #===== END CODE HERE ====="
],
"execution_count": 126,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "xx0HvHHSpu4h",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "dadaa8c1-e4d4-4796-e511-cf4540c52a37"
},
"source": [
"test = generate_gaussian_points(means, covs_diag,6,points_by_group=3)\n",
"print(test)\n"
],
"execution_count": 127,
"outputs": [
{
"output_type": "stream",
"text": [
"[[43.23939034 45.75445384]\n",
" [44.11866835 42.1786968 ]\n",
" [46.65247881 44.18296509]\n",
" [43.70090596 45.01192077]\n",
" [46.00678411 45.6281925 ]\n",
" [45.40955983 44.83644783]]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "IjuoPmNopu4h"
},
"source": [
"Resultado esperado:\n",
"\n",
"```\n",
" [[34.46675573, 21.08365058],\n",
" [43.64621936, 19.20172716],\n",
" [31.45443052, 43.92528315],\n",
" [26.97346042, 40.88471868],\n",
" [44.57627444, 45.57020056],\n",
" [43.97582052, 45.97305514]]\n",
"```"
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "0fa8641cf6bd623923de237acf5a118d",
"grade": true,
"grade_id": "tests_generate_gaussian_points",
"locked": true,
"points": 100,
"schema_version": 3,
"solution": false,
"task": false
},
"id": "fJ3g78R8pu4h"
},
"source": [
"assert test.ndim == 2\n",
"assert test.shape == (6,2)"
],
"execution_count": 128,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "WECKZM-3pu4i"
},
"source": [
"Se generan los puntos con los cuales se van a trabajar:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "4yfkKgSqpu4i"
},
"source": [
"X = generate_gaussian_points(means, covs_diag,300,points_by_group=100)\n",
"xp,yp = X.T\n",
"\n"
],
"execution_count": 129,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "b5e84f67f1aa8408e20b5632cb73481e",
"grade": true,
"grade_id": "generate_X_values",
"locked": true,
"points": 100,
"schema_version": 3,
"solution": false,
"task": false
},
"id": "cgpYeXqQpu4j"
},
"source": [
"assert X.shape == (300,2)"
],
"execution_count": 130,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "16UOSQGLpu4j",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 297
},
"outputId": "d3bf34ff-8d39-4c27-f60f-cbf4f51c3b80"
},
"source": [
"plt.plot(xp,yp,'o')\n",
"plt.tight_layout();"
],
"execution_count": 131,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png":
"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
giboqak/rBILCF20MXnGXTv9D+
+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
Ef//
+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
oYIihBDiJf8fyY5abZ0WnzwAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "TLrnQ-J_pu4k"
},
"source": [
"Debe obtener una imagen como la siguiente:"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yAVZwvdVpu4k"
},
"source": [
"![image.png](attachment:image.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "T7FCRxabpu4k"
},
"source": [
"<br>\n",
"Normalice los datos, por columna, usando el Z-score: \n",
"\n",
"$$ Z = \\dfrac{x-\\mu}{\\sigma}$$"
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "aa03f56e0a1f6645cb40dba93901507f",
"grade": false,
"grade_id": "calculate_Xnormal",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
},
"id": "UuMK7TMmpu4l"
},
"source": [
"# Xnormal = ...\n",
"\n",
"#===== START CODE HERE =====\n",
"from scipy.stats import zscore\n",
"Xnormal=zetascore_table=zscore(X,axis=0)\n",
"#raise NotImplementedError()\n",
"#===== END CODE HERE =====\n",
"\n"
],
"execution_count": 132,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "fe2b6e13379c6fba18120f5ddf6d6e0c",
"grade": true,
"grade_id": "test_calculate_Xnormal",
"locked": true,
"points": 100,
"schema_version": 3,
"solution": false,
"task": false
},
"id": "z70-1eoepu4l"
},
"source": [
"assert Xnormal.shape == X.shape"
],
"execution_count": 133,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "0lqOEloDpu4m",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "d9bd4dc2-1429-42ba-ea69-c184579e725d"
},
"source": [
"print(Xnormal[:3])\n"
],
"execution_count": 134,
"outputs": [
{
"output_type": "stream",
"text": [
"[[-1.51827313 -0.87614776]\n",
" [-0.08232505 0.54283939]\n",
" [ 0.0638926 -1.91959548]]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "dF0KHQOWpu4m"
},
"source": [
"Debe obtener algo como esto:\n",
"```\n",
"[[-0.58613537 -1.19752253]\n",
" [ 0.76083326 -1.36051061]\n",
" [ 0.68115342 -1.15054227]]\n",
"```"
]
},
{
"cell_type": "code",
"metadata": {
"id": "RPDnmbdrpu4m",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 297
},
"outputId": "c581c328-0039-4f0d-ccb6-0119ecc6bcfb"
},
"source": [
"plt.plot(Xnormal[:,0],Xnormal[:,1],'o')\n",
"plt.tight_layout();"
],
"execution_count": 135,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png":
"iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEg
AACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwb
G90bGliLm9yZy+WH4yJAAAgAElEQVR4nO2dcYwd13Xev7PLJ2kpu1oZJhpzRZqEa1CxzZgLbS2jLIqIcUzV
iu2N1JhR3QBpUBD+w2hEKExXUVDRqQKxIBy6SAo0BGw0hgWFsilv5FABLYMqUhOg4qV3GZmWGNiRKfnJqJl
KT47Ep/JxefrH7ixnZ+fO3Jm5M3Nn3vcDCHDfvp25M2/e/e4957vniqqCEEII8Y2RuhtACCGExEGBIoQQ4i
UUKEIIIV5CgSKEEOIlFChCCCFesq6Ok77zne/ULVu21HFqQgghnnHmzJl/UNUN0ddrEagtW7Zgbm6ujlMTQ
gjxDBG5EPc6Q3yEEEK8hAJFCCHESyhQhBBCvIQCRQghxEsoUIQQQryEAkUIIcRLKFCEEEK8pJZ1UIT4zOx8
F4dOnMcrvT42jo9h/
+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
pDut41vpz0Q4oLdw4PZm9+rlt+
+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
j7iHKcxjc+
+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
SUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "SDf7_LNlpu4n"
},
"source": [
"Debe obtener una gráfica como la siguiente:\n",
"\n",
"![image.png](attachment:image.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "bCuSTrGNpu4n"
},
"source": [
"## 2. Generacion de los centroides iniciales"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "C6jIJOCOpu4o"
},
"source": [
"Se va a escribir una funcion que genere un conjunto de puntos (una
tripleta) que corresponderan a los centroides iniciales. Para ello, se van a usar
el conjunto de puntos normalizados y se debe determinar el entero por la izquierda
del número mayor obtenido del valor absoluto del conjunto de puntos: \n",
"\n",
"$$ \\{ nmax:\\; nmax = floor( max(|x_i|,|y_i|) ) \\quad i=1,2,...,n \\}$
$\n",
"\n",
"Con este valor, se va a generar un arreglo aleatorio de $(k,2)$ numeros
enteros entre $-nmax$ y $nmax$:"
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "a855cf2f836261615b73529f4f93ae09",
"grade": false,
"grade_id": "generate_initial_centroids",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
},
"id": "baUdK0zbpu4o"
},
"source": [
"import math\n",
"def generate_initial_centroids(X,k):\n",
" max_value=0\n",
"\n",
" for i in range(len(X)):\n",
" if max(abs(X[i][0]),abs(X[i][1])) >= max_value:\n",
" max_value= max(abs(X[i][0]),abs(X[i][1]))\n",
" nmax= math.floor(max_value)\n",
" return np.random.randint(-nmax,nmax, (k,2))\n",
" \n",
"\n",
" \n",
" \"\"\"\n",
" Create a set of k paired points in xy plane\n",
" \n",
" Parameters\n",
" ----------\n",
" X : 2D numpy.array\n",
" Set of point to classify\n",
" k : int\n",
" number of centroids\n",
" \n",
" Returns:\n",
" centroid: 2D-numpy .array\n",
" matrix with the initial centroids\n",
" \"\"\"\n",
" \n",
" # select initial centroids\n",
" np.random.seed(200)\n",
" #===== START CODE HERE =====\n",
" \n",
" #raise NotImplementedError()\n",
" #===== END CODE HERE ====="
],
"execution_count": 136,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "wpjFsZVepu4o",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "c737a388-6e80-435a-ce8b-03f663064094"
},
"source": [
"initial_centroids = generate_initial_centroids(Xnormal,3)\n",
"old_centroids = initial_centroids\n",
"print(initial_centroids)"
],
"execution_count": 137,
"outputs": [
{
"output_type": "stream",
"text": [
"[[ 0 1]\n",
" [-3 2]\n",
" [ 0 0]]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "N9HUSh2lTtaj"
},
"source": [
"Ayuda de: https://stackoverflow.com/questions/5466323/how-could-one-
implement-the-k-means-algorithm"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "GGpVOv6mpu4p"
},
"source": [
"Debe obtener la siguiente respuesta:\n",
"\n",
"```\n",
"[[ 0 -1]\n",
" [-2 -2]\n",
" [ 0 1]]\n",
"```"
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "1220c3e7b4b77f8296dd039cff5b59c3",
"grade": true,
"grade_id": "test_generate_initial_centroids",
"locked": true,
"points": 100,
"schema_version": 3,
"solution": false,
"task": false
},
"id": "A8PQ_WMxpu4p"
},
"source": [
"assert isinstance(initial_centroids,np.ndarray)\n",
"assert initial_centroids.shape == (3,2)"
],
"execution_count": 138,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "CxI74uqvpu4q"
},
"source": [
"## 3. Cálculo de la distancia de los puntos a cada centroide"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "NfkJBFYcpu4q"
},
"source": [
"Se va a escribir una funcion que, dado el conjunto de puntos normalizados
`Xnormal` y los centroides, determine la distancia de todos los puntos a cada
centroide. Si `Xnormal` es un 2D-array de $(n,2)$, y el de los centroides es un 2D-
array de (k,2), esta funcion debe devolver un arreglo de $(n,k)$, donde $k$ es el
número de centroides. La funcion debe calcular la distancia euclidiana."
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "f7a7c346999add7e9f114a8e8938f246",
"grade": false,
"grade_id": "calculate_distance",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
},
"id": "QtueLALdpu4q"
},
"source": [
"def calculate_distance(X,Xref):\n",
" distancia=[]\n",
" for i in range(len(X)):\n",
" k=[]\n",
" for j in range(len(Xref)):\n",
" k.append(np.linalg.norm(X[i]-Xref[j])) #norma euclidiana\n",
" distancia.append(k)\n",
" return np.reshape(distancia,((len(X)),len(Xref)))\n",
" \n",
" \"\"\"\n",
" Calculate the euclidean distance between the array X and the array
Xref. It is\n",
" important to note that X and Xref do not need to have the same number
of rows.\n",
" If X is a (m,n)-array and Xref is a (k,n)-array, the function must
return an \n",
" array of dim (m,k).\n",
" \n",
" Parameters\n",
" ----------\n",
" \n",
" X : 2D-numpy.array\n",
" Set of paired-points\n",
" Xref : 2D-numpy.array\n",
" set of k-points (x,y) that represent the centroids\n",
" \n",
" Returns\n",
" ----------\n",
" \n",
" dist : 2D-numpy.array\n",
" 2-dimensional array with the distance of \n",
" \n",
" \"\"\"\n",
" \n",
" #===== START CODE HERE =====\n",
" \n",
" # raise NotImplementedError()\n",
" #===== END CODE HERE ====="
],
"execution_count": 139,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "j0EnGy5Zpu4r",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "f38b5889-cbb1-4d0d-9a97-8b33b752bb0c"
},
"source": [
"dist = calculate_distance(Xnormal,initial_centroids)\n",
"print(dist[:3])\n"
],
"execution_count": 140,
"outputs": [
{
"output_type": "stream",
"text": [
"[[2.41352102 3.23538877 1.75293702]\n",
" [0.46451398 3.26131019 0.54904647]\n",
" [2.92029451 4.97500417 1.9206585 ]]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "XUgOqxHTpu4r"
},
"source": [
"Debe obtener un resultado como el siguiente:\n",
"\n",
"```\n",
"[[0.61852229 1.62572546 2.27434824]\n",
" [0.84192348 2.83392783 2.48009629]\n",
" [0.69759082 2.81250104 2.25583733]]\n",
"```"
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "44ef43bed27bf5dab0a484601262a01a",
"grade": true,
"grade_id": "test_calculate_distance",
"locked": true,
"points": 100,
"schema_version": 3,
"solution": false,
"task": false
},
"id": "fROvoOxcpu4r"
},
"source": [
"assert dist.shape == (300,3)"
],
"execution_count": 141,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "CiTTULMPpu4s"
},
"source": [
"Graficando los puntos y los centroides:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "MZEx8NQ-pu4s",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"outputId": "7d6ad002-bbdc-4f39-8123-6906a7f112f1"
},
"source": [
"plt.scatter(*Xnormal.T,c='k',alpha=0.3)\n",

"plt.scatter(*initial_centroids.T,s=10**2,c=\"r\",marker=\"o\",edgecolor=\"r\")"
],
"execution_count": 142,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7fe2b3a70e90>"
]
},
"metadata": {},
"execution_count": 142
},
{
"output_type": "display_data",
"data": {
"image/png":
"iVBORw0KGgoAAAANSUhEUgAAAXIAAAD4CAYAAADxeG0DAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEg
AACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwb
G90bGliLm9yZy+WH4yJAAAgAElEQVR4nO29fXBb533n+30AEgBBigRIgOALaIqWQckiRcUyIdqiba0i15ac
3MjKqNnuNondzkjTyTZ322mm22x6213feDbZTTd369w7UynN2NlmmkmVsMokomxLsRVJkUjojaIom4IkmhL
ENxAE+AaAIIHn/kGdYwDEOw4IHPL3mdHYBA7Oec7b7/k9v1fGOQdBEAQhXxT5HgBBEASRHSTICYIgZA4Jco
IgCJlDgpwgCELmkCAnCIKQOUX5OKjBYOAbN27Mx6EJgiBky5UrVyY558boz/MiyDdu3IjLly/n49AEQRCyh
TE2HOtzMq0QBEHIHBLkBEEQMocEOUEQhMwhQU4QBCFzSJATBEHInLxErRBEtjgcDthsNjidThiNRlitVpjN
5nwPiyDyAmnkhOxwOBw4ceIEvF4vTCYTvF4vTpw4AYfDke+hEUReIEFOyA6bzQadTofy8nIoFAqUl5dDp9P
BZrPle2gEkRdIkBOyw+l0oqysLOKzsrIyOJ3OPI2IIPILCXJCdhiNRszNzUV8Njc3B6NxReYyQawLSJATss
NqtcLj8WBmZgahUAgzMzPweDywWq35HhpB5AUS5ITsMJvNOHDgALRaLcbHx6HVanHgwAGKWiHWLRR+SMgSs
9lMgpsgHkEaOUEQhMwhQU4QBCFzSJATBEHIHBLkBEEQMocEOUEQhMwhQU4QBCFzSJATBEHIHBLkBEEQMocE
OUEQhMzJWpAzxjSMsV7GWB9jbIAx9l+lGBhBEASRGlKk6C8A+CznfI4xVgzgPGOsm3N+SYJ9EwRBEEnIWpB
zzjkAoaZo8aN/PNv9EgRBEKkhiY2cMaZkjF0HMAHgfc55T4xtjjDGLjPGLlMDAIIgCOmQRJBzzoOc888AMA
PYyRhrjbHNUc55O+e8nRoAEARBSIekUSuccw+ADwDsk3K/BEEQRHykiFoxMsZ0j/6/BMDvAfg42/0SBEEQq
SFF1EotgHcYY0osTww/45z/SoL9EgRBECkgRdTKDQBPSTAWgiAIIgMos5MgCELmkCAnCIKQOSTICYIgZA4J
coIgCJlDgpwgCELmkCAnCIKQOSTICYIgZA4JcoIgCJkjRWYnsUZxOByw2WxwOp0wGo2wWq0wm835HhZBEFG
QRk7ExOFw4MSJE/B6vTCZTPB6vThx4gQcDke+h0YQRBQkyImY2Gw26HQ6lJeXQ6FQoLy8HDqdDjabLd9DIw
giChLkREycTifKysoiPisrKwM1BSGIwoNs5ERMjEYj5ubmUF5eLn42NzcHKZqCkO2dIKSFNHIiJlarFR6PB
zMzMwiFQpiZmYHH44HVas1qv2R7JwjpIUFOxMRsNuPAgQPQarUYHx+HVqvFgQMHstacyfZOENJDphUiLmaz
WXKTh9PphMlkivisrKwM4+Pjkh6HINYTJMiJVSWXtndi/bLe/S5kWiFWlVzZ3on1C/ldSJATq0yubO/E+oX
8LmRaIfJALmzvxPqF/C6kkRMEIXMEv0s4683vIk9Bfvcu8LWvAeXlgEKx/N+vfW35c4Ig1hXkd5GjIO/uBt
ragB/
+EJidBThf/u8Pf7j8eXd3vkdIEMQqQn4XCWzkjLEGAD8GYALAARzlnP+vbPcbk7t3gUOHAK935XeLi8v/Dh
0CbtwANm3KyRCkYL2HShGE1Kx3v4sUGvkSgL/gnG8F8AyA/8AY2yrBflfyd3+3LKwTsbgIfP/7OTm8FFCoF
EHIA4fDga6uLhw9ehRdXV0F/Y5mLcg556Oc86uP/n8WwEcA6rPdb0z+6Z9SE+T/
+3/n5PBSQKFSBFH4yE3hkjT8kDG2EcBTAHpifHcEwBEAeOyxxzI7QJRnOuvt8gCFSkUSz8xE5icin4QrXAD
E/9pstoJ8DiUT5IyxMgA/B/BnnPOZ6O8550cBHAWA9vZ2ntFBysqWHZupbFegrOcU9WjhbDab0dvbC51OB5
PJhLm5OZw4cQI7d+6M+Xm4AyuRoJdyEqAJZX0iN4VLkqgVxlgxloX4Tzjnv5BinzH58peB4uLE2xQXA1/5S
s6GkC3rNVQq1lL12LFjCAaDK8xMx48fT2h+SrTslXJJLLflNSEdcotNz1qQM8YYgH8E8BHn/H9mP6QE/MVf
pCbI//zPczqMbFgPoVKxnESxfANLS0sYGRmJ+G1ZWRkePnyYsDtRIj+DlD4I8mesX+SmcElhWukE8BUA/Yy
x648+
+8+c85MS7DuSTZuA48eXQwyFcEOB4uLlf8ePF3ToIbC2Q6UELTbaLDI3N4ctW7ZEbGsymTAxMRHx2dzcHOr
r6xOan5Ite6VaEstteU1Ih6Bw2Ww2jI+Pw2g0Yvfu3QX73mYtyDnn5wEwCcaSGvv3L8eJf//7y9Epc3PLNv
GvfGVZEy9wIb7Wieckun///grhXFtbC5fLhZmZGZSVlWFubg4ejweHDh1Cb28vAER8vnv3bgDJ/QxS+SDWs
z+DkJfCJc+iWZs2AT/4wfI/oqCIp8Xq9Xp4PB7x77m5OSiVShw+fBgOh2OF1lNbWxtXG7JarThx4kTEvsIF
faLv0iHZcVYDcrYSqcA4zyyAJBva29v55cuXV/24RO7p6uqC1+uN0GJnZmag1WphtVpXJZpkrUSthJupwie
SteZTIVKHMXaFc96+4nMS5ISUrBXhUwjx7YkmxYMHD+bkmERhE0+Qy69oFlHQrIWonHhhhzabbVXDEZ1OZ8
LoHYIQkKeNnCho5OQkikU8h+3x48fR1ta2atl+5GwlUoU0coKIIp4mnCy+XWrkFstM5A/SyFcZikIofOJpw
sni26VGbrHMRP4gQb6KxEuWkZsNea1jtVrx9ttvY3JyEoFAACqVCgaDIWl8ey6Qu5mKWB3ItLKKUMq3fFiu
PBH5d21trewducTahDTyVYRSvuWBzWbDxo0b0dbWJn42MzMDm82GgwcPkuAmCg7SyFcRuVVUW69Q2B8hN0i
QryIUhSAPaMIl5AaZVlYRikKQB4VQY6VQoCgreUAp+kTWL2uufp/vOifrXYCtlXILuSIfzwjVWiFiku3Lmq
vfh7d7Ww9CJFYbPIfDgcHBQbjdblRWVqK5uVlyYZFIGFGtl/jka5KLJ8jJtFIA5FP7y7bJbK5+v9rp8PkkO
r9geHgYP/3pT7F161aMjIxAqVTC4/GgpKQEIyMjkgmLZHkN2URZrfUVTaE1ZyZBnmcSvUwAcv4yZBsSmcnv
w1/ya9euob29PULrE9Lhd+3alfG4khE+BsYYGGMIhUJ5ETrRQmFsbAxVVVW4ceMGNm7cCK1WC6/Xi7GxMbS
0tEgmLJIJo0xrvayHxLdCCyWmqJU8Ey9J6NSpU6tSaS/bCI10fx9dWVCtVuPcuXOYnJyM+L2QDp/puBIhjO
HBgwe4fv06fvSjH+EnP/kJZmZmclrRMFYvU2BluOP09DR0Oh1cLhdKSkoAABqNBtPT05KGQSYLs8w0yirdx
Ld416WQKbTIJhLkeSbey3T58uVVyQLNNiQy3d9Hv+Tbt28H5xx9fX0Rvz906FDOQjVtNhuCwSBu3boFh8OB
6upqlJSU4P3330cgEJD8OjscDhw7dgx/
+Zd/ibNnz0KpVEZMGNFCoaKiAh6PB1VVVZiYmMDHH3+M3t5ejI2NYXh4GEajURLhl0wYZVqSOPyZnpycxMW
LF3HhwgW8+
+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
+AYcDgd8Ph9cLhc+
+9nPore3Fy6XC0qlEuXl5XC5XPijP/ojAADnHBUVFdBoNNiwYQMCgQBmZ2fh9/vFeioqlQqffPIJqqqqoNP
pYDabsWHDBiwsLGBgYADj4+OYmprCnj170NTUJI43vGhUrBXg1atXRZMTADHG/urVq3HPGYjdBejb3/626N
uIV3I2U6K1b5fLRe+zxMhCkK+VoH2pyffyNDwGW6FQoKenB9evX8fnPvc51NXVrXAApxrts3nzZni9Xmzev
Bk9PT0oKiqKKP0abqapr6+Hx+OBx+PBpUuX0NLSAqVSGdPxHMtEoVQq8fWvf31FrZLm5mZ89rOfFR2pg4OD
YvTMoUOHRNs15xyvvPIKTp8+DbfbjYqKClELHxsbQ1NTE7761a/i3Llz4JyDc47S0lJMTEyAcw61Wi2amS5
cuAAAYgx6Mgc65xyMsYjPGGMIr5+UagXCl19+Oa4dPhtimdPOnDmDF198cUXD7fX+PmeDLEwrhdbotBAohO
VpeO9LjUYDq9UKtVotjivavhqrtdjQ0BBcLldEezJhO5VKBavVKkZ8tLa2RphpgsEgxsbGxDZxbrcbDx8+j
GvXTVQLPdb17O3thdVqxXe+8x10dXXhF7/4Bb773e9G1BA3Go2oq6vDH/zBH8BqtcJkMqGsrAx1dXVoampC
eXk5qqursXv3buj1eoyPj4tavMlkglarxcLCAjZt2oTOzk5xdZBKnfb29na4XC54vV6EQiF4vV64XC60t39
aUynV+u+56kEZy5xmMpnQ398fsd16f5+zRRYaOYX7rdS+Jycn8748De99KSzv29vbMTo6CoPBELNcaXi0D2
MMjDGUlJSI91VwsAnbzc/PY/fu3StWG0LYX1lZGRoaGuDz+TA3Nwe9Xp/w/OM5qTM134XXG+/o6BCfzdnZ2
RW9Sffs2YOamhps2LABV69eRXl5udhIobW1FZWVldBoNDhy5EgKVx/Yt28fxsfH4XQ64Xa7oVKp0NzcjH37
9qV0ztHb5CISK9Zqetu2bThz5kzGJXeJlchCkK/3cL9Yy9MPPvgAe/fuzenyNJnpxmg0oqenB7W1teJnfr8
fJpMpbmeXcKHS1dUFn8+HgYEBTE9Po6KiAjU1NbDZbEkb/brdbiiVygj7sM/ng9vtzuicogVOqinx8Z5Nm8
0W04y0efNmWK1WSRopmM1mvPbaa5KZ13IRiRXLnKbRaLBnzx5xlbDe3udcIAtBDqzvcL9Y2mJ1dTX6+/uxd
+9ecTspl6ephAqG977U6/Xw+/2Yn59HY2NjSuO4ffs27t27h7KyMuh0Ovj9fgwMDMDn8yX9bWVlpZjOrtFo
4Pf7EQwGUVlZmdE5hQucWCnx77zzDqqrq8E5j1k/JtazGW8VaTZL10ih0N+LeKvp9ZI5ulrIwka+3okVQrZ
t2zaMj49LbtMUSLVP5xNPPIH+/n5cvHgRfr8fW7duhVKpTGkcU1NTolatUCig1WqhVCoxNTWV9LfNzc1oaW
mBWq2Gx+OBWq1GS0sLmpubMzqncBtxdEp8IBDA7du3MTAwkLI/IpltOpm9vqurK8JvIDeEczh58qTYizPfv
WfXMrLRyNcz8Zane/fuzdnyNFmkUHjUyOuvv47+/n5MTEygpKQE+/fvT2kcer1e1KpLSkrg8/nEOiTJsFqt
GBkZQUtLS4Sml2gCSXRO4SaS6JT4ixcvipmdwgQApNehPtXv10Ltk1jnQFp4bqPMSJDLgHwsT5OFCoZrt+X
l5di7d+
+KuPFkbN68GVqtFmNjY2LoXmNjIxoaGpL+NhO/SSox1cLvw0PxpqenoVKpUFFRIf5OmACkfjnXQs6EFIXT1
lrWZ64naDKtyIBUQ8ikJFk4WjoZlYmOoVQq0dLSgpdeekmMAU/VPGQ2m2G1WmE0GuF0OkVtOtNzirddcXEx
3G43LBYLgGVH6AcffIBz587hjTfewIMHD2AymfDgwQO88cYbYrhiJiYRKa5rvhDMKT//
+c/R39+PyclJ8btUz6EQwmpzQaqmykwhjVwmrJZTK1wbEmyb8/PzKzReKQryJ9KqU9HK0tVyUtXizWYzdu7
ciePHj+Phw4diHRaVSoWJiQn89re/BWMM5eXl4Jzj1q1bWFpawu3bt1FUVCRGpMTqLZoMuTY6CL8XDQ0NmJ
6eFoumJcq2jWYtrEhikeukRhLkhEg6tk2pYvuzsRMne+njTQaxjhe+ndlsRm9vL9ra2rBr1y7Mzc3hk08+g
dfrx
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
+7vgEAg8SAXF4Hvfx/4wQ+SjjuZYIk2Nwg2/48+
+kiMDBLCLsOrTuYzsiP6+EVFRfD7/dDr9WJv0uhKlNERUXa7XVzhZfL85PsaFBosvC1URjtg7FkA/4Vz/vK
jv78JAJzz/xbvN+3t7fzy5ctZHVfudHV1rWitJdQqWQ2tKhXyMUaHw7GiM7zBYMDrr78OACuaa2i12ojxdX
V1obq6Gp2dnQCWhcalS5ewuLiIAwcOJK9TU14OzM4mH2h5OTA9HTFuoe3d6OgoxsfHUVRUhMOHD4t2YofDg
e7ubly9ehWcczz+
+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
f/
+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
Vn88z//M9544w3YbLak9WTCv799+zZ+
+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
7HcDnAezlBezESOOeyJGHABrC/jY/
+ozIM4/syT8H8BPO+S/yPR4p4Jx7GGMfANgHIG2HtGw08kQwxixhfx4A8HG+xpItjLF9AP4SwBc45958j2c
dYwNgYYw1McZUAP4AwC/zPKZ1zyMH4T8C+Ihz/j/zPZ5sYIwZhag0xlgJlh3rGcmutRK18nMAm7EcJTEM4E
8457LUnhhjdwCoAbgefXRJjhE4jLGDAN4CYATgAXCdc/5yfkeVHoyxVwD8PwCUAH7EOX8zz0PKGMbYPwP4N
1gulzoO4G855/+Y10FlAGPsOQDnAPRj+X0HgP/MOT+Zv1FlBmOsDcA7WH6+FAB+xjl/I6N9rQVBThAEsZ5Z
E6YVgiCI9QwJcoIgCJlDgpwgCELmkCAnCIKQOSTICYIgZA4JcoIgCJlDgpwgCELm/P8cBeFtc79fwgAAAAB
JRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qrxRTF7mpu4t"
},
"source": [
"Debe obtener una gráfica como la siguiente:\n",
"\n",
"![image.png](attachment:image.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7hFw_BTGpu4t"
},
"source": [
"## 4. Asignacion de etiquetas acorde al centroide mas cercano"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "C4JlI4D0pu4t"
},
"source": [
"Una vez determinada la distancia de cada punto respecto a los centroides,
se debe determinar a cual cluster pertenece. La aiguiente función debe determinar a
que cluster pertenece cada punto, numerado de $0$ a $k-1$ y regresar un arreglo
unidimensional con estas etiquetas, de tamaño igual al total de puntos."
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "cea25318e46a5ba07a67799cd2902666",
"grade": false,
"grade_id": "set_label",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
},
"id": "uC_0U6iUpu4u"
},
"source": [
"def set_label(dist_matrix):\n",
" clust= []\n",
" for i in range(len(dist_matrix)):\n",
" np_array = np.array(dist_matrix[i])\n",
" a=np.where(max(np_array) == np_array)\n",
" clust.append(a)\n",
"\n",
"\n",
" # p= dist_matrix[i].index(max(dist_matrix[i]))\n",
" #k= dist_matrix[i].index(p)\n",
" # clust.append(k)\n",
" s= np.vstack(clust)\n",
" return np.concatenate(s)\n",
" \"\"\"\n",
" Set a label to each point, determined by the distance between the
point and the centroid\n",
" \n",
" Parameters\n",
" ----------\n",
" \n",
" dist_matrix : 2D-np.array\n",
" An (n,k) array with the distance of each point to the k
centroids\n",
" \n",
" Returns\n",
" ----------\n",
" labels: 1D-np.array\n",
" Array of size n with the labels assigned to each point.\n",
" \"\"\"\n",
" #===== START CODE HERE =====\n",
" \n",
" #raise NotImplementedError()\n",
" #===== END CODE HERE ====="
],
"execution_count": 143,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "wRUH2LeEhjRZ"
},
"source": [
" Ayuda de: https://interactivechaos.com/es/manual/tutorial-de-
numpy/union-de-arrays"
]
},
{
"cell_type": "code",
"metadata": {
"id": "b-OcoWg9pu4u",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "a9f9f846-2956-4ca0-fceb-c2700a2bcfa5"
},
"source": [
"cluster = set_label(dist)\n",
"print(cluster[::10])"
],
"execution_count": 144,
"outputs": [
{
"output_type": "stream",
"text": [
"[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "fl5GI2SFpu4v",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "db41d18f-84fd-4e96-b25f-f28c16386876"
},
"source": [
"cluster.size"
],
"execution_count": 145,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"300"
]
},
"metadata": {},
"execution_count": 145
}
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "cfc99414027245624c770805b53c96cc",
"grade": true,
"grade_id": "test_set_label",
"locked": true,
"points": 100,
"schema_version": 3,
"solution": false,
"task": false
},
"id": "xDlKVKt2pu4v"
},
"source": [
"assert cluster.size == 300\n",
"assert cluster.shape == (300,)"
],
"execution_count": 146,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "lmWHMrPepu4v"
},
"source": [
"Debe obtener algo como esto:\n",
"\n",
"```\n",
"[0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7VNcQBqppu4w"
},
"source": [
"Graficando la configuración inicial de los puntos:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "rJSRLRdnpu4w",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"outputId": "e8538b6a-34bc-4d24-8693-5085e5dda0e4"
},
"source": [
"plt.scatter(*Xnormal.T,c=cluster,alpha=0.5)\n",

"plt.scatter(*initial_centroids.T,s=16**2,c=range(3),marker=\"s\",edgecolor=\"r\")\
n",

"plt.scatter(*initial_centroids.T,s=16**2,c=\"r\",marker=\"x\",edgecolor=\"r\")"
],
"execution_count": 147,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7fe2b352e9d0>"
]
},
"metadata": {},
"execution_count": 147
},
{
"output_type": "display_data",
"data": {
"image/png":
"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
8q/c4UwW3psqaunjlSyFojbh9QHPlMl8+
+jp7Wlo5kUjQHokihEBKyfHEGC2XIryjZy3JXI4vHz1MMpdDCIGmKHxg42Y2NzbxtaOvc2oiiaYo2NLhh+f
P8slde+iM3fiG8lQhzw/OneXY+Bi6qvJAewdv715TvZl43J3U+gM40sGRcpaYl2yb1khkCUe2MIviIxdC6L
gi/g0p5XcW45wLctXGZvf//G835jNfQoQwIPgkyEwlzDLi/jEeBLVnqYe3KEjpIK0LyNKrSPMUUppMFfJ88
fBByrZDayRKSzjC62OjHB4bodbvrx4bMgwsx+Gfz5+jMRSqzoCFEDQGw7w0OIAjJV8+eph0sVQ9V8Tw8dcn
jvF033l6kwnaIlGawxHaIjFUIfhm73HkDX4uCqbJ5w6+xonEOE2hMDU+P8/29/GN40dv+FweK4t4MMjulja
GMylKloXtOIznskR9PnY0t177BEvAYrhWBPCXwCkp5f+49SG9CQu4U67bZ74MUPT1yMjvIc3TIIsIrRvU9r
ti2S5lCZn7ClgX3nhQbeRI8mewpFMNcQghqPH5OF0ukymXZ4U+BFC0TNSrUvZVRcG0bYbSKZK5XHUWD25Kt
kDwo74LxHz+Wdcy5vMzks0wWSjckK+4N5lgplikrfI6KtAeiXFqIsFoNjPr9T3uPt6/cTP1wSDPD1yiZFls
bWziHWvWEl6GG52wOKGVB4GPAceFEEcqj/0nKeUPFuHcb/BmFsMVJuZCiSF8+5Z6GIuOLL0I1jlQ2t+49s4
4M5lX0cSqWc+t8QcQCIrWG0LuSIktJfd3dDKQStESfmMZm8xn2dvaTtm2531fVUVQtt3jr0YAmnJjn4XxbB
btqpuJEAJFKMwUi56Q3+Xoqsrbutfw1tXuSnm5T7QWw7XyIu535fZxPT7xhcTc485RPuD29LzyvRH19IT6+
elYC1IGq18IVRG0R6NkyyZSZlEUQcE02dfWwTt61vAXhw4wlE6hKQqW49AQCvH27jUYqoomBCXLqsaqpZSU
bIu3dffwdH8fMZ8PVXFFOJHP0VMXv+EqeK2RCJYze3NaSonjOMTvoJfYdhwG0ynKtk1bJLosrW93M8tdwC+
zInZtrtsnPo+Ye9xJ5n9fNtQ59EzXcmF6hqjPj+U45MplPr59Jz11cY6MjVK2bbY2NbM+Xo8iBJ+5fz8nkw
nGclmaQ2E2NTRWhfv9GzfzN73HUSsz5KJtsru5lXf0rEUIwU/6L3J5Xt4SDvOhTVtu+DfZ1NBIYzjMSCZNf
TCE7TgkCzl2t7TRFA7f7AW6IRK5LF8+cphkPo8AFKHwvo2buK/t3qjo53H9iKXYuNmzZ488ePDgtZ8oJVRm
Vjdb/RAAx1m2YZa7Caf4LBR/cFVoZQz0bZjGBzg8OsLR8TECusa+tg7Wx+tvesYzkklzZGyMgmmyqbGRdXX
x6ix8qpBnNJMhaBisitXMsZFdL4OpGZ7u6+P89CR+TWd/RwcPd3ahCEHJtglo2m2bsTlS8t9ffpF0sUS8Et
sv2RYTuTyfuX8/bVEvtHMvIoQ4JKXcM+fxZS3kePXIVxJSlpG5r4N15o0H1RZE6FcQysoRnkypxLdPHuf0x
AQAEZ+PD27czLr6Bp6/dJFnLvZRsCziwSBPrNvApobGRR/DUDrF//fqy3Ni8WPZDA91ruLd6zYs+mt6LH8W
EvJlH1pRisVb6hB0s7MxjxtHCANCnwD7EjgTIGKgrUaIZf8xqyKl5KnjR7k4M13NJs2Vy3zp6Ovsa2vnxYF
LNIXC1AWCZMol/ur1Q/y7+
+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
fO/MKUKGr3p9xnJZHu/qZqpQ4L++
+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
pKnO5ulbRsnAcie1IpotFmkNhbCEZzWZoj0Q5
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
KY9g4M/8vz/
+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
nl1cIF0u0R72SkWKJNERlvnu2DB7mluquwB
VkmgOhnh6Ypz/cLSbsKqSqziwg9cP0G2LfS2tNAZD/Odnn8a0HU9wDKrNM7+i8IEBbzpk7YJ0MbHoNTnXSA
zU+f3M5bI8MzXBpTWmz67r1bC/dPEcEU3jQGtbTVOtZJo8Pz3Jqfl5XpyeoisapSUURhQEZrIZVEkio+vsb
W7h0lICBIhqGtsa4nx87z4Ot3fgkxXOJRY5vTBfE8h120KT5OpzpmMjVUbmLyYSJItFXFxs16VgGPSsMcsA
731mclks12VXU/M9kRi+GVZKRf7y7CkUUcJf0Vkpmxan5+crzXCvD6FbFpeWEkxm0sQDQfY0t7wqi8pbEZu
B/HXCsdlZJjNpOtc0eXKGzt9fusgfPvzIK9Jo/vD2nfTG6nlpdXS9tY19LS0bCKteQ9kyOTY7S2soUn0vVZ
IIKxrPTU2sC+TX43qn85thKpPGJ9WWbCRRxLDtdX+rShLLpSKu6/Lxvfv5i1MnyOY8YwXBhbf1bKE1FOYvz
57mYEs7OVOnZFoVv0gbe7V5ucG5lSrTixthIp3CcR1GUiukSyXSehnLttEdh8+eOcnTE2P8xsH7aAwEMWyb
z5w6wWQmTYM/gIPLpeUlypbFYGMTjYEgoijiOC7xQJBHunuYzWaRRJE/fvwdNYM9R7t6OD0/R7JUJKb5SJV
LLBULfGzH7irtb39LK1+
+eJ4ryzlypk5YUylXBnGmMhliPn+Nbopu2wQV5VWVU1iLC4uLWI5LUyhASPWCuF9RyBk6qXKJgmGwI97Enx
1/mdlcFlWSsRyb748O85uHDt+2XswmbozNQP464UJisUajGSCsaszlsqyUSq9IyU0SRQ61tXOorZ3ZbJavX
73MN65eQZFEjnR28zNbtq7jAuuWjeu66/7ZVUkiW9Y3fB/HdXlpZoofjY+T0ctsq2/gvf0DVb2OG6E1FOZk
xVJt7bF8ssx0JoPtekbFqiST1XXawmFUSaI3Vse/f/hRhpLLGLZNWzhCTtf56pVLLOTzbI830iRcC2Az2Qx
DyeUN3cktx/GMJspFGgJ+1AqDxLDtKp3yfGIRnySjWxZLpSKqKBLzeZS4gmnylUsX+ReHDnNleYmpNYvw1v
oGLiYWmc5m6Y7F8MsKbeEwumWzUMjhutAQDPIre/avm85sDYf57fse4KtXLvKDsVEMy6YtEuEfr17i9MIc7
eEoO5uaaA9HODU/R1BVyOoGiiRyoLWNmUyaiXS6SsMzbZtEIc8HBgbvucHvjVC0TMSKDPOupmZOzc+R03WK
lslCPsc7t/STKpeYzeVq2CnJYpF/vHKZ3zp0+C0rP3uvsBnIXycEVYX5XG1G6lTs0+7U4SRVKvH/nXgZQRB
oC4exHKcinarzC7v21PxtWNOIBwI1MrUAab3MO9o3Ns390fgo3xoeojEQpDUUZiqT4U+Pv8TvPnBknUHuWu
xvbePpiTEShQLxQADTtjm9MA/AXD7LTC6LT5bpi9URUlV+effe6j92UFXZ39pGVi/zxKkTLORyrJSKjKVS5
A2D/S2tVeVA8Lbv12Mul+VzZ06RKpVIl8t8Z2SY/voG6vzeJO0HB3dwKZFAQEARJTK2jk+SMR1viEYQBEKK
wlhqhayuM53JoKwZI+8IR8gbOkPJJGOpFcKaxkMdXXx0xy6WS0WPW76mUXk9OiIRFFFiZ2MTzcEQwytJhpa
XubiUYE9TMyfmZuirq2egIY4qS2iSTGMwiCbJlAMh+n0+8qbBSrmELIq8p7+foxWvzNcCW+sb+P7YKK7rEl
Y1jnR2kyjkWS4W+f0Hj7KtoYH/
+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
BxhdSZLRy1V3eoCYz8dMNs
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\n"
,
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "AoV-XwyBpu4w"
},
"source": [
"Debe obtener un gráfico como el siguiente:\n",
"\n",
"![image.png](attachment:image.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "eOLUUuyHpu4w"
},
"source": [
"### 5. Determinacion de los nuevos centroides\n",
"\n",
"Una vez determinada las etiquetas, se determinan los nuevos centroides."
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "b51c62b0cac035264f669704ead03d2a",
"grade": false,
"grade_id": "set_new_centroid",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
},
"id": "A0sXsM_epu4w"
},
"source": [
"def set_new_centroid(X,labels,k):\n",
" \"\"\"\n",
" Determine the new centroids\n",
" \n",
" Parameters\n",
" ----------\n",
" \n",
" X : 2D-numpy.array\n",
" Set of n paired-points\n",
" labels : numpy.array\n",
" Array with the cluester label for each point\n",
" k : int\n",
" number of clusters or centroids\n",
" \n",
" Returns\n",
" ----------\n",
" centroid: 2D-numpy.array\n",
" An array of size (k,2) that contain the new centroids.\n",
" \"\"\"\n",
" \n",
" #===== START CODE HERE =====\n",
" \n",
" \n",
" \n",
" col_num = X.shape[1]\n",
" sum_ = np.zeros([k, col_num])\n",
" for i in range(k):\n",
" index_k = np.where(labels == i)[0]\n",
" sum_[i] = np.sum(X[index_k], axis = 0) /(len(index_k))\n",
" return sum_\n",
" #===== END CODE HERE ====="
],
"execution_count": 148,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "lS0tk-THpu4x",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "fe729d52-5b5e-492a-c825-a6e41903ca47"
},
"source": [
"new_centroids = set_new_centroid(Xnormal, cluster, 3)\n",
"print(new_centroids)"
],
"execution_count": 149,
"outputs": [
{
"output_type": "stream",
"text": [
"[[-2.23804535 0.12451177]\n",
" [ 0.08735628 -0.07054917]\n",
" [-1.70898378 1.66066991]]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "3fe78da7cfdb79d5bc153362d5f640d2",
"grade": true,
"grade_id": "test_set_new_centroid",
"locked": true,
"points": 100,
"schema_version": 3,
"solution": false,
"task": false
},
"id": "0_8IGdgFpu4x"
},
"source": [
"assert new_centroids.shape == (3,2)"
],
"execution_count": 150,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "V6SPR9OIpu4x"
},
"source": [
"Debe obtener esto:\n",
"\n",
"```\n",
"[[ 0.10242275 -1.23235949]\n",
" [-1.55291686 -0.65560295]\n",
" [-0.04263622 0.71766344]]\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "8X2DQCxypu4y"
},
"source": [
"Graficando los puntos con los nuevos centroides, debe obtener algo como lo
siguiente:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "b14ubZvOpu4y",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 391
},
"outputId": "895dc31b-ef89-4a80-b09a-ba075c963dbe"
},
"source": [
"plt.figure(figsize=(8,6))\n",
"plt.scatter(*Xnormal.T,c=cluster,alpha=0.5)\n",

"plt.scatter(*new_centroids.T,s=16**2,c=range(3),marker=\"s\",edgecolor=\"r\")\n",

"plt.scatter(*new_centroids.T,s=16**2,c=\"r\",marker=\"x\",edgecolor=\"r\")"
],
"execution_count": 151,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7fe2b36eb5d0>"
]
},
"metadata": {},
"execution_count": 151
},
{
"output_type": "display_data",
"data": {
"image/png":
"iVBORw0KGgoAAAANSUhEUgAAAeIAAAFlCAYAAAA3XOvDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEg
AACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwb
G90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdZ5Bc2XXg+f9976U35S3KAih424226G5204kim5RIWZKiOOJq
ZLiSduRWMxsbs7vajZiIndiZndBqRLY4EsURKUsjUTQtUmyy2WwDj4ZHwZT3Jit95jN3P2QhgULBFFAFZBV
wfhEMNrIyX16gqvK8e+
+55yitNUIIIYSoDKPSAxBCCCEeZhKIhRBCiAqSQCyEEEJUkARiIYQQooIkEAshhBAVJIFYCCGEqCCrEm9aX
1+vu7q6KvHWQgghxH13+PDhKa11w42+VpFA3NXVxaFDhyrx1kIIIcR9p5Tqv9nXZGlaCCGEqCAJxEIIIUQF
SSAWQgghKkgCsRBCCFFBEoiFEEKICpJALIQQQlSQBGIhhBCigiQQCyGEEBUkgViICtLaRWtd6WEIISqoIpW
1hHjYaXccnf8m2OdABdGBZ1CBd6CUr9JDE0LcZxKIhbjPtDeHTn8WtA1GM+BA/mW0l0SFP1Lp4Qkh7jNZmh
biPtPFI6CzYDaAMkD5wVgHxQNoL1Hp4Qkh7jMJxELcb+4oqODCx5QBKJBALMRDRwKxEPeb2Q46v/Ax7YLSY
NRWZkxCiIqRQCzEfab8e8GIgzdW2ifWWfCGwb8fZcQrPTwhxH0mgViI+0wZUVT018C3F3QSUBD6CCr4/koP
TQhRAZI1LUQFKKMWFf4Z4GcqPRQhRIXJjFgIIYSoIAnEQgghRAVJIBZCCCEqSAKxEEIIUUESiIUQQogKkkA
shBBCVJAEYiGEEKKCJBALIYQQFSSBWAghhKggCcRCCCFEBUkgFkIIISpIArEQQghRQRKIhRBCiAqSQCyEEE
JUkARiIYQQooIkEAshhBAVJIFYCCGEqKBlB2KlVFApdUApdVwpdUop9X+sxMCEEEKIh4G1AtcoAO/UWqeVU
j7gNaXUt7TWb67AtYUQQogH2rIDsdZaA+n5P/rm/6eXe10hhBDiYbAie8RKKVMpdQyYAL6jtX5rJa4rhBBC
POhWJBBrrV2t9R6gDXhcKbXj+ucopX5FKXVIKXVocnJyJd5WCCGEWPNWNGtaa50AXgHed4OvvaS13qe13tf
Q0LCSbyuEEEKsWSuRNd2glKqe/
+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
irdEYe
1paOT05wWQ2Uz46BtAWq+Ls1AQjqRStsRgj6RQFx6E1Frur/VXTMO75UalrtcRi/Oy2HXzxxHFOTIyD1sQC
QXpq6vjSybfJOQ7Pdnbd8LWHRoapDgZxtebUxDjjmTQGcGpigsZwmI/v2lv+2RaVJYH4AaeMGlTw2cWPKws
i/wqd/ctS+0QUqCCEfxFl3LhIwWqjtWYomWSukKcxEiknSK2E7uoafnxjD/988cL8uoEm5g/wi7v3rsqs44
Bl8eKmLXzh2FFyjoPPMIkHAmSKCsMwyNg2Wxsa+dTeR+/L+CcyGfxG6eMl6vOj5xPeFFBwHUKWhdaallhsS
dfLOzZHxkZpjkTLMzlz/lz4qwP9uGj+8vgxLszOlPaQozFMw0AphULRl5jl706fZDiVxAAs0+QjW7bx6Bqo
tf3Yujb6EwlyjkNTJEp1MFhaAXAdXr7Yy+Pr2m649K6UQgOXZ2cYT6eI+QMoVUpEPDQ6Qld1Le9Y4gkCcW9
JIH6IKbMRov8GvDHQTik5Sq2NLMxMsch/f/sYF2enUZSWkR9f18ZHtm5fkbt8pRTvXr+Rvc2tDCbnCJgm62
tqV3Wiy5Nt7dQGQ/zfr/
+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
eGBzgyNgoAcvkqbYOHmlpXfMzrKpg6CZ9nBUx/
+1vSPKOzWcOHWAqW2pn53oeXz9/ltF0io/t3L3yAxb33bcvnkdraJm/aY0HgkxmM3z7Qi+f2vtohUd370kg
riCtbXD6gDyY65ZeWtJYB/zouot5gAdG/Y1eIe6CZRh8ctdezk9PcW56ipg/wK7m5iUVxkgXi+WuOb3TU4z
OlxjUaII+i6+dPUN9OFLO2i3NoA8xMJegJhgia9t86cRxBufmKto/eCVsqaunOhhkKpuhLhRGA5OZDI2RCN
01pf3UW1WnOjU5wUTmmhrSpkl7vIojoyO8e/2GFS1tKirj7NQUjdf9XtWFwpybnipVY1vjN6O3s1LHl/4Ke
B6oV0oNAf+b1vq/rcS1H1TanUBn/gy8xJW2tejgO1GB99z2h075t6OLDaUa0UY94IA3Bf6nUObKnl982JmG
wdaGRrbe4TGXK4lctusynE4Rna/zi4bqYAjP07w20F8OxGenJhmYSyxoWBD1+3l9qJ9nO7vueq9Ma00in8d
Uir65BK8N9JG2bXY2NPFMR+eK7atenJnmtYF+ZvM5Ntc1sL+jo9z+L2BZ/Oqjj/PlM6e4ON8jeUt9Ax/Zuo
2ZXJZv9Z7n1OQEYZ+P5zq6eK6re8He/EgqtSgJTymFqRTT2awE4gdAVSBAwXUJX/N9zzsOcf+NE+8eNCuVN
f3RlbjOw0Jrjc7+Fejc1X1e7UL+u2B2g6/nlq9XKgiRX0EXvg/2cSAAoZ9E+Z+852MXS9NZVc3OxiYOjgxT
dBwspSi4Li3RKFWBAFnbIVm4et50cG4On7Ew2BhKoZTBZCZ9V4F4OJnkb0+fYDSVYiSVZK5QYEdDE7FAgO/
1XeLtiTF+8/GnylW07oSnNYl8jqDl48zkBF86+TZhy0fQsnil7xJHxkb4zcefKu+FN0Qi/Nq+x0kXiyhK+6
vJQp7/evAtiq5LczSG7br8U+85Zgt5fmrr1Q5gzZHogpKbUPodcjwPv2ndsAa1WFue7+rm70+fojUWwzJMH
M9lKptZ8HPwIJOl6UrwJuZns9fUeFYmEETbR1C3CcQAyoijQh+C0Ifu3TgfUDnb5vj4KJcTCZrCEfa2tFKz
wmc/lVJ8bOduNtXV8f+
+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
XJLfQO/
+fiTbG1o5NmOLrY3NmEZJr3TU4Cis6qaqD9AUzSKqQy+2XuewPwSsKcXzs5t17ujbPai63JgeIioL0Bk/ph
TfL6a2Xg2TdZe+G/9THsXjueSKhbm389lJJVkf3vHTY/SBCyLiUym3LP5CtMw0FoxMDe35PHeLcfzsOfbcd
quyz+dP0dDJExNKETI56MlFiNTLPLG4OA9H4tYnrU5I/ZmAA/U9R2IwuD2VWJEYpUqOA7JYoH3ru/hz44dZ
iSVImCZ5G2H6lCQF7q7F70maFn4TBPbdRfsJ+Ydm45I9aLnX+FpjQIsw2RTbT1npiYwjVLv4qHkHJvq6tl5
XWat1pp1sSomMmfJOw7t88vTo+kUj7S0UhUM3uCdrgr5fDzd3sEP+vtoiUax5veji67D/vbOW74WSgHzD/Y
/x1w+T84u8tbwEMlCgZ3znaeunTkWXZeZbI7nOjqZzGU5NTFRnjkPp5K8r2cTj61rYzKb4WtnT3NuaoqJbI
aRVJIdjU0ETIuBuSRt8Tg18zM01/PIOw7fvniexkiElmiMsUya5kgUpRS265J1iuUAvxTT2WxpK6BQWPC4o
aDg2ItaULZXVfGpvY/ytXNnGEklsQyDd6/fyHvWb7jl+4R8vkU1eQBQlM9p3wvpYpFv9Z7j8OgIntbsbGzm
qbZ2Co5D7XU5DLFAgN6ZaX78no1GrIS1GYiN+HwBDHe+NOQVeTCkzN29UnAcpnNZIj7/bQNEpXla8/2+S/z
zxQvMZHNopXm6rYP2eJzxbJauqmr2NLcsKKpxhd802d/eyXcvXSjXvs3ZNhnb5vmuxYH7isda2/j70yeJ+v
20V1UR9fs5Oz1JQ9jPR3fs4pHr9ntt1+WvT73N8bExTENxZmqSs1OTbK5v4NmOztueO77ixzduQinFG4MDO
J5HdTDIJ3c/Qmf1zW8armUoRU0oRE0oxIdvUV3MZ5pE/D6KnktTJEpjV4S5Qp7pbI7WeIyf37GLvGPz2UMH
SjPyWJzmaIzTkxNcmp3h8dY2djQ10hiKoOZXDI6OjTKRSWMZBm8ND5KzHaJ+PyPpFIrSvuwHN22h5w4KdYR
9PhrDUXJ26ShVwLJwXI+MbfPO7vULjmNdsaW+gf+5rp5MsUjAspaUQb+prp6g5SNZyJcbXCTyOaI+3x2N90
54WvP5Y0cYSF5NGDs1OUH/3CweHo63cAsmZ9tsusdFTsTyrclArIw42v84FN8EowmwQCcAE+XfV+nhPZAOD
g/xj+fPUnRdtNbsbm7mp7Zuv6uiE/fDW0OD/N3pk4yl0xQdF1d7/Pn0Ed6zfiP/7pl33PZM73s3bMTTHj8a
GMDVmojfx8d37r5l5aZ9res4Nz1VqusMoBS7m5r5148+dsPWiYdHhzk6Okp7vIq2eBXbGhoZTibpqq7hp7f
tWPLf1WeafHDTFt67fiN5xyEWCCw661p0Xc5PTzGXz9MYibK+puaGAelWDKV4Z/cGvnr2NC3RGH7TJGBa+E
yDD83fNJydnGSuUCjva1tKsaupmeFUkg9u3sJU
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
c5Oz3FHxx5qEIF/iDjJ4MDjESjNLrcZdFd/
+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
b8sS
+kSgEQeCFoWskC4VyyduHZaX5/auX+eKhI7d8vaeCk5yZmqLV7SmT8FefeIw//eD71mwk8x+/830+98uXUQ
oFiroOgkA4be3ctvj9674mwzSZSiQwMWlwuStc09KFAr2haWbTaZo9HnpWGOkRBIEn2js40NBYDgtp8njuu
1EbURD47L4D/GJkmOOT4wA82daBQ5ZxKApNHi/zmQyyKKJJEtXLLEb8djtFc5kyvGng2mC3sC3+AL93+Bg/
Gx5kIh6n3efj6Y7OsgPbJm4ft03EgiBIwH8F3gZMACcFQfi+aZqXbvfcb1qsoI5ebbRJ0RTsbhv5bAHNfv3
LmEnlCDS8sctIdkXhYH0jp6aCNLrcCIJA0dCJ5XJlJfC9vLbfPnSUX42NcG56Cpem8s7urUtIdzl4bbaSp7
N5AxmbhFMpWm4o/wXsdnpD0/z33vPEclm2Bao53NS8LlXy8ckJAjY7QonsvvrEY3zuly8DrE7Gi0h44bjZT
BoEONrUzNs7t647GnIyHufvL5wlUhKieWw2Pr17H20+HzOpFH9x+gTxbA5ZFCkYOo1uN7918MiKhOPWtHWr
tO827IrCu7q38q7ureWfBex2/rm/jzqXi3afn2yxQDiV4umOziXH76qt48cDV4lkMvhsNst9rhTE8b3L/ey
tb+BIUxM2eWOMQNp9fj6//9CGnGsTS7ERO+IjwIBpmkMAgiB8A3g/sEnEt4KbjSitQsaiKHLsPQf56ddeor
qpCtWmkEllScVSvPsLT9+Tp7OReN+27aQLBS7NzCCKAgLw7u6t7LoLyujVkCkUyBV1fDZ7ufS4lp1Yu89Pu
8/PaDRKndOJgEA4naLW6cI0TfJ6sUKgFEwkuDo3i9dmwy4rDEWucTw4we8dPrZmS0+L9K//
+08/+D6A1cn4BhL+0w+
+j8/98mX+89PPkNd1RqIRBufnaPZ4l/SxdcNgcH6e3plpxmMxHLLK/oYGtlfX8FdnTgJWGRms/uNfnz3Fv3
vkcb5/pZ9ssVBRip9MxHh5dIR3LiKx+wG5YhET85bJ76GWVgqGzs+Gh5jX09hlhY/t3M3uZT7fHk3jtw8e4
VuXegkmEkwlEsTzObZX1xDNZvn+lX4uhKb5woFD940hyCZWxka8Q03A+KJ/TwBHN+C8bz6sZU54JTIu4cBb
92AYJq//4DTRmRhOj4P3/s4zdOy+f6z8bhV2ReFz+w8yk0qRyOeodbo2vAx3KxiNRvmL08cxTQGnojAai3B
8cpzfP3xs1R6nKAh8bu8Bnh+8xongBKYJ+
+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
vWoimSySAJEkXDQJEkdMNAEcV1Lw4FQVizw9q+
+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
s1mebO+gqm
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
LMDQ8EGpiJxfnN9X4g++Z7ONDA27dt5+HmZn7V1
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
MBOeQZM8wv2/HrgVFY+6VEII6r+
+WJVO13FGtA7UBLk9N4rRmK5zdKIKiKPdquceX3gH8LVAJ/FQIcVZK+diKjExZkxpLSuiZmSkorJExDQSCs
mXU5a31eOmfm8M3r85HxjQRkK9CtRghxB2D/0Q0QjyTzlfCuvE4j9XKxcl7C8SQXRK9+bGaEHx47wGevHiO
gWAQAfjsdv5434GC118pe2pqeaq3m7lEghK7HQmMRyM0lZQtqGK1XkkpGQjOMRCc42BdgCe2teO0WPE7nau
+p60JQVt5OW3l5av6usrGttys6R8BP1qhsSjrwAOBBl4cGmQ8EqHc5SKZyTAVj/Km1i3LmpkcaWjgpeHr+e
IfKdNgLBLhdc0t9zzLvsGm60hJwd4eQNow70tiV7nLxZ8ePMxULEbaNKh2e+7b0ZYSh4OP7z/I97ouMBIJA
7Cjsop3tu9Ys4lXS2GYJt/rupgrASpASBwWK3+8r+OeisIoylq0rHPE90qdI17fJqIRnu7p5lIuu/mRpk0c
CtQvuW/vzQbm5vjxlUtcDwZxWHQebm7mtc2bl32eVUrJ3584znA4RKXLnW+GMBmN8qlDRzbEsRMpZbavrqb
ns3zXmmAiQe/sDJoQtJT5C6qL3crFiXG+cuZUwbGlUDKBRdP5iwePqbO7yrpx384RK69OVW4PH9y9d8Wft6
m0lE90HOLy1CRjkQjlTmf2SNIy32yFEHxg1x7+6fxZBkPBbGUqIXj39p0bIghD9me8l7PTUkrCqRQWTVuRv
sC3cmJ4iO93dWYTnMhmlX9w11523KGE5tmxUdxWW8FNns/uYCQcYjwaWVILTEVZq1QgVtaMZCbDV86cont2
Bl0IpASfw86fHDi47ISYMqeTTx06zEgkTCKdps7rW7Ekn/VqNBzmB5c6uR6cA2BnVTVv37Z9xWfU07EY3+u
6SLnLhV3PvuXE02m+deEsnz/2mtsmlemLFNqQMvsZXajZsLIxqN9kZc14cWiQ7tlp6nOZqwGfj2Qmw48ud6
3I8wuRPfu82V/
+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
rp5S+
+KshJU+p+irBK7xbLhM27rfSV87sGHuTw1STSdoqGklOaS0lXNmC51OG5s+hYQQlDicOQ/Lne5bnk0y26x8
ImOgzzVc40zo6PYdJ1HWzbz2uaWNZP9rWwcG/tdQVGUVee22ThQxIpQLWV+6n0+RsKh/BnmyWiUWo+XVn82
QU5KyXg0wmAoiNNipc1fvuAmqdTh5H07dvPe7btU8FXuKxWIFUXZUCyaxkf3dfBv3Vc5NToCwP66Wt7UuhW
LpiGl5MdXL/PCQD8IAIHHZuOP93csWtBDBWHlflP9iBWlCGbiMQZDIRwWCy2lZQuaLSgr40Zm9PwM6EtTk3
z51ImCtoOz8Thum5XPHj22oAuSoqyE2/UjVjNiRVlFUkp+2dfD0z3d2Y+BErudj+7roNarkoBW2s1HkCBb0
MNptRZ8rczpZDgcYjwSUf8OyqpTbRAVZRX1zc3y8+6rVLk91Hl9BLw+UobJN8+fwVT1cFaFiUSwcNYrRLYk
p6KsNhWIFWUVnR4dwa5b8hWcINuPdjIWYzQSLuLIXj0O1NQRTacKbnzmEgn8Dic16miSUgRqaVpRVpFhmrf
cgzRNNRtbDVsrKnmosYnfDV7Pf85ts/HB3XvV/rBSFCoQK8oq2l1dw/HhIUwp82/6kVQSj82m9iZXiSYE79
i2nQcCDQyFgjgsFraUV+DMlbdUlNWmArGirKKtFZUcqW/g+PBQ7liMxKZb+Oi+AwXL1SvFlJLe2Rl6ZqZx2
WzsrKxWJRrJHkkK+LIdohSl2FQgVpRVpAnBu7fv5GCgnr7ZWZxWK9srK/HZHXd+8BIZpsl3Oi9wanQEi6Zh
SsnPrl3lj/bsY2uFakWqKGuFCsSKssqEEDSXltFcWnZfX+fy1CQnR4Zp8L3S/CCaSvHkxfN84dhr1NllRVk
jVNa0omxQ58fHcVmtBZWh3DYb8UyGsUikiCNTFGU+FYgVZYOyW/QFZ5OllEgp0TWVHawoa4UKxIqyQe2rrS
NpGKQNI/
+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
SuQmCC\n",
"text/plain": [
"<Figure size 576x432 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "0-D8YVlkpu4y"
},
"source": [
"Debe obtener un gráfico como este:\n",
"\n",
"![image.png](attachment:image.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VmJY14Hspu4y"
},
"source": [
"### 6. Realizar el proceso iterativo"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "LQKjNI-9pu4z"
},
"source": [
"Para realizar la clasificacion de los puntos, los anteriores pasos se
tienen que repetir las n veces que se necesite, hasta que el sitema converja.
ALgunas veces el sistema no va a llegar a una solucion estable, por lo que es
necesario establecer un número máximo de iteraciones"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wdaEpemjpu4z"
},
"source": [
"#### 6.1 Condicion de parada de la iteracion"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "dz7NqcILpu4z"
},
"source": [
"Se va a escribir una funcion que determine si la iteración debe parar o
no. Esta funcion recibe los centroides, calcula el error absoluto entre los
centroides nuevos y los de la iteracíon anterior, y devuelve un booleano: `True(1),
False(0)` si es mayor o menor a un error:\n",
"\n",
"$$ |X_C^{new} - X_C^{old} | < \\varepsilon$$ \n",
"\n",
"La funcion debe validar si se satisface la anterior condicion de parada o
si se alcanza el máximo de iteraciones."
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "1cef03fc7567c43fe9c1d41287f205e9",
"grade": false,
"grade_id": "stop_iteration",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
},
"id": "dcmlgQvipu4z"
},
"source": [
"from sklearn.metrics import mean_absolute_error\n",
"\n",
"def stop_iter( Xc_new, Xc_old, error, iteration, iter_max = 300):\n",
"\n",
" for i in range(iter_max):\n",
" if mean_absolute_error(Xc_new,Xc_old)<error:\n",
" return True\n",
" else:\n",
" \n",
" Xc_old=Xc_new\n",
" Xc_new= set_new_centroid(Xc_new, cluster, 3)\n",
" \n",
" \n",
" \n",
" \"\"\"\n",
" Determine if Xc_new and Xc_old are approximatlye the same, with
certain error\n",
" \n",
" Parameters\n",
" ----------\n",
" \n",
" Xc_new : 2D-numpy.array\n",
" array with the new k centroid positions\n",
" Xc_old : 2D-numpy.array\n",
" array with the old k centroid positions\n",
" error : float\n",
" the convergence limit value of the problem\n",
" iteration: int\n",
" the actual iteration\n",
" iter_max : int\n",
" the maximum iteration number allowed\n",
" \n",
" Returns\n",
" ----------\n",
" boolean \n",
" \n",
" \"\"\"\n",
" \n",
" #===== START CODE HERE =====\n",
" \n",
" \n",
"\n",
"\n",
" #===== END CODE HERE =====\n"
],
"execution_count": 224,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 306
},
"id": "qpFfTZD_6ZKR",
"outputId": "0a6f4bcc-c88e-4e0d-e207-5e9adf385cf2"
},
"source": [
"print(stop_iter(new_centroids,initial_centroids,0.001, 1, 200))"
],
"execution_count": 225,
"outputs": [
{
"output_type": "error",
"ename": "IndexError",
"evalue": "ignored",
"traceback": [

"\u001b[0;31m----------------------------------------------------------------------
-----\u001b[0m",
"\u001b[0;31mIndexError\u001b[0m
Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-225-d18469784952>\u001b[0m in
\u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m
\u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstop_iter\u001b[0m\u001b[0;34
m(\u001b[0m\u001b[0mnew_centroids\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0minitial_ce
ntroids\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0.001\u001b[0m\u001b[0;34m,\u001b
[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m
\u001b[0;36m200\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u0
01b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m<ipython-input-224-da58232c775c>\u001b[0m in
\u001b[0;36mstop_iter\u001b[0;34m(Xc_new, Xc_old, error, iteration,
iter_max)\u001b[0m\n\u001b[1;32m 9\u001b[0m
\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 10\u001b[0m
\u001b[0mXc_old\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mXc_new\u001b[0m\u001b[0;34m\
u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 11\u001b[0;31m
\u001b[0mXc_new\u001b[0m\u001b[0;34m=\u001b[0m
\u001b[0mset_new_centroid\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mXc_new\u001b[0m\u0
01b[0;34m,\u001b[0m \u001b[0mcluster\u001b[0m\u001b[0;34m,\u001b[0m
\u001b[0;36m3\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b
[0m\u001b[0m\n\u001b[0m\u001b[1;32m 12\u001b[0m
\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m
\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-148-24270187e8c2>\u001b[0m in
\u001b[0;36mset_new_centroid\u001b[0;34m(X, labels, k)\u001b[0m\n\u001b[1;32m
27\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m
\u001b[0;32min\u001b[0m
\u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m)\u001b
[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001
b[1;32m 28\u001b[0m \u001b[0mindex_k\u001b[0m \u001b[0;34m=\u001b[0m
\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwhere\u001b[0m\u001b[0;34m(\u001
b[0m\u001b[0mlabels\u001b[0m \u001b[0;34m==\u001b[0m
\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[
0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b
[0;32m---> 29\u001b[0;31m
\u001b[0msum_\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[
0m \u001b[0;34m=\u001b[0m
\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msum\u001b[0m\u001b[0;34m(\u001b[
0m\u001b[0mX\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mindex_k\u001b[0m\u001b[0;34m]\u
001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m \u001b[0;34m=\u001b[0m
\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m
\u001b[0;34m/\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001
b[0m\u001b[0mindex_k\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;3
4m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 30\u001b[0m
\u001b[0;32mreturn\u001b[0m
\u001b[0msum_\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1
;32m 31\u001b[0m \u001b[0;31m#===== END CODE HERE
=====\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b
[0m\n",
"\u001b[0;31mIndexError\u001b[0m: index 284 is out of bounds for axis 0
with size 3"
]
}
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "d3244e658c61881488f98a6f6de26498",
"grade": true,
"grade_id": "test_stop_iteration",
"locked": true,
"points": 100,
"schema_version": 3,
"solution": false,
"task": false
},
"id": "Jbi-BurBpu40",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 214
},
"outputId": "9b76a925-f1e1-4b02-b0bd-de5c1f348290"
},
"source": [
"assert stop_iter(new_centroids,initial_centroids,0.001, 1, 200) ==
False\n",
"assert stop_iter(new_centroids,initial_centroids,0.001, 300, 200) ==
True\n",
"assert stop_iter(new_centroids,initial_centroids,100, 100, 200) ==
True\n",
"assert stop_iter(new_centroids,initial_centroids,100, 500, 200) == True"
],
"execution_count": 221,
"outputs": [
{
"output_type": "error",
"ename": "AssertionError",
"evalue": "ignored",
"traceback": [

"\u001b[0;31m----------------------------------------------------------------------
-----\u001b[0m",
"\u001b[0;31mAssertionError\u001b[0m
Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-221-2044d58d4b92>\u001b[0m in
\u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m
\u001b[0;32massert\u001b[0m
\u001b[0mstop_iter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnew_centroids\u001b[0m\u0
01b[0;34m,\u001b[0m\u001b[0minitial_centroids\u001b[0m\u001b[0;34m,\u001b[0m\u001b[
0;36m0.001\u001b[0m\u001b[0;34m,\u001b[0m
\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m
\u001b[0;36m200\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m
\u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u00
1b[0;32m----> 2\u001b[0;31m \u001b[0;32massert\u001b[0m
\u001b[0mstop_iter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnew_centroids\u001b[0m\u0
01b[0;34m,\u001b[0m\u001b[0minitial_centroids\u001b[0m\u001b[0;34m,\u001b[0m\u001b[
0;36m0.001\u001b[0m\u001b[0;34m,\u001b[0m
\u001b[0;36m300\u001b[0m\u001b[0;34m,\u001b[0m
\u001b[0;36m200\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m
\u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001
b[0m\u001b[1;32m 3\u001b[0m \u001b[0;32massert\u001b[0m
\u001b[0mstop_iter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnew_centroids\u001b[0m\u0
01b[0;34m,\u001b[0m\u001b[0minitial_centroids\u001b[0m\u001b[0;34m,\u001b[0m\u001b[
0;36m100\u001b[0m\u001b[0;34m,\u001b[0m
\u001b[0;36m100\u001b[0m\u001b[0;34m,\u001b[0m
\u001b[0;36m200\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m
\u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001
b[1;32m 4\u001b[0m \u001b[0;32massert\u001b[0m
\u001b[0mstop_iter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnew_centroids\u001b[0m\u0
01b[0;34m,\u001b[0m\u001b[0minitial_centroids\u001b[0m\u001b[0;34m,\u001b[0m\u001b[
0;36m100\u001b[0m\u001b[0;34m,\u001b[0m
\u001b[0;36m500\u001b[0m\u001b[0;34m,\u001b[0m
\u001b[0;36m200\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m
\u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mAssertionError\u001b[0m: "
]
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "dUfolStSpu40"
},
"source": [
"### 6.2 Proceso completo de iteración"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MsMbpr5Wpu40"
},
"source": [
"En esta parte se va a integrar todos los procesos y las funciones hechas
anteriormente, para poder armar un solo algoritmo que permita clasificar un
conjunto de puntos por el método de Kmeans. Para desarrollar esto tenga en cuenta
lo siguiente:\n",
"\n",
" - EL numero máximo de iteraciones va a ser 100 : MAX_ITER = 100\n",
" - El error que va a usar es 0.0001\n",
" - El número de cluster(K) va a ser 3\n",
" - Los puntos que va a usar, son los generados y normalizado en pasos
anteriores: Xnormal. No debe vovlerlos a generar\n",
" - Debe generar nuevamente los centroides iniciales\n",
" - Debe calcular cada nuevo centroide y generar una clasificiacion de los
puntos de forma iterable. ¿ Qué ciclo es el mas apropiado: while o for?\n",
" - Recuerde que la función stop_iter devuelve un True si se debe parar la
condicion y un False si no debe hacerlo. Tenga presente la forma en que funciona el
ciclo while, si es el que va a usar\n",
" - Debe graficar por cada iteración los nuevos centroides y los puntos,
coloreados acorde a su cluster. Para esto se puede basar en los ejemplos usados en
secciones anteriores. Tenga presente que para poder generar un nuevo grafico y no
que queden todos sobre un mismo canvas, debe usar el comando `plt.figure`\n",
" "
]
},
{
"cell_type": "code",
"metadata": {
"id": "mmX0692jpu40"
},
"source": [
"# --- Max iteration ---\n",
"MAX_ITER = 100\n",
"\n",
"# --- Error ---\n",
"error = 0.0001\n",
"\n",
"# --- Number of clusters ---\n",
"K = 3"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "b9e75e75976ca9e1f476091e4e7525f5",
"grade": false,
"grade_id": "calculate_kmeans",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
},
"id": "Pbebu-v6pu41"
},
"source": [
"def kmeans(Xc, X, K, max_iter, plot=True):\n",
" \n",
" # --- Initialize variables ---\n",
" # Xc_new = ...\n",
" \n",
" #===== START CODE HERE =====\n",
" \n",
" raise NotImplementedError()\n",
" #===== END CODE HERE =====\n",
" \n",
" # --- Plot initial configuration ---\n",
" # Use Xc_new for that. \n",
" \n",
" #===== START CODE HERE =====\n",
" \n",
" raise NotImplementedError()\n",
" #===== END CODE HERE =====\n",
" \n",
" # --- Iterate the process ---\n",
" # * Remember that you need the actual centroids and the \n",
" # centroids of the last iteration. You need to do a backup of\n",
" # the last one \n",
" # * Here you must call the other functions int order to\n",
" # - calculate distance\n",
" # - classify the point assinging labels to them\n",
" # - determine the new centroids\n",
" # All this proces must be done until get convergente or reach\n",
" # a maximum number of iteration. You must stop the loop if one of
this\n",
" # conditions is satisfied\n",
" # * You must plot the points and centroids for each iteration\n",
" \n",
" #===== START CODE HERE =====\n",
" \n",
" raise NotImplementedError()\n",
" #===== END CODE HERE =====\n",
" "
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "9b62479f2d9afc7c7c90f7a901c55b6a",
"grade": false,
"grade_id": "classify_points",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
},
"id": "IWialm9wpu41"
},
"source": [
"# --- Generate initial centroids ---\n",
"#===== START CODE HERE =====\n",
"\n",
"raise NotImplementedError()\n",
"#===== END CODE HERE =====\n",
"\n",
"# --- Apply kmeans ---\n",
"#===== START CODE HERE =====\n",
"\n",
"raise NotImplementedError()\n",
"#===== END CODE HERE ====="
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "wI6zurjspu41"
},
"source": [
"Debe obterner las siguientes gráficas:\n",
"![image.png](attachment:image.png)\n",
"![image-2.png](attachment:image-2.png)\n",
"![image-3.png](attachment:image-3.png)\n",
"![image-4.png](attachment:image-4.png)\n",
"![image-5.png](attachment:image-5.png)\n",
"![image-6.png](attachment:image-6.png)\n",
"![image-6.png](attachment:image-6.png)"
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "fba041a7587194c01d64a6625c22f43f",
"grade": true,
"grade_id": "test_classify_points",
"locked": true,
"points": 100,
"schema_version": 3,
"solution": false,
"task": false
},
"id": "R6otTowUpu41"
},
"source": [
"assert labels.size == 300\n",
"assert labels.shape == (300,)\n",
"assert niterations == 5, \"The iterations does not match with the expected
value. The values must be the same\" \n"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "A2bUNyNwpu42"
},
"source": [
"En resultado de la clasificacion es el siguiente:\n",
"\n",
"```\n",
" [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1,\n",
" 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1,\n",
" 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1,
1,\n",
" 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1,\n",
" 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1,\n",
" 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2,\n",
" 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2,\n",
" 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2,\n",
" 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2,\n",
" 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MBiOJQCxpu42"
},
"source": [
"#### 6.3 Guardar los datos clasificados\n",
"\n",
"Una vez se haya hecho la clasificación, se deben guardar los datos en un
archivo de texto con el siguiente nombre: `train_data.txt`. Este archivo de datos
debe contener los valores originales de los datos (no los normalizados) y la
etiqueta:\n",
"\n",
"```\n",
"#-------------\n",
"# HEADER\n",
"# X,Y,LABEL\n",
"#-------------\n",
"```\n",
"\n",
"Recuerde que los datos X y labels deben ser concatenados de tal forma que
la primera columna sean los valores de x, la segunda los valores de y y la tercera
las etiquetas. Use funciones de numpy para esto\n",
"\n",
" - Cree primero una variable donde guarde estos datos.\n",
" - Guarde el contenido en el archivo de texto"
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "28c692a62905be856f4108d3d3ff64a1",
"grade": false,
"grade_id": "create_values",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
},
"id": "2OwojUFTpu42"
},
"source": [
"# --- create table data ----\n",
"# values = ...\n",
"\n",
"#===== START CODE HERE =====\n",
"\n",
"raise NotImplementedError()\n",
"#===== END CODE HERE ====="
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"editable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "3ed3a847bb24ec5fbf481692b48cc178",
"grade": true,
"grade_id": "test_create_values",
"locked": true,
"points": 100,
"schema_version": 3,
"solution": false,
"task": false
},
"id": "LanEsw32pu42"
},
"source": [
"assert values.shape == (300,3)\n",
"assert (values[:,2]-labels).sum() == 0, \"The assigment is not correct\""
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "g5qL_Bbwpu43"
},
"source": [
"print(values[:5])"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "lqthiQCLpu43"
},
"source": [
"Debe obtener algo como esto:\n",
"\n",
"```\n",
"[[34.46675573 21.08365058 0. ]\n",
" [43.64621936 19.20172716 0. ]\n",
" [43.1032088 21.62610275 0. ]\n",
" [40.69943153 16.61622588 0. ]\n",
" [39.40076157 20.80638537 0. ]]\n",
"```"
]
},
{
"cell_type": "code",
"metadata": {
"deletable": false,
"nbgrader": {
"cell_type": "code",
"checksum": "7a67a93e1f545d933d8d1a0b6b51006f",
"grade": false,
"grade_id": "write_values",
"locked": false,
"schema_version": 3,
"solution": true,
"task": false
},
"id": "ni--PwqBpu43"
},
"source": [
"# ---- write values in a file ----\n",
"#===== START CODE HERE =====\n",
"\n",
"raise NotImplementedError()\n",
"#===== END CODE HERE ====="
],
"execution_count": null,
"outputs": []
}
]
}

También podría gustarte