{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"%%HTML\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# High Dimensional Data & the curse of dimensionality\n",
"\n",
"**Mahmood Amintoosi, Fall 2024**\n",
"\n",
"Computer Science Dept, Ferdowsi University of Mashhad"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"در فضاهای با ابعاد بالا:\n",
"\n",
"* مفهوم محلی بودن کمرنگ میشود، ESL\n",
"* حجم ابرکره تقریبا صفر است، کتاب زکی\n",
"* حجم اصلی فضا در گوشهها هست\n",
"* اکثر چگالی کره در پوستهی آن جمع است، کتاب زکی\n",
"* با بردارهای با مؤلفههای گوسی، بیشتر چگالی نقاط در فاصله خاصی تا مرکز است\n",
"* همه بردارهای قطری، عمود بر محورها هستند، کتاب زکی\n",
"* بردارهای با مؤلفههای گوسی عمود بر هم هستند؟\n",
"\n",
"\n",
"برای آزمون برخی از اینها باید نقاطی با توزیع یکنواخت در داخل ابرکره تولید کنیم"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from scipy.stats import norm"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\m.amintoosi\\AppData\\Roaming\\Python\\Python310\\site-packages\\seaborn\\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n",
" with pd.option_context('mode.use_inf_as_na', True):\n",
"C:\\Users\\m.amintoosi\\AppData\\Roaming\\Python\\Python310\\site-packages\\seaborn\\axisgrid.py:118: UserWarning: The figure layout has changed to tight\n",
" self._figure.tight_layout(*args, **kwargs)\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAekAAAHpCAYAAACmzsSXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABVFUlEQVR4nO3deXyU1aE//s8zezLJTPY9hFV2RFEhaqkgghR3bm2rVeRard6AC73WwrVq7YI/21stNm69FvzelmrtFa2WqogKKosYCCRhRyD7ZJ0lk8z+/P6YzGgKgSTM5Dwz83m/Xnm1mZkkn2DIh3Oe85wjybIsg4iIiBRHJToAERERnR5LmoiISKFY0kRERArFkiYiIlIoljQREZFCsaSJiIgUiiVNRESkUCxpALIsw263g7eMExGRkrCkATgcDpjNZjgcDtFRiIiIwljSRERECsWSJiIiUiiWNBERkUKxpImIiBSKJU1ERKRQLGkiIiKFYkkTEREpFEuaiIhIoVjSRERECsWSJiIiUiiWNBERkUKxpImIiBSKJU1ERKRQLGkiIiKFYkkTEREpFEuaiIhIoVjSRERECsWSJiIiUiiWNBERkUKxpImIiBRKIzoAESnX3WX3obXTfsrj2ekmvFS+RkAiosTCkiaifrV22jF76apTHt+69lcC0hAlHk53ExERKRRLmoiISKE43U1E/V573ltVjdkC8hBREEuaiPq99rxr2c0C0hBRCKe7iYiIFEpoST/++OOQJKnP24QJE8LPu1wulJWVITMzEykpKVi8eDEsFkufz1FbW4tFixYhOTkZOTk5eOihh+Dz+Yb7WyEiIoo44dPdkydPxgcffBB+X6P5KtKDDz6If/zjH3j99ddhNpuxbNky3HTTTfjss88AAH6/H4sWLUJeXh62bduGpqYm3H777dBqtfjVr3iLCBERxTbhJa3RaJCXl3fK4zabDS+//DLWr1+PuXPnAgDWrl2LiRMnYseOHZg1axbef/997N+/Hx988AFyc3Mxffp0/PznP8fDDz+Mxx9/HDqd7rRf0+12w+12h9+3209dMEMUr063SIwLxIiUSfg16SNHjqCgoACjR4/GrbfeitraWgBARUUFvF4v5s2bF37thAkTMGLECGzfvh0AsH37dkydOhW5ubnh1yxYsAB2ux01NTX9fs3Vq1fDbDaH34qLi6P03REp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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = np.random.randn(10000)\n",
"sns.displot(x, kde=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"میانگین ایکس صفر هست اما میانگین قدرمطلق ایکسها که اندازه فاصله آنها تا مبدا هست، صفر نیست."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.7963389532877564 0.999001957122858\n"
]
}
],
"source": [
"abs_x = np.abs(x)\n",
"print(abs_x.mean(), np.sqrt(np.var(x)))\n",
"# sns.displot(abs_x, kde=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"According to [Wiki](https://en.wikipedia.org/wiki/Curse_of_dimensionality): \n",
"most of the volume of the d-cube concentrates near the boundary of a sphere of radius $\\sigma \\sqrt{d}$\n",
"\n",
"Also according to section **Distance of Points from the Mean** of [Chap 6 of Zaki](https://www.cs.rpi.edu/~zaki/DMML/slides/pdf/ychap6.pdf):\n",
"whereas the density of the standard multivariate normal is maximized at the center 0, most of the probability mass (the points) is concentrated in a small band around the mean distance\n",
"of $\\sqrt{d}$ from the center."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.3573055706605999 1.4142135623730951\n"
]
}
],
"source": [
"x = np.random.randn(100, 2)\n",
"norm_x = np.linalg.norm(x, axis=1)\n",
"print(norm_x.mean(), np.sqrt(2))\n",
"# sns.displot(norm_x, kde=False)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"14.13576670923273 14.142135623730951\n"
]
}
],
"source": [
"x = np.random.randn(10000, 200)\n",
"norm_x = np.linalg.norm(x, axis=1)\n",
"print(norm_x.mean(), np.sqrt(200))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"برمیگردیم به تولید نقاط تصادفی در گوی واحد.\n",
"\n",
"ابتدا تولید نقاط تصادفی با توزیع یکنواخت بر روی دایره.\n",
"\n",
"روش مختصات قطبی قابل تعمیم به فضاهای بالاتر نیست.\n",
"\n",
"نشان می دهیم که اگر داده ها با توزیع نرمال در فضا تولید شده و سپس بر روی کره واحد نگاشت شوند توزیع آنها بر روی سطح کره یکنواخت هست"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"اگر هر داده را بر نرمش تقسیم کنیم، اندازهی همه دادهها یک خواهد شد و روی کرهی واحد قرار خواهند گرفت\n",
"\n",
"$$x = (x_1,x_2,\\dots,x_d)$$\n",
"$$x_i \\sim \\mathcal{N}(\\mu,\\sigma^2)$$\n",
"$$f(x) = \\frac{1}{\\sqrt{2\\pi}\\sigma} e^{-\\frac{1}{2}\\left(\\frac{x-\\mu}{\\sigma}\\right)^2}$$\n",
"$$\\mu=0, \\sigma^2=1$$\n",
"$$f(x_i) = \\frac{1}{\\sqrt{2\\pi}} e^{-\\frac{1}{2}x_i^2}$$\n",
"\n",
"$$y=\\frac{x}{||x||}$$\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"y یک بردار تصادفی یکه با توزیع یکنواخت روی کره واحد است\n",
"\n",
"مطابق روابط ۱.۱۹ و ۱.۲۰ از \n",
"[کتاب زکی](https://fumdrive.um.ac.ir/index.php/s/9W96bM8Q3QaJpAM)\n",
" تابع چگالی ایکس به صورت زیر است:\n",
"
\n",
"\n",
"Joint probability function of $x$ is given as:\n",
"\n",
"$$\n",
"\\begin{aligned}\n",
"f(x)&=\\prod_{i=1}^d f(x_i)\\\\\n",
"&= \\prod_{i=1}^d\\frac{1}{\\sqrt{2\\pi}} e^{-\\frac{1}{2}x_i^2}\n",
"\\\\ \n",
"&= \\left(\\frac{1}{\\sqrt{2\\pi}}\\right)^d e^{-\\frac{1}{2}\\sum_{i=1}^dx_i^2} \\\\\n",
"&= \\frac{1}{(2\\pi)^{d/2}} e^{-\\frac{||x||^2}{2}}\n",
"\\end{aligned}\n",
"$$\n",
"\n",
"\n",
"
\n",
"یعنی چگالی فقط به اندازه بردار بستگی دارد. پس همه نقاط روی کرهی به شعاع مشخص چگالی یکسانی دارند.\n",
"\n",
"دوباره تکه برنامه قبلی رو مینویسیم\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.333765378402273 1.4142135623730951\n"
]
},
{
"data": {
"text/plain": [
"((100, 2), (100, 1))"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = np.random.randn(100, 2)\n",
"norm_x = np.linalg.norm(x, axis=1)\n",
"print(norm_x.mean(), np.sqrt(2))\n",
"# sns.displot(norm_x, kde=False)\n",
"x.shape, norm_x[:,np.newaxis].shape"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"y = x/norm_x[:,np.newaxis]\n",
"plt.scatter(x[:,0],x[:,1], 2)\n",
"plt.scatter(y[:,0],y[:,1], 5)\n",
"ax = plt.gca()\n",
"ax.set_aspect('equal', adjustable='box')\n",
"plt.draw()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"با داشتن اعداد تصادفی با توزیع یکنواخت\n",
" میتوان اعداد تصادفی با هر توزیعی تولید کرد\n",
"\n",
"## Cumulative Distribution Function\n",
"For random variable $X$, its cumulative distribution function (CDF) $F:\\mathbb{R} \\to [0,1]$,\n",
"gives the probability of observing a value at most\n",
"some given value $x$: (eq. 1.17 of Zaki)\n",
"\n",
"$$\n",
"\\large\n",
"\\begin{aligned}\n",
" F(x) = P(X \\le x) \\qquad \\text{for all } -\\infty < x < \\infty\n",
"\\end{aligned}\n",
"$$\n",
"\n",
"If $a\\sim \\mathcal{U}(0,1) \\Rightarrow P(a\\leq a_0) = a_0$\n",
"\n",
"If we get $X=F^{-1}(a)$, then $X$ has probabilty distribution $F$.\n",
"\n",
"$$\n",
"\\begin{aligned}\n",
"P(X \\le x) &= P(F^{-1}(a) \\le x) \\\\\n",
"&= P(a \\le F(x)) \\\\\n",
"&= F(x) \\quad \\textrm{Since} \\quad a\\sim \\mathcal{U}(0,1)\n",
"\\end{aligned}\n",
"$$\n",
"\n",
"Due to the monotonicity of $F^{-1}$, the inequality $F^{-1}(a) \\leq x$ holds if and only if $a \\leq F(x)$:\n",
"\n",
"$$\n",
"P(F^{-1}(a) \\leq x) = P(a \\leq F(x))\n",
"$$\n",
"\n",
"حالا موارد بالا را امتحان میکنیم.\n",
"ابتدا برای تولید اعداد تصادفی نرمال با استفاده از توزیع یکنواخت و بعد برای مورد تولید نقاط تصادفی در داخل گوی واحد بدون استفاده از روشی که قبلا بکار برده بودیم یعنی\n",
"\n",
"Rejection Sampling.\n",
"\n",
" یک تعداد عدد تصادفی از توزیع یکنواخت تولید کرده و سپس با وارون تابع تجمعی توزیع نرمال به توزیع نرمال میرسیم\n",
"\n",
" https://stackoverflow.com/questions/20626994/how-to-calculate-the-inverse-of-the-normal-cumulative-distribution-function-in-p"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\m.amintoosi\\AppData\\Roaming\\Python\\Python310\\site-packages\\seaborn\\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n",
" with pd.option_context('mode.use_inf_as_na', True):\n",
"C:\\Users\\m.amintoosi\\AppData\\Roaming\\Python\\Python310\\site-packages\\seaborn\\axisgrid.py:118: UserWarning: The figure layout has changed to tight\n",
" self._figure.tight_layout(*args, **kwargs)\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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AOB8FrZQX3fdddq9e7eqq6t908SJEzVjxgzff8fFxamiosJ3n4MHD6qmpkYul0uS5HK5tHv3btXV1fnW2bx5s+x2uzIzM0O+TQAABFvY3voeMGCALr74Yr95/fr106BBg3zzZ86cqaKiIiUlJclut2vOnDlyuVyaNGmSJGnKlCnKzMxUfn6+li1bJrfbrYULF6qwsJC3tgEAvULYQn0uVqxYoejoaOXl5cnr9SonJ0crV670LY+JidHGjRs1a9YsuVwu9evXTwUFBSopKQnjqAEACB6jQr1t2za/2wkJCSotLVVpaWmn9xk6dKjKy8t7eGQAAIRH2D9HDQAAOkeoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwWFhDvWrVKo0bN052u112u10ul0t/+ctffMvPnDmjwsJCDRo0SP3791deXp5qa2v9HqOmpka5ubnq27evkpOTNW/ePLW0tIR6UwAA6BFhDfWFF16opUuXqqqqSm+99ZYmT56sG2+8UXv37pUkzZ07Vy+88II2bNig7du36+jRo5o+fbrv/q2trcrNzVVTU5N27Nihp556SmVlZbr//vvDtUkAAARVbDiffNq0aX63H3zwQa1atUo7d+7UhRdeqDVr1mjdunWaPHmyJGnt2rUaPXq0du7cqUmTJunll1/Wvn37tGXLFjmdTo0fP16LFy/W/PnztWjRIsXHx4djswAACBpjjlG3trZq/fr1OnXqlFwul6qqqtTc3Kzs7GzfOhkZGUpPT1dlZaUkqbKyUmPHjpXT6fStk5OTI4/H43tV3hGv1yuPx+M3AQBgorCHevfu3erfv79sNpu+//3v69lnn1VmZqbcbrfi4+OVmJjot77T6ZTb7ZYkud1uv0i3L29f1pklS5bI4XD4prS0tOBuFAAAQRL2UI8aNUrV1dXatWuXZs2apYKCAu3bt69Hn3PBggVqaGjwTUeOHOnR5wMAIFBhPUYtSfHx8friF78oSZowYYLefPNN/fKXv9TNN9+spqYm1dfX+72qrq2tVUpKiiQpJSVFb7zxht/jtZ8V3r5OR2w2m2w2W5C3BACA4Av7K+pPa2trk9fr1YQJExQXF6eKigrfsoMHD6qmpkYul0uS5HK5tHv3btXV1fnW2bx5s+x2uzIzM0M+dgAAgi2sr6gXLFigqVOnKj09XY2NjVq3bp22bduml156SQ6HQzNnzlRRUZGSkpJkt9s1Z84cuVwuTZo0SZI0ZcoUZWZmKj8/X8uWLZPb7dbChQtVWFjIK2YAQK8Q1lDX1dXp9ttv17Fjx+RwODRu3Di99NJLuv766yVJK1asUHR0tPLy8uT1epWTk6OVK1f67h8TE6ONGzdq1qxZcrlc6tevnwoKClRSUhKuTQIAIKjCGuo1a9Z85vKEhASVlpaqtLS003WGDh2q8vLyYA8NAAAjGHeMGgAA/A+hBgDAYIQaAACDEWoAAAxGqAEAMBihBgDAYIQaAACDEWoAAAxGqAEAMFhAoR4xYoQ+/PDDs+bX19drxIgR3R4UAAD4WEChfv/999Xa2nrWfK/Xqw8++KDbgwIAAB/r0nd9P//8877/br/CVbvW1lZVVFRo2LBhQRscAACRrkuhvummmyRJUVFRKigo8FsWFxenYcOG6Re/+EXQBgcAQKTrUqjb2tokScOHD9ebb76pCy64oEcGBQAAPhbQZS4PHz4c7HEAAIAOBHw96oqKClVUVKiurs73Srvdk08+2e2BAQCAAEP9s5/9TCUlJZo4caJSU1MVFRUV7HEBAAAFGOrVq1errKxM+fn5wR4PAAD4hIA+R93U1KTLL7882GMBAACfElCov/vd72rdunXBHgsAAPiUgN76PnPmjB5//HFt2bJF48aNU1xcnN/y5cuXB2VwAABEuoBC/fe//13jx4+XJO3Zs8dvGSeWAQAQPAGF+pVXXgn2OAAAQAe4zCUAAAYL6BX1tdde+5lvcW/dujXgAQEAgP8JKNTtx6fbNTc3q7q6Wnv27DnrYh0AACBwAYV6xYoVHc5ftGiRTp482a0BAQCA/wnqMerbbruN7/kGACCIghrqyspKJSQkBPMhAQCIaAG99T19+nS/25Zl6dixY3rrrbd03333BWVgAAAgwFA7HA6/29HR0Ro1apRKSko0ZcqUoAwMAAAEGOq1a9cGexwAAKADAYW6XVVVlfbv3y9JGjNmjL785S8HZVAAAOBjAYW6rq5Ot9xyi7Zt26bExERJUn19va699lqtX79egwcPDuYYAQCIWAGd9T1nzhw1NjZq7969OnHihE6cOKE9e/bI4/Hohz/8YbDHCABAxAroFfWmTZu0ZcsWjR492jcvMzNTpaWlnEwGAEAQBfSKuq2t7axrUEtSXFyc2trauj0oAADwsYBCPXnyZP3oRz/S0aNHffM++OADzZ07V9ddd13QBgcAQKQLKNS/+tWv5PF4NGzYMI0cOVIjR47U8OHD5fF49NhjjwV7jAAARKyAjlGnpaXp7bff1pYtW3TgwAFJ0ujRo5WdnR3UwQEAEOm69Ip669atyszMlMfjUVRUlK6//nrNmTNHc+bM0aWXXqoxY8bor3/9a0+NFQCAiNOlUD/yyCO68847Zbfbz1rmcDj0ve99T8uXLw/a4AAAiHRdCvXf/vY3fe1rX+t0+ZQpU1RVVdXtQQEAgI91KdS1tbUdfiyrXWxsrP7zn/90e1AAAOBjXQr1F77wBe3Zs6fT5X//+9+Vmpra7UEBAICPdSnUN9xwg+677z6dOXPmrGWnT59WcXGxvv71rwdtcAAARLoufTxr4cKFeuaZZ3TRRRdp9uzZGjVqlCTpwIEDKi0tVWtrq+69994eGSgAAJGoS6F2Op3asWOHZs2apQULFsiyLElSVFSUcnJyVFpaKqfT2SMDBQAgEnX5C0+GDh2q8vJy/fe//9WhQ4dkWZa+9KUvaeDAgT0xPgAAIlpA30wmSQMHDtSll14azLEAAIBPCei7vgEAQGgQagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIOFNdRLlizRpZdeqgEDBig5OVk33XSTDh486LfOmTNnVFhYqEGDBql///7Ky8tTbW2t3zo1NTXKzc1V3759lZycrHnz5qmlpSWUmwIAQI8Ia6i3b9+uwsJC7dy5U5s3b1Zzc7OmTJmiU6dO+daZO3euXnjhBW3YsEHbt2/X0aNHNX36dN/y1tZW5ebmqqmpSTt27NBTTz2lsrIy3X///eHYJAAAgio2nE++adMmv9tlZWVKTk5WVVWVvvrVr6qhoUFr1qzRunXrNHnyZEnS2rVrNXr0aO3cuVOTJk3Syy+/rH379mnLli1yOp0aP368Fi9erPnz52vRokWKj48/63m9Xq+8Xq/vtsfj6dkNBQAgQEYdo25oaJAkJSUlSZKqqqrU3Nys7Oxs3zoZGRlKT09XZWWlJKmyslJjx46V0+n0rZOTkyOPx6O9e/d2+DxLliyRw+HwTWlpaT21SQAAdIsxoW5ra9Pdd9+tK664QhdffLEkye12Kz4+XomJiX7rOp1Oud1u3zqfjHT78vZlHVmwYIEaGhp805EjR4K8NQAABEdY3/r+pMLCQu3Zs0evvfZajz+XzWaTzWbr8ecBAKC7jHhFPXv2bG3cuFGvvPKKLrzwQt/8lJQUNTU1qb6+3m/92tpapaSk+Nb59Fng7bfb1wEA4HwV1lBblqXZs2fr2Wef1datWzV8+HC/5RMmTFBcXJwqKip88w4ePKiamhq5XC5Jksvl0u7du1VXV+dbZ/PmzbLb7crMzAzNhgAA0EPC+tZ3YWGh1q1bpz//+c8aMGCA75iyw+FQnz595HA4NHPmTBUVFSkpKUl2u11z5syRy+XSpEmTJElTpkxRZmam8vPztWzZMrndbi1cuFCFhYW8vQ0AOO+FNdSrVq2SJF1zzTV+89euXas77rhDkrRixQpFR0crLy9PXq9XOTk5WrlypW/dmJgYbdy4UbNmzZLL5VK/fv1UUFCgkpKSUG0GAAA9Jqyhtizrc9dJSEhQaWmpSktLO11n6NChKi8vD+bQAAAwghEnkwEAgI4RagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADEaoAQAwGKEGAMBghBoAAIMRagAADBbWUL/66quaNm2ahgwZoqioKD333HN+yy3L0v3336/U1FT16dNH2dnZevfdd/3WOXHihGbMmCG73a7ExETNnDlTJ0+eDOFWAADQc8Ia6lOnTumSSy5RaWlph8uXLVumRx99VKtXr9auXbvUr18/5eTk6MyZM751ZsyYob1792rz5s3auHGjXn31Vd11112h2gQAAHpUbDiffOrUqZo6dWqHyyzL0iOPPKKFCxfqxhtvlCT99re/ldPp1HPPPadbbrlF+/fv16ZNm/Tmm29q4sSJkqTHHntMN9xwgx5++GENGTIkZNsCAEBPMPYY9eHDh+V2u5Wdne2b53A4lJWVpcrKSklSZWWlEhMTfZGWpOzsbEVHR2vXrl2dPrbX65XH4/GbAAAwkbGhdrvdkiSn0+k33+l0+pa53W4lJyf7LY+NjVVSUpJvnY4sWbJEDofDN6WlpQV59AAABIexoe5JCxYsUENDg286cuRIuIcEAECHjA11SkqKJKm2ttZvfm1trW9ZSkqK6urq/Ja3tLToxIkTvnU6YrPZZLfb/SYAAExkbKiHDx+ulJQUVVRU+OZ5PB7t2rVLLpdLkuRyuVRfX6+qqirfOlu3blVbW5uysrJCPmYAAIItrGd9nzx5UocOHfLdPnz4sKqrq5WUlKT09HTdfffdeuCBB/SlL31Jw4cP13333achQ4bopptukiSNHj1aX/va13TnnXdq9erVam5u1uzZs3XLLbdwxjcAoFcIa6jfeustXXvttb7bRUVFkqSCggKVlZXpJz/5iU6dOqW77rpL9fX1uvLKK7Vp0yYlJCT4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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from statistics import NormalDist # Needs Python >= 3.8\n",
"x = np.random.rand(10000)\n",
"sns.displot(x)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-0.0013618378781789012 0.9982451176139835\n"
]
}
],
"source": [
"y = [NormalDist().inv_cdf(a) for a in x]\n",
"y = np.array(y)\n",
"print(y.mean(), y.var())"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\m.amintoosi\\AppData\\Roaming\\Python\\Python310\\site-packages\\seaborn\\_oldcore.py:1119: FutureWarning: use_inf_as_na option is deprecated and will be removed in a future version. Convert inf values to NaN before operating instead.\n",
" with pd.option_context('mode.use_inf_as_na', True):\n",
"C:\\Users\\m.amintoosi\\AppData\\Roaming\\Python\\Python310\\site-packages\\seaborn\\axisgrid.py:118: UserWarning: The figure layout has changed to tight\n",
" self._figure.tight_layout(*args, **kwargs)\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.displot(y, kde=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## تولید نقاط تصادفی با توزیع یکنواخت در داخل گوی واحد\n",
"\n",
"یک سری نقاط تصادفی که هر مؤلفهی هر نقطه از توزیع گوسی آمده است تولید میکنیم، سپس مشابه برنامه بالا هر نقطه را بر اندازهاش تقسیم میکنیم."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"x = np.random.randn(400, 2)\n",
"norm_x = np.linalg.norm(x, axis=1)\n",
"y = x/norm_x[:,np.newaxis]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"
\n",
"قبلاً مشاهده کردیم که y \n",
"ها از نگاشت x\n",
" ها بر روی دایره واحد به دست میآیند. اگر y ها را در یک مقدار ثابت کمتر از یک ضرب کنیم، آنها در داخل دایره واحد جابجا میشوند:\n",
"
\n",
"\n",
"$$x = (x_1,x_2,\\dots,x_d)$$\n",
"$$x_i \\sim \\mathcal{N}(\\mu,\\sigma^2)$$\n",
"$$y=\\rho\\frac{x}{||x||}, \\quad 0\\le \\rho \\le 1$$\n",
"\n",
"اما چگالی نقاط تولید شده در داخل دایره یکنواخت نیست.\n"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"rho = np.random.rand(len(x))\n",
"y = rho[:,np.newaxis] * x/norm_x[:,np.newaxis]\n",
"plt.figure(figsize=(6, 6))\n",
"plt.scatter(x[:,0],x[:,1],.1)\n",
"plt.scatter(y[:,0],y[:,1],3)\n",
"ax = plt.gca()\n",
"ax.set_aspect('equal', adjustable='box')\n",
"plt.draw()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"قبل از ادامه، یادآوری چند تعریف از کتاب زکی: \n",
"\n",
"ابتدا ابرگوی و ابرکره، رابطه ۶.۱ کتاب زکی\n",
"\n",
"The data hyperspace can be represented as a $d$-dimensional *hyperball* centered at $0$ with radius $r$, defined as\n",
"\n",
"$$\n",
" B_d(r) = \\bigl\\{ x\\; |\\;\\; ||x|| \\le r\\bigr\\}\n",
"$$\n",
"\n",
"The surface of the hyperball is called a *hypersphere*,\n",
"and it consists of all the points exactly at distance $r$ from\n",
"the center of the hyperball\n",
"\n",
"$$\n",
" S_d(r) = \\bigl\\{ x\\; |\\;\\; ||x|| = r\\bigr\\}\n",
"$$\n",
"\n",
"البته حجم هر دو یکسان هست، رابطه ۶.۱۰ کتاب زکی:\n",
"\n",
"$$\n",
"\\textrm{Vol}(S_d(r))=K_d r^d\n",
"$$\n",
"\n",
"
\n",
"که در آن \n",
"$k_d$\n",
"حجم کره واحد d بعدی هست. \n",
"
\n",
"در بالا rho \n",
"با توزیع یکنواخت در بازه صفر و یک بود و خروجی آنچنان که \n",
"میخواستیم نشد.\n",
"اگر بتوانیم rho را از توزیعی ایجاد کنیم که متناسب با حجم ابرگوی ما باشد\n",
"نقاط به صورت یکنواخت در داخل ابرگوی ما خواهند بود.\n",
"\n",
"اگر قرار باشد چگالی نقاط در همه جا یکسان باشد، رو باید از توزیع دیگری باشد\n",
" به نحوی که تابع توزیع تجمعی آن متناسب با نسبت حجم گوی به شعاع\n",
" r\n",
" به حجم گوی واحد باشد:\n",
"
\n",
"که در آن،\n",
"صورت کسر،\n",
" حجم گوی d بعدی به شعاع r هست\n",
" و مخرج کسر\n",
" حجم گوی واحد.\n",
"\n",
" میدانیم که\n",
" حجم گوی d بعدی به شعاع r،\n",
" r به توان d برابر حجم گوی واحد هست یعنی:\n",
"
\n",
" لذا تابع توزیع تجمعی \n",
" (CDF) باید به صورت x^d باشد:\n",
"
\n",
"\n",
"$$ F(x) = x^d$$\n",
"\n",
"
\n",
"مطابق آنچه در بالاتر دیدیم، برای اینکه رو از همچین توزیعی دربیاد، \n",
"کافیست a را با توزیع یکنواخت تولید کنیم و وارون تابع توزیع تجمعی رو را روی آن اعمال کنیم:\n",
"
\n",
"\n",
"$a\\sim \\mathcal{U}(0,1)$\n",
"\n",
"$$\\rho = F^{-1}(a) = a ^ {1/d}$$\n"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"a = np.random.rand(len(x))\n",
"d = 2\n",
"rho = a**(1/d)\n",
"y = rho[:,np.newaxis] * x/norm_x[:,np.newaxis]\n",
"plt.figure(figsize=(6, 6))\n",
"plt.scatter(x[:,0],x[:,1],.1)\n",
"plt.scatter(y[:,0],y[:,1],3)\n",
"ax = plt.gca()\n",
"ax.set_aspect('equal', adjustable='box')\n",
"plt.draw()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We did it :)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* بررسی تقریبا متعامد بودن بردارهای با مؤلفههای گوسی در فضاهای با ابعاد بالا"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-0.03266827994478738\n",
"-0.06715105526363858\n",
"-0.01307570018736591\n",
"0.09975298665446185\n",
"-0.023308848425242605\n",
"0.04607856574295245\n"
]
}
],
"source": [
"x = np.random.randn(4, 200)\n",
"norm_x = np.linalg.norm(x, axis=1)\n",
"y = x/norm_x[:,np.newaxis]\n",
"\n",
"# rho = np.random.rand(len(x))\n",
"# y = rho[:,np.newaxis] * y\n",
"\n",
"# a = np.random.rand(len(x))\n",
"# d = 2\n",
"# rho = a**(1/d)\n",
"# y = rho[:,np.newaxis] * y\n",
"\n",
"for i in range(len(y)):\n",
" for j in range(i+1,len(y)):\n",
" print(np.dot(y[i],y[j]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"تمرینها:\n",
"\n",
"* مقایسه تولید نقاط در گوی واحد در ابعاد بالا با روش نمونهبرداری بازپسزننده روش ذکر شده در بالا از منظر زمان اجرا\n",
"* تخمین حجم ابرکره با روش مونت کارلو\n",
"* تخمین نسبت حجم ابرکره به ابرمکعب محیط بر آن\n",
"* تخمین نسبت حجم پوستهی به ضخامت اپسیلون به کل ابرکره"
]
}
],
"metadata": {
"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.10.15"
}
},
"nbformat": 4,
"nbformat_minor": 2
}