{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# <span style=\"color:green\"><center>Diplomado en Inteligencia Artificial y Aprendizaje Profundo</center></span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# <span style=\"color:red\"><center>Regresión Lineal en Python</center></span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##   <span style=\"color:blue\">Profesores</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. Alvaro Mauricio Montenegro Díaz, ammontenegrod@unal.edu.co\n",
    "2. Daniel Mauricio Montenegro Reyes, dextronomo@gmail.com \n",
    "3. Campo Elías Pardo Turriago, cepardot@unal.edu.co "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##   <span style=\"color:blue\">Asesora Medios y Marketing digital</span>\n",
    " "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4. Maria del Pilar Montenegro, pmontenegro88@gmail.com "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <span style=\"color:blue\">Asistentes</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "5. Oleg Jarma, ojarmam@unal.edu.co \n",
    "6. Laura Lizarazo, ljlizarazore@unal.edu.co "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <span style=\"color:blue\">Contenido</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- [Introduccion](#Introducción)\n",
    "- [Importamos la librerías que usaremos](#Importamos-la-librerías-que-usaremos)\n",
    "- [Lectura y documentación de los datos](#Lectura-y-documentación-de-los-datos)\n",
    "- [Análisis exploratorio inicial](#Análisis-exploratorio-inicial)\n",
    "- [Regresión Lineal Simple. Mínimos Cuadrados](#Regresión-Lineal-Simple.-Mínimos-Cuadrados)\n",
    "- [Regresión Lineal Simple. Librería Sklearn](#Regresión-Lineal-Simple.-Librería-Sklearn)\n",
    "- [Regresión Lineal Múltiple](#Regresión-Lineal-Múltiple)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <span style=\"color:blue\">Introducción</span>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "[Basado en Regresión Lineal - Colab](https://colab.research.google.com/github/RFajardoMonzon/MachineLearningCourse/blob/master/Linear_regression_Regresi%C3%B3n_Lineal.ipynb#scrollTo=p5PAhkSzbkRi)\n",
    "\n",
    "En esta lección hacemos una primera práctica de modelamiento con un subconjunto muy famoso de datos: El Boston Housing Dataset. \n",
    "\n",
    "El propósito del ejercicio es predecir el valor de las casas en Boston, basados en 13 variables (features) que se cree estań asociada al precio. Son 506 registros."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <span style=\"color:blue\">Importamos la librerías que usaremos</span>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "id": "g7pqJJrJd8v8"
   },
   "outputs": [],
   "source": [
    "# Importamos la librería SKLearn, que trae bastantes funcionalidades de Machine\n",
    "# Learning. Esta librería también incluye algunos datasets muy conocidos como por\n",
    "# ejemplo el que vamos a utilizar hoy: El Boston Housing Dataset.\n",
    "import sklearn as skl\n",
    "\n",
    "# Importamos la función que nos carga los datos. OJO! Esta forma de cargar los\n",
    "# datos no es habitual. Lo hacemos así porque la librería nos proporciona este\n",
    "# dataset, que suele ser utilizado comunmente para pruebas. Sin embargo, lo\n",
    "# habitual sería cargar este dataset nosotros mismos.\n",
    "from sklearn.datasets import load_boston\n",
    "\n",
    "import numpy as np\n",
    "import scipy as sc\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## <span style=\"color:blue\">Lectura y documentación de los datos</span>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 904
    },
    "id": "cBF-24BkiruX",
    "outputId": "a3d0f638-02f7-436c-d318-9ef0f9e3f77e"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      ".. _boston_dataset:\n",
      "\n",
      "Boston house prices dataset\n",
      "---------------------------\n",
      "\n",
      "**Data Set Characteristics:**  \n",
      "\n",
      "    :Number of Instances: 506 \n",
      "\n",
      "    :Number of Attributes: 13 numeric/categorical predictive. Median Value (attribute 14) is usually the target.\n",
      "\n",
      "    :Attribute Information (in order):\n",
      "        - CRIM     per capita crime rate by town\n",
      "        - ZN       proportion of residential land zoned for lots over 25,000 sq.ft.\n",
      "        - INDUS    proportion of non-retail business acres per town\n",
      "        - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)\n",
      "        - NOX      nitric oxides concentration (parts per 10 million)\n",
      "        - RM       average number of rooms per dwelling\n",
      "        - AGE      proportion of owner-occupied units built prior to 1940\n",
      "        - DIS      weighted distances to five Boston employment centres\n",
      "        - RAD      index of accessibility to radial highways\n",
      "        - TAX      full-value property-tax rate per $10,000\n",
      "        - PTRATIO  pupil-teacher ratio by town\n",
      "        - B        1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town\n",
      "        - LSTAT    % lower status of the population\n",
      "        - MEDV     Median value of owner-occupied homes in $1000's\n",
      "\n",
      "    :Missing Attribute Values: None\n",
      "\n",
      "    :Creator: Harrison, D. and Rubinfeld, D.L.\n",
      "\n",
      "This is a copy of UCI ML housing dataset.\n",
      "https://archive.ics.uci.edu/ml/machine-learning-databases/housing/\n",
      "\n",
      "\n",
      "This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.\n",
      "\n",
      "The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic\n",
      "prices and the demand for clean air', J. Environ. Economics & Management,\n",
      "vol.5, 81-102, 1978.   Used in Belsley, Kuh & Welsch, 'Regression diagnostics\n",
      "...', Wiley, 1980.   N.B. Various transformations are used in the table on\n",
      "pages 244-261 of the latter.\n",
      "\n",
      "The Boston house-price data has been used in many machine learning papers that address regression\n",
      "problems.   \n",
      "     \n",
      ".. topic:: References\n",
      "\n",
      "   - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.\n",
      "   - Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Los datos cargados desde la librería Sklearn contienen una descripción del\n",
    "# dataset que estamos cargando, almacenado en el atributo DESCR.\n",
    "\n",
    "boston_dataset = load_boston()\n",
    "\n",
    "print(boston_dataset.DESCR)\n",
    "\n",
    "X = boston_dataset.data\n",
    "Y = boston_dataset.target\n",
    "\n",
    "# Guardamos información de las dimensiones de nuestro dataset. Recuerda: \n",
    "# n = número de ejemplos que tenemos de nuestros datos y\n",
    "# p = número de características que tenemos de cada datos.\n",
    "\n",
    "n, p = X.shape\n",
    "n, p\n",
    "rm = X[:, 5]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "diQ3uwM5uuTb"
   },
   "source": [
    "## <span style=\"color:blue\">Análisis exploratorio inicial</span> "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "diQ3uwM5uuTb"
   },
   "source": [
    "Hoy nos centraremos en modelar la relación existente entre las variables **RM** (Número medio de habitaciones) y **MEDV** (Valor medio de la vivienda). \n",
    "\n",
    "Vamos a primero comenzar entendiendo la naturaleza de nuestros datos, realizando un análisis exploratorio preliminar. Recuerde, aquí hacemos uso de las herramientas estadísticas y matemáticas aprendidas para obtener una mejor imagen de lo que los datos representan. \n",
    "\n",
    "- **¿Qué preguntas se quieren responder con estas herramientas?**\n",
    "\n",
    "---\n",
    "\n",
    "\n",
    "1.  **¿Existe algún relación entre la variable RM y MEDV?** Demuestrar la existencia de dicha relación desde dos vertientes diferentes: grafica un *scatter plot* con cada variable en un eje que te permita visualizar algún patrón identificable. También, utilizar una medida estadística como la correlación entre dos variables r para comprobar cuantitativamente dicha relación. ¿Son coherentes ambos análisis?¿Es coherente con lo que se puede esperar de manera intuitiva?\n",
    "\n",
    "2.   **¿Cúal es el precio medio de las viviendas cuyo número medio de habitaciones oscila entre 5 y 6?** Aquí nos podemos apoyar en la función ***np.logical_and()*** que sirve para combinar dos condiciones diferentes.\n",
    "\n",
    "3. **¿Se identifica algún fenómeno anómalo en la distribución de los datos?** Realizar un histograma para la variable MEDV. Aquí se recomienda utilizar un valor elevado de *bins*, por encima de 100, para remarcar el efecto de la anomalía. ¿De qué se trata?¿Cree que se trata de mediciones reales o es fruto de un preprocesamiento previo de los datos?\n",
    "\n",
    "**Consejo:** cuando al hacer un *scatter plot* haya una gran acumulación de puntos en una zona de la gráfica que no te permita identificar la densidad de puntos que hay, es una buena idea añadir algo de transparencia al color de dichos puntos. Esto se consigue con el atributo ***alpha*** de la función*** plot()***\n",
    "\n",
    "Aquí van los primeros códigos."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "id": "pooVJc8b6WEE"
   },
   "outputs": [],
   "source": [
    "\n",
    "def relation_rm_medv(rm, means):\n",
    "  plt.scatter(rm, means, alpha=0.25)\n",
    "  plt.title(\"RM contra MEDV\")\n",
    "  plt.show()\n",
    "  return np.corrcoef(rm, means)[0, 1]   #  se recibe uma matriz de correlaciones. Se xtrae la correlación\n",
    "  \n",
    "def price_mean(rm, means):\n",
    "  filtered_means = means[np.logical_and(rm > 5, rm < 6)]\n",
    "  return np.mean(filtered_means) * 1000\n",
    "\n",
    "def medv_hist(medv):\n",
    "  plt.hist(medv, bins=500)\n",
    "  plt.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 567
    },
    "id": "GM9Ll85Detyk",
    "outputId": "fded2f02-29a3-4749-f849-1214c6218363"
   },
   "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"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "La correlación de RM y MEDV es: 0.6953599470715393\n",
      "La media de las viviendas con un número de viviendas entre 5 y 6 es: 17551.5923566879\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAD4CAYAAAD1jb0+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAOC0lEQVR4nO3df6xk5V3H8fdHFtJCMaXuUCsLXmoosRIEc1UUf1AozWoJ9I+aQEKzKmYTYys1rbjYP4gmJo02tSYazQZWSEq3IRRaUqKyoUU0QepdfsjSBWkq4hZkLyHaqkkR+frHHcLd4e6duXPOvXcf5v1KNjPnmXPm+e53dz97cu7Mc1JVSJLa8z2bXYAkaToGuCQ1ygCXpEYZ4JLUKANckhq1ZSMn27p1a83NzW3klJLUvP37979QVYPR8Q0N8Lm5ORYWFjZySklqXpJ/XWncSyiS1CgDXJIaZYBLUqMMcElqlAEuSY0ywCWpUWMDPMmeJIeTHBgZ/0iSJ5M8nuQP169ESdJKJjkDvxnYvnwgyXuAK4Bzq+pHgE/1X5okaTVjA7yq7gdeHBn+deCTVfXd4T6H16E2SdIqpr0G/i7gZ5M8mORvk/z40XZMsjPJQpKFxcXFKaeTpHbN7bp7Xd532gDfApwCXAD8NnBbkqy0Y1Xtrqr5qpofDF73VX5J0pSmDfBDwB215GvAK8DW/sqSJI0zbYB/EbgYIMm7gBOAF3qqSZI0gbGrESbZC1wEbE1yCLgB2APsGX608CVgR3l3ZEnaUGMDvKquOspLV/dciyRpDfwmpiQ1ygCXpEYZ4JLUKANckhplgEtSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIaZYBLUqMMcElqlAEuSY0ywCWpUWMDPMmeJIeHd98Zfe3jSSqJ98OUpA02yRn4zcD20cEkpwOXAs/0XJMkaQJjA7yq7gdeXOGlPwauA7wXpiRtgqmugSe5HPhWVT3acz2SpAmNvanxqCQnAp8A3jfh/juBnQBnnHHGWqeTJB3FNGfgPwScCTya5GlgG/BQku9faeeq2l1V81U1PxgMpq9UknSENZ+BV9VjwKmvbg9DfL6qXuixLknSGJN8jHAv8ABwdpJDSa5Z/7IkSeOMPQOvqqvGvD7XWzWSpIn5TUxJapQBLkmNMsAlqVEGuCQ1ygCXpEYZ4JLUKANckhplgEtSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIaZYBLUqMMcElq1CS3VNuT5HCSA8vG/ijJE0n+KcmdSd66rlVKkl5nkjPwm4HtI2P7gHOq6lzgn4Hre65LkjTG2ACvqvuBF0fG7qmql4eb/wBsW4faJEmr6OMa+K8Cf3W0F5PsTLKQZGFxcbGH6SRJ0DHAk3wCeBm49Wj7VNXuqpqvqvnBYNBlOknSMlumPTDJDuAy4JKqqv5KkiRNYqoAT7Id+B3g56vqf/otSZI0iUk+RrgXeAA4O8mhJNcAfwqcDOxL8kiSv1jnOiVJI8aegVfVVSsM37QOtUiS1sBvYkpSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIaZYBLUqMMcElqlAEuSY0ywCWpUQa4JDXKAJekRhngktQoA1ySGmWAS1KjJrml2p4kh5McWDb2tiT7kjw1fDxlfcuUJI2a5Az8ZmD7yNgu4N6qOgu4d7gtSdpAYwO8qu4HXhwZvgK4Zfj8FuAD/ZYlSRpn2mvgb6+q5wCGj6cebcckO5MsJFlYXFyccjpJ0qh1/yFmVe2uqvmqmh8MBus9nSTNjGkD/Pkk7wAYPh7uryRJ0iSmDfC7gB3D5zuAL/VTjiRpUpN8jHAv8ABwdpJDSa4BPglcmuQp4NLhtiRpA20Zt0NVXXWUly7puRZJ0hr4TUxJapQBLkmNMsAlqVEGuCQ1ygCXpEYZ4JLUKANckhplgEtSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIaZYBLUqMMcElqVKcAT/JbSR5PciDJ3iRv6qswSdLqpg7wJKcBvwnMV9U5wHHAlX0VJklaXddLKFuANyfZApwIPNu9JEnSJKYO8Kr6FvAp4BngOeA/q+qe0f2S7EyykGRhcXFx+kqlo5jbdfdmlyBtii6XUE4BrgDOBH4AOCnJ1aP7VdXuqpqvqvnBYDB9pZKkI3S5hPJe4F+qarGq/he4A/jpfsqSJI3TJcCfAS5IcmKSAJcAB/spS5I0Tpdr4A8CtwMPAY8N32t3T3VJksbY0uXgqroBuKGnWiRJa+A3MSWpUQa4JDXKAJekRhngktQoA1ySGmWAS1KjDHBJapQBLkmNMsAlqVEGuCQ1ygCXpEYZ4JLUKANckhplgEtSowxwSWqUAS5JjTLAJalRnQI8yVuT3J7kiSQHk/xUX4VJklbX6ZZqwJ8Af11VH0xyAnBiDzVJkiYwdYAn+V7g54BfBqiql4CX+ilLkjROl0so7wQWgb9M8nCSG5OcNLpTkp1JFpIsLC4udphOx7q5XXdvdgnSTOkS4FuAHwP+vKrOB/4b2DW6U1Xtrqr5qpofDAYdppMkLdclwA8Bh6rqweH27SwFuiRpA0wd4FX178C/JTl7OHQJ8PVeqpIkjdX1UygfAW4dfgLlm8CvdC9JkjSJTgFeVY8A8/2UIklaC7+JKUmNMsAlqVEGuCQ1ygCXpEYZ4JLUKANckhplgEtSowzwY9BaF4XaiEWkVppj0nm7HDvt/tIsMMAlqVEGuCQ1ygCXpEYZ4JLUKANckhplgEtSowxwSWqUAS5JjTLAJalRnQM8yXFJHk7y5T4KkiRNpo8z8GuBgz28jyRpDToFeJJtwPuBG/spR5I0qa5n4J8BrgNeOdoOSXYmWUiysLi42HG6N6ZjbaGm5fXM7br7ddvjjuky5yTzTVLPtPNLLZk6wJNcBhyuqv2r7VdVu6tqvqrmB4PBtNNJkkZ0OQO/ELg8ydPA54GLk3y2l6okSWNNHeBVdX1VbauqOeBK4CtVdXVvlUmSVuXnwCWpUVv6eJOqug+4r4/3kiRNxjNwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIaZYBvktHFk8YtprTSAk7TLCy12rGjC0lNWs9aXl/r73t0374WzVqP446FBbGOhRq0cQxwSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIaZYBLUqMMcElqVJe70p+e5KtJDiZ5PMm1fRYmSVpdl1uqvQx8rKoeSnIysD/Jvqr6ek+1SZJW0eWu9M9V1UPD598BDgKn9VWYJGl1vVwDTzIHnA88uMJrO5MsJFlYXFyceo71WqSnywJJkyzo1MdiTZMsTrXa+03ze1ztmJUW1hp33Erj4xbWGlffWkwzx0r7dFmMa5pjxi1c1tc8alPnAE/yFuALwEer6tujr1fV7qqar6r5wWDQdTpJ0lCnAE9yPEvhfWtV3dFPSZKkSXT5FEqAm4CDVfXp/kqSJE2iyxn4hcCHgIuTPDL89Ys91SVJGmPqjxFW1d8D6bEWSdIa+E1MSWqUAS5JjTLAJalRBrgkNcoAl6RGGeCS1CgDXJIaNTMBPs3CRZMeu9pCTcufr3VhorUsADXJHCvtM+1iVxuhj4XAlr/PtH1f66Jey48ffX6091xpv3F/1kerZ9JerFTzRi7WNa4fXeeY5j2m/Tu3Wf9+ZibAJemNxgCXpEYZ4JLUKANckhplgEtSowxwSWqUAS5JjTLAJalRBrgkNarrTY23J3kyyTeS7OqrKEnSeF1uanwc8GfALwDvBq5K8u6+CpMkra7LGfhPAN+oqm9W1UvA54Er+ilLkjROqmq6A5MPAtur6teG2x8CfrKqPjyy305g53DzbODJ6cs9JmwFXtjsIo4h9uM19uJI9uNIXfrxg1U1GB2c+q70rHxH+tf9b1BVu4HdHeY5piRZqKr5za7jWGE/XmMvjmQ/jrQe/ehyCeUQcPqy7W3As93KkSRNqkuA/yNwVpIzk5wAXAnc1U9ZkqRxpr6EUlUvJ/kw8DfAccCeqnq8t8qOXW+Yy0E9sR+vsRdHsh9H6r0fU/8QU5K0ufwmpiQ1ygCXpEYZ4KtIsifJ4SQHlo29Lcm+JE8NH0/ZzBo3SpLTk3w1ycEkjye5djg+q/14U5KvJXl02I/fG47PZD9g6dvZSR5O8uXh9iz34ukkjyV5JMnCcKz3fhjgq7sZ2D4ytgu4t6rOAu4dbs+Cl4GPVdUPAxcAvzFcOmFW+/Fd4OKq+lHgPGB7kguY3X4AXAscXLY9y70AeE9Vnbfss9+998MAX0VV3Q+8ODJ8BXDL8PktwAc2sqbNUlXPVdVDw+ffYekf6mnMbj+qqv5ruHn88Fcxo/1Isg14P3DjsuGZ7MUqeu+HAb52b6+q52Ap1IBTN7meDZdkDjgfeJAZ7sfwksEjwGFgX1XNcj8+A1wHvLJsbFZ7AUv/md+TZP9wORFYh350+Sq9ZlCStwBfAD5aVd9OVlpRYTZU1f8B5yV5K3BnknM2uaRNkeQy4HBV7U9y0SaXc6y4sKqeTXIqsC/JE+sxiWfga/d8kncADB8Pb3I9GybJ8SyF961VdcdweGb78aqq+g/gPpZ+XjKL/bgQuDzJ0yytSnpxks8ym70AoKqeHT4eBu5kafXW3vthgK/dXcCO4fMdwJc2sZYNk6VT7ZuAg1X16WUvzWo/BsMzb5K8GXgv8AQz2I+qur6qtlXVHEtLanylqq5mBnsBkOSkJCe/+hx4H3CAdeiH38RcRZK9wEUsLQP5PHAD8EXgNuAM4Bngl6pq9AedbzhJfgb4O+AxXrvO+bssXQefxX6cy9IPoo5j6UTotqr6/STfxwz241XDSygfr6rLZrUXSd7J0lk3LF2m/lxV/cF69MMAl6RGeQlFkhplgEtSowxwSWqUAS5JjTLAJalRBrgkNcoAl6RG/T+wwxhEnEmmUQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"La correlación de RM y MEDV es:\", relation_rm_medv(rm, Y))\n",
    "print(\"La media de las viviendas con un número de viviendas entre 5 y 6 es:\", price_mean(rm, Y))\n",
    "medv_hist(Y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "77hvTCml_as6"
   },
   "source": [
    "## <span style=\"color:blue\">Regresión Lineal Simple. Mínimos Cuadrados</span> "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "77hvTCml_as6"
   },
   "source": [
    "Una vez hemos efectuado el análisis exploratorio inicial, vamos a proceder a implementar y entrenar a nuestro modelo. Recuerde que podemos conseguir ajustar a los datos a una recta de regresión lineal haciendo uso de aquellos valores de los parámetros obtenidos mediante el método de ***Mínimos Cuadrados Ordinarios***. Este método encuentra que el mínimo de la función del ***Error Cuadrático Medio*** se encuentra en el punto donde su derivada es igual a 0. Esto se obtiene evaluando la siguiente expresión:\n",
    "\n",
    "$$\n",
    "w = (X^TX)^{-1}X^TY\n",
    "$$\n",
    "\n",
    "Para poder trabajar de forma vectorizada, ampliamos la matriz $X$ con una primera columna de valores asignados a $1$, que servirán para mantener al termino independiente.\n",
    "\n",
    "---\n",
    "\n",
    "**Lo que vamos a hacer:** \n",
    "\n",
    "1.  Ajustar un modelo de regresión iineal mediante el método de ***Mínimos Cuadrados Ordinarios***.\n",
    "2.  Una vez calculados los parámetros, visualizamos la recta obtenida para comprobar que realmente se ajusta a la nube de puntos.\n",
    "3.  ¿Qué representa $w_0$?¿Y $w_1$?\n",
    "4.  Utilizaremos el modelo entrenado para predecir cuál será el valor medio de la vivienda para un número medio de ***9 habitaciones***, y también el número de habitaciones medio que podría tener una vivienda cuyo valor medio es de **45.000**.\n",
    "5.   Utilizaremos el modelo entrenado para calcular, para cada valor de $X$, cual es el valor predicho por la regresión. Llamaremos al vector generado el vector de salida predicho $\\tilde{Y}$. \n",
    "6. Luego vamos a evaluar la calidad de las predicciones implementando una función a la que le pasemos como parámetros el vector de valores de salida reales $Y$ y el vector de salida predicho $\\tilde{Y}$, para calcular el ***Error Cuadrático Medio***. Recuerda que  el ***ECM*** se calcula como:\n",
    "\n",
    "$$\n",
    "\\operatorname{ECM}=\\frac{1}{n}\\sum_{i=1}^n(Y_{Pi} - Y_i)^2. \n",
    "$$\n",
    "\n",
    "**Nota.** Vamos a utilizar el operador @ como un operador equivalente a la función **np.matmul()**, utilizada para la multiplicación matricial. ej : A = B @ C. Realmente, el operador @ implementa de manera general el producto tensorial en Python.\n",
    "\n",
    "**Consejo:** Al trabajar con multiplicación de matrices y vectores, compruebe que los vectores tengan bien definidas sus dos dimensiones. Esto se puede ver usando con el atributo *X.shape* de dicho vector. Queremos que sus dimensiones se muestren así **(5, 1)** y no así **(5,)**.\n",
    "\n",
    "\n",
    "Esto se puede producir por ejemplo cuando seleccionamos una única columna de una matriz. En estos casos se puede evitar seleccionando dicha columna así **X[:, 3:4]** en vez de así **X[:, 3]**. Igualmente, en caso de haber perdido una de las dimensiones, las funciones **np.newaxis()** o **reshape()** le pueden ser de ayuda.\n",
    "\n",
    "```\n",
    "ej: Y = Y[:, np.newaxis]\n",
    "```\n",
    "**Info:** En el punto 5 hemos calcularemos el error del modelo utilizando todos los datos. Más adelante en el diplomado veremos que esto no es del todo correcto a la hora de evaluar un modelo, pero de momento es suficiente."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 337
    },
    "id": "uBXHrSYnEW8M",
    "outputId": "48456e7f-e7e0-4d37-bbe8-a12fc3531997"
   },
   "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"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "w =  [-34.67062078   9.10210898]\n",
      "Predicción precio con 9 cuartos: $ 47248.36\n",
      "Predicción del número de cuartos para un precio de $45.000:  8.75\n",
      "ECM:  43.6\n"
     ]
    }
   ],
   "source": [
    "def lineal_regression(x, means):\n",
    "#   W = (Xt*X)^-1 * Xt*Y \n",
    "  w = np.linalg.inv(x.T @ x) @ x.T @ Y\n",
    "  plt.scatter(rm, means, alpha=0.25)\n",
    "  plt.plot(rm, x @ w, color=\"red\")\n",
    "  plt.show()\n",
    "  return w, x @ w\n",
    "  \n",
    "def predict_from_room_number(room_number, w):\n",
    "  return (w[0] + w[1] * room_number) * 1000\n",
    "  \n",
    "def predict_from_price(price, w):\n",
    "  return (price/1000 - w[0]) / w[1]\n",
    "  \n",
    "def get_mse(yp, y):\n",
    "  return np.mean(np.square(np.subtract(yp, y)))\n",
    "    \n",
    "\n",
    "w, yp = lineal_regression(np.c_[np.ones(rm.shape[0]), rm], Y) # np._c concatena a lo largo del segundo eje\n",
    "print('w = ', w)\n",
    "print('Predicción precio con 9 cuartos: $',np.round(predict_from_room_number(9, w),2))\n",
    "print('Predicción del número de cuartos para un precio de $45.000: ', np.round(predict_from_price(45000, w),2))\n",
    "print('ECM: ',np.round(get_mse(yp, Y),2))\n",
    " \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "97yJHn9aDN3g"
   },
   "source": [
    "## <span style=\"color:blue\">Regresión Lineal Simple. Librería Sklearn</span>  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "97yJHn9aDN3g"
   },
   "source": [
    "\n",
    "Hasta este punto hemos usado losa conceptos teóricos y prácticos de cómo funciona el modelo de regresión lineal simple y cómo se implementa internamente. Esto está muy bien para tener un mejor conocimiento de los conceptos. Sin embargo, en el día a día tenemos que ser efectivos, y para eso lo habitual será utilizar librerías que ya implementen tales los modelos. \n",
    "\n",
    "Por ejemplo, la librería **Sklearn** ya implementa muchos de los modelos de Machine Learning el modelo de regresión lineal. \n",
    "\n",
    "---\n",
    "Usaremos a continuación la función *sklearn.linear_model.LinearRegression()* para entrenar un modelo de regresión lineal simple con las mismas variables que hemos utilizado en el ejercicio anterior. \n",
    "\n",
    "Por favor revise la documentación (online o usando el comando \"?\") para estudiar los diferentes parámetros que acepta este modelo. \n",
    "\n",
    "Por ejemplo ¿Para qué sirve el parámetro *fit_intercept*? \n",
    "\n",
    "Se puede entrenar el modelo con y sin dicho parámetro y visualizarlo en una gráfica.\n",
    "\n",
    "Una vez ajustado el modelo, compruebaremos que el valor de los parámetros obtenidos (también llamados coeficientes) es el mismo que se  obtuvi anteriormente. De la misma forma, utiliza la función *.predict()*, que ya viene implementada, para comprobar que las predicciones son las mismas de antes. \n",
    "\n",
    "Finalmente, se comprueba que el valor del Error Cuadrático Medio que se ha obtenido previamente  es igual al que proporciona la función ya implementada *sklearn.metrics.mean_squared_error()*. \n",
    "\n",
    "Veamos."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 303
    },
    "id": "xwwMXdGzG_kf",
    "outputId": "d6e924fd-eb77-4969-bb41-c4d969655504"
   },
   "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"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Modelo con fit_intercept: w1 = 9.102108981180308 w0 = -34.670620776438554 mse = 43.60055177116956\n",
      "Modelo sin fit_intercept: w1 = 3.6533504000238834 w0 = 0.0 mse = 58.41063543210173\n"
     ]
    }
   ],
   "source": [
    "from sklearn import linear_model\n",
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "#rm.reshape(-1, 1) cambia las dimensiones de rm, de tal manera que la segunda dimensión es 1. \n",
    "# el -1 indica a Python que recalcule la primera dimensión.\n",
    "# En resumen, tranforma el vector rm en una matriz de tamaño n*1.\n",
    "def use_sklearn():\n",
    "  model = linear_model.LinearRegression().fit(rm.reshape(-1, 1), Y)\n",
    "  model_2 = linear_model.LinearRegression(fit_intercept=False).fit(rm.reshape(-1, 1), Y)\n",
    "\n",
    "  yp = model.predict(rm.reshape(-1, 1))\n",
    "  yp2 =  model_2.predict(rm.reshape(-1, 1))\n",
    "\n",
    "  plt.plot(rm, yp, color=\"green\")\n",
    "  plt.plot(rm, yp2, color=\"red\")\n",
    "  plt.scatter(rm, Y, alpha=0.25)\n",
    "  plt.show()\n",
    "  \n",
    "  fit_intercept_error = mean_squared_error(Y, yp)\n",
    "\n",
    "  print(\"Modelo con fit_intercept: w1 =\", model.coef_[0], \"w0 =\",\n",
    "        model.intercept_, \"mse =\", fit_intercept_error)\n",
    "  print(\"Modelo sin fit_intercept: w1 =\", model_2.coef_[0], \"w0 =\",\n",
    "        model_2.intercept_, \"mse =\", mean_squared_error(Y, yp2))\n",
    "  \n",
    "use_sklearn()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "5OU7JKm0QLyW"
   },
   "source": [
    "## <span style=\"color:blue\">Regresión Lineal Múltiple</span>  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "5OU7JKm0QLyW"
   },
   "source": [
    "Por último, como ya hemos visto, podemos generalizar el modelo de regresión lineal simple añadiendo más variables y obteniendo así el model de regresión lineal múltiple. Al añadir más variables al modelo, le estamos dotando de más información que ayude a mejorar las predicciones. Por ejemplo, un modelo de regresión lineal simple podría intentar predecir la altura de una persona en base al tamaño de la mano. Pero si añadieramos otra variable, como por ejemplo, el género, podríamos tener más información para hacer predicciones más fidedignas.\n",
    "\n",
    "La buena noticia es que a nivel de código, no hay gran diferencia entre ambos modelos, que también pueden ser resueltos mediante el método de ***Mínimos Cuadrados Ordinarios*** evaluando la expresión que ya conocemos:\n",
    "\n",
    "$$\n",
    "W = (X^TX)^{-1}X^TY\n",
    "$$\n",
    "\n",
    "\n",
    "Veamos."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 85
    },
    "id": "aLCT_xrxTF87",
    "outputId": "5c78ed83-09fe-4ac1-8385-c2837a7573a0"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Coeficientes \"a mano\": [18.56711151  4.51542094 -0.57180569 -0.93072256]\n",
      "Coeficientes sklearn: 18.567111505395246 [ 4.51542094 -0.57180569 -0.93072256]\n",
      "Error regresión lineal múltiple: 27.130405758497062\n",
      "Error regresión lineal simple: 43.60055177116956\n"
     ]
    }
   ],
   "source": [
    "from sklearn import linear_model\n",
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "\n",
    "def user_weights(x):\n",
    "  return np.linalg.inv(x.T @ x) @ x.T @ Y\n",
    "\n",
    "x = np.c_[np.ones(rm.shape[0]), rm, X[:, [-1, -3]]]\n",
    "w = user_weights(x)\n",
    "print('Coeficientes \"a mano\":', w) # El primero es el valor resultante cuando el resto de variables son 0, el resto es la importancia (peso) de cada variable.\n",
    "\n",
    "# Quitamos la columna de unos\n",
    "\n",
    "x = x[:, 1:]\n",
    "model = linear_model.LinearRegression().fit(x, Y)\n",
    "print(\"Coeficientes sklearn:\", model.intercept_, model.coef_)\n",
    "\n",
    "print(\"Error regresión lineal múltiple:\", mean_squared_error(Y, model.predict(x)))\n",
    "print(\"Error regresión lineal simple:\", get_mse(yp, Y))\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "colab": {
   "name": "Copia de Linear regression - Regresión Lineal",
   "provenance": [
    {
     "file_id": "https://github.com/RFajardoMonzon/MachineLearningCourse/blob/master/Linear_regression_Regresi%C3%B3n_Lineal.ipynb",
     "timestamp": 1616159304239
    }
   ]
  },
  "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.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}