Files
ArtStudies/M2/Unsupervised Learning/spectral_clustering.ipynb

349 lines
116 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 65,
"id": "71094222",
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"from sklearn.cluster import KMeans"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c1b23a23",
"metadata": {},
"outputs": [],
"source": [
"def compute_laplacian(W: np.ndarray) -> np.ndarray:\n",
" \"\"\"Compute the unnormalized graph Laplacian.\n",
"\n",
" Args:\n",
" W (np.ndarray): Similarity matrix.\n",
"\n",
" Returns:\n",
" np.ndarray: Unnormalized graph Laplacian.\n",
"\n",
" \"\"\"\n",
" D = np.diag(np.sum(W, axis=1))\n",
" return D - W\n",
"\n",
"\n",
"def compute_symmetric_laplacian(W: np.ndarray) -> np.ndarray:\n",
" \"\"\"Compute the symmetric normalized graph Laplacian.\n",
"\n",
" Args:\n",
" W (np.ndarray): Similarity matrix.\n",
"\n",
" Returns:\n",
" np.ndarray: Symmetric normalized graph Laplacian.\n",
"\n",
" \"\"\"\n",
" D_inv_sqrt = np.diag(1.0 / np.sqrt(np.sum(W, axis=1)))\n",
" return np.eye(W.shape[0]) - D_inv_sqrt @ W @ D_inv_sqrt\n",
"\n",
"\n",
"def compute_random_walk_laplacian(W: np.ndarray) -> np.ndarray:\n",
" \"\"\"Compute the random walk normalized graph Laplacian.\n",
"\n",
" Args:\n",
" W (np.ndarray): Similarity matrix.\n",
"\n",
" Returns:\n",
" np.ndarray: Random walk normalized graph Laplacian.\n",
"\n",
" \"\"\"\n",
" D_inv = np.diag(1.0 / np.sum(W, axis=1))\n",
" return np.eye(W.shape[0]) - D_inv @ W\n",
"\n",
"\n",
"def sort_eigenvalues(M: np.ndarray, k: int) -> tuple:\n",
" \"\"\"Sort eigenvalues and eigenvectors in ascending order.\n",
"\n",
" Args:\n",
" M (np.ndarray): Matrix to decompose.\n",
" k (int): Number of smallest eigenvalues and eigenvectors to return.\n",
"\n",
" Returns:\n",
" tuple: Sorted eigenvalues and corresponding eigenvectors.\n",
"\n",
" \"\"\"\n",
" eigenvalues, eigenvectors = np.linalg.eigh(M)\n",
" idx_L = np.argsort(eigenvalues)[:k]\n",
" return eigenvalues[idx_L], eigenvectors[:, idx_L]\n",
"\n",
"\n",
"def compute_W_matrix(sigma: int, X: np.ndarray) -> np.ndarray:\n",
" \"\"\"Fill the similarity matrix W.\n",
"\n",
" Args:\n",
" sigma (int): Parameter for the Gaussian kernel.\n",
" X (np.ndarray): Input data.\n",
"\n",
" Returns:\n",
" np.ndarray: Similarity matrix W.\n",
"\n",
" \"\"\"\n",
" W = np.zeros((len(X), len(X)))\n",
" for i in range(len(X)):\n",
" for j in range(len(X)):\n",
" W[i, j] = (\n",
" 0 if i == j else np.exp(-(np.abs(X[i] - X[j]) ** 2) / (2 * sigma**2))\n",
" )\n",
" return W\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9e7e4ffa",
"metadata": {},
"outputs": [],
"source": [
"def create_X(sigma: int, n: int, m: int) -> np.ndarray:\n",
" \"\"\"Create a dataset with 4 Gaussian clusters.\n",
"\n",
" Args:\n",
" sigma (int): Standard deviation of the clusters.\n",
" n (int): Total number of data points.\n",
" m (int): Number of clusters.\n",
"\n",
" Returns:\n",
" np.ndarray: Generated dataset.\n",
"\n",
" \"\"\"\n",
" part = int(n / m)\n",
" norm_1 = np.random.normal(2, sigma, part)\n",
" norm_2 = np.random.normal(4, sigma, part)\n",
" norm_3 = np.random.normal(6, sigma, part)\n",
" norm_4 = np.random.normal(8, sigma, part)\n",
"\n",
" return np.concatenate([norm_1, norm_2, norm_3, norm_4])\n",
"\n",
"\n",
"def plot_eigenvalues(sigma: int, n: int, m: int, k: int) -> None:\n",
" \"\"\"Plot the eigenvalues of the Laplacian for different sigma values.\n",
"\n",
" Args:\n",
" sigma (int): Standard deviation of the clusters.\n",
" n (int): Total number of data points.\n",
" m (int): Number of clusters.\n",
" k (int): Number of eigenvalues to compute.\n",
"\n",
" \"\"\"\n",
" print(f\"Plotting the eigenvalues and the distribution for Sigma: {sigma}\")\n",
" X = create_X(sigma, n, m)\n",
" W = compute_W_matrix(sigma, X)\n",
" L = compute_laplacian(W)\n",
" eigenvalues_L, _ = sort_eigenvalues(L, k)\n",
"\n",
" plt.figure(figsize=(12, 4))\n",
" plt.subplot(1, 2, 1)\n",
" plt.hist(X, bins=100, label=\"Combined Distribution\")\n",
" plt.legend()\n",
"\n",
" ks = range(1, k + 1)\n",
" plt.subplot(1, 2, 2)\n",
" plt.scatter(ks, eigenvalues_L, marker=\"+\")\n",
" plt.title(\"Eigenvalues of L\")\n",
" plt.xlabel(\"Index\")\n",
" plt.ylabel(\"Eigenvalue\")\n",
"\n",
" plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 68,
"id": "b3871450",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Plotting the eigenvalues and the distribution for Sigma: 0.1\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA9EAAAGJCAYAAACNcrDAAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAPzJJREFUeJzt3Qd4FOX69/E7gAkEQugQpAQQRaQXEVAEQRAjggUsUUMR9S+KiAWitFAMcBQR5dCUJkU8alBBQVAR9YB0BJEmLaIUBRIIEjDZ97qf8+6aDQlMYDe7O/v9XNeQndnJ7DO7JJPfPC3E4XA4BAAAAAAAXFSBi+8CAAAAAAAUIRoAAAAAAIsI0QAAAAAAWESIBgAAAADAIkI0AAAAAAAWEaIBAAAAALCIEA0AAAAAgEWEaAAAAAAALCJEAwAAAABgESEaAAAAthYSEiLDhg0TO9q3b585v5kzZ0qge/fdd6VWrVpyxRVXSIkSJXxdHCBXhGgAAAAEHA2NGh5zW1avXu3rIiIPtm/fLt27d5caNWrItGnTZOrUqbnuqzdE9DP+448/8rWMgFMh1yMAAAAgwAwfPlyqVat23varrrrK9fivv/6SQoX4s9efrVixQjIzM+WNN95w++wAf8RvEwAAAASsjh07SpMmTS64T+HChfOtPLg0R44cMV9pxo1AQHNuAAAABF2faK351PCtAVubEE+ZMsXVTDi7OXPmSOPGjaVIkSJSqlQpuf/++yU5Odltn9atW0udOnVk27Zt0qZNGwkPD5crr7xSxo4d69rn8OHDpkY8ISHhvNfYsWOHee233nrLrB87dkyef/55qVu3rhQrVkyKFy9ubhhs3rz5ouerZdElO20uHR0d7bZNa3/Hjx8v1113nXkvypcvL48//rgcP37cbb9169ZJhw4dpEyZMuZ90Nr/nj17ihX//ve/zfHDwsKkYsWK0qdPHzlx4oTreS3T0KFDzeOyZcvaug877IGaaAAAAASslJSU8/rGaggrXbp0rt+zceNGue222yQqKsoE2oyMDNMsXANcdqNGjZLBgwdLt27d5NFHH5WjR4/Km2++Ka1atTLHyVpzqsFTj3v33Xeb/T/44AMZMGCACcIagDWg3nzzzfL++++7QqPTggULpGDBgtK1a1ezvmfPHlm4cKFZ18CqAVyDvn6/BnUNo56ggVn7l/fo0UP69u0re/fuNUFez+377783g3xpLXH79u3N+zNw4EBzzjqg2UcffXTR42sY1ve4Xbt28n//93/mZsGkSZNk7dq1ruNriJ89e7YkJSWZ5/SmQb169TxyfoBXOAAAAIAAM2PGDIf+KZvTEhYW5ravbhs6dKhrvVOnTo7w8HDHwYMHXdt27drlKFSokNnXad++fY6CBQs6Ro0a5Xa8LVu2mH2zbr/55pvN986ePdu1LT093VGhQgXHPffc49o2ZcoUs58eI6vatWs7brnlFtf6mTNnHBkZGW777N2715zb8OHD3bbp8fT9yFoWXbKLi4tzVK1a1bX+7bffmu+dO3eu235Llixx256UlGTW165d68iLI0eOOEJDQx3t27d3O5e33nrLHG/69Omubfr56LajR49e9Lh52RfwBppzAwAAIGBNnDhRli1b5rZ8/vnnue6vtc7Lly+XLl26uNXm6mBWWluclda0anNnrVXW2m7nUqFCBalZs6Z8/fXXbvtrDepDDz3kWg8NDZXrr7/e1Co7aS21NunWmmenrVu3mtrl++67z7VNmz4XKFDAVeY///zTHP+aa66RDRs2iCf85z//kcjISLn11lvdzk+brutrOc/PWdu+aNEiOXfunOXj6/t89uxZ6devn+tcVO/evU3z9MWLF3vkPID8RnNuAAAABCwNqRcbWCwrbZqso3XnNAJ09m27du3SamkTmHOiTZGzqlSp0nl9qkuWLCk//vija137FLdt29Y06R4xYoTZpoFag7UGbCfnSNXan1ibWGuQdrpQU/W80PPT5vDlypW74GBf2oT8nnvuMc2yX3/9ddPfWm9CPPjggybs52b//v3mqwb/rPTmQvXq1V3PA4GGEA0AAADkQIOshmKt2db+ytlpbW1WOe2j/tei/B86MJn2Qd60aZM0aNDABGoN1hqwnV555RXTF1sH79KwrQOaaW2u1upquS5Ey5z9NVXWIO48Pw3Qc+fOzfE4zj7iejzt361zb3/66aeydOlSU67XXnvNbMv+PgB2R4gGAABA0NDQqKNQ7969+7znsm/TUbs1jOrAXldffbXHyqC1uDqgl7NJ986dOyU+Pt5tHw2tOsr3O++847ZdR7XOGrZzorXfWZuQO2Wv+dXz0ybXLVu2NCNuX8wNN9xgFh1sbd68eRIbGyvvvfeeGXAtJ1WrVjVfdTAxrXl20ibe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",
"text/plain": [
"<Figure size 1200x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Plotting the eigenvalues and the distribution for Sigma: 0.25\n"
]
},
{
"data": {
"image/png": "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AAAAAIC/BsjarXrhwoXyySefmLmQT506ZdaHhoZK0aJFvdVGAAAAAAD8awzylClTzDjiNm3aSFhYmGtZvHix91oIAAAAAIA/drEGAAAAAMCOcl3FGgAAAAAAOyFABgAAAACAABkAAAAAgFQEyAAAAAAAECADAAAAAJCKABkAAAAAAAJkAAAAAABSESADAAAAAECADAAAAABAKgJkAAAAAAAIkAEAAAAASEWADAAAAAAAATIAAAAAAKkIkAEAAAAAIEAGAABprV+/Xrp27SqVK1eWgIAAWbZsma+bBABAviBABgAAHhISEqRJkyYyefJkXzcFAIB8FZi/bwcAAPxd586dzQIAQEFDgAwAAK5KYmKiWZzi4+N92h4AAHKLLtYAAOCqREVFSWhoqGupVq2ar5sEAECuECADAICrEhkZKXFxca4lJibG100CACBX6GINAACuSnBwsFkAALA6MsgAAAAAAJBBBgAAaV24cEEOHTrken7kyBHZsWOHlClTRqpXr+7TtgEA4E0EyAAAwMOWLVukbdu2rueDBw82/0dERMicOXN82DIAALyLABkAAHho06aNOBwOXzcDAIB8xxhkAAAAAAByEyCvX79eunbtKpUrV5aAgABZtmyZd1oGAAAAAIA/B8gJCQnSpEkTmTx5sndaBAAAAACAFcYgd+7c2SwAAAAAANiJ14t0JSYmmsUpPj7e228JAAAAAID/BchRUVEyatQor+2/5pDPPZ4fHdcl16/1J1m17Urtzsk58KUrfXb+/PlkxZufz9V8vxfUzycvf0f48mcrL9tilc8OAADAdlWsIyMjJS4uzrXExMR4+y0BAAAAAPC/DHJwcLBZAAAAAADwZ8yDDAAAAABAbjLIFy5ckEOHDrmeHzlyRHbs2CFlypSR6tWr53X7AAAAAADwzwB5y5Yt0rZtW9fzwYMHm/8jIiJkzpw5eds6AAAAAAD8NUBu06aNOBwO77QGAAAAAAAfYQwyAAAAAAAEyAAAAAAApCJABgAAAACAABkAAAAAgFQEyAAAAAAAECADAAAAAJCKABkAAAAAAAJkAAAAAABSESADAAAAAECADAAAAABAKgJkAAAAAAAIkAEAAAAASEWADAAA0pk8ebLUrFlTihQpIi1btpRNmzblexsuJv0lNYd8bhZ97M+s0lartNNqbQVgHwTIAADAw+LFi2Xw4MEy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",
"text/plain": [
"<Figure size 1200x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Plotting the eigenvalues and the distribution for Sigma: 0.5\n"
]
},
{
"data": {
"image/png": "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APCwd955xyFA1m7M5cuXN92fNXh2haioKPP15MmTpoq1RdebNWuW7WvKlStnqmjrPvZ03TpedsLDw80CwHdpQS6rW7WVOY4f2kkiw66/cj4QDAoUII8bN87cNX722WdNIRAAAJC3vn37uv09tGq1BrU6ptkKiDWz+91338nTTz+d7WvCwsKkRYsW5jXdu3c329LT0836wIED3d5mAO6TXbVqDY6pYg04yvdvxJYtW2TatGnSpEmT/B4CAICg8cMPP1z3vtd7bb148aIcOHDAoTDXjh07pEyZMlKtWjV57rnnZMyYMVKnTh3bNE86Z7IV/KqOHTvKAw88YAuAtat0XFyctGzZUlq1amVugOt0UlZVawAAAlm+AmS9IPfu3VtmzJhhLrwAACB3msXVbtU63jg3uo8Wyroe8fHx0qFDB9u6NQ5YA9zZs2fLyy+/bILbp556Ss6dOye33XabrFixwmEO5J9//tkU57L06tVLTp8+LcOHDzfFvLTd+pqshbsA+CfNGFOQC3BxgDxgwADp2rWrmfYhrwBZp37QxcLUDwCAYKTZXVdr3759rgG3BtujRo0yS04SEhKu2abZZLpUAwCCkdMB8oIFC2Tbtm2mi/X1YOqHgqsxeJnDurN3/fJ6vf3zvnxHsaDnwZXvHQycPd++co68+XPiTs78HuclUM6Jv6levbq3mwAAAFwZICcmJpqCXKtWrXLonpUbpn4AACB7u3fvliNHjkhqaqrD9vvuu89rbQIAIJg5FSBv3bpVTp06Jc2bN7dt03FS69evl0mTJpmu1Do9hD2mfgAAwNHBgwdNYaydO3c6jEu2pn663jHIAADAtQo5s7NWutSLuVbItBatcqkFu/Rx1uAYAABcS3tjaVVpvekcGRkpP/74o7nZrNfUtWvXert5AAAELacyyMWLF5dGjRo5bCtWrJiULVv2mu0AACB7GzdulC+//FLKlSsnhQoVMotWmNa6Hc8884xs377d200EACAoOZVBBgAABaddqPWms9Ig+ZdffrEV8tq3b5+XWwcAQPDK1zRP9ugKBgCAc7TX1ffff2+6Wbdu3VrGjx8vYWFhMn36dKlVq5a3mwcAQNAqcIAMAACcM3ToUElOTjaPdY7ie++9V26//XYzZGnhwoXebh4AAEGLABkAAA+LjY21Pa5du7bs3btXfvvtNyldurStkjUAAPA8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",
"text/plain": [
"<Figure size 1200x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Plotting the eigenvalues and the distribution for Sigma: 1\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 1200x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"k = 10\n",
"n = 200\n",
"m = 4\n",
"for sigma in [0.1, 1 / 4, 0.5, 1]:\n",
" plot_eigenvalues(sigma, n=n, m=m, k=k)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "0fb32d82",
"metadata": {},
"outputs": [],
"source": [
"def spectral_clustering(sigma, n: int, m: int, k: int) -> np.ndarray:\n",
" \"\"\"Perform spectral clustering on the data.\n",
"\n",
" Args:\n",
" sigma: The sigma value for the similarity matrix.\n",
" n: Number of data points.\n",
" m: Number of clusters.\n",
" k: Number of eigenvectors to use.\n",
"\n",
" Returns:\n",
" X: The data points.\n",
" clusters: The cluster assignments.\n",
"\n",
" \"\"\"\n",
" X = create_X(sigma, n, m).reshape(-1, 1)\n",
" W = compute_W_matrix(sigma, X)\n",
" L = compute_laplacian(W)\n",
"\n",
" _, eigenvectors = sort_eigenvalues(L, k)\n",
" U_normalized = eigenvectors / np.linalg.norm(eigenvectors, axis=1, keepdims=True)\n",
"\n",
" kmeans = KMeans(n_clusters=k)\n",
"\n",
" return X, kmeans.fit_predict(U_normalized)\n"
]
},
{
"cell_type": "code",
"execution_count": 70,
"id": "57c342d0",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/var/folders/tp/_ld5_pzs6nx6mv1pbjhq1l740000gn/T/ipykernel_20129/2454322060.py:31: DeprecationWarning: Conversion of an array with ndim > 0 to a scalar is deprecated, and will error in future. Ensure you extract a single element from your array before performing this operation. (Deprecated NumPy 1.25.)\n",
" W[i, j] = (\n"
]
},
{
"data": {
"text/plain": [
"Text(0.5, 0, 'Data Points')"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAOHlJREFUeJzt3Qd8FGX+x/HfplKTSG8JXQPSpGMDJYIKCgqKHCpNOBURxVMBUVRUUE5EpQl3CCgIfyyInIIUQe5AqVIFFaSGXhJqQpL5v34P7LoJmwZJgGc/79ftxZ2dmZ2ZXXa++zy/Z9blOI4jAAAAlgi43BsAAACQkwg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAfHr11VfF5XLl6Dq3b99u1jlx4kS5GnXp0kUqVKhwuTfjiqSvqb62+hoDlxvhBsjA+vXrpX379lK+fHnJly+flC1bVu644w758MMPL/emyalTp0wAWbRokVwJdDvuv/9+KVWqlISEhEiJEiXknnvukS+//DLPtmHTpk3mmNh4gm3WrJkJD+5b/vz5pVatWjJixAhJSUmRK9Ho0aOv2iCLqxvhBkjH0qVLpX79+rJ27Vrp0aOHjBw5Uh577DEJCAiQ999//4oIN6+99toVEW4GDRokt912m2zYsEH+/ve/y9ixY+X555+XEydOSLt27WTq1Kl5Fm70mORWuBk/frxs2bJFLpdy5crJJ598Ym5DhgwxgfvZZ5+Vl19+Wa5EhBtcLkGX7ZmBK9ybb74p4eHhsmLFComIiEj12IEDB+Rqc/LkSSlYsGCOr/fzzz+X119/3bRwaYgJDg72PKYBZ+7cuXL27Fm5mrmPnfe+XQ76fnz44Yc99x9//HGJjo42LYn6GgQGBl7W7QOuFLTcAOnYunWrXH/99RcEG6VdLt60m+Cpp56SKVOmyHXXXWe+UderV09+/PHHC5bds2ePdOvWTUqWLCmhoaHmOSZMmHDBfGfOnDFdLNdee61ZX+nSpU23j26XtkwUL17czKctFe6uCp3fXRtSqFAhM+/dd98thQsXlk6dOpnHlixZIg888IBERUWZ54+MjDTf/k+fPn1Rx0lbDYoUKWL2wdfJv2XLltK6desMu1v0lpX6lmnTppnjqvsTFhYmNWvW9LSiaQuB7pfSViT3MfFu2fruu+/klltuMUFF19GqVSvZuHHjBc+b3rFLu03uGqJ//vOfMm7cOKlcubI5pg0aNDChOK0ZM2ZI9erVzetZo0YN+eqrry6pjkfXo891/PjxCwL3p59+ao6Vdl/p6/PQQw/Jrl27Us3z+++/m5Y17UrUdWnLkM4XFxeXav98tb54v9980X3SY7t48WLPa+F+nTXs6vu2atWq5nmLFi0qN998s8ybN++ijgOQFi03QDq0zmbZsmWmq0VPRJnRD/Hp06fL008/bU5w2iR/5513yvLlyz3L79+/Xxo3buwJQxpQ9ITbvXt3iY+Pl2eeecbMl5ycbALBggULzMmmT58+5gSmH/66PTExMTJmzBh54okn5L777jOhR2kNhltSUpIJFnrS0JNvgQIFPCdY7dLSZfWkotun3/x3795tHssOPTlu3rzZhDUNAblJ971jx47SvHlzefvtt820X3/9Vf73v/+Z43PrrbeaY//BBx/IgAEDpFq1amYe91/tyuncubM5Jrq8HgM9hnp81qxZkypgpHfs0qMtVvr6aJecvrbvvPOOeU22bdvmCXz/+c9/pEOHDiaQaZfS0aNHzeuudVyXwh1AvEO4tjpq6HzwwQdNV+rBgwfNa6zHSPdV501MTDT7mJCQIL179zYBR4P37Nmz5dixY6aV6FJoLZCuV4PiSy+9ZKZpoFcaivQY6LY1bNjQvPdXrlwpq1evNjVtwCVzAPj0/fffO4GBgebWpEkT54UXXnDmzp3rJCYmXjCv/lPS28qVKz3TduzY4eTLl8+57777PNO6d+/ulC5d2jl06FCq5R966CEnPDzcOXXqlLk/YcIEs77hw4df8FwpKSnm78GDB808gwYNumCezp07m8f69et3wWPu5/A2ZMgQx+VymW120/Vm9hHx9ddfm3nee+89Jyv+/PNPM//HH3/smda0aVNz87UP5cuX99zv06ePExYW5iQlJaW7/hkzZpj1//DDD6mmHz9+3ImIiHB69OiRavq+ffvMcfeentGxS7tN7v0pWrSoc+TIkQuOyzfffOOZVrNmTadcuXJmW9wWLVpk5vNeZ3r0GEVHR5vXXW+bN292nn/+ebN8q1atPPNt377dvGfffPPNVMuvX7/eCQoK8kxfs2aNWVaPWXZeL7e07z2dR6fpMm7XX3+9z9e2du3aqbYZyGl0SwHp0G+Q2nJz7733mqJi/Tau33T1m/asWbMumL9JkyamG8BNu33atGljak60JUbPB1988YUZQaT/fejQIc9N16tdAfrNVel8xYoVM99808rO8GxtnUlLuym8a0n0+W+88UazTfqtPjv0G7fK7VYbpa0Nur0X03Why2hrhLb8eB93rVFp1KiR/PDDD1k6dunRFplrrrnGc1+7vpS23KjY2Fgz8u7RRx81LRluTZs2NS05WaWtZNrapzettRk2bJh5f3p3G+noNB09pa023vuqLTPaDeTeV3fLjL4/tRUrL+lrqV1W2vIH5AbCDZABrWfQk4V2IWj3Tf/+/U33gxbP6sgcb3riSEvrZfTEod0CetMTrNZmuE9Q7lvXrl3N/O66Ca330NqdoKCL7znWZbWGIq2dO3eaOg+tw9ATrT6/nmSVu9Yiq7TuRekxyW1PPvmkOZ533XWX2S/tCpszZ06WlnWfRG+//fYLjv33339/Qb1KescuPRpkvbmDjr5v1I4dO8zfKlWqXLCsr2np0a4zDWoaSLTbU4O2vq+0bsV7XzWo6vsx7b5qN557XytWrCh9+/aVf/3rXyZIa8AeNWpUtt8DF0OLn/Xfgr6eGu608HzdunW5/rzwH9TcAFmg123RoKM3/UDWMKL1KToEOqvc1yLR0S5a++GLd83MpdK6Hx227k1bkLRF6siRI/Liiy+ab/9aXKu1Fhp4snu9FF1eaavExdKWqHO9HHLBtqYt4v7ll1/MiV3rlPT28ccfm9aQSZMmZfgc7v3SuhttwUgrbYj0dewykt4oJV/7dSn0tdJ6K7ebbrpJ6tata2qMtNbIva96TPX4+Nou75ajd99917zuX3/9tQl5WrOktTA//fSTCXfptRKmfW2yS2t/NMC7n1cD1nvvvWcuIaB1OMClItwA2aTXvlF79+5NNd1XE/tvv/1milHdI5u0+0ZPDN4nKF901M3PP/9sRpWkN/z4Yq4erCFEt0nDgIYCt4sdpaJBT1uY9CSlo5a8T5xZpa0c7u4bb+7WjrQhU7v19KYncW3N+eijj0zxrLaApHdM9Hi6A1Jmxz63itPVH3/8ccFjvqZllYZhDct6DP7xj3+YFiTdVw1V2jKjr09mtOVEbwMHDjTXdtLApCHjjTfe8LRAaStLZq9Ndt+j2nKoXxL0ptdD0sCjhcaEG+QEuqWAdGhtgq9v3t9++635qyd1b1qf466ZUTrsVk/6LVq0MN+g9abDbrWeRkc8paXdC246n9ZJ6IUD03Jvk3sET9oTT0bc3+S990v/+1IuSqhDeg8fPmxOSjrKKC39Zq4jcNKjJ2OtJfHef61x0lFQ3vQ5vGnLirulS0f8KPd1fNIeE+1y0S60t956y+c1d7yfOzeUKVPGjJibPHmyOZF7j7C7lFYv9cILL5h9Gj58uLmvo7T0ddbXJe37V++7j6PWS6V9vTTk6HF1H089ZtpllfaSBtollhX6evh6f6Z9LTUUazh1Py9wqWi5AdKhxbxaL6NDrbX7RYfO6jdbHe6ttQ/uOhk3PXnpSdR7KLjSk4zb0KFDTWjSIla96rFe80S7iDQUzZ8/3/y30lYVPRFqTYTW+miBqhbT6jzaWqGFyloYrMvr9ug3dP0mrNuQ0bB13Q8NE/otX7ui9OSlYctdG3IxtJhWT9A6/FgLkrVoV1sq9ASmNTE6nD2jKxRr7YyemPXY6dBorQnRlgO9/o+7YFlpeNLjo3Uz2mWirQc6vLlOnTqe4d7633pi16HeWjuir4POry02Ouz7kUceMd04OrxeW9O0/kiHaGtrha8gmZM0WOnrps+l7x095vqc+np5B57s0veAXo9Hu3a0BUtfX2110fowHSbetm1b02L4559/muvq9OzZ07z+CxcuNJcj0GsD6ftHg45227lDuPdx1/et/tVWSw062vqXFVpgr8ddt0fDi74O+nroNus1b/Rxfd/qMHC9GKRuD5Ajcnz8FWCJ7777zunWrZsZfluoUCEnJCTEqVKlitO7d29n//79qebVf0q9evVyPv30U6dq1apOaGioc8MNN1wwJFnpsjpvZGSkExwc7JQqVcpp3ry5M27cuAuGbL/00ktOxYoVPfO1b9/e2bp1q2eepUuXOvXq1TPb5j00V4csFyxY0Od+bdq0yYmJiTH7VKxYMTMMeu3atRcM+c3KUHBvCxYscNq0aeOUKFHCDDkuXry4c88995hh0ZkNLdbjVqlSJbMfderUMUPu0w67/vzzz50WLVqY9et8UVFRzt///ndn7969qdY1fvx4sy4dDp12WLj+d8uWLc3wbx2mX7lyZadLly6phvBndOzSGwo+bNiwC+b1NUx/2rRp5v2k748aNWo4s2bNctq1a2emZUaHVOvQal/cQ8q9n++LL75wbr75ZrMvetPn0Pfdli1bzOPbtm0z7289BnosihQp4tx2223O/PnzL3gf6iUM9JgVLlzYefDBB50DBw5kaSi4DrXXId+6nD7mHhb+xhtvOA0bNjTD8/Pnz2+2TYeo+7rMAnAxXPp/OROTAP+ltQW9evXK9W//sI+2NmkrElfnBXIONTcAkAe0LiZtjYv+NITWF/n6+QkAF4+aGwDIA1rjpCO1dHSTFhhrEbXWFunQdP0BTAA5h3ADAHlAh1VrAa0W/uroLB1JpD/cqcW6+htfAHIONTcAAMAq1NwAAACrEG4AAIBV/LLmRi/brr/Sqxe2uphL2AMAgLynlTT6Q71alJ/R77/5ZbjRYBMZGXm5NwMAAFwE/XkbvVJ5evwy3GiLjfvg6OXnAQDAlU9/kkUbJ9zn8fT4Zbhxd0VpsCHcAABwdcmspISCYgAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFglT8LNqFGjpEKFCpIvXz5p1KiRLF++PMP5Z8yYIdHR0Wb+mjVryrfffpvuvI8//ri4XC4ZMWJELmw5AAC42uR6uJk+fbr07dtXBg0aJKtXr5batWtLy5Yt5cCBAz7nX7p0qXTs2FG6d+8ua9askbZt25rbhg0bLpj3q6++kp9++knKlCmT27sBAACuErkeboYPHy49evSQrl27SvXq1WXs2LFSoEABmTBhgs/533//fbnzzjvl+eefl2rVqsngwYOlbt26MnLkyFTz7dmzR3r37i1TpkyR4ODg3N4NAABwlcjVcJOYmCirVq2SmJiYv54wIMDcX7Zsmc9ldLr3/EpberznT0lJkUceecQEoOuvvz4X9wAAAFxtgnJz5YcOHZLk5GQpWbJkqul6f/PmzT6X2bdvn8/5dbrb22+/LUFBQfL0009naTsSEhLMzS0+Pj6bewIAAK4WV91oKW0J0q6riRMnmkLirBgyZIiEh4d7bpGRkbm+nQAAwMJwU6xYMQkMDJT9+/enmq73S5Uq5XMZnZ7R/EuWLDHFyFFRUab1Rm87duyQ5557zozI8qV///4SFxfnue3atSvH9hEAAPhRuAkJCZF69erJggULUtXL6P0mTZr4XEane8+v5s2b55lfa23WrVsnv/zyi+emo6W0/mbu3Lk+1xkaGiphYWGpbgAAwE65WnOjdBh4586dpX79+tKwYUNzPZqTJ0+a0VPq0UcflbJly5quI9WnTx9p2rSpvPvuu9KqVSuZNm2arFy5UsaNG2ceL1q0qLl509FS2rJz3XXX5fbuAAAAfw83HTp0kIMHD8orr7xiioLr1Kkjc+bM8RQN79y504ygcrvxxhtl6tSpMnDgQBkwYIBUrVpVZs6cKTVq1MjtTQUAABZwOY7jiJ/R0VJaWKz1N3RRAQBg1/n7qhstBQAAkBHCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKnkSbkaNGiUVKlSQfPnySaNGjWT58uUZzj9jxgyJjo4289esWVO+/fZbz2Nnz56VF1980UwvWLCglClTRh599FGJjY3Ngz0BAADi7+Fm+vTp0rdvXxk0aJCsXr1aateuLS1btpQDBw74nH/p0qXSsWNH6d69u6xZs0batm1rbhs2bDCPnzp1yqzn5ZdfNn+//PJL2bJli9x77725vSsAAOAq4HIcx8nNJ9CWmgYNGsjIkSPN/ZSUFImMjJTevXtLv379Lpi/Q4cOcvLkSZk9e7ZnWuPGjaVOnToyduxYn8+xYsUKadiwoezYsUOioqIy3ab4+HgJDw+XuLg4CQsLu6T9AwAAeSOr5+9cbblJTEyUVatWSUxMzF9PGBBg7i9btsznMjrde36lLT3pza90J10ul0REROTg1gMAgKtRUG6u/NChQ5KcnCwlS5ZMNV3vb9682ecy+/bt8zm/TvflzJkzpgZHu7LSS3EJCQnm5p38AACAna7q0VJaXPzggw+K9qyNGTMm3fmGDBlimrHcN+0WAwAAdsrVcFOsWDEJDAyU/fv3p5qu90uVKuVzGZ2elfndwUbrbObNm5dh31v//v1N15X7tmvXrkvaLwAA4KfhJiQkROrVqycLFizwTNOCYr3fpEkTn8vodO/5lYYX7/ndweb333+X+fPnS9GiRTPcjtDQUBN+vG8AAMBOuVpzo3QYeOfOnaV+/fpmRNOIESPMaKiuXbuax/UaNWXLljVdR6pPnz7StGlTeffdd6VVq1Yybdo0WblypYwbN84TbNq3b2+GgeuIKq3pcdfjFClSxAQqAADgv3I93OjQ7oMHD8orr7xiQogO6Z4zZ46naHjnzp1mBJXbjTfeKFOnTpWBAwfKgAEDpGrVqjJz5kypUaOGeXzPnj0ya9Ys89+6Lm8//PCDNGvWLLd3CQAA+PN1bq5EXOcGAICrzxVxnRsAAIC8RrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFgl6HJvgA3OnEiQnz5bLT9PWy1x+09I4eIFpdGDN0iTTvUkf1g+M4/jOLJ50R+y5OPlsmPNbklJTpGAoABJPpsi+QuHSr6wfBK//7icTUiSlKQUcVKcLD13WIlCUrRCEdm9PlbOnk7KcN7gfEFm/ZLeql36P5fZ1mwxy+k+itmnYhWKmOc6vPOoBIUESc2W0XJL10ZSskox8SeOkySOxIrj7BWRRH0FRKSAiJwUEX2tQsUlpc+/HPv0nXTuYJrvHDr/lU63NVBcUkJcrnLichUQxzktKc52ETkoIinn5ysgLqkoLlcxcbl0mb84znFJcXaLyOHzU8IkwKyrSLa2xHFOiuPsFkcO6T0RKWTWI1L0gufMS2fPnpVPPvlURo8eK7///oeEhYVJp04dpXfvXlK2bFlJSUmRQYNek+HDR8ipU6cuWL5w4cKSkJAgiYlZez/ovsbENDf/vWjRYvP8lyI0NFQCAgLk9OnTZt1Fixb13C9YsKDZthMnTpjPjOTkZDNP/vz5pUGD+maeLVu2SHBwiNx3Xxvp06e3VK9eXWzm6Gu1eJGcXbxIUo4eEVehwhJ8880SEHGNnP3vEknevUskOFgCSpUWJy5OnGNH9U0ikuL+t5ID9P3uZPMz3JfAQHMLKFZcgpvdJiG3NhVXaKjPWZ3TpyXhP99I4sIFIqdP/7UpERESclcrCWnaLN1lc4vLyfaZLPtGjRolw4YNk3379knt2rXlww8/lIYNG6Y7/4wZM+Tll1+W7du3S9WqVeXtt9+Wu+++2/O4bvKgQYNk/PjxcuzYMbnppptkzJgxZt6siI+Pl/DwcImLizMfNpfixOGTMvKBiXLozyOpQoErwCVFykXIU593kcLFC8nsofNl0UfLxBXoEic51w/5FSUgMMAcj27jO0h0syriDxwnQVKcX0Tkr3/odtNYXEkc2XY+XPhSSgJc13nCRoqzTxxn8/mQlHoZl5SXgICKWXpmxzkkKc5G9700j5aRAFfVyxJw9MTfuvW9Mn/+QhMINMiowMBACQsrLAsWzJPHHuspq1evEdsFBQWZ1+DLL2dI69atxEbOyZNycuhbkrJnd86EiyuJyyUB5SKlYL/+4ipQMNVDKXFxcvL1QeIcOZLu4gGRUVKw3wBxFdAvd5cmq+fvXO+Wmj59uvTt29eEkdWrV5tw07JlSzlw4IDP+ZcuXSodO3aU7t27y5o1a6Rt27bmtmHDBs8877zzjnzwwQcyduxY+fnnn803CF3nmTP6zTdvzRjwHzm8I3WwUdrycnTPMZn2/CzZOP83E2zMdD8LNkpbqZKTkmXSEzPkdFzev0aXQ4qz5XxLjL9wxJGtGQQbtU8c2X9ubuf0+WBzbtkL17ZDHCf9D0vPfE6ipDibzq/D13PHimNakfLeG2+8JQsXLjL/7Q42Sls44uOPS/Pmd/hFsFFJSUnm9sADD8mhQ9q6Zp/TUz6RlNg99gUb5TgmtJ2e8qmkdXrCvzIMNipl9y4589kUyUu5Hm6GDx8uPXr0kK5du5omSQ0kBQoUkAkTJvic//3335c777xTnn/+ealWrZoMHjxY6tatKyNHjjSPa4gYMWKEDBw4UNq0aSO1atWSyZMnS2xsrMycOVPy0tHYONn4/WZJSSew6PQti7fKglFLTMuFX3NEEs+clRVfrBXb6YlbRP+xW/ghd4m06+jc39hM501x9mS+PtOdl5Kl58xL2o00atSYVKHGmwaco0ePiT/Rz249Lh9/PElskxIfL0k//5Sz3UtXmpQUs4+6r55Jhw5K8rosfKY7jpxdtlRSThwXK8KNvpFXrVolMTExfz1hQIC5v2zZuZaMtHS69/xKW2Xc8//555+me8t7Hm2iatSoUbrr1OZhbcryvuWE3ev2Zimk796wL8s1NDbTZukdq/P+RJPXHMmZ95edztVnOBKXhXkzn8dxsnKs47NfR3aJtm7dKkePHs3T57wa6OuwbNlPYpuUHdvtDjZuycmSsnPHX3e3aTd0dpbdKVaEG21+1G8oJUuWTDVd72tA8UWnZzS/+2921jlkyBATgNy3yMhIyQlaP5Ol+S5jQeMVxXWu4Ngfqk+Qmawco5w6jnn/emhdDXx/Fmr9jXUC7P9c8wgIvPj99l42l/nFK9K/f39TfOS+7dq1K0fWW6lBlAQGB2ZaTFv1pooSkMUgZDOtN7r25kpiv4jLckK9OkSYE1zmo6H0+GU+Yipro6quyfMvGFWqVJHISB2tBW/aTRcTc7vYJrBSZZGQELFeaKgEVvrrMzzw2uuyHnB02YpZGyRwxYebYsWKmW8w+/efKyJ00/ulSpXyuYxOz2h+99/srFOHM2pVtfctJxSIyC8NO9RJt55Gp9dtW0Niet8iKX7eLaWtXIWLFZQ6ra8X27lc+iGXumUR5wS4osxfHQKf8cePc34od8Z0GHpmV7QIcOVMS212aPf7888/l+7j2npRoUIF8Sd6LtBzQqdOfxPbuPLnl5Dbmp8bhm0rl0tCbm8urnznLm+iAsLCJOimm7O0eEjzO/J0OHiuhpuQkBCpV6+eLFiwIFVy1/tNmjTxuYxO955fzZs3zzN/xYoVTYjxnkdraHTUVHrrzE1tBrYwLTPe3VTuv5UaRsn9g++WivUi5YEhrc23R79rwdHddYkUCM8vPT952Fz/xh/o8ONzLTj+IlhcUvP8tXx8c0llT0uLBsAAV610P4JcrmhxuQpn+qwuV5AEuGqnG3Bcriricl0jl8NTT/WSJ5543Py3uytGQ4+qWLGC/Pe/i+SRRzqJP9DPvvDwMJk79z9mdKuNQts/IEG165y7427NcHm9v6/y4BN0Q10Jvb/9BdPzd3pEAjO5DEtg3XoSet/9YtV1bnQoeOfOneWjjz4y17bRkU7/93//J5s3bzZ1Mo8++qi5mJXWxbiHgjdt2lSGDh0qrVq1kmnTpslbb71lhpHXqFHDzKPXvdHHJ02aZMKOXhNn3bp1smnTJsnnlSrz4jo3Sltltiz+Q5bP+EWO7YmTsFJh0qB9bal+e1XTLeV28M/DsmzKKtm+ercknko073Vt3SkQUUBCC4XK8YMn5HT8GXPtnDPxZ8xoK33cvERer1JAsF43RiQoOEjKXl9aImuXlt9+3CYHtx+RpHQu0qeBq1jFInL8wLl1p35QJDAkQIJDgs32Jp5OlKSE5FSP6zo1mLkCA85dZNBxznUvBIq5UJ+5jkdyitmPyo3LS3C+YDnw+yEJzh8kNe64TurfX1vyh2f+2tjk3D+tw+Z6LiIJ5y/aV0AcOaGXdxORfOISbW10nR/1o6OstJtTl9NCWSd1QsxkVFDWaQBJPr/+zNbr/kB2z6vvZ/d7Wv+GistVwuyHBg3HSZYUMxJKb4nn54mQAFcFcbkK+hzK7YgW5p8bXeaScHG5yojLlT9be+Q4Z80xdBy9GGCKuKTw+fVc/hOpfqaNH/9v+fXXzRIRESEdO3aQBx98wFzsTs2bN1+efLKXbNu23TO6KiDAJQULFpIqVSrJkSNHJTZ2rxlKrfRzI72WYA0OQ4e+KTt37pIZMz6Xffv2e5ZzX2gvOy0tlSpVlOTkFHPpDg1oVatWkUKFCpkL9+lnrV4k8NChw+YzVf9bPxPKli0jLVu2MJ+v69dvMPPde29r6dKls1xzzeUJmnnFSUmR5E0bJfHHxZJy6JAERERI8I03iatoMTm7ZLEpxnWCQySwXDlxjh2TlIMHJEULz0+cOFeQrC9ucLApvjX39TMkSP+9OjqePvMN0FAVmk83RCTtpVG0DkzXl27h8/mrseo26HoKFBRXWJgEli5tLsIXWK26uNLpgtL9Tlq1Us7MniXO3n3ntj8kWAIrVpLQVq0lsPr1OdY1nNXzd55cxE+Hcbsv4lenTh1zjRod3aSaNWtmmmcnTpyY6iJ+OtTbfRE/va6Nr4v4jRs3zlzE7+abb5bRo0fLtddem6XtyelwAwAAct8VFW6uNIQbAACuPlfMFYoBAADyEuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGCVXAs3R44ckU6dOklYWJhERERI9+7d5cSJExkuc+bMGenVq5cULVpUChUqJO3atZP9+/d7Hl+7dq107NhRIiMjJX/+/FKtWjV5//33c2sXAADAVSjXwo0Gm40bN8q8efNk9uzZ8uOPP0rPnj0zXObZZ5+Vb775RmbMmCGLFy+W2NhYuf/++z2Pr1q1SkqUKCGffvqpWfdLL70k/fv3l5EjR+bWbgAAgKuMy3EcJ6dX+uuvv0r16tVlxYoVUr9+fTNtzpw5cvfdd8vu3bulTJkyFywTFxcnxYsXl6lTp0r79u3NtM2bN5vWmWXLlknjxo19Ppe29OjzLVy4MMvbFx8fL+Hh4eY5tWUJAABc+bJ6/s6VlhsNI9oV5Q42KiYmRgICAuTnn3/2uYy2ypw9e9bM5xYdHS1RUVFmfenRHSxSpEiG25OQkGAOiPcNAADYKVfCzb59+0z3kbegoCATQvSx9JYJCQkxochbyZIl011m6dKlMn369Ey7u4YMGWKSnvumNTsAAMBO2Qo3/fr1E5fLleFNu5LywoYNG6RNmzYyaNAgadGiRYbzal2OtvC4b7t27cqTbQQAAHkvKDszP/fcc9KlS5cM56lUqZKUKlVKDhw4kGp6UlKSGUGlj/mi0xMTE+XYsWOpWm90tFTaZTZt2iTNmzc3LTYDBw7MdLtDQ0PNDQAA2C9b4UYLfvWWmSZNmpiQonU09erVM9O04DclJUUaNWrkcxmdLzg4WBYsWGCGgKstW7bIzp07zfrcdJTU7bffLp07d5Y333wzO5sPAAD8QK6MllJ33XWXaXUZO3asKRTu2rWrKTDW0VBqz549pvVl8uTJ0rBhQzPtiSeekG+//VYmTpxoqqB79+7tqa1xd0VpsGnZsqUMGzbM81yBgYFZCl1ujJYCAODqk9Xzd7ZabrJjypQp8tRTT5kAo6OktDXmgw8+8DyugUdbZk6dOuWZ9t5773nm1RFOGmJGjx7tefzzzz+XgwcPmuvc6M2tfPnysn379tzaFQAAcBXJtZabKxktNwAAXH0u63VuAAAALhfCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKrkWbo4cOSKdOnWSsLAwiYiIkO7du8uJEycyXObMmTPSq1cvKVq0qBQqVEjatWsn+/fv9znv4cOHpVy5cuJyueTYsWO5tBcAAOBqk2vhRoPNxo0bZd68eTJ79mz58ccfpWfPnhku8+yzz8o333wjM2bMkMWLF0tsbKzcf//9PufVsFSrVq1c2noAAHC1cjmO4+T0Sn/99VepXr26rFixQurXr2+mzZkzR+6++27ZvXu3lClT5oJl4uLipHjx4jJ16lRp3769mbZ582apVq2aLFu2TBo3buyZd8yYMTJ9+nR55ZVXpHnz5nL06FHTOpRV8fHxEh4ebp5TW5YAAMCVL6vn71xpudEwomHDHWxUTEyMBAQEyM8//+xzmVWrVsnZs2fNfG7R0dESFRVl1ue2adMmef3112Xy5MlmfVmRkJBgDoj3DQAA2ClXws2+ffukRIkSqaYFBQVJkSJFzGPpLRMSEnJBC0zJkiU9y2hI6dixowwbNsyEnqwaMmSISXruW2Rk5EXtFwAAsCzc9OvXzxTwZnTTrqTc0r9/f9NN9fDDD2d7OW3Cct927dqVa9sIAAAur6DszPzcc89Jly5dMpynUqVKUqpUKTlw4ECq6UlJSWYElT7mi05PTEw0I5+8W290tJR7mYULF8r69evl888/N/fd5ULFihWTl156SV577TWf6w4NDTU3AABgv2yFGy341VtmmjRpYkKK1tHUq1fPE0xSUlKkUaNGPpfR+YKDg2XBggVmCLjasmWL7Ny506xPffHFF3L69GnPMlqw3K1bN1myZIlUrlw5O7sCAAAsla1wk1XadXTnnXdKjx49ZOzYsaZQ+KmnnpKHHnrIM1Jqz549ZqSTFgY3bNjQ1MLo8O6+ffua2hytgu7du7cJNu6RUmkDzKFDhzzPl53RUgAAwF65Em7UlClTTKDRAKOjmrQ15oMPPvA8roFHW2ZOnTrlmfbee+955tXi4ZYtW8ro0aNzaxMBAICFcuU6N1c6rnMDAMDV57Je5wYAAOByIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AALAK4QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbgAAgFUINwAAwCqEGwAAYBXCDQAAsArhBgAAWIVwAwAArEK4AQAAViHcAAAAqxBuAACAVYLEDzmOY/7Gx8df7k0BAABZ5D5vu8/j6fHLcHP8+HHzNzIy8nJvCgAAuIjzeHh4eLqPu5zM4o+FUlJSJDY2VgoXLiwul0tsT7ka4nbt2iVhYWHib/x5//153xX7z/6z/5HW7b9GFg02ZcqUkYCA9Ctr/LLlRg9IuXLlxJ/om9umN3h2+fP++/O+K/af/Wf/w8QmGbXYuFFQDAAArEK4AQAAViHcWC40NFQGDRpk/vojf95/f953xf6z/+z/IL/df78sKAYAAPai5QYAAFiFcAMAAKxCuAEAAFYh3AAAAKsQbiw1ZMgQadCggbkKc4kSJaRt27ayZcsW8QdjxoyRWrVqeS5e1aRJE/nuu+/EXw0dOtRcifuZZ54Rf/Dqq6+a/fW+RUdHiz/Zs2ePPPzww1K0aFHJnz+/1KxZU1auXCn+oEKFChe8/nrr1auX2C45OVlefvllqVixonndK1euLIMHD870d5hs5JdXKPYHixcvNv+YNeAkJSXJgAEDpEWLFrJp0yYpWLCg2EyvPq0n9KpVq5p/1JMmTZI2bdrImjVr5Prrrxd/smLFCvnoo49M2PMn+jrPnz/fcz8oyH8+6o4ePSo33XST3HbbbSbUFy9eXH7//Xe55pprxF/e83qSd9uwYYPccccd8sADD4jt3n77bfPlbtKkSebfgAbarl27miv6Pv300+JPGAruJw4ePGhacDT03HrrreJvihQpIsOGDZPu3buLvzhx4oTUrVtXRo8eLW+88YbUqVNHRowYIf7QcjNz5kz55ZdfxB/169dP/ve//8mSJUsu96ZcEbTFcvbs2Sbg2f5bgq1bt5aSJUvKv//9b8+0du3amVacTz/9VPwJ3VJ+Ii4uznOS9yf6DW7atGly8uRJ0z3lT7TlrlWrVhITEyP+Rk9k+sN6lSpVkk6dOsnOnTvFX8yaNUvq169vWir0C80NN9wg48ePF3+UmJhoTurdunWzPtioG2+8URYsWCC//fabub927Vr573//K3fddZf4G/9pq/Vj+ivo+u1Fm6pr1Kgh/mD9+vUmzJw5c0YKFSokX331lVSvXl38hQa61atXmyZ6f9OoUSOZOHGiXHfddbJ371557bXX5JZbbjHdE1qDZrtt27aZrom+ffua7mh9D2iXREhIiHTu3Fn8ibbgHTt2TLp06SL+0mqnvwYeHR0tgYGB5svdm2++aQK+39FuKdjt8ccfd8qXL+/s2rXL8RcJCQnO77//7qxcudLp16+fU6xYMWfjxo2OP9i5c6dTokQJZ+3atZ5pTZs2dfr06eP4o6NHjzphYWHOv/71L8cfBAcHO02aNEk1rXfv3k7jxo0v2zZdLi1atHBat27t+IvPPvvMKVeunPm7bt06Z/LkyU6RIkWciRMnOv6GcGO5Xr16mTf7tm3bHH/WvHlzp2fPno4/+Oqrr7SOzgkMDPTc9L7L5TL/nZSU5Pib+vXrm5DrD6Kiopzu3bunmjZ69GinTJkyjj/Zvn27ExAQ4MycOdPxF/pZP3LkyFTTBg8e7Fx33XWOv6FbylIaXHv37m26YxYtWmSGBvp711xCQoL4g+bNm5tuOW86YkKbql988UXTXO1PtLB669at8sgjj4g/0O7ntJd90BqM8uXLiz/5+OOPTc2R1p35i1OnTklAQOpSWv33rp9//oZwY3Ex6dSpU+Xrr782dQb79u0z03VIoFbO26x///6mgC4qKkqOHz9ujoMGvLlz54o/0Nc7bW2VDv/Xa574Q83VP/7xD7nnnnvMyTw2Ntb8MrJ+wHfs2FH8wbPPPmsKS9966y158MEHZfny5TJu3Dhz8xd6MtdwozVG/nQZAH3fa41NVFSUGQqul78YPny4Kaj2O5e76Qi5Q19aX7ePP/7YsV23bt1MjVFISIhTvHhx0yX1/fffO/7Mn2puOnTo4JQuXdq8/mXLljX3//jjD8effPPNN06NGjWc0NBQJzo62hk3bpzjT+bOnWs+77Zs2eL4k/j4ePPvPCoqysmXL59TqVIl56WXXjI1iP6G69wAAACrcJ0bAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcA4OXVV1+VOnXqXO7NAHAJCDcALkqXLl3E5XKZW3BwsJQsWVLuuOMOmTBhQrZ/y2bixIkSERGRI9vVrFkzz3bly5dPqlevLqNHj87WzzcsWLAgW89ZoUIFGTFixEVsLYDcQLgBcNHuvPNO2bt3r2zfvl2+++47ue2226RPnz7SunVrSUpKumzb1aNHD7NdmzZtMr+vpL+19tlnn2Vp2UKFCpnf4QJw9SLcALhooaGhUqpUKSlbtqzUrVtXBgwYYH6sVYOOtsa46Y/31axZ0/yAZ2RkpDz55JPm17qV/qip/mp5XFycp8VFu4bUJ598IvXr1zc/BqrP87e//U0OHDiQ6XYVKFDAzF+pUiWzrqpVq8qsWbPMYzt37pQ2bdqYEBMWFmbCz/79+9PtltIWqrZt28o///lPKV26tAk+GpbOnj3raSnasWOH+cFK9/YrnaY/ZHjNNdeY/dYfMvz2229z7NgDSB/hBkCOuv3226V27dry5ZdfeqYFBATIBx98IBs3bpRJkybJwoUL5YUXXjCP6S9Ya5eOBg1tbdGbdg0pDRCDBw+WtWvXysyZM00LkYaN7MqfP78kJiaa7jINNkeOHJHFixfLvHnzZNu2bdKhQ4cMl//hhx9k69at5q9uvwY3d3jT/SxXrpy8/vrrnu1XGoASEhLkxx9/lPXr18vbb79tAhWA3Oc/vwUPIM9ER0fLunXrPPefeeaZVPUpb7zxhjz++OOmFiYkJETCw8NNi4e2tnjr1q2b57+1FUYDUoMGDUyrT1aCQnJysumO0m3p2bOnqaXRoPHnn3+aFiQ1efJk06qyYsUKs25ftPVl5MiREhgYaPatVatWZl3a/VWkSBEz3d265KYtRO3atTMtVu7tB5A3aLkBkOMcx/F0z6j58+dL8+bNTfeVhoBHHnlEDh8+LKdOncpwPatWrTJdO1FRUWa5pk2beoJDRjQ0afjRFhsNINpl9MQTT8ivv/5qQo072CgtONZiZn0sPRp+NMC4afdUZt1jTz/9tAlxN910kwwaNChV2AOQuwg3AHKcBoWKFSua/9auJC0wrlWrlnzxxRcmsIwaNco8pl1F6Tl58qS0bNnSdFdNmTLFtKx89dVXmS6nOnXqJL/88otpodH1aM2Pdo1dLB0N5k2DW2Yjwh577DHT5aVBTluLtHboww8/vOhtAJB1hBsAOUrrafRkrl0ySsOMBoF3331XGjduLNdee63ExsamWka7prQLydvmzZtN687QoUPllltuMd1BWSkmVtrNVaVKFdNS5B1qqlWrJrt27TI3Nx1RdezYMdOCc7F8bb/SFiLtftO6nOeee07Gjx9/0c8BIOsINwAumhbM7tu3T/bs2SOrV6+Wt956yxTsakvNo48+aubRkKGFwdpqoS0ZOgJq7NixqdajdThaR6N1LIcOHTLdVdoVpaHBvZyOdtLi4ksRExNjamC0ZUe3d/ny5WY7tbtLW1Yulm6/Fg7rcdDtd9cZzZ0717Qe6XNpMbKGKwC5j3AD4KLNmTPH1J/oyV2veaMncC361eHg7hoVHTml3UI6WqhGjRqmi2nIkCGp1qMjprSFQ0ctFS9eXN555x3zV0ckzZgxw7SqaAuODse+FNqdpNumBcK33nqrCTta6Dt9+vRLWq+OlNLut8qVK5vtVtqSoyOmNNDosdEWq+xcTBDAxXM5WvkHAABgCVpuAACAVQg3AADAKoQbAABgFcINAACwCuEGAABYhXADAACsQrgBAABWIdwAAACrEG4AAIBVCDcAAMAqhBsAAGAVwg0AABCb/D9fkdNdOqnSkQAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"X, clusters = spectral_clustering(1 / 4, n=200, m=4, k=4)\n",
"\n",
"plt.scatter(X, np.zeros_like(X), c=clusters, cmap=\"magma\")\n",
"plt.title(\"Spectral Clustering Results\")\n",
"plt.xlabel(\"Data Points\")\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5cf0a967",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "studies",
"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.13.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}