From d03167d134c6180b198f91839ca523aeebb1aaf0 Mon Sep 17 00:00:00 2001 From: yenru0 Date: Mon, 15 Sep 2025 14:12:40 +0900 Subject: [PATCH] add L3.ipynb --- .gitattributes | 2 +- L2.ipynb | 1 + L3.ipynb | 163 ++++++++++++++++++++++++++++++++++++++++++++++++ main.py | 6 -- pdf/L2_Note.pdf | 3 + pyproject.toml | 1 + uv.lock | 17 +++++ 7 files changed, 186 insertions(+), 7 deletions(-) create mode 100644 L3.ipynb delete mode 100644 main.py create mode 100644 pdf/L2_Note.pdf diff --git a/.gitattributes b/.gitattributes index 7524160..32f8662 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,3 @@ [attr]lfs-file filter=lfs diff=lfs merge=lfs -text -*.pdf lfs-file +"*.pdf" lfs-file diff --git a/L2.ipynb b/L2.ipynb index 3959cfd..7eae5c4 100644 --- a/L2.ipynb +++ b/L2.ipynb @@ -74,6 +74,7 @@ "id": "84468a76", "metadata": {}, "source": [ + "## trace \n", "$tr[M] = \\sum^{D}_{i=1}{M_{ii}}$" ] }, diff --git a/L3.ipynb b/L3.ipynb new file mode 100644 index 0000000..a837176 --- /dev/null +++ b/L3.ipynb @@ -0,0 +1,163 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "70f73980", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "id": "e8012b5c", + "metadata": {}, + "source": [ + "# Numerical Optimization\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "bea6fa0f", + "metadata": {}, + "source": [ + "## Linear Classifier\n", + "\n", + "$D = \\set{x_i, y_i }^N_{i=1}$ is given. ($x_i \\in \\R^D,\\, y_i\\in \\set{0, 1}$)\n", + "\n", + "like" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "3ad846b8", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAi4AAAGiCAYAAADA0E3hAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAKdtJREFUeJzt3QtQ1XX+//E3ooBOgZWrKKKUlXYxNW+r5gS7bEw2hlO2bDje8rJdthGdNjVLs5vdB7cwJ7tYU6ktP2ucdKjWYqqNXSfMmWrTptRAVlDXBNMCw+9/3p/zP8Q5HJAD5/Y55/mYOR2/n/P5cr7wFc+rzzXOcRxHAAAALNAl3BcAAADQXgQXAABgDYILAACwBsEFAABYg+ACAACsQXABAADWILgAAABrEFwAAIA1CC4AAMAaBBcAABC9weWjjz6SyZMnS79+/SQuLk7efvvtM55TWloqV155pSQmJsqFF14o69ev7+j1AgCAGOZ3cDlx4oQMGzZMioqK2lV/3759ct1110lWVpbs2rVLCgoKZO7cufLuu+925HoBAEAMi+vMJova4vLWW2/JlClTWq2zePFi2bp1q3z55ZdNZX/605/k2LFjUlJS0tG3BgAAMahrsN+grKxMsrOzPcpycnJMy0tr6uvrzcPt9OnTcvToUTnvvPNMWAIAAJFP20aOHz9uhpd06dLFjuBSXV0tffr08SjT47q6Ovnpp5+ke/fuLc5ZtWqVrFy5MtiXBgAAQqCyslL69+9vR3DpiKVLl8qiRYuajmtra2XAgAHmG09OTg7rtQEAgPbRRor09HQ5++yzJVCCHlxSU1OlpqbGo0yPNYD4am1ROvtIH970HIILAAB2CeQwj6Cv4zJu3DjZvn27R9n7779vygEAAIIaXH788UczrVkf7unO+ueKioqmbp4ZM2Y01b/11ltl7969cvfdd8vu3btlzZo18uabb8rChQv9fWsAABDj/A4un332mYwYMcI8lI5F0T8vX77cHB88eLApxKjzzz/fTIfWVhZd/+Wpp56SF154wcwsAgAACNk6LqEc3JOSkmIG6TLGBQDQEfpx98svv0hjY2O4LyVqxMfHS9euXVsdwxKMz++InFUEAEAgNTQ0mB6BkydPhvtSok6PHj2kb9++kpCQEJL3I7gAAKKaLmKq4zG1dUAXQtMPWBYzDUwLlgbCw4cPm5/vRRddFLBF5tpCcAEARDX9cNXwouuJaOsAAkeXNenWrZt8//335ueclJQkwRb8aAQAQAQIRWtALOoS4p8rdxEAAFiD4AIAAKxBcAEAANYguAAAgCZHjx6VadOmmXVXevbsKXPmzDGr5kcKggsAAO2li9eVlops2OB6jsLF7KZNmyZfffWVWfH+nXfekY8++kjmz58vkYLgAgBAe2zeLJKRIZKVJZKf73rWYy0PgldffVXOO+88qa+v9yifMmWKTJ8+PSjv+fXXX0tJSYnZmmfs2LFy1VVXyTPPPCMbN26U//73vxIJCC4AAJyJhpOpU0UOHPAsr6pylQchvNx0001me4ItW7Y0lR06dMjs/3fLLbe0et5ll10mZ511VquPa6+9ttVzy8rKTPfQqFGjmsqys7PNlOd///vfEglYgA4AgLZod9CCBbpUbMvXtExX4S0oEMnN1c17Arq4W35+vrz88ssmxKjXXntNBgwYIJmZma2et23bNjl16lSbX7c11dXV0rt3b48y3Yvo3HPPNa9FAoILAABt+fjjli0t3uGlstJVr41A0RHz5s2T0aNHS1VVlaSlpcn69etl1qxZbW5ZMHDgQIlmdBUBANCWgwcDW88PI0aMkGHDhpnxLuXl5WbQrAaXtnSmqyg1NdV0RzWnO2rrTCN9LRLQ4gIAQFv69g1sPT/NnTtXCgsLTatLdna22XOpLZ3pKho3bpwcO3bMhKSRI0easg8++MDs9aSDdSNBnKPbO0a4uro6SUlJkdraWjOvHACA9vr555/N7sXnn39+xzYB1DEuOntIB+L6+sjUbpv+/UX27QvoGBc3/ezTXa215ePVV1+VvLw8CSZtkampqZG1a9eaADR79mwzWPeNN97w++cbjM9vuooAAGiLhpHVq11/9h5b4j4uLAxKaFH6wX/jjTeabp4pU6ZIsL3++usyZMgQ+f3vfy+TJk0yU6Kff/55iRR0FQEAcCY33CBSXOyaXdR8oK62tGho0deDSLuJdGG4xMRECTadQdRa60okILgAANAeGk50yrPOHtKBuDqmZeLEoLW0qB9++EFKS0vNY82aNUF7H5sQXAAAaC8NKQGe8nymWUUaXh577DEZPHhwyN43khFcAACIUPv37w/3JUQcBucCAABrEFwAAIA1CC4AAMAaBBcAAGANggsAALAGwQUAAFiD4AIAAKxBcAEA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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "np.random.seed(7)\n", + "\n", + "y = np.random.randint(0, 2, size=20)\n", + "\n", + "x = np.random.normal(0, 0.08, size=(2, 20)) + np.vstack([y / 2 + 0.25, y / 2 + 0.25])\n", + "\n", + "plt.xlim(0, 1)\n", + "plt.ylim(0, 1)\n", + "\n", + "plt.scatter(x[0, :][y == 0], x[1, :][y == 0], color=\"red\", label=\"y = 0\")\n", + "plt.scatter(x[0, :][y == 1], x[1, :][y == 1], color=\"blue\", label=\"y = 1\")\n", + "\n", + "plt.legend()\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "8b9e393c", + "metadata": {}, + "source": [ + "we want to create a **classifier**" + ] + }, + { + "cell_type": "markdown", + "id": "8bb1768a", + "metadata": {}, + "source": [ + "first, set a target function\n", + "\n", + "$$L(w) = \\frac{1}{2}\\sum_{i}^{N}{| f(x_i; w) - y_i|^2}$$\n", + "\n", + "then how to get $w^* = \\text{argmin} L(w) $: $w$ to get lowest $L(w)$" + ] + }, + { + "cell_type": "markdown", + "id": "18da07bf", + "metadata": {}, + "source": [ + "## Learning (Optimization)\n", + "\n", + "$$f(x; w) = w^Tx$$\n", + "\n", + "$$L(w) = \\frac{1}{2}\\sum{|w^Tx_i - y_i|^2} \\\\=\\frac{1}{2} (w^Tx - y)^2\\\\= \\frac{1}{2}{(w^Tx - y)}^T{(w^Tx - y)}$$\n", + "\n", + "$$\\frac{dL}{dw} = x(x^Tw-y)$$\n", + "\n", + "in order to minimize $L(w)$, \n", + "$$\\left.\\frac{dL}{dw}\\right|_{w=w^*} = 0$$\n", + "\n", + "therefore,\n", + "\n", + "$$\\frac{dL}{dw} = $$\n" + ] + }, + { + "cell_type": "markdown", + "id": "bcb16cc8", + "metadata": {}, + "source": [ + "Analytic Method\n", + "\n", + "$$\\frac{dL}{dw} = 0 \\to$$\n", + "\n", + "Numerical Method\n", + "\n", + "* gradient descent\n", + "\n", + "$$w_{t+1} = w_t - \\eta \\left . \\frac{dL}{dw} \\right |_{w=w_t}$$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "71cb6971", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "6577fc8a", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "2025-02-AI (3.12.11)", + "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.12.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/main.py b/main.py deleted file mode 100644 index 9921f16..0000000 --- a/main.py +++ /dev/null @@ -1,6 +0,0 @@ -def main(): - print("Hello from 2025-02-ai!") - - -if __name__ == "__main__": - main() diff --git a/pdf/L2_Note.pdf b/pdf/L2_Note.pdf new file mode 100644 index 0000000..fa8772c --- /dev/null +++ b/pdf/L2_Note.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:365ba68d0ee6ebffca90c1a95faab1b9b48c72f8313b9fe377ad506e248edc45 +size 4922087 diff --git a/pyproject.toml b/pyproject.toml index f6a3a68..26cd892 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,4 +8,5 @@ dependencies = [ "jupyter>=1.1.1", "matplotlib>=3.10.6", "numpy>=2.3.3", + "pymupdf>=1.26.4", ] diff --git a/uv.lock b/uv.lock index 2997a6a..03868e2 100644 --- a/uv.lock +++ b/uv.lock @@ -14,6 +14,7 @@ dependencies = [ { name = "jupyter" }, { name = "matplotlib" }, { name = "numpy" }, + { name = "pymupdf" }, ] [package.metadata] @@ -21,6 +22,7 @@ requires-dist = [ { name = "jupyter", specifier = ">=1.1.1" }, { name = "matplotlib", specifier = ">=3.10.6" }, { name = "numpy", specifier = ">=2.3.3" }, + { name = "pymupdf", specifier = ">=1.26.4" }, ] [[package]] @@ -1419,6 +1421,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, ] +[[package]] +name = "pymupdf" +version = "1.26.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/35/031556dfc0d332d8e9ed9b61ca105138606d3f8971b9eb02e20118629334/pymupdf-1.26.4.tar.gz", hash = "sha256:be13a066d42bfaed343a488168656637c4d9843ddc63b768dc827c9dfc6b9989", size = 83077563, upload-time = "2025-08-25T14:20:29.499Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/ae/3be722886cc7be2093585cd94f466db1199133ab005645a7a567b249560f/pymupdf-1.26.4-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cb95562a0a63ce906fd788bdad5239063b63068cf4a991684f43acb09052cb99", size = 23061974, upload-time = "2025-08-25T14:16:58.811Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b0/9a451d837e1fe18ecdbfbc34a6499f153c8a008763229cc634725383a93f/pymupdf-1.26.4-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:67e9e6b45832c33726651c2a031e9a20108fd9e759140b9e843f934de813a7ff", size = 22410112, upload-time = "2025-08-25T14:17:24.511Z" }, + { url = "https://files.pythonhosted.org/packages/d8/13/0916e8e02cb5453161fb9d9167c747d0a20d58633e30728645374153f815/pymupdf-1.26.4-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:2604f687dd02b6a1b98c81bd8becfc0024899a2d2085adfe3f9e91607721fd22", size = 23454948, upload-time = "2025-08-25T21:20:07.71Z" }, + { url = "https://files.pythonhosted.org/packages/4e/c6/d3cfafc75d383603884edeabe4821a549345df954a88d79e6764e2c87601/pymupdf-1.26.4-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:973a6dda61ebd34040e4df3753bf004b669017663fbbfdaa294d44eceba98de0", size = 24060686, upload-time = "2025-08-25T14:17:56.536Z" }, + { url = "https://files.pythonhosted.org/packages/72/08/035e9d22c801e801bba50c6745bc90ba8696a042fe2c68793e28bf0c3b07/pymupdf-1.26.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:299a49797df5b558e695647fa791329ba3911cbbb31ed65f24a6266c118ef1a7", size = 24265046, upload-time = "2025-08-25T14:18:21.238Z" }, + { url = "https://files.pythonhosted.org/packages/28/8c/c201e4846ec0fb6ae5d52aa3a5d66f9355f0c69fb94230265714df0de65e/pymupdf-1.26.4-cp39-abi3-win32.whl", hash = "sha256:51b38379aad8c71bd7a8dd24d93fbe7580c2a5d9d7e1f9cd29ebbba315aa1bd1", size = 17127332, upload-time = "2025-08-25T14:18:39.132Z" }, + { url = "https://files.pythonhosted.org/packages/d1/c4/87d27b108c2f6d773aa5183c5ae367b2a99296ea4bc16eb79f453c679e30/pymupdf-1.26.4-cp39-abi3-win_amd64.whl", hash = "sha256:0b6345a93a9afd28de2567e433055e873205c52e6b920b129ca50e836a3aeec6", size = 18743491, upload-time = "2025-08-25T14:19:01.104Z" }, +] + [[package]] name = "pyparsing" version = "3.2.3"