Skip to content

Commit

Permalink
Exercise 1
Browse files Browse the repository at this point in the history
  • Loading branch information
arelisps committed Nov 5, 2024
1 parent 0198884 commit ab7e64e
Showing 1 changed file with 46 additions and 9 deletions.
55 changes: 46 additions & 9 deletions Optimization/TP4/TP4_Solution.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,54 @@
},
{
"cell_type": "code",
"source": [],
"source": [
"import numpy as np\n",
"\n",
"def generate_data(N, mu1, sigma1, mu2, sigma2, pi1=0.5, pi2=0.5):\n",
" \"\"\"\n",
" Generates data following a mixture of two Gaussian distributions.\n",
"\n",
" Parameters:\n",
" - N: Total number of observations to generate.\n",
" - mu1, sigma1: Mean and standard deviation for the first Gaussian.\n",
" - mu2, sigma2: Mean and standard deviation for the second Gaussian.\n",
" - pi1, pi2: Weights (membership probabilities) for each Gaussian distribution.\n",
"\n",
" Returns:\n",
" - X: Generated data matrix of size (N, 1).\n",
" \"\"\"\n",
" # Generate labels for each sample according to probabilities pi1 and pi2\n",
" labels = np.random.choice([0, 1], size=N, p=[pi1, pi2])\n",
"\n",
" # Generate data for each label according to the corresponding Gaussian\n",
" X = np.zeros(N)\n",
" X[labels == 0] = np.random.normal(mu1, sigma1, size=(labels == 0).sum())\n",
" X[labels == 1] = np.random.normal(mu2, sigma2, size=(labels == 1).sum())\n",
"\n",
" return X.reshape(-1, 1) # Return as a column vector"
],
"metadata": {
"id": "S8X6w4XCGx2H"
},
"execution_count": null,
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Using the function\n",
"X = generate_data(100, mu1=0, sigma1=1, mu2=5, sigma2=1.5)"
],
"metadata": {
"id": "Ow5LaRaFOrwj"
},
"execution_count": 6,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"##### 2. **(5 puntos)** Implemente la función $init_random_parameters$ la cual genere una matriz de $P\\in\\mathbb{R}^{K\\times2}$ dimensiones, con los parámetros de las funciones de densidad Gaussiana generados completamente al azar.\n",
"##### 2. **(5 puntos)** Implemente la función init_random_parameters la cual genere una matriz de $P\\in\\mathbb{R}^{K\\times2}$ dimensiones, con los parámetros de las funciones de densidad Gaussiana generados completamente al azar.\n",
"\n",
"a) Muestre un pantallazo donde verifique su funcionamiento correcto con los comentarios asociados."
],
Expand Down Expand Up @@ -87,7 +124,7 @@
{
"cell_type": "markdown",
"source": [
"##### 4. **(10 puntos)** Implemente la función $calculate_membership_dataset(X_dataset, Parameters_matrix)$, la cual, usando la matriz de parámetros P y la función anteriormente implementada $calculate_likelihood_gaussian_observation$, defina por cada observación $x_{n}\\in X$ la pertenencia o membresía a cada $cluster k=1$,$\\ldots K$, en una matriz binaria $M\\in\\mathbb{R}^{N\\times K}$. Retorne tal matriz de membresía M.\n",
"##### 4. **(10 puntos)** Implemente la función calculate_membership_dataset(X_dataset, Parameters_matrix), la cual, usando la matriz de parámetros P y la función anteriormente implementada $calculate_likelihood_gaussian_observation$, defina por cada observación $x_{n}\\in X$ la pertenencia o membresía a cada $cluster k=1$,$\\ldots K$, en una matriz binaria $M\\in\\mathbb{R}^{N\\times K}$. Retorne tal matriz de membresía M.\n",
"\n",
"a) Diseñe y ejecute una prueba unitaria donde verifique su funcionamiento correcto con los comentarios asociados."
],
Expand All @@ -107,7 +144,7 @@
{
"cell_type": "markdown",
"source": [
"##### 5. **(10 puntos)** Implemente la función $recalculate_parameters(X_dataset, Membership_data)$, la cual recalcule los parámetros de las funciones de densidad Gaussianas representadas en la matriz P, de acuerdo a lo representado en la matriz de membresía M.\n",
"##### 5. **(10 puntos)** Implemente la función recalculate_parameters(X_dataset, Membership_data), la cual recalcule los parámetros de las funciones de densidad Gaussianas representadas en la matriz P, de acuerdo a lo representado en la matriz de membresía M.\n",
"\n",
"a) Use las funciones mean y std de PyTorch para ello. Intente prescindir al máximo de estructuras de repetición tipo for."
],
Expand Down Expand Up @@ -192,7 +229,7 @@
"metadata": {
"id": "Kz5xg30LK17e"
},
"execution_count": null,
"execution_count": 6,
"outputs": []
},
{
Expand All @@ -212,7 +249,7 @@
"metadata": {
"id": "5rSur-OyK1DO"
},
"execution_count": null,
"execution_count": 6,
"outputs": []
},
{
Expand All @@ -234,7 +271,7 @@
"metadata": {
"id": "RJrTuQFwK0ZR"
},
"execution_count": null,
"execution_count": 6,
"outputs": []
},
{
Expand All @@ -254,7 +291,7 @@
"metadata": {
"id": "xRZbRDY5Kzc_"
},
"execution_count": null,
"execution_count": 6,
"outputs": []
}
],
Expand Down

0 comments on commit ab7e64e

Please sign in to comment.