{ "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 = \"B\"" ] }, { "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:_ LIFE" ] }, { "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:_ diamond" ] }, { "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": [ "1" ] }, "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:_ 1" ] }, { "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([648]),)" ] }, "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:_ 648" ] }, { "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": [ "0.6588026544945301" ] }, "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:_ ~0.65" ] }, { "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([ 4.00031613, -1.0000116 ])" ] }, "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 4.00$, $c_4 \\sim -1.00$" ] }, { "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([0])" ] }, "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:_ 0" ] }, { "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.56" ] }, "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.56" ] }, { "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:_ 4" ] }, { "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([[2. ],\n", " [1.41421356],\n", " [2.44948974]])" ] }, "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.41, ~2, ~2.44" ] }, { "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 }