{ "cells": [ { "cell_type": "markdown", "id": "d7732643-d6e3-4652-9a4f-61f60d647f72", "metadata": {}, "source": [ "# Estimation of tree height using GEDI dataset - Perceptron 1 - 2022" ] }, { "cell_type": "markdown", "id": "11db9ceb-5d2a-4ffd-b64d-10c093ac90ea", "metadata": {}, "source": [ "Python packages intallation\n", "\n", " pip3 install torch\n", " \n", "Ref: https://medium.com/biaslyai/pytorch-introduction-to-neural-network-feedforward-neural-network-model-e7231cff47cb" ] }, { "cell_type": "code", "execution_count": 3, "id": "58b12f60-2a68-458c-a85a-5c3127d7d9fc", "metadata": {}, "outputs": [], "source": [ "import torch\n", "import torch.nn as nn\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import scipy\n", "import pandas as pd\n", "from sklearn.metrics import r2_score\n", "from sklearn.model_selection import train_test_split" ] }, { "cell_type": "markdown", "id": "8f3f045f-bf11-478c-bf5a-8e0da1c09511", "metadata": {}, "source": [ "Single-layer perceptron takes data as input and its weights are summed up then an activation function is applied before sent to the output layer. Here is an example for a data with 3 features (ie, predictors):" ] }, { "cell_type": "code", "execution_count": 4, "id": "02448621-fcce-4dba-97d0-dfb25d6cb20e", "metadata": {}, "outputs": [ { "data": { "image/jpeg": "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\n", "text/plain": [ "" ] }, "execution_count": 4, "metadata": { "image/jpeg": { "height": 300, "width": 600 } }, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(\"../images/perceptron.jpeg\" , width = 600, height = 300)" ] }, { "cell_type": "markdown", "id": "c2210a8f-ce68-465c-8cb7-1cf735a37ab5", "metadata": {}, "source": [ "The use of an activation function depends on the expected output range or ditribution, which we will discuss in more details later. There are several options for activation function. To learn more about activation functions, checkout this great [blogpost](https://www.analyticsvidhya.com/blog/2020/01/fundamentals-deep-learning-activation-functions-when-to-use-them/). " ] }, { "cell_type": "markdown", "id": "7c76382c-97fe-4301-8e65-424aefe8e1c4", "metadata": {}, "source": [ "**Question 1**: what is the difference between the Perceptron shown above an a simple linear regression? " ] }, { "cell_type": "markdown", "id": "032b4914-c8fb-48ef-944a-41263fe70a12", "metadata": {}, "source": [ "Now let's see how we can implement a Perceptron:" ] }, { "cell_type": "code", "execution_count": 14, "id": "b88a28fb-e0a2-486b-9e36-ab446370f810", "metadata": {}, "outputs": [], "source": [ "class Perceptron(torch.nn.Module):\n", " def __init__(self,input_size, output_size, use_activation_fn=False):\n", " super(Perceptron, self).__init__()\n", " self.fc = nn.Linear(input_size,output_size) # Initializes weights with uniform distribution centered in zero\n", " self.activation_fn = nn.ReLU() # instead of Heaviside step fn\n", " self.use_activation_fn = use_activation_fn # If we want to use an activation function\n", " def forward(self, x):\n", " output = self.fc(x)\n", " if self.use_activation_fn:\n", " output = self.activation_fn(output) # To add the non-linearity. Try training you Perceptron with and without the non-linearity\n", " return output" ] }, { "cell_type": "markdown", "id": "a62a3727-f3e5-493c-a3b4-0a0a2da80f4f", "metadata": {}, "source": [ "The building blocks of the Perceptron code:\n", "- nn.Linear: Applies a linear transformation to the incoming data: y = xA^T + b\n", "- nn.ReLU: Applies the rectified linear unit function element-wise" ] }, { "cell_type": "markdown", "id": "127b95e2-d4b3-42dc-825b-eb60fdcba81c", "metadata": {}, "source": [ "Before we try to solve a real-world problem let's see how it works on a simpler data. For data, I will create a simple 2D regression problem." ] }, { "cell_type": "code", "execution_count": 3, "id": "62f4e1f2-929e-4829-812a-c1deae2e3562", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Test data')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# CREATE RANDOM DATA POINTS\n", "# from sklearn.datasets import make_blobs\n", "from sklearn.datasets import make_regression\n", "\n", "x_train, y_train = make_regression(n_samples=100, n_features=2, random_state=0) \n", "x_train = torch.FloatTensor(x_train)\n", "y_train = torch.FloatTensor(y_train)\n", "\n", "x_test, y_test = make_regression(n_samples=50, n_features=2, random_state=1) \n", "x_test = torch.FloatTensor(x_test)\n", "y_test = torch.FloatTensor(y_test)\n", "\n", "\n", "#Visualize the data\n", "fig,ax=plt.subplots(1,2,figsize=(10,5), sharey=True)\n", "ax[0].scatter(x_train[:,0],x_train[:,1],c=y_train)\n", "ax[0].set_xlabel('X')\n", "ax[0].set_ylabel('Y')\n", "ax[0].set_title('Training data')\n", "\n", "ax[1].scatter(x_test[:,0],x_test[:,1],c=y_test)\n", "ax[1].set_xlabel('X')\n", "ax[1].set_title('Test data')" ] }, { "cell_type": "markdown", "id": "395243cd-b329-45e5-b839-50248d2df9e1", "metadata": {}, "source": [ "Let's have a quick look at the distributions:" ] }, { "cell_type": "code", "execution_count": 12, "id": "448d903d-d091-4bc8-ba38-729ec1e234a8", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAHpCAYAAABtM3XZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABG/0lEQVR4nO3de3RW5b0n8N+L1Bd0IBaVXBQBHUqrOJSicrFyqQdstFYrVFvPcJlerCPaYg6LGq2ncc4qUWuVpVSdnlHAZQXmLOSyBqcSViHUI7pAjbaOMngaTYrkcGw1EY4GlXf+6Pi2kexwe5M3l89nrb0Wz97Ps/PbuzRP/ObheVOZTCYTAAAAAADAAXrluwAAAAAAAOishOgAAAAAAJBAiA4AAAAAAAmE6AAAAAAAkECIDgAAAAAACYToAAAAAACQQIgOAAAAAAAJeue7gE/av39/vPnmm9GvX79IpVL5LgcA2kUmk4l33303SkpKolev7vc7bfM5AD1Bd57PzeUA9ASHOpd3uhD9zTffjEGDBuW7DADoEPX19XHqqafmu4ycM58D0JN0x/ncXA5AT3KwubzThej9+vWLiD8X3r9//zxXAwDto6mpKQYNGpSd97ob8zkAPUF3ns/N5QD0BIc6l3e6EP3jfybWv39/EzUA3V53/efR5nMAepLuOJ+bywHoSQ42l3evTdsAAAAAACCHhOgAAAAAAJBAiA4AAAAAAAmE6AAAAAAAkECIDgAAAAAACYToAAAAAACQQIgOAAAAAAAJhOgAAAAAAJBAiA4AAAAAAAmE6AAAAAAAkECIDgAAAAAACYToAAAAAACQQIgOAAAAAAAJhOgAAAAAAJBAiA4AAAAAAAmE6AAAAAAAkECIDgAAAAAACYToAAAAAACQoHe+CwA6hyE3rct3CQf1+u2X5LsEANpRZ5+LzEMA0PX5eQM4ElaiAwAAAABAAiE6AAAAAAAkEKIDAAAAAEACIToAAAAAACQQogMAAAAAQAIhOgAAAAAAJBCiAwAAAABAAiE6AAAAAAAkEKIDAABAnmzevDkuvfTSKCkpiVQqFatXr25xPZVKtXr89Kc/TbznkiVLWh3z/vvvt/PTAED3JEQHAACAPNm7d2+MHDkyFi1a1Or1Xbt2tTgefvjhSKVSMW3atDbv279//wPG9unTpz0eAQC6vd75LgAAAAB6qtLS0igtLU28XlRU1KK9Zs2amDx5cpx++ult3jeVSh0wti3Nzc3R3NycbTc1NR3yWADo7qxEBwAAgC7gX//1X2PdunXx7W9/+6B99+zZE4MHD45TTz01vvKVr8QLL7zQZv/KysooKCjIHoMGDcpV2QDQ5QnRAQAAoAtYunRp9OvXL6644oo2+332s5+NJUuWxNq1a2PZsmXRp0+fOP/882PHjh2JY8rLy6OxsTF71NfX57p8AOiybOcCAAAAXcDDDz8cf/u3f3vQvc3Hjh0bY8eOzbbPP//8+MIXvhD33Xdf3Hvvva2OSafTkU6nc1ovAHQXQnQAAADo5H7zm9/E9u3bY8WKFYc9tlevXnHuuee2uRIdAEhmOxcAAADo5B566KEYPXp0jBw58rDHZjKZqKmpieLi4naoDAC6PyE6AHRRlZWVce6550a/fv1i4MCBcfnll8f27dtb9MlkMlFRURElJSXRt2/fmDRpUrz88ssHvffKlSvjzDPPjHQ6HWeeeWasWrWqvR4DAHq0PXv2RE1NTdTU1ERERG1tbdTU1ERdXV22T1NTU/zTP/1TfOc732n1HjNnzozy8vJs+7bbbosnn3wyfv/730dNTU18+9vfjpqamrj22mvb9VkAoLsSogNAF1VdXR1z5syJZ555JqqqquLDDz+MqVOnxt69e7N97rzzzrj77rtj0aJFsXXr1igqKoopU6bEu+++m3jfLVu2xFVXXRUzZsyIF198MWbMmBFXXnllPPvssx3xWADQo2zbti1GjRoVo0aNioiIsrKyGDVqVPz93/99ts/y5csjk8nEN7/5zVbvUVdXF7t27cq233nnnbjmmmvic5/7XEydOjV27twZmzdvjvPOO699HwYAuqlUJpPJ5LuIv9bU1BQFBQXR2NgY/fv3z3c50GMMuWldvks4qNdvvyTfJUDOtMd892//9m8xcODAqK6ujgkTJkQmk4mSkpKYO3du/PCHP4yIiObm5igsLIw77rgjvve977V6n6uuuiqamprif//v/5099+Uvfzk+/elPx7Jly1od09zcHM3NzS2eb9CgQeZzDktnn4vMQ8Andef/fu3Oz0bP5ucN4K8d6nxnJToAdBONjY0RETFgwICI+PM/B29oaIipU6dm+6TT6Zg4cWI8/fTTiffZsmVLizERERdddFGbYyorK6OgoCB7DBo06GgeBQAAADoNIToAdAOZTCbKysrii1/8YowYMSIiIhoaGiIiorCwsEXfwsLC7LXWNDQ0HPaY8vLyaGxszB719fVH+igAAADQqfTOdwEAwNG7/vrr46WXXoqnnnrqgGupVKpFO5PJHHDuaMek0+lIp9OHUTEAAAB0DVaiA0AXd8MNN8TatWtj48aNceqpp2bPFxUVRUQcsIJ89+7dB6w0/2tFRUWHPQYAAAC6KyvRAaCLymQyccMNN8SqVati06ZNMXTo0BbXhw4dGkVFRVFVVRWjRo2KiIh9+/ZFdXV13HHHHYn3HTduXFRVVcWNN96YPbd+/foYP358+zwIAADdQmf/0E6AIyVEB4Auas6cOfHYY4/FmjVrol+/ftnV4wUFBdG3b99IpVIxd+7cWLBgQQwbNiyGDRsWCxYsiOOOOy6uvvrq7H1mzpwZp5xySlRWVkZExA9+8IOYMGFC3HHHHXHZZZfFmjVrYsOGDa1uFQMAAADdnRAdALqoBx54ICIiJk2a1OL84sWLY/bs2RERMX/+/Hjvvffiuuuui7fffjvGjBkT69evj379+mX719XVRa9ef9nhbfz48bF8+fL40Y9+FLfeemucccYZsWLFihgzZky7PxMAAAB0NkJ0AOiiMpnMQfukUqmoqKiIioqKxD6bNm064Nz06dNj+vTpR1EdAAAAdA8+WBQAAAAAABII0QEAAAAAIIEQHQAAAAAAEgjRAQAAAAAggRAdAAAAAAASCNEBAAAAACCBEB0AAAAAABIcVoheWVkZ5557bvTr1y8GDhwYl19+eWzfvr1Fn0wmExUVFVFSUhJ9+/aNSZMmxcsvv5zTogEAAAAAoCMcVoheXV0dc+bMiWeeeSaqqqriww8/jKlTp8bevXuzfe688864++67Y9GiRbF169YoKiqKKVOmxLvvvpvz4gEAAAAAoD31PpzOv/rVr1q0Fy9eHAMHDoznnnsuJkyYEJlMJhYuXBi33HJLXHHFFRERsXTp0igsLIzHHnssvve97+WucgAAAAAAaGdHtSd6Y2NjREQMGDAgIiJqa2ujoaEhpk6dmu2TTqdj4sSJ8fTTT7d6j+bm5mhqampxAAAAAABAZ3DEIXomk4mysrL44he/GCNGjIiIiIaGhoiIKCwsbNG3sLAwe+2TKisro6CgIHsMGjToSEsCAAAAAICcOuIQ/frrr4+XXnopli1bdsC1VCrVop3JZA4497Hy8vJobGzMHvX19UdaEgAAAAAA5NRh7Yn+sRtuuCHWrl0bmzdvjlNPPTV7vqioKCL+vCK9uLg4e3737t0HrE7/WDqdjnQ6fSRlAAAAAABAuzqsleiZTCauv/76ePzxx+PXv/51DB06tMX1oUOHRlFRUVRVVWXP7du3L6qrq2P8+PG5qRgAAAAAADrIYa1EnzNnTjz22GOxZs2a6NevX3af84KCgujbt2+kUqmYO3duLFiwIIYNGxbDhg2LBQsWxHHHHRdXX311uzwAAAAAAAC0l8MK0R944IGIiJg0aVKL84sXL47Zs2dHRMT8+fPjvffei+uuuy7efvvtGDNmTKxfvz769euXk4IBAAAAAKCjHFaInslkDtonlUpFRUVFVFRUHGlNAAAAAADQKRzWnugAAAAAANCTCNEBAAAAACCBEB0AAAAAABII0QEAAAAAIIEQHQAAAAAAEgjRAQAAAAAggRAdAAAAAAASCNEBAAAAACCBEB0AAAAAABII0QEAAAAAIIEQHQAAAAAAEgjRAQAAAAAggRAdAAAAAAASCNEBAAAAACCBEB0AAAAAABL0zncBAABAbgy5aV2+S2jT67dfku8SAADgsFmJDgAAAAAACYToAAAAAACQQIgOAAAAAAAJhOgAAAAAAJBAiA4AAAAAAAmE6AAAAAAAkECIDgBd2ObNm+PSSy+NkpKSSKVSsXr16hbXU6lUq8dPf/rTxHsuWbKk1THvv/9+Oz8NAPQ8B5vLZ8+efcCcPHbs2IPed+XKlXHmmWdGOp2OM888M1atWtVOTwAA3Z8QHQC6sL1798bIkSNj0aJFrV7ftWtXi+Phhx+OVCoV06ZNa/O+/fv3P2Bsnz592uMRAKBHO9hcHhHx5S9/ucWc/MQTT7R5zy1btsRVV10VM2bMiBdffDFmzJgRV155ZTz77LO5Lh8AeoTe+S4AADhypaWlUVpamni9qKioRXvNmjUxefLkOP3009u8byqVOmBsW5qbm6O5uTnbbmpqOuSxANCTHWwuj4hIp9OHNS8vXLgwpkyZEuXl5RERUV5eHtXV1bFw4cJYtmxZq2PM5QCQTIgOAD3Ev/7rv8a6deti6dKlB+27Z8+eGDx4cHz00Ufx+c9/Pv7hH/4hRo0aldi/srIybrvttlyWCwD8f5s2bYqBAwfGCSecEBMnToyf/OQnMXDgwMT+W7ZsiRtvvLHFuYsuuigWLlyYOMZc3jUMuWldvkugnXX2/41fv/2SfJcAeWE7FwDoIZYuXRr9+vWLK664os1+n/3sZ2PJkiWxdu3aWLZsWfTp0yfOP//82LFjR+KY8vLyaGxszB719fW5Lh8AeqTS0tL45S9/Gb/+9a/jZz/7WWzdujW+9KUvtVg1/kkNDQ1RWFjY4lxhYWE0NDQkjjGXA0AyK9EBoId4+OGH42//9m8Purf52LFjW3xg2fnnnx9f+MIX4r777ot777231THpdDrS6XRO6wUAIq666qrsn0eMGBHnnHNODB48ONatW9fmL8ZTqVSLdiaTOeDcXzOXA0AyIToA9AC/+c1vYvv27bFixYrDHturV68499xz21yJDgB0jOLi4hg8eHCb83JRUdEBq8537959wOp0AODQ2M4FAHqAhx56KEaPHh0jR4487LGZTCZqamqiuLi4HSoDAA7HH//4x6ivr29zXh43blxUVVW1OLd+/foYP358e5cHAN2SlegA0IXt2bMnXnvttWy7trY2ampqYsCAAXHaaadFRERTU1P80z/9U/zsZz9r9R4zZ86MU045JSorKyMi4rbbbouxY8fGsGHDoqmpKe69996oqamJn//85+3/QADQw7Q1lw8YMCAqKipi2rRpUVxcHK+//nrcfPPNcdJJJ8XXvva17JhPzuU/+MEPYsKECXHHHXfEZZddFmvWrIkNGzbEU0891eHPBwDdgRAdALqwbdu2xeTJk7PtsrKyiIiYNWtWLFmyJCIili9fHplMJr75zW+2eo+6urro1esv/zjtnXfeiWuuuSYaGhqioKAgRo0aFZs3b47zzjuv/R4EAHqotubyBx54IH7729/GI488Eu+8804UFxfH5MmTY8WKFdGvX7/smE/O5ePHj4/ly5fHj370o7j11lvjjDPOiBUrVsSYMWM67sEAoBsRogNAFzZp0qTIZDJt9rnmmmvimmuuSby+adOmFu177rkn7rnnnlyUBwAcxMHm8ieffPKg9/jkXB4RMX369Jg+ffrRlAYA/H/2RAcAAAAAgARCdAAAAAAASCBEBwAAAACABEJ0AAAAAABIIEQHAAAAAIAEQnQAAAAAAEggRAcAAAAAgARCdAAAAAAASCBEBwAAAACABEJ0AAAAAABIIEQHAAAAAIAEQnQAAAAAAEggRAcA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su39+/fHn/70pzjxxBMjlUrluryc+Pg3FLleLU9L3nPH8a47hvfcMbrKe85kMvHuu+9GSUlJu36dw52XIyIaGhpa7f/hhx/GW2+9FcXFxQeM6YrzeXvrKn8XOzvvMTe8x6PnHeZGd3uPHTGfm8sPrrv9vcon7zJ3vMvc8j5zx7ts6VDn8pyH6B/75CSbyWRanXjT6XSk0+kW50444YT2Kiun+vfv7y9bB/CeO4533TG8547RFd5ze2/j8tcOdV5uq39r5z/Wlefz9tYV/i52Bd5jbniPR887zI3u9B47aj43lx9cd/p7lW/eZe54l7nlfeaOd/kXhzKX5/yDRU866aQ45phjDviN+O7duw/4TTgA0L6OZF4uKipqtX/v3r3jxBNPbLdaAYADmcsBIP9yHqIfe+yxMXr06KiqqmpxvqqqKsaPH5/rLwcAtOFI5uVx48Yd0H/9+vVxzjnnxKc+9al2qxUAOJC5HADyL+chekREWVlZ/I//8T/i4YcfjldeeSVuvPHGqKuri2uvvbY9vlyHS6fT8eMf//iAf+pGbnnPHce77hjec8fwng90sHm5vLw8Zs6cme1/7bXXxhtvvBFlZWXxyiuvxMMPPxwPPfRQzJs3L1+P0CX5u5gb3mNueI9HzzvMDe/xyJjL2+bvVe54l7njXeaW95k73uWRSWU+3hgtx+6///648847Y9euXTFixIi45557YsKECe3xpQCAg2hrXp49e3a8/vrrsWnTpmz/6urquPHGG+Pll1+OkpKS+OEPf9htfhkOAF2RuRwA8qfdQnQAAAAAAOjq2mU7FwAAAAAA6A6E6AAAAAAAkECIDgAAAAAACYToAAAAAACQQIh+FF5//fX49re/HUOHDo2+ffvGGWecET/+8Y9j3759+S6t2/nJT34S48ePj+OOOy5OOOGEfJfTrdx///0xdOjQ6NOnT4wePTp+85vf5Lukbmfz5s1x6aWXRklJSaRSqVi9enW+S+qWKisr49xzz41+/frFwIED4/LLL4/t27fnuyzw80IO+XngyJjrj565/OiZpzlahzqf1tXVxaWXXhrHH398nHTSSfH973//gD6//e1vY+LEidG3b9845ZRT4r/9t/8WmUymIx8n7w5lTvUuj4759+AONr9mMpmoqKiIkpKS6Nu3b0yaNClefvnlFn2am5vjhhtuiJNOOimOP/74+OpXvxp/+MMfOvApOodDmWe9z6MjRD8Kr776auzfvz/++3//7/Hyyy/HPffcEw8++GDcfPPN+S6t29m3b198/etfj//6X/9rvkvpVlasWBFz586NW265JV544YW44IILorS0NOrq6vJdWreyd+/eGDlyZCxatCjfpXRr1dXVMWfOnHjmmWeiqqoqPvzww5g6dWrs3bs336XRw/l5IXf8PHD4zPW5YS4/euZpjtahzKcfffRRXHLJJbF379546qmnYvny5bFy5cr4u7/7u2yfpqammDJlSpSUlMTWrVvjvvvui7vuuivuvvvufDxW3hxsTvUuj47599AcbH6988474+67745FixbF1q1bo6ioKKZMmRLvvvtuts/cuXNj1apVsXz58njqqadiz5498ZWvfCU++uijjnqMTuFQ5lnv8yhlyKk777wzM3To0HyX0W0tXrw4U1BQkO8yuo3zzjsvc+2117Y499nPfjZz00035ami7i8iMqtWrcp3GT3C7t27MxGRqa6uzncpcAA/LxwdPw8cOnN97pnLc8M8TS58cj594oknMr169crs3Lkze27ZsmWZdDqdaWxszGQymcz999+fKSgoyLz//vvZPpWVlZmSkpLM/v37O674TiJpTvUuj4759/B9cn7dv39/pqioKHP77bdnz73//vuZgoKCzIMPPpjJZDKZd955J/OpT30qs3z58myfnTt3Znr16pX51a9+1WG1d0afnGe9z6NnJXqONTY2xoABA/JdBhzUvn374rnnnoupU6e2OD916tR4+umn81QV5E5jY2NEhO/JdEp+XqAjmOvpzMzT5MIn59MtW7bEiBEjoqSkJHvuoosuiubm5njuueeyfSZOnBjpdLpFnzfffDNef/31Dqu9s/Muj5z5Nzdqa2ujoaGhxXtMp9MxceLE7Ht87rnn4oMPPmjRp6SkJEaMGNHj3/Un51nv8+gJ0XPoX/7lX+K+++6La6+9Nt+lwEG99dZb8dFHH0VhYWGL84WFhdHQ0JCnqiA3MplMlJWVxRe/+MUYMWJEvsuBFvy8QEcx19NZmafJhdbm04aGhgO+533605+OY489Nvt9r7U+H7d9b/wL7/LImX9z4+N31dZ7bGhoiGOPPTY+/elPJ/bpiVqbZ73PoydEb0VFRUWkUqk2j23btrUY8+abb8aXv/zl+PrXvx7f+c538lR513Ik75ncS6VSLdqZTOaAc9DVXH/99fHSSy/FsmXL8l0K3ZifF3LDzwPtz1xPZ2Oe5q/lej5t7fvbJ7/vtfZ9MWlsV5LrObUnv8tcMP/mxpG8x57+rtuaZ73PI9c73wV0Rtdff3184xvfaLPPkCFDsn9+8803Y/LkyTFu3Lj4xS9+0c7VdR+H+57JrZNOOimOOeaYA36buHv37gN+MwldyQ033BBr166NzZs3x6mnnprvcujG/LyQG34eaD/mejoj8zSflMv5tKioKJ599tkW595+++344IMPst/3ioqKWv2+GHHgCs2uJpdzak9/l0fD/JsbRUVFEfHn1dHFxcXZ83/9HouKimLfvn3x9ttvt1g9vXv37hg/fnzHFtxJJM2z3ufRE6K34qSTToqTTjrpkPru3LkzJk+eHKNHj47FixdHr14W9x+qw3nP5N6xxx4bo0ePjqqqqvja176WPV9VVRWXXXZZHiuDI5PJZOKGG26IVatWxaZNm2Lo0KH5Loluzs8LueHngfZjrqczMU+TJJfz6bhx4+InP/lJ7Nq1KxsSrV+/PtLpdIwePTrb5+abb459+/bFsccem+1TUlLS5X9pm8s5tae/y6Nh/s2NoUOHRlFRUVRVVcWoUaMi4s/7zVdXV8cdd9wRERGjR4+OT33qU1FVVRVXXnllRETs2rUrfve738Wdd96Zt9rz4WDzrPd59IToR+HNN9+MSZMmxWmnnRZ33XVX/Nu//Vv22se/4SE36urq4k9/+lPU1dXFRx99FDU1NRER8R//43+M//Af/kN+i+vCysrKYsaMGXHOOedkV3LU1dXZpzfH9uzZE6+99lq2XVtbGzU1NTFgwIA47bTT8lhZ9zJnzpx47LHHYs2aNdGvX7/syo+CgoLo27dvnqujJ/PzQu74eeDwmetzw1x+9MzTHK1DmU+nTp0aZ555ZsyYMSN++tOfxp/+9KeYN29efPe7343+/ftHRMTVV18dt912W8yePTtuvvnm2LFjRyxYsCD+/u//vkdtV3CwOdW7PDrm30NzsPl17ty5sWDBghg2bFgMGzYsFixYEMcdd1xcffXVEfHnOeTb3/52/N3f/V2ceOKJMWDAgJg3b16cffbZ8Td/8zf5eqy8ONg8m0qlvM+jleGILV68OBMRrR7k1qxZs1p9zxs3bsx3aV3ez3/+88zgwYMzxx57bOYLX/hCprq6Ot8ldTsbN25s9e/vrFmz8l1at5L0/Xjx4sX5Lo0ezs8LuePngSNjrj965vKjZ57maB3qfPrGG29kLrnkkkzfvn0zAwYMyFx//fWZ999/v0Wfl156KXPBBRdk0ul0pqioKFNRUZHZv39/Rz5O3h3KnOpdHh3z78EdbH7dv39/5sc//nGmqKgok06nMxMmTMj89re/bXGP9957L3P99ddnBgwYkOnbt2/mK1/5Sqauri4PT5NfhzLPep9HJ5XJ/P9PfQAAAAAAAFqwIScAAAAAACQQogMAAAAAQAIhOgAAAAAAJBCiAwAAAABAAiE6AAAAAAAkEKIDAAAAAEACIToAAAAAACQQogMAAAAAQAIhOgAAAAAAJBCiAwAAAABAAiE6AAAAAAAk+H9w7NTrSP3+BwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data_train = np.concatenate([x_train, y_train[:,None]],axis=1)\n", "n_plots_x = int(np.ceil(np.sqrt(data_train.shape[1])))\n", "n_plots_y = int(np.floor(np.sqrt(data_train.shape[1])))\n", "fig, ax = plt.subplots(1, 3, figsize=(15, 5), dpi=100, facecolor='w', edgecolor='k')\n", "ax=ax.ravel()\n", "for idx in range(data_train.shape[1]):\n", " ax[idx].hist(data_train[:,idx].flatten())\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "id": "033b5902-c7df-4dfc-9c6a-4e175a4a4c6a", "metadata": {}, "source": [ "Now let's initialize our Perceptron model, define the type of optimizer and loss we want to use:" ] }, { "cell_type": "code", "execution_count": 4, "id": "dcd27df5-fe85-40e7-b6b5-29a06e290c8a", "metadata": {}, "outputs": [], "source": [ "model = Perceptron(input_size=2, output_size=1)\n", "criterion = torch.nn.MSELoss()\n", "optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)" ] }, { "cell_type": "markdown", "id": "fefbca67-3623-4a34-8dd0-7c6f7e333adb", "metadata": {}, "source": [ "Just for curiosity, let's se how bad a naive model would perform in this task" ] }, { "cell_type": "code", "execution_count": 5, "id": "3ae3a9f1-8bc2-4a25-9a51-66685c565a82", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x_test.shape: torch.Size([50, 2])\n", "y_pred.shape: torch.Size([50, 1])\n", "y_test.shape: torch.Size([50])\n", "Test loss before training 4663.203125\n" ] }, { "data": { "text/plain": [ "Text(0.5, 1.0, 'slope: -148.420, r_value: -0.790')" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "model.eval()\n", "y_pred = model(x_test)\n", "print('x_test.shape: ',x_test.shape)\n", "print('y_pred.shape: ',y_pred.shape)\n", "print('y_test.shape: ',y_test.shape)\n", "before_train = criterion(y_pred.squeeze(), y_test)\n", "print('Test loss before training' , before_train.item())\n", "\n", "y_pred = y_pred.detach().numpy().squeeze()\n", "slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(y_pred, y_test)\n", "\n", "# # Fit line\n", "# x = np.arange(-150,150)\n", "\n", "fig,ax=plt.subplots()\n", "ax.scatter(y_pred, y_test)\n", "# ax.plot(x, intercept + slope*x, 'r', label='fitted line')\n", "ax.set_xlabel('Prediction')\n", "ax.set_ylabel('True')\n", "ax.set_title('slope: {:.3f}, r_value: {:.3f}'.format(slope, r_value))" ] }, { "cell_type": "markdown", "id": "854869aa-777b-4e55-804c-20abcad6d815", "metadata": {}, "source": [ "**Question 1.1**: Can you make sense of this model's output range? " ] }, { "cell_type": "markdown", "id": "0edd1a7e-8911-43c7-97d1-f9862d776bae", "metadata": {}, "source": [ "Now let's train our Perceptron to model this data" ] }, { "cell_type": "code", "execution_count": 6, "id": "21cdb3da-ca7d-42c8-bdbe-c542ac69ff70", "metadata": {}, "outputs": [], "source": [ "model.train()\n", "epoch = 1000\n", "all_loss=[]\n", "for epoch in range(epoch):\n", " optimizer.zero_grad()\n", " # Forward pass\n", " y_pred = model(x_train)\n", " # Compute Loss\n", " loss = criterion(y_pred.squeeze(), y_train)\n", " \n", " # Backward pass\n", " loss.backward()\n", " optimizer.step()\n", " \n", " all_loss.append(loss.item())" ] }, { "cell_type": "code", "execution_count": 7, "id": "e9d48f19-513c-4628-bb70-1e727f57d28e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig,ax=plt.subplots()\n", "ax.plot(all_loss)" ] }, { "cell_type": "code", "execution_count": 8, "id": "576ba478-b5c6-42cc-a811-88a4b3ef4915", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test loss after Training 298.5340576171875\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "model.eval()\n", "with torch.no_grad():\n", " y_pred = model(x_test)\n", " after_train = criterion(y_pred.squeeze(), y_test) \n", " print('Test loss after Training' , after_train.item())\n", "\n", " y_pred = y_pred.detach().numpy().squeeze()\n", " slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(y_pred, y_test)\n", "\n", " # Fit line\n", " x = np.arange(-150,150)\n", "\n", " fig,ax=plt.subplots()\n", " ax.scatter(y_pred, y_test)\n", " ax.plot(x, intercept + slope*x, 'r', label='fitted line')\n", " ax.set_xlabel('Prediction')\n", " ax.set_ylabel('True')\n", " ax.set_title('slope: {:.3f}, r_value: {:.3f}'.format(slope, r_value))" ] }, { "cell_type": "markdown", "id": "77ae39c9-c5ca-443f-bd16-a8e57bfa34eb", "metadata": {}, "source": [ "This results is not bad, but note that we didn't use any activation function. Now let's see what happens when we add an activation" ] }, { "cell_type": "code", "execution_count": 10, "id": "406723ed-892d-446b-afb9-25c09aaf50fe", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test loss after Training 1798.1923828125\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Add activation and retrain the model \n", "del model, optimizer\n", "model = Perceptron(input_size=2, output_size=1, use_activation_fn=True)\n", "criterion = torch.nn.MSELoss()\n", "optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)\n", "\n", "model.train()\n", "epoch = 1000\n", "all_loss=[]\n", "for epoch in range(epoch):\n", " optimizer.zero_grad()\n", " # Forward pass\n", " y_pred = model(x_train)\n", " # Compute Loss\n", " loss = criterion(y_pred.squeeze(), y_train)\n", " \n", " # Backward pass\n", " loss.backward()\n", " optimizer.step()\n", " \n", " all_loss.append(loss.item())\n", "\n", "model.eval()\n", "with torch.no_grad():\n", " y_pred = model(x_test)\n", " after_train = criterion(y_pred.squeeze(), y_test) \n", " print('Test loss after Training' , after_train.item())\n", "\n", " y_pred = y_pred.detach().numpy().squeeze()\n", " slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(y_pred, y_test)\n", "\n", " # Fit line\n", " x = np.arange(-150,150)\n", "\n", " fig,ax=plt.subplots()\n", " ax.scatter(y_pred, y_test)\n", " ax.plot(x, intercept + slope*x, 'r', label='fitted line')\n", " ax.set_xlabel('Prediction')\n", " ax.set_ylabel('True')\n", " ax.set_title('slope: {:.3f}, r_value: {:.3f}'.format(slope, r_value))" ] }, { "cell_type": "markdown", "id": "31566549-7a6f-4c39-ac04-c2f797cbb503", "metadata": {}, "source": [ "**Question 2**: what is happenng to this model? Why do we have so many predicted outputs with 'zeros'?" ] }, { "cell_type": "markdown", "id": "8a5559d1-41bc-4a2c-8013-a842364fac68", "metadata": {}, "source": [ "Let's see what happens when the data and target are normalized" ] }, { "cell_type": "code", "execution_count": 10, "id": "f294e85c-d49a-4d4a-a2c7-b3ee8cea230a", "metadata": {}, "outputs": [], "source": [ "#Now normalize the data\n", "from sklearn.preprocessing import MinMaxScaler\n", "scaler = MinMaxScaler()\n", "\n", "data_train = np.concatenate([x_train, y_train[:,None]],axis=1)\n", "data_train = scaler.fit_transform(data_train)\n", "data_test = np.concatenate([x_test, y_test[:,None]],axis=1)\n", "data_test = scaler.transform(data_test)" ] }, { "cell_type": "code", "execution_count": 11, "id": "bcd65c51-535b-4ddd-ad15-58a7d31e802b", "metadata": {}, "outputs": [ { "data": { "image/png": "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hg0bFkVFRbF69eoYNWpURETs3bs3qqqq4uabb06dN3bs2Fi9enVce+21uWOrVq2KcePGtXnNANAdCdEBAACgg+zevTteeeWV3P7WrVujuro6BgwYEEcffXRcc801MXfu3Bg+fHgMHz485s6dG4ceemhcfPHFuTkzZsyIo446KiorKyMi4uqrr47x48fHzTffHOeff348+uijsWbNmnjyySfb/f4AoDsQogMAAEAH2bhxY5x55pm5/bKysoiImDlzZixcuDBmz54d77zzTlx++eXx9ttvx+jRo2PVqlXRr1+/3Jyampro1es/39Y6bty4WLJkSfzwhz+MG264IY499thYunRpjB49uv1uDAC6ESE6AAAAdJCJEydGkiSp5zOZTFRUVERFRUXqmHXr1u1zbOrUqTF16tRWqBAA8MGiAAAAAACQQogOAAAAAAAphOgAAAAAAJBCiA4AAAAAACmE6AAAAAAAkEKIDgAAAAAAKYToAAAAAACQQogOAAAAAAAphOgAAAAAAJBCiA4AAAAAACmE6AAAAAAAkEKIDgAAAAAAKYToAAAAAACQQogOAAAAAAAphOgAAAAAAJBCiA4AAAAAACl6d3QBAN3F0DkrO7qEZr1207kdXQIAAABAl2MlOgAAAAAApBCiAwAAAABACiE6AAAAAACkEKIDAAAAAEAKIToAAAAAAKQQogNAF7Z+/fo477zzoqSkJDKZTCxfvrzR+SRJoqKiIkpKSqJv374xceLEePHFF/d73WXLlsUJJ5wQ2Ww2TjjhhHjkkUfa6A4AAACgcxOiA0AXtmfPnhg5cmTMnz+/yfO33HJL3HbbbTF//vx49tlno6ioKCZNmhS7du1KveaGDRti2rRpMX369HjhhRdi+vTpcdFFF8UzzzzTVrcBAAAAnVbvji4AADhwpaWlUVpa2uS5JEli3rx5cf3118eFF14YERGLFi2KwsLCeOihh+LSSy9tct68efNi0qRJUV5eHhER5eXlUVVVFfPmzYvFixe3zY0AAABAJ2UlOgB0U1u3bo26urqYPHly7lg2m40JEybEU089lTpvw4YNjeZERJx99tnNzmloaIj6+vpGGwAAAHQHVqIDQDdVV1cXERGFhYWNjhcWFsbrr7/e7Lym5nx0vaZUVlbGjTfemEe1tIehc1Z2dAnQqXWFf0deu+ncji4BAKDHsRIdALq5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B1FYWNjoeGFhYdTV1e0zvry8PMrKynL7H374YfzHf/xHHHHEEZHJZFqlpo9+otDaq9t7Cs8vf55h/jzD/Hh++WvtZ5gkSezatStKSkpaobp0Le3LERF1dXVNjn///ffjzTffjOLi4n3mtHU/9z2cP88wP55f/jzD/HmG+WmL59ce/Vwv5yOeYf48w/x4fvnzDPPXUX83b/UQ/SMfb7JJkjTZeLPZbGSz2UbHDj/88DapqX///r5B8+D55c8zzJ9nmB/PL3+t+Qzb+jUu/+iT9uXmxjd1/CPt1c99D+fPM8yP55c/zzB/nmF+Wvv5tVc/18v5iGeYP88wP55f/jzD/LX3381b/YNFP/WpT8VBBx20z0/Et2/fvs9PwgGAtnUgfbmoqKjJ8b17944jjjiizWoFAPallwNAx2v1EP2QQw6JU045JVavXt3o+OrVq2PcuHGt/eUAgGYcSF8eO3bsPuNXrVoVp556ahx88MFtVisAsC+9HAA6XquH6BERZWVl8T//5/+M++67L15++eW49tpro6amJi677LK2+HL7lc1m48c//vE+v5rGJ+P55c8zzJ9nmB/PL39d+Rnury+Xl5fHjBkzcuMvu+yyeP3116OsrCxefvnluO++++Lee++N6667rqNuoUs//87CM8yP55c/zzB/nmF+uvLz08uJ8Axbg2eYH88vf55h/jrqGWaSj16M1sruuuuuuOWWW2Lbtm1x0kknxe233x7jx49viy8FAOxHc3151qxZ8dprr8W6dety46uqquLaa6+NF198MUpKSuL73/9+h/0wHADQywGgI7VZiA4AAAAAAF1dm7zOBQAAAAAAugMhOgAAAAAApBCiAwAAAABACiE6AAAAAACk6BYh+l133RXDhg2LPn36xCmnnBJPPPFEs+OrqqrilFNOiT59+sQxxxwT99xzTztV2nm15Bk+/PDDMWnSpDjyyCOjf//+MXbs2Hj88cfbsdrOqaXfhx/57W9/G717947PfOYzbVtgJ9fS59fQ0BDXX399DBkyJLLZbBx77LFx3333tVO1nVNLn+GDDz4YI0eOjEMPPTSKi4vjn//5n+Ott95qp2o7l/Xr18d5550XJSUlkclkYvny5fudo5e0Pv08f/p5fvTy/Onn+dPPD5x+3vH08vzp5fnTz/Ojl+dPLz9wnbqXJ13ckiVLkoMPPjj5xS9+kbz00kvJ1VdfnRx22GHJ66+/3uT4V199NTn00EOTq6++OnnppZeSX/ziF8nBBx+c/OpXv2rnyjuPlj7Dq6++Orn55puT//N//k/yxz/+MSkvL08OPvjg5Pnnn2/nyjuPlj7Dj+zYsSM55phjksmTJycjR45sn2I7oQN5fl/5yleS0aNHJ6tXr062bt2aPPPMM8lvf/vbdqy6c2npM3ziiSeSXr16Jf/jf/yP5NVXX02eeOKJ5MQTT0wuuOCCdq68c3jssceS66+/Plm2bFkSEckjjzzS7Hi9pPXp5/nTz/Ojl+dPP8+ffp4f/bxj6eX508vzp5/nRy/Pn16en87cy7t8iH766acnl112WaNjxx9/fDJnzpwmx8+ePTs5/vjjGx279NJLkzFjxrRZjZ1dS59hU0444YTkxhtvbO3SuowDfYbTpk1LfvjDHyY//vGPe3Sjbunz+7d/+7ekoKAgeeutt9qjvC6hpc/wJz/5SXLMMcc0OnbHHXckgwYNarMau4pP0qj1ktann+dPP8+PXp4//Tx/+nnr0c/bn16eP708f/p5fvTy/Onlraez9fIu/TqXvXv3xnPPPReTJ09udHzy5Mnx1FNPNTlnw4YN+4w/++yzY+PGjfHee++1Wa2d1YE8w4/78MMPY9euXTFgwIC2KLHTO9BnuGDBgvjTn/4UP/7xj9u6xE7tQJ7fihUr4tRTT41bbrkljjrqqDjuuOPiuuuui3feeac9Su50DuQZjhs3Lv785z/HY489FkmSxF//+tf41a9+Feeee257lNzl6SWtSz/Pn36eH708f/p5/vTz9qeXtB69PH96ef708/zo5fnTy9tfe/aS3q16tXb25ptvxgcffBCFhYWNjhcWFkZdXV2Tc+rq6poc//7778ebb74ZxcXFbVZvZ3Qgz/DjfvrTn8aePXvioosuaosSO70DeYZbtmyJOXPmxBNPPBG9e3fpfw3zdiDP79VXX40nn3wy+vTpE4888ki8+eabcfnll8d//Md/9Mh3rx3IMxw3blw8+OCDMW3atHj33Xfj/fffj6985Stx5513tkfJXZ5e0rr08/zp5/nRy/Onn+dPP29/eknr0cvzp5fnTz/Pj16eP728/bVnL+nSK9E/kslkGu0nSbLPsf2Nb+p4T9LSZ/iRxYsXR0VFRSxdujQGDhzYVuV1CZ/0GX7wwQdx8cUXx4033hjHHXdce5XX6bXke/DDDz+MTCYTDz74YJx++ulxzjnnxG233RYLFy7ssT/xjmjZM3zppZfie9/7XvzoRz+K5557Ln7961/H1q1b47LLLmuPUrsFvaT16ef508/zo5fnTz/Pn37evvSS1qWX508vz59+nh+9PH96eftqr17SpX/M9qlPfSoOOuigfX6as3379n1+CvGRoqKiJsf37t07jjjiiDartbM6kGf4kaVLl8a3v/3t+OUvfxlf/OIX27LMTq2lz3DXrl2xcePG2LRpU1x55ZUR8ffGkyRJ9O7dO1atWhVf+MIX2qX2zuBAvgeLi4vjqKOOioKCgtyxT3/605EkSfz5z3+O4cOHt2nNnc2BPMPKyso444wz4r/9t/8WERH/9E//FIcddlh8/vOfj//+3/97j1v501J6SevSz/Onn+dHL8+ffp4//bz96SWtRy/Pn16eP/08P3p5/vTy9teevaRLr0Q/5JBD4pRTTonVq1c3Or569eoYN25ck3PGjh27z/hVq1bFqaeeGgcffHCb1dpZHcgzjPj7T7lnzZoVDz30UI9/T1NLn2H//v3j97//fVRXV+e2yy67LEaMGBHV1dUxevTo9iq9UziQ78Ezzjgj/vKXv8Tu3btzx/74xz9Gr169YtCgQW1ab2d0IM/wb3/7W/Tq1bgFHHTQQRHxnz+1JZ1e0rr08/zp5/nRy/Onn+dPP29/eknr0cvzp5fnTz/Pj16eP728/bVrL2n1jyptZ0uWLEkOPvjg5N57701eeuml5JprrkkOO+yw5LXXXkuSJEnmzJmTTJ8+PTf+1VdfTQ499NDk2muvTV566aXk3nvvTQ4++ODkV7/6VUfdQodr6TN86KGHkt69eyc/+9nPkm3btuW2HTt2dNQtdLiWPsOP6+mfAN7S57dr165k0KBBydSpU5MXX3wxqaqqSoYPH5585zvf6ahb6HAtfYYLFixIevfundx1113Jn/70p+TJJ59MTj311OT000/vqFvoULt27Uo2bdqUbNq0KYmI5Lbbbks2bdqUvP7660mS6CXtQT/Pn36eH708f/p5/vTz/OjnHUsvz59enj/9PD96ef708vx05l7e5UP0JEmSn/3sZ8mQIUOSQw45JPnsZz+bVFVV5c7NnDkzmTBhQqPx69atS0aNGpUccsghydChQ5O77767nSvufFryDCdMmJBExD7bzJkz27/wTqSl34f/qKc36iRp+fN7+eWXky9+8YtJ3759k0GDBiVlZWXJ3/72t3auunNp6TO84447khNOOCHp27dvUlxcnHzzm99M/vznP7dz1Z3D2rVrm/3vml7SPvTz/Onn+dHL86ef508/P3D6ecfTy/Onl+dPP8+PXp4/vfzAdeZenkkSvxsAAAAAAABN6dLvRAcAAAAAgLYkRAcAAAAAgBRCdAAAAAAASCFEBwAAAACAFEJ0AAAAAABIIUQHAAAAAIAUQnQAAAAAAEghRAcAAAAAgBRCdAAAAAAASCFEBwAAAACAFEJ0AAAAAABI8f8A8ZRJ6lQCX7QAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_plots_x = int(np.ceil(np.sqrt(data_train.shape[1])))\n", "n_plots_y = int(np.floor(np.sqrt(data_train.shape[1])))\n", "fig, ax = plt.subplots(1, 3, figsize=(15, 5), dpi=100, facecolor='w', edgecolor='k')\n", "ax=ax.ravel()\n", "for idx in range(data_train.shape[1]):\n", " ax[idx].hist(data_train[:,idx].flatten())\n", "fig.tight_layout()" ] }, { "cell_type": "code", "execution_count": 12, "id": "4cd0f06c-76a8-4f27-a23a-1bc7b85df2bf", "metadata": {}, "outputs": [], "source": [ "x_train,y_train = data_train[:,:2],data_train[:,2]\n", "x_test,y_test = data_test[:,:2],data_test[:,2]\n", "\n", "x_train = torch.FloatTensor(x_train)\n", "y_train = torch.FloatTensor(y_train)\n", "\n", "x_test = torch.FloatTensor(x_test)\n", "y_test = torch.FloatTensor(y_test)" ] }, { "cell_type": "code", "execution_count": 14, "id": "63a2405b-a272-4751-a6d0-a4e365cbb544", "metadata": {}, "outputs": [], "source": [ "del model, optimizer\n", "model = Perceptron(input_size=2, output_size=1, use_activation_fn=True)\n", "criterion = torch.nn.MSELoss()\n", "optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)" ] }, { "cell_type": "code", "execution_count": 15, "id": "8da01d5c-e312-4b6a-8909-98a1f2957e35", "metadata": {}, "outputs": [], "source": [ "model.train()\n", "epoch = 1000\n", "all_loss=[]\n", "for epoch in range(epoch):\n", " optimizer.zero_grad()\n", " # Forward pass\n", " y_pred = model(x_train)\n", " # Compute Loss\n", " loss = criterion(y_pred.squeeze(), y_train)\n", " \n", " # Backward pass\n", " loss.backward()\n", " optimizer.step()\n", " \n", " all_loss.append(loss.item())" ] }, { "cell_type": "code", "execution_count": 16, "id": "7ddb9006-fdd8-4732-bc42-851991445d47", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig,ax=plt.subplots()\n", "ax.plot(all_loss)" ] }, { "cell_type": "code", "execution_count": 17, "id": "c74713da-ea8c-4069-aba0-009d7d812bb4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test loss after Training 0.0008271266706287861\n", "0.18696567 0.80532324\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "model.eval()\n", "with torch.no_grad():\n", " y_pred = model(x_test)\n", " after_train = criterion(y_pred.squeeze(), y_test) \n", " print('Test loss after Training' , after_train.item())\n", "\n", " y_pred = y_pred.detach().numpy().squeeze()\n", " slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(y_pred, y_test)\n", "\n", " # Fit line\n", " print(y_test.numpy().min(),y_test.numpy().max())\n", " x = np.linspace(y_test.numpy().min(),y_test.numpy().max(),len(y_test))\n", "\n", " fig,ax=plt.subplots()\n", " ax.scatter(y_pred, y_test)\n", " ax.plot(x, intercept + slope*x, 'r', label='fitted line')\n", " ax.set_xlabel('Prediction')\n", " ax.set_ylabel('True')\n", " ax.set_title('slope: {:.3f}, r_value: {:.3f}'.format(slope, r_value))" ] }, { "cell_type": "markdown", "id": "8ab32742-1b39-40ec-b7f2-474f5459665a", "metadata": {}, "source": [ "Now that we know how to implement a Perceptron and how it works on a toy data, let's see a more interesting dataset. For that, we will use the tree height dataset. For simplicity, let's start with just few variables: latitude (x) and longitude (y)." ] }, { "cell_type": "code", "execution_count": 4, "id": "d4baf219-69cf-43cb-931c-cfdfef792bdb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(66522, 3)\n", " x y h\n", "0 6.894317 49.482459 2.73\n", "1 7.023274 49.510552 10.75\n", "2 7.394650 49.590488 21.20\n", "3 7.396895 49.590968 20.00\n", "4 7.397643 49.591128 24.23\n" ] } ], "source": [ "### Try the the tree height with Perceptron \n", "# data = pd.read_csv('./tree_height/txt/eu_x_y_height_predictors.txt', sep=\" \")\n", "data = pd.read_csv('./tree_height/txt/eu_x_y_height.txt', sep=\" \")\n", "print(data.shape)\n", "print(data.head())" ] }, { "cell_type": "code", "execution_count": 5, "id": "28b39994-e920-4aad-a50f-61adabce41f7", "metadata": {}, "outputs": [], "source": [ "#Normalize the data\n", "from sklearn.preprocessing import MinMaxScaler\n", "scaler = MinMaxScaler()\n", "data = scaler.fit_transform(data)" ] }, { "cell_type": "code", "execution_count": 6, "id": "a2529ed9-00a6-4391-a072-00f68280a634", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([5.287e+03, 2.447e+03, 1.626e+03, 1.406e+03, 1.308e+03, 1.327e+03,\n", " 1.483e+03, 1.721e+03, 1.957e+03, 2.022e+03, 2.131e+03, 2.314e+03,\n", " 2.726e+03, 3.055e+03, 3.551e+03, 3.900e+03, 3.956e+03, 4.169e+03,\n", " 4.049e+03, 3.536e+03, 3.120e+03, 2.561e+03, 1.923e+03, 1.473e+03,\n", " 1.069e+03, 7.340e+02, 5.460e+02, 3.720e+02, 2.410e+02, 1.860e+02,\n", " 1.010e+02, 7.200e+01, 7.300e+01, 4.300e+01, 1.500e+01, 6.000e+00,\n", " 6.000e+00, 6.000e+00, 2.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n", " 1.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n", " 0.000e+00, 1.000e+00]),\n", " array([0. , 0.02, 0.04, 0.06, 0.08, 0.1 , 0.12, 0.14, 0.16, 0.18, 0.2 ,\n", " 0.22, 0.24, 0.26, 0.28, 0.3 , 0.32, 0.34, 0.36, 0.38, 0.4 , 0.42,\n", " 0.44, 0.46, 0.48, 0.5 , 0.52, 0.54, 0.56, 0.58, 0.6 , 0.62, 0.64,\n", " 0.66, 0.68, 0.7 , 0.72, 0.74, 0.76, 0.78, 0.8 , 0.82, 0.84, 0.86,\n", " 0.88, 0.9 , 0.92, 0.94, 0.96, 0.98, 1. ]),\n", " )" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#Inspect the ranges \n", "fig,ax = plt.subplots(1,3,figsize=(15,5))\n", "ax[0].hist(data[:,0],50)\n", "ax[1].hist(data[:,1],50)\n", "ax[2].hist(data[:,2],50)" ] }, { "cell_type": "code", "execution_count": 7, "id": "0c21aafd-7367-4172-9f9a-6cf04eef0f20", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "X_train.shape: torch.Size([46565, 2]), X_test.shape: torch.Size([19957, 2]), y_train.shape: torch.Size([46565]), y_test.shape: torch.Size([19957])\n" ] } ], "source": [ "#Split the data\n", "X_train, X_test, y_train, y_test = train_test_split(data[:,:2], data[:,2], test_size=0.30, random_state=0)\n", "X_train = torch.FloatTensor(X_train)\n", "y_train = torch.FloatTensor(y_train)\n", "X_test = torch.FloatTensor(X_test)\n", "y_test = torch.FloatTensor(y_test)\n", "print('X_train.shape: {}, X_test.shape: {}, y_train.shape: {}, y_test.shape: {}'.format(X_train.shape, X_test.shape, y_train.shape, y_test.shape))" ] }, { "cell_type": "code", "execution_count": 8, "id": "f4608af6-afc4-4201-90df-196f7dec7b7f", "metadata": {}, "outputs": [], "source": [ "# Create percetron\n", "model = Perceptron(input_size=2, output_size=1)\n", "criterion = torch.nn.MSELoss()\n", "optimizer = torch.optim.SGD(model.parameters(), lr = 0.01)" ] }, { "cell_type": "code", "execution_count": 9, "id": "4751f542-6105-459f-8de0-1386860c6dcc", "metadata": {}, "outputs": [], "source": [ "model.train()\n", "epoch = 5000\n", "all_loss=[]\n", "for epoch in range(epoch):\n", " optimizer.zero_grad()\n", " # Forward pass\n", " y_pred = model(X_train)\n", " # Compute Loss\n", " loss = criterion(y_pred.squeeze(), y_train)\n", " \n", " # Backward pass\n", " loss.backward()\n", " optimizer.step()\n", " \n", " all_loss.append(loss.item())" ] }, { "cell_type": "code", "execution_count": 10, "id": "681f2273-6361-4aff-9837-4a84f921cee6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig,ax=plt.subplots()\n", "ax.plot(all_loss)" ] }, { "cell_type": "code", "execution_count": 11, "id": "43652372-29f9-4e83-bd5f-cde9aff3a5bd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test loss after Training 0.021578431129455566\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "model.eval()\n", "with torch.no_grad():\n", " y_pred = model(X_test)\n", " after_train = criterion(y_pred.squeeze(), y_test) \n", " print('Test loss after Training' , after_train.item())\n", "\n", " y_pred = y_pred.detach().numpy().squeeze()\n", " slope, intercept, r_value, p_value, std_err = scipy.stats.linregress(y_pred, y_test)\n", "\n", " fig,ax=plt.subplots()\n", " ax.scatter(y_pred, y_test)\n", " ax.set_xlabel('Prediction')\n", " ax.set_ylabel('True')\n", " ax.set_title('slope: {:.3f}, r_value: {:.3f}'.format(slope, r_value))" ] }, { "cell_type": "markdown", "id": "00aa6061-6b38-4f96-9ad8-018135d57a90", "metadata": {}, "source": [ "**Question 3**: As we can see, the Perceptron didn't perform well with the setup described above. Based on what we have discussed so far, what is wrong with our setup (model and data) and how can we make it better? " ] }, { "cell_type": "code", "execution_count": null, "id": "097c3d68-f635-4df7-9202-b05d1010a7b8", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.6" } }, "nbformat": 4, "nbformat_minor": 5 }