{ "cells": [ { "cell_type": "markdown", "id": "07d17aca", "metadata": {}, "source": [ "# Math599 2022S" ] }, { "cell_type": "markdown", "id": "aec20849", "metadata": {}, "source": [ "## ML-exam" ] }, { "cell_type": "markdown", "id": "a28b2d94", "metadata": {}, "source": [ "Name: " ] }, { "cell_type": "markdown", "id": "bddbf2f2", "metadata": {}, "source": [ "Student ID #: " ] }, { "cell_type": "markdown", "id": "f8f6de4f", "metadata": {}, "source": [ "Please read the instructions carefully:\n", "1. Write your **name** and **Student ID #** first.\n", "2. You are allowed to use the internet, but you are **NOT allowed to communicate** with others in any form.\n", "3. Different problems might use same variable names. Make sure you use the right one to answer the problem.\n", "4. If the answer is too long, it is enough write **two digits after the decimal point**.\n", "5. Please copy your answer and paste it into the Markdown cell with \"_Your answer:_\".\n", "6. Run the next cell first. Then you may start." ] }, { "cell_type": "code", "execution_count": 1, "id": "869f73b5", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "ver = \"A\"" ] }, { "cell_type": "markdown", "id": "f20c914f", "metadata": {}, "source": [ "---" ] }, { "cell_type": "markdown", "id": "4645bb63", "metadata": {}, "source": [ "###### Problem 1 [2pt]" ] }, { "cell_type": "markdown", "id": "c74c9021", "metadata": {}, "source": [ "Let \n", "```python \n", "data = np.genfromtxt(\"p1-%s.csv\"%ver, delimiter=\",\")\n", "```\n", "If you project the points (rows) in `data` onto its 0-th and 1-st principal components, then you will see a four-letter word in upper case. \n", "What is the word? \n", "(Note the word might be upside down or left/right mirrored.)" ] }, { "cell_type": "code", "execution_count": 2, "id": "8fa6b89e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "### your code to reach the answer\n", "data = np.genfromtxt(\"p1-%s.csv\"%ver, delimiter=\",\")\n", "\n", "from sklearn.decomposition import PCA\n", "model = PCA(2)\n", "X_new = model.fit_transform(data)\n", "\n", "plt.axis(\"equal\")\n", "plt.scatter(*X_new.T)" ] }, { "cell_type": "markdown", "id": "1f891a80", "metadata": {}, "source": [ "_Your answer:_ Free" ] }, { "cell_type": "markdown", "id": "9a821199", "metadata": {}, "source": [ "###### Problem 2 [2pt]" ] }, { "cell_type": "markdown", "id": "f52345ed", "metadata": {}, "source": [ "Let \n", "```python\n", "dist = np.genfromtxt(\"p2-%s.csv\"%ver, delimiter=\",\")\n", "```\n", "be the distance matrix of a dataset. \n", "Use MDS to reconstruct the dataset in $\\mathbb{R}^2$. \n", "Then draw the scatter plot of them. \n", "You are supposed to see one of the four suit symbols:\n", "\n", "- spade ♠\n", "- heart ♥\n", "- diamond ♦\n", "- club ♣\n", "\n", "What do you see? " ] }, { "cell_type": "code", "execution_count": 3, "id": "4557e2f7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "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": [ "### your code to reach the answer\n", "dist = np.genfromtxt(\"p2-%s.csv\"%ver, delimiter=\",\")\n", "\n", "from sklearn.manifold import MDS\n", "model = MDS(dissimilarity=\"precomputed\")\n", "X_new = model.fit_transform(dist)\n", "\n", "plt.axis(\"equal\")\n", "plt.scatter(*X_new.T)" ] }, { "cell_type": "markdown", "id": "ae2c5dde", "metadata": {}, "source": [ "_Your answer:_ heart" ] }, { "cell_type": "markdown", "id": "4037b735", "metadata": {}, "source": [ "###### Problem 3 [2pt]" ] }, { "cell_type": "markdown", "id": "8214252d", "metadata": {}, "source": [ "Let \n", "```python\n", "X = np.genfromtxt(\"p3-%s.csv\"%ver, delimiter=\",\")\n", "y = np.array([0]*50 + [1]*50 + [2]*50 + [3]*50)\n", "w = np.array([0,0,0,0])\n", "```\n", "Suppose after training a $k$-means model with the data `X` , \n", "the output label array is `y` . \n", "What is the predicted label of `w` under this setting?" ] }, { "cell_type": "code", "execution_count": 4, "id": "6027603e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "### your code to reach the answer\n", "X = np.genfromtxt(\"p3-%s.csv\"%ver, delimiter=\",\")\n", "y = np.array([0]*50 + [1]*50 + [2]*50 + [3]*50)\n", "w = np.array([0,0,0,0])\n", "\n", "centers = np.zeros((4,X.shape[1]))\n", "for i in range(4):\n", " centers[i] = X[y == i].mean(axis=0)\n", " \n", "dist = np.sqrt(np.sum((centers - w) ** 2, axis=1))\n", "dist.argmin()" ] }, { "cell_type": "markdown", "id": "d5ad1024", "metadata": {}, "source": [ "_Your answer:_ 2" ] }, { "cell_type": "markdown", "id": "d3b78dc4", "metadata": {}, "source": [ "###### Problem 4 [2pt]" ] }, { "cell_type": "markdown", "id": "c39707fe", "metadata": {}, "source": [ "Let \n", "```python\n", "X = np.genfromtxt(\"p4-%s.csv\"%ver, delimiter=\",\")\n", "```\n", "One of the data points (rows) in `X` is an obvious outlier. \n", "Use DBSCAN to find its index. " ] }, { "cell_type": "code", "execution_count": 5, "id": "30881c17", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([375]),)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "### your code to reach the answer\n", "X = np.genfromtxt(\"p4-%s.csv\"%ver, delimiter=\",\")\n", "\n", "from sklearn.cluster import DBSCAN\n", "model = DBSCAN()\n", "y_new = model.fit_predict(X)\n", "\n", "np.where(y_new == -1)" ] }, { "cell_type": "markdown", "id": "74c9f212", "metadata": {}, "source": [ "_Your answer:_ 375" ] }, { "cell_type": "markdown", "id": "aa4b2acf", "metadata": {}, "source": [ "###### Problem 5 [2pt]" ] }, { "cell_type": "markdown", "id": "f5095930", "metadata": {}, "source": [ "Let \n", "```python\n", "data = np.genfromtxt(\"p5-%s.csv\"%ver, delimiter=\",\")\n", "x,y = data.T\n", "```\n", "Let $x_i$ and $y_i$ be the entries in `x` and `y` , respectively. \n", "Let $f(x) = 3 + 4x$. \n", "Find the value $\\sum_{i} (f(x_i) - y_i)^2$. " ] }, { "cell_type": "code", "execution_count": 6, "id": "fc006257", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4.849279764498071" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "### your code to reach the answer\n", "data = np.genfromtxt(\"p5-%s.csv\"%ver, delimiter=\",\")\n", "x,y = data.T\n", "\n", "np.sum((3 + 4*x - y)**2) " ] }, { "cell_type": "markdown", "id": "7f24fc2a", "metadata": {}, "source": [ "_Your answer:_ ~4.84" ] }, { "cell_type": "markdown", "id": "b1023f76", "metadata": {}, "source": [ "###### Problem 6 [2pt]" ] }, { "cell_type": "markdown", "id": "1fecc353", "metadata": {}, "source": [ "Let \n", "```python\n", "data = np.genfromtxt(\"p6-%s.csv\"%ver, delimiter=\",\")\n", "x,y = data.T\n", "```\n", "Let $x_i$ and $y_i$ be the entries in `x` and `y` , respectively. \n", "Let $f(x) = c_2x^2 + c_4x^4$. \n", "Find $c_2, c_4$ such that $\\sum_{i} (f(x_i) - y_i)^2$ is minimized." ] }, { "cell_type": "code", "execution_count": 7, "id": "7e19ee43", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-1.99944934, 2.99999746])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "### your code to reach the answer\n", "data = np.genfromtxt(\"p6-%s.csv\"%ver, delimiter=\",\")\n", "x,y = data.T\n", "\n", "X = x[:,np.newaxis] ** np.array([2,4])\n", "from sklearn.linear_model import LinearRegression\n", "model = LinearRegression(fit_intercept=False)\n", "model.fit(X, y)\n", "model.coef_" ] }, { "cell_type": "markdown", "id": "b80f0205", "metadata": {}, "source": [ "_Your answer:_ $c_2 \\sim -1.99$, $c_4 \\sim 2.99$" ] }, { "cell_type": "markdown", "id": "ee06e733", "metadata": {}, "source": [ "###### Problem 7 [2pt]" ] }, { "cell_type": "markdown", "id": "d5d8fe2f", "metadata": {}, "source": [ "Let \n", "```python\n", "path = \"p7-%s\"%ver\n", "```\n", "There are 100 pictures in the `path` folder, \n", "where `digits00` ~ `digits49` are pictures of hand-written digit 0, \n", "while `digits50` ~ `digits99` are pictures of hand-written digit 1. \n", "Train an $k$-nearest neighbor classification model with `k = 5` . \n", "Then predict what is the hand-written digit (0 or 1) in `blur.png` ." ] }, { "cell_type": "code", "execution_count": 8, "id": "0179b01d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "### your code to reach the answer\n", "path = \"p7-%s\"%ver\n", "\n", "import os\n", "from PIL import Image\n", "X = np.zeros((100, 28, 28), dtype=int)\n", "for j in range(100):\n", " img = Image.open(os.path.join(path, \"digit%02d.png\"%j))\n", " X[j] = np.array(img)\n", "X_flat = X.reshape(100, 28*28)\n", "y = np.array([0]*50 + [1]*50)\n", "\n", "img = Image.open(os.path.join(path, \"blur.png\"))\n", "blur = np.array(img)\n", "blur_flat = blur.reshape(1, 28*28)\n", "\n", "from sklearn.neighbors import KNeighborsClassifier \n", "model = KNeighborsClassifier(5)\n", "model.fit(X_flat, y)\n", "y_new = model.predict(blur_flat)\n", "y_new" ] }, { "cell_type": "markdown", "id": "ac8180b1", "metadata": {}, "source": [ "_Your answer:_ 1" ] }, { "cell_type": "markdown", "id": "6fb8084a", "metadata": {}, "source": [ "###### Problem 8 [2pt]" ] }, { "cell_type": "markdown", "id": "2ff55bfa", "metadata": {}, "source": [ "Let \n", "```python\n", "y = np.genfromtxt(\"p8-%s.csv\"%ver, delimiter=\",\")\n", "```\n", "The array `y` contains 1000 labels, \n", "representing the three categories `0, 1, 2` . \n", "Find the Gini impurity of `y` ." ] }, { "cell_type": "code", "execution_count": 9, "id": "1b592d99", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.33999999999999997" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "### your code to reach the answer\n", "y = np.genfromtxt(\"p8-%s.csv\"%ver, delimiter=\",\")\n", "\n", "dtrib = np.unique(y, return_counts=True)[1]\n", "prob = dtrib / dtrib.sum()\n", "np.sum(prob * (1 - prob))" ] }, { "cell_type": "markdown", "id": "a32b204e", "metadata": {}, "source": [ "_Your answer:_ ~0.33" ] }, { "cell_type": "markdown", "id": "a79222bc", "metadata": {}, "source": [ "###### Problem 9 [2pt]" ] }, { "cell_type": "markdown", "id": "81b41427", "metadata": {}, "source": [ "Let \n", "```python\n", "X = np.genfromtxt(\"p9-%s.csv\"%ver, delimiter=\",\")\n", "```\n", "Train $k$-means models with `k = 1,2,...,10` \n", "and find the corresponding inertias. \n", "Use the elbow method to suggest the number of clusters in `X` ." ] }, { "cell_type": "code", "execution_count": 10, "id": "60d73c16", "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": [ "### your code to reach the answer\n", "X = np.genfromtxt(\"p9-%s.csv\"%ver, delimiter=\",\")\n", "\n", "from sklearn.cluster import KMeans\n", "\n", "inertias = []\n", "for k in range(1,11):\n", " model = KMeans(k)\n", " model.fit(X)\n", " inertias.append(model.inertia_)\n", " \n", "plt.plot(np.arange(1,11), inertias)" ] }, { "cell_type": "markdown", "id": "98c62ee2", "metadata": {}, "source": [ "_Your answer:_ 3" ] }, { "cell_type": "markdown", "id": "75db8030", "metadata": {}, "source": [ "###### Problem 10 [2pt]" ] }, { "cell_type": "markdown", "id": "4bd084a7", "metadata": {}, "source": [ "Let \n", "```python \n", "X = np.genfromtxt(\"p10-%s.csv\"%ver, delimiter=\",\")\n", "```\n", "It is known that the points (rows) in `X` look like three layers of spheres centered at the origin. \n", "Find their radii. \n", "\n", "Recall that the radius of a sphere centered at the origin is $\\sqrt{x^2 + y^2 + z^2}$ \n", "for any point $(x,y,z)$ on the sphere. " ] }, { "cell_type": "code", "execution_count": 11, "id": "1e3c39ae", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1.73205081],\n", " [1. ],\n", " [2.23606798]])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "### your code to reach the answer\n", "X = np.genfromtxt(\"p10-%s.csv\"%ver, delimiter=\",\")\n", "\n", "radii = np.sqrt(np.sum(X**2, axis=1))[:,np.newaxis]\n", "from sklearn.cluster import KMeans\n", "model = KMeans(3)\n", "model.fit(radii)\n", "\n", "model.cluster_centers_" ] }, { "cell_type": "markdown", "id": "775a8c8c", "metadata": {}, "source": [ "_Your answer:_ ~1, ~1.73, ~2.23" ] }, { "cell_type": "markdown", "id": "88a3105f", "metadata": {}, "source": [ "###### Problem 11 [extra 2pt]" ] }, { "cell_type": "markdown", "id": "9a61a2b9", "metadata": {}, "source": [ "Suppose your have 1000 pictures of pictures and \n", "they are labeled by either `0` for dogs or `1` for cats. \n", "If you want to train a model to make a prediction of other pictures \n", "on whether they are pictures of dogs or cats, \n", "which model you would choose. \n", "\n", "Choose from one of the following: \n", "\n", "1. PCA\n", "2. MDS\n", "3. KMeans\n", "4. DBSCAN\n", "5. LinearRegression\n", "6. PolynomialRegression\n", "7. KNeighborsClassifier\n", "8. DecisionTreeClassifier\n", "\n", "The answer might not be unique. \n", "Add one or two sentences to justify your choice." ] }, { "cell_type": "markdown", "id": "73d873a9", "metadata": {}, "source": [ "_Your answer:_ Either 7 or 8 is okay, since it is a classification problem." ] }, { "cell_type": "markdown", "id": "c2b8c98a", "metadata": {}, "source": [ "--- \n", "Exam ends here. \n", "Total point = 20 (+2)" ] }, { "cell_type": "code", "execution_count": null, "id": "9a72916c", "metadata": {}, "outputs": [], "source": [ "### points for each problem\n", "pts = [0,0,0,0,0, \n", " 0,0,0,0,0, \n", " 0]\n", "total = sum(pts)\n", "print(\"Your total score =\", total)" ] } ], "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.4" } }, "nbformat": 4, "nbformat_minor": 5 }