diff --git a/AI/Day2/logistic-regression.ipynb b/AI/Day2/logistic-regression.ipynb index 1d0e188..ee49b91 100644 --- a/AI/Day2/logistic-regression.ipynb +++ b/AI/Day2/logistic-regression.ipynb @@ -2,16 +2,17 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "from typing import Tuple\n", - "from torch import nn\n", - "import torch\n", - "from tqdm import tqdm" + "import sklearn.datasets\n", + "from sklearn.linear_model import SGDClassifier\n", + "\n", + "EPOCH = 100\n", + "LR = 0.1" ] }, { @@ -25,36 +26,59 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "x = (np.random.rand(1_000) * 10).round()\n", - "y = x % 2 == 0\n", - "x = torch.tensor(x, dtype=torch.float32)\n", - "y = torch.tensor(y, dtype=torch.float32)" + "Congratulations on building your first machine learning algorithm ! You were probably getting really impatient of diving into AI. I hope you understand why we wanted to take the time to go through all the basics first, though, because as you could probably tell, our python and numpy skills are going to prove really useful when building machine learning models.\n", + "\n", + "During the first module of the day, you got the gist of the main aspects of a machine learning pipeline:\n", + "- making a prediction\n", + "- computing the loss\n", + "- computing the gradients\n", + "- updating the weight and bias\n", + "\n", + "You'll find that this basic architecture is behind almost everything we'll be doing for the rest of the week.\n", + "\n", + "You will also find that this basic architecture could be recycled so that the developer can focus entirely on the things that do change.\n", + "\n", + "For example, here's an example of how **Linear Regression** can be achieved using the most popular ML library, **pytorch**:\n", + "\n", + "```python\n", + "class LinearRegression(nn.Module):\n", + " def __init__(self):\n", + " self.fc = nn.Linear(***,***)\n", + " def forward(self, x):\n", + " return self.fc(x)\n", + "```\n", + "\n", + "And actually, here's the same for **Logistic Regression**, which is what we'll be implementing by hand in this module !\n", + "\n", + "```python\n", + "class LogisticRegression(nn.Module):\n", + " def __init__(self):\n", + " self.fc = nn.Linear(***,***)\n", + " def forward(self, x):\n", + " x = self.fc\n", + " return F.sigmoid(x)\n", + "```\n", + "\n", + "Cool right ? Well, it might look great for Linear Regression, since you already know what's going on behind the scenes...\\\n", + "But unless you already know how Logistic Regression works, the code sample won't tell you anything !\n", + "\n", + "That's why we're taking the time to learn the (boring?) math behind these algorithms. It might be annoying at first, but I can assure you that understanding why we use Linear instead of Logistic Regression for certain tasks is much more intuitive if you know how they work than if you have no idea." ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "class NeuralNetwork(nn.Module):\n", - " def __init__(self):\n", - " super().__init__()\n", - " self.fc1 = nn.Linear(1000, 1000)\n", + "First of all, we're going to be using an actual ML library before we begin !\n", "\n", - " def forward(self, x):\n", - " x = self.fc1(x)\n", - " x = nn.functional.sigmoid(x)\n", - " return x\n", - " \n", - "model = NeuralNetwork()\n", - "optimizer = torch.optim.SGD(model.parameters(), 0.1)\n", - "loss_fn = nn.BCELoss()" + "The library is called sklearn and it is a wonderful set of tools which can help while working on AI !\n", + "\n", + "In fact, sklearn has implementations of many algorithms, including Linear and Logistic Regression !\n", + "\n", + "It also provides us with plenty of tools to quickly generate and manipulate randomized data for training :" ] }, { @@ -63,113 +87,185 @@ "metadata": {}, "outputs": [], "source": [ - "for e in range(10):\n", - " optimizer.zero_grad()\n", - " y_pred = model.forward(x)\n", - " loss = loss_fn(y_pred, y)\n", - " loss.backward()\n", - " optimizer.step()" + "## Using `make_blobs()`, we generate a sample dataset with 1_000 entries, each with two features.\n", + "## With the `centers` parameter, we tell sklearn to separate the data in two main classes\n", + "## Logistic Regression being a classifier model, we will use it to predict if one data entry\n", + "## belongs to one class or the other !\n", + "x_train, y_train = sklearn.datasets.make_blobs(n_samples=1_000, n_features=2, centers=2)\n", + "\n", + "## This data doesn't mean anything, like Brad's problem in the last module, but if you're wondering\n", + "## how multiple features would translate into a real world problem, imagine if you had data of\n", + "## house prices and their size, and you needed to predict whether Brad would be willing to buy the\n", + "## house or not. That would mean each data entry would have two features: the price and size of the\n", + "## house. The \"x\" would be an array of [price, size] and \"y\" would be a binary value (either true or false).\n", + "x_train.shape, y_train.shape" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "pred = model(x)\n", - "\n", - "(pred.round() == y).sum()" + "We'll use matplotlib to display our data in a nice way :" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 63, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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hwEOERERmY5hAU5VVRVmzpyJvLw8JCUloU+fPliwYAEaGxtlz5sxYwYsFovP1/DhwyM0aiIiIooFXYx64s8//xytra14/vnn0bdvX5SXl6O4uBh1dXV48sknZc+dMGECVq5c6f0+ISFB7+ESERFRDDEswJkwYQImTJjg/f6CCy7AwYMH8dxzzwUNcGw2GxwOh95DJCIiohgVVTk4brcbGRkZQY/bunUrevTogf79+6O4uBgnTpyQPb6hoQEej8fni4iIiMwragKcw4cP4+mnn8asWbNkj5s4cSL+/ve/Y8uWLXjqqaewe/dujB07Fg0NDQHPWbJkCex2u/crOztb6+ETERFRFLEIgiBoecGFCxdi0aJFssfs3r0bl156qff748ePY/To0Rg9ejT++te/qnq+6upq5OTkYO3atbjhhhskj2loaPAJgDweD7Kzs+F2u5GWlqbq+YiIiMgYHo8Hdrtd0f1b8xyckpISTJs2TfaY3Nxc738fP34cY8aMQWFhIV544QXVz+d0OpGTk4NDhw4FPMZms8Fms6m+NhEREcUmzQOczMxMZGZmKjr22LFjGDNmDIYOHYqVK1fCalW/YlZTU4OjR4/C6XSqPpeIiIjMybAcnOPHj+Oqq65CdnY2nnzySXz77bdwuVxwuVw+xw0YMABvvvkmAOC7777DAw88gLKyMlRVVWHr1q2YMmUKMjMzcf311xvxMoiIiCgKGbZN/J133sGXX36JL7/8Eueff77Pz9qnBR08eBButxsAEBcXh/379+OVV17B6dOn4XQ6MWbMGKxbtw6pqakRHT8RERFFL82TjGOBmiQlIiIiig5q7t9Rs02ciIiISCsMcIiIiMh0GOAQERGR6TDAISIiItNhgENERESmwwCHiIiITIcBDhEREZkOAxwiIiIyHQY4REREZDoMcIiIiMh0GOAQERGR6TDAISIiItNhgENERESmwwCHiIiITIcBDhEREZkOAxwiIiIyHQY4REREZDoMcIiIiMh0GOAQERGR6TDAISIiItNhgENERESmwwCHiIiITIcBDhEREZkOAxwiIiIyHQY4REREZDoMcIiIiMh0GOAQERGR6TDAISIiItNhgENERESmwwCHiIiITIcBDhEREZkOAxwiIiIyHQY4REREZDoMcIiIiMh0GOAQERGR6TDAISIiItNhgENERESmY2iAk5ub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+eWX6znEiFDzb8axY8cwZswY72ye//8jZpOQkIChQ4eitLQU119/vfdxcQm7sxAEAXfffTfefPNNbN26FXl5eUYPyRBXX3019u/f7/PY7bffjgEDBuChhx4yJLgBOlGAo8aRI0dQW1uLI0eOoKWlxVvXo2/fvujatSvGjx+P/Px83HrrrXjiiSdQW1uLBx54AMXFxd6ZDTMqLCxEt27dcNttt+F3v/sdkpKS8OKLL6KyshKTJ082engRk5aWhlmzZmHBggXIzs5GTk4OnnjiCQDATTfdZPDoIqd3794+33ft2hUA0KdPn071V+zx48dx1VVXoXfv3njyySfx7bffen/mcDgMHJm+7rvvPtx666249NJLvbNWR44cwaxZs4weWsTMnj0bq1evxltvvYXU1FTvjJbdbkdSUpLBo4uc1NTUDnlHKSkp6N69u7H5SEZu4YpWt912mwCgw9e7777rPebrr78WJk+eLCQlJQkZGRlCSUmJUF9fb9ygI2T37t3C+PHjhYyMDCE1NVUYPny4sHHjRqOHFXGNjY3C/fffL/To0UNITU0VioqKhPLycqOHZajKyspOuU185cqVkv9edIZ/Xp999lkhJydHSEhIEIYMGdLptkcH+txXrlxp9NAMFw3bxC2CIAiRDqqIiIiI9GTuhWIiIiLqlBjgEBERkekwwCEiIiLTYYBDREREpsMAh4iIiEyHAQ4RERGZDgMcIiIiMh0GOERERGQ6DHCIiIjIdBjgEBERkekwwCEiIiLTYYBDREREpvP/AdJoCHBQPvbWAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "EPOCH = 100\n", - "x_train = (np.random.rand(1_000) * 10).round().reshape(1,-1)\n", - "y_train = np.array(x % 2 == 0, dtype=np.int32)" + "plt.scatter(x_train[:,0], x_train[:,1])\n", + "plt.show()" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each entry is represented by a blue circle, and you can clearly see that there are two clearly separate groups of data." + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "global_preds = []\n", - "loss_history = []\n", + "Now, we'll use sklearn's `SGDClassifier` to train a logistic regression on our generated data.\n", "\n", - "w = np.random.rand()\n", - "b = np.random.rand()\n", + "If you're curious, you might stumble upon `LogisticRegression` while browsing through [sklearn's docs](https://scikit-learn.org/stable/supervised_learning.html#supervised-learning), which is also a sklearn model which implements the eponymous algorithm.\n", "\n", - "N = len(x_train)\n", - "LR = 0.0005\n", + "The reason we use `SGDClassifier` instead is because it adds the notion of gradient descent and updating weights to the basic Logistic Regression algorithm.\n", "\n", - "w,b" + ">SGD stands for 'stochastic gradient descent' btw" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "100.0% accuracy\n" + ] + } + ], + "source": [ + "mdl = SGDClassifier(eta0=LR, max_iter=EPOCH)\n", + "mdl.fit(x_train, y_train)\n", + "\n", + "plt.scatter(x_train[:,0], x_train[:,1], c=mdl.predict(x_train))\n", + "plt.show()\n", + "print(f\"{(mdl.predict(x_train) == y_train).mean()*100}% accuracy\")" + ] + }, + { + "cell_type": "code", + "execution_count": 65, "metadata": {}, "outputs": [], "source": [ - "def forward(x: np.array) -> np.array:\n", - " x = x * w + b\n", - " if x >= 0:\n", - " return 1 / (1 + np.exp(-x))\n", - " else:\n", - " return np.exp(x) / 1 + np.exp(x)\n", + "class MyLogisticRegression:\n", + " def __init__(self, max_iter=EPOCH, lr=LR):\n", + " self.epochs = max_iter\n", + " self.lr = lr\n", "\n", + " def fit(self, x: np.ndarray, y: np.ndarray):\n", + " self.w = np.zeros(x.shape[1])\n", + " self.b = 0\n", "\n", - "for e in tqdm(range(EPOCH)):\n", - " dl_dw = 0.0\n", - " dl_db = 0.0\n", + " for i in range(self.epochs):\n", + " y_pred = self.forward(x)\n", + " loss = self.bce(y_pred, y)\n", + " dw, db = self.backward(x, y)\n", + " self.optimize(dw, db)\n", "\n", - " for x, y in zip(x_train, y_train):\n", - " # Prediction\n", - " pred = forward(x).round()\n", + " def optimize(self, dw: np.ndarray, db: np.ndarray):\n", + " self.w -= dw * self.lr\n", + " self.b -= db * self.lr\n", "\n", - " # Gradient descent\n", - " dl_dw += (forward(x) - y) * x\n", - " dl_db += forward(x) - y\n", + " def backward(self, x: np.ndarray, y: np.ndarray):\n", + " y_pred = self.forward(x)\n", + " db = np.mean(y_pred - y)\n", + " dw = np.array([np.mean(grad) for grad in x.T @ (y_pred - y)])\n", + " return dw, db\n", "\n", - " # Getting the average values\n", - " dl_dw *= 1 / N\n", - " dl_db *= 1 / N\n", + " def bce(self, y_pred: np.ndarray, y: np.ndarray):\n", + " return -np.mean(y * np.log(y_pred + 1e-9) + (1 - y) * np.log(1 - y_pred + 1e-9))\n", "\n", - " # Optimization\n", - " w = w - LR * dl_dw\n", - " b = b - LR * dl_db\n", + " def forward(self, x: np.ndarray):\n", + " y_pred = self.linear(x)\n", + " return np.array([self.sigmoid(val) for val in y_pred])\n", "\n", - " # Logging loss\n", - " total_error = 0.0\n", - " for i in range(N):\n", - " total_error += y_train[i] * np.log(forward(x_train[i])) + (\n", - " 1 - y_train[i]\n", - " ) * np.log(forward(x_train[i]))\n", - " loss_history.append(total_error / N)\n", + " def linear(self, x: np.ndarray):\n", + " return self.w @ x.T + self.b\n", "\n", + " def sigmoid(self, x: np.ndarray):\n", + " if x >= 0:\n", + " z = np.exp(-x)\n", + " return 1 / (1 + z)\n", + " else:\n", + " z = np.exp(x)\n", + " return z / (1 + z)\n", "\n", - "plt.plot(loss_history)" + " def predict(self, x):\n", + " y_pred = self.forward(x)\n", + " return np.array([1 if p > 0.5 else 0 for p in y_pred])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 66, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "100.0% accuracy\n" + ] + } + ], "source": [ - "preds = []\n", + "mdl = MyLogisticRegression()\n", + "mdl.fit(x_train, y_train)\n", "\n", - "for x, y in zip(x_train, y_train):\n", - " print(x, y, forward(x))\n", - " preds.append(round(forward(x)))\n", + "plt.scatter(x_train[:,0], x_train[:,1], c=mdl.predict(x_train))\n", + "plt.show()\n", "\n", - "print(f\"{np.average(preds == y_train)*100:.2f}%\")" + "print(f\"{(mdl.predict(x_train) == y_train).mean()*100}% accuracy\")" ] }, {