Spaces:
Running
Running
File size: 80,410 Bytes
4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 4d66ab2 dfffde9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 |
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "ogyGegNMFfOL"
},
"source": [
"# Probability Assignment"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7RYSxqsYFfON"
},
"source": [
"To get full credit in this assignment you need to use only `numpy` or `jax` libraries and include adequate explanation of the code in either markdown cells or code comments. Sometimes you need to type equations - type equations in latex math notation. \n",
"\n",
"PS: Please note that we run through chatGPT the questions and you will be referred to the Dean if we find that a robot answered your questions. ."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OmcsFi7hFfON"
},
"source": [
"## Question 1a (10 points)\n",
"\n",
"In a private subreddit people are posting their opinions on the CEO of the company you work for. Lets assume that the employees that are posting are random logging in to that subreddit and that each post indicates whether the employee approves or not the job that the CEO is doing. Let $x_i$ be the binary random variable where $x_i=1$ indicates approval. You can assume that $x$ is distributed according to a Bernoulli distribution with parameter $p=1/2$.\n",
"\n",
"Your job is to sample $n=50$ posts and estimate the approval rate of the CEO by considering the statistics of $y=x_1+x_2+ \\dots + x_n$. What is the probability that 25 employees approve the CEO?\n",
"\n",
"## Question 1b (10 points)\n",
"\n",
"Following your findings in Q1a, read about the [Cenral Limit Theorem](https://en.wikipedia.org/wiki/Central_limit_theorem) and recognize that \n",
"\n",
"$$z=\\frac{y-\\mu_y}{\\sigma_y}$$ \n",
"\n",
"is normally distributed with mean 0 and variance 1.\n",
"\n",
"Can you find the probability that 25 employees approve the CEO using the Gaussian approximation?\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OEghMNtSFfON"
},
"source": [
"Type the answer here using the [latex syntax](https://wch.github.io/latexsheet/) or handwrite the answer, upload the picture in the same folder and use a new markdown cell with markdown syntax `![title](image_name.png)`"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "f1izFdSuwULb"
},
"source": [
"![Question 1 A](As1Q1a.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "npE7QXr6w_wF"
},
"source": [
"![Question 1 B](As1Qb.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Uljs0RusFfOO"
},
"source": [
"## Question 2 (20 points)\n",
"\n",
"A sequential experiment involves repeatedly drawing a ball from one of the two urns, noting the number on the ball and replacing the ball in the urn. Urn 0 contains a ball with the number 0 and two balls with the number 1. Urn 1 contains five balls with the number 0 and one ball with the number 1. \n",
"\n",
"The urn from which the first ball is drawn is selected by flipping a fair coin. Urn 0 is used if the outcome is H and urn 1 is used if the outcome is T. **The urn used in a subsequent draws corresponds to the number on the ball drawn in the previous draw.** \n",
"\n",
"What is the probability of a specific sequence of the numbers on drawn balls being 0011 ? "
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ys1J3p_5FfOO"
},
"source": [
"Type the answer here using the [latex syntax](https://wch.github.io/latexsheet/) or handwrite the answer, upload the picture in the same folder and use a new markdown cell with markdown syntax `![title](image_name.png)`\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "d3pMmYDBxGx5"
},
"source": [
"![Question 2](As1Q2.png)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "SYJNf4tHFfOO"
},
"source": [
"## Question 3 (20 points) \n",
"\n",
"Referring to Example 6.6 of the [Math for ML book](https://mml-book.github.io/book/mml-book.pdf), simulate and plot the bivariate normal distribution with the shown parameters using the [Cholesky factorization](https://numpy.org/doc/stable/reference/generated/numpy.linalg.cholesky.html) for the simulation. \n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 283
},
"id": "sI6TfPBdFfOO",
"outputId": "5dab972c-abe7-4b7a-9cd8-8102001b9b47"
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.contour.QuadContourSet at 0x7f06f70896a0>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from numpy.random.mtrand import multivariate_normal\n",
"# Type the Python code here and ensure you save the notebook with the results of the code execution. \n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy.stats import multivariate_normal\n",
"mean=[0,2]\n",
"cov=[[0.3,-1],[-1,5]]\n",
"\n",
"x,y=np.mgrid[-2:2:.01, -4:8:.01]\n",
"data=np.random.multivariate_normal(mean,cov, size=1000)\n",
"var=multivariate_normal(mean=mean,cov=cov)\n",
"data=np.dstack((x,y))\n",
"z=var.pdf(data)\n",
"plt.contour(x,y,z)\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MeeMnRYqFfOP"
},
"source": [
"## Question 4 (20 points)\n",
"\n",
"Go through the provided links on [Poisson](https://dlsun.github.io/probability/poisson.html) and [exponential distributions](https://dlsun.github.io/probability/exponential.html) as the `Math for ML` textbook in your course site is not covering enough these important distributions.\n",
"\n",
"Watch this video https://www.youtube.com/watch?v=Asto3RS46ks where the author is explaining how to simulate a Poisson distribution from scratch. \n",
"\n",
"1. Using the Kaggle API download [this dataset](https://www.kaggle.com/datasets/new-york-city/nyc-east-river-bicycle-crossings) and plot the histogram of the number of cyclists that cross the Brooklyn bridge per day. \n",
"2. Simulate the number of cyclists that cross the Brooklyn bridge per day using the Poisson distribution. Ensure that the simulated counts are similar distribution-wise to the observed counts.\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "dt_tCh8oJdCy",
"outputId": "4a1b74ca-c7e1-411e-dc82-4a739d40be0c"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
"Requirement already satisfied: kaggle in /usr/local/lib/python3.8/dist-packages (1.5.12)\n",
"Requirement already satisfied: python-slugify in /usr/local/lib/python3.8/dist-packages (from kaggle) (8.0.0)\n",
"Requirement already satisfied: python-dateutil in /usr/local/lib/python3.8/dist-packages (from kaggle) (2.8.2)\n",
"Requirement already satisfied: six>=1.10 in /usr/local/lib/python3.8/dist-packages (from kaggle) (1.15.0)\n",
"Requirement already satisfied: urllib3 in /usr/local/lib/python3.8/dist-packages (from kaggle) (1.24.3)\n",
"Requirement already satisfied: requests in /usr/local/lib/python3.8/dist-packages (from kaggle) (2.25.1)\n",
"Requirement already satisfied: tqdm in /usr/local/lib/python3.8/dist-packages (from kaggle) (4.64.1)\n",
"Requirement already satisfied: certifi in /usr/local/lib/python3.8/dist-packages (from kaggle) (2022.12.7)\n",
"Requirement already satisfied: text-unidecode>=1.3 in /usr/local/lib/python3.8/dist-packages (from python-slugify->kaggle) (1.3)\n",
"Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.8/dist-packages (from requests->kaggle) (2.10)\n",
"Requirement already satisfied: chardet<5,>=3.0.2 in /usr/local/lib/python3.8/dist-packages (from requests->kaggle) (4.0.0)\n"
]
}
],
"source": [
"pip install kaggle"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 444
},
"id": "HpEBuZt_FfOQ",
"outputId": "f0763e3f-34c4-46b4-e75d-61ca8959b321"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Warning: Your Kaggle API key is readable by other users on this system! To fix this, you can run 'chmod 600 /root/.kaggle/kaggle.json'\n"
]
},
{
"data": {
"text/plain": [
"(array([ 1., 0., 3., 5., 7., 19., 27., 39., 35., 26., 18., 16., 5.,\n",
" 7., 2.]),\n",
" array([2122. , 2139.93333333, 2157.86666667, 2175.8 ,\n",
" 2193.73333333, 2211.66666667, 2229.6 , 2247.53333333,\n",
" 2265.46666667, 2283.4 , 2301.33333333, 2319.26666667,\n",
" 2337.2 , 2355.13333333, 2373.06666667, 2391. ]),\n",
" <a list of 15 Patch objects>)"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Type the Python code here and ensure you save the notebook with the results of the code execution.\n",
"import kaggle\n",
"import pandas as pd\n",
"from kaggle.api.kaggle_api_extended import KaggleApi\n",
"\n",
"api = KaggleApi()\n",
"api.authenticate()\n",
"\n",
"api.dataset_download_file('new-york-city/nyc-east-river-bicycle-crossings', file_name='nyc-east-river-bicycle-counts.csv')\n",
"df=pd.read_csv('nyc-east-river-bicycle-counts.csv',sep=',')\n",
"data = df[\"Brooklyn Bridge\"].to_numpy()\n",
"\n",
"#print(data)\n",
"lam=2000\n",
"var=np.random.poisson(data.mean(),len(data))\n",
"fig, axs = plt.subplots(1,2,sharey=True, tight_layout=True)\n",
"\n",
"axs[0].hist(data,15)\n",
"axs[1].hist(var,15)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "SasvwZZQFfOQ"
},
"source": [
"# Question 5 (20 points)\n",
"\n",
"You are asked to stress test an cloud API endpoint and are told that the API exposes a database server that can be abstracted as an M/M/1 queue. Go through [this introductory](https://queue-it.com/blog/queuing-theory/) page to just understand the queuing domain and the notation M/M/1. Go also through the elements of the MM1 queue [here](https://en.wikipedia.org/wiki/M/M/1_queue). Make sure you click on the links and learn about the random process called Poisson process. \n",
"\n",
"\n",
"Your task is to simulate the behavior of the queue and plot the number of requests that are waiting in the queue as a function of time. You are given three arrival rates of the API requests $\\lambda=[1, 3, 4]$ and the service time of the requests as an exponential random variable with rate $\\mu=4$. \n",
"\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 297
},
"id": "eVUWNc-2FfOQ",
"outputId": "66bb2d15-18c8-4e53-a9f1-c41ff130434b"
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 432x288 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Type the Python code here and ensure you save the notebook with the results of the code execution.\n",
"lams=[1,3,4]\n",
"\n",
"def MM1Q(lam,mu):\n",
" queue = []\n",
" qeueuLens=[]\n",
" nextArival = np.random.exponential(1/lam)\n",
" nextService = np.random.exponential(1/mu)\n",
" for i in range(1000):\n",
" while nextArival<nextService:\n",
" queue.append(nextService)\n",
" nextArival+=np.random.exponential(1/lam)\n",
" if len(queue)>0:\n",
" nextService-=queue.pop(0)\n",
" if len(queue)>0:\n",
" nextService+=np.random.exponential(1/mu)\n",
" else:\n",
" nextService=nextArival+np.random.exponential(1/mu)\n",
" qeueuLens.append(len(queue))\n",
" return qeueuLens\n",
"\n",
"fig, axs = plt.subplots(1,3,sharey=True, tight_layout=True)\n",
"axs[0].plot(MM1Q(lams[0],4))\n",
"axs[0].title.set_text(\"lambda=1\")\n",
"axs[1].plot(MM1Q(lams[1],4))\n",
"axs[1].title.set_text(\"lambda=3\")\n",
"axs[2].plot(MM1Q(lams[2],4))\n",
"axs[2].title.set_text(\"lambda=4\")\n"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"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.7.4"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "0dfe1d762dfc47a02e5f1390d2fe283d14aedd415e842b850ae728c6e5470c7b"
}
}
},
"nbformat": 4,
"nbformat_minor": 0
}
|