From 6551f7a011294ff2c0cf3e77df44fa0875483c32 Mon Sep 17 00:00:00 2001 From: David Doebel Date: Wed, 11 Mar 2026 21:34:43 +0100 Subject: [PATCH] Solve IML task 1a --- IML Projects/Task 1a/data/results.csv | 5 + IML Projects/Task 1a/data/sample.csv | 5 + .../Task 1a/data/template_solution.ipynb | 811 ++++++++++++++++++ .../Task 1a/data/template_solution.py | 95 ++ IML Projects/Task 1a/data/train.csv | 151 ++++ IML Projects/Task 1a/task_description_1a.pdf | Bin 0 -> 84126 bytes 6 files changed, 1067 insertions(+) create mode 100644 IML Projects/Task 1a/data/results.csv create mode 100644 IML Projects/Task 1a/data/sample.csv create mode 100644 IML Projects/Task 1a/data/template_solution.ipynb create mode 100644 IML Projects/Task 1a/data/template_solution.py create mode 100644 IML Projects/Task 1a/data/train.csv create mode 100644 IML Projects/Task 1a/task_description_1a.pdf diff --git a/IML Projects/Task 1a/data/results.csv b/IML Projects/Task 1a/data/results.csv new file mode 100644 index 0000000..13ba238 --- /dev/null +++ b/IML Projects/Task 1a/data/results.csv @@ -0,0 +1,5 @@ +5.503638303110 +5.480400276223 +5.469885552772 +5.931931132834 +6.243346500145 diff --git a/IML Projects/Task 1a/data/sample.csv b/IML Projects/Task 1a/data/sample.csv new file mode 100644 index 0000000..ea8a566 --- /dev/null +++ b/IML Projects/Task 1a/data/sample.csv @@ -0,0 +1,5 @@ +13.145520802298 +9.601847478657 +6.087285844829 +14.511194012770 +22.066089946694 diff --git a/IML Projects/Task 1a/data/template_solution.ipynb b/IML Projects/Task 1a/data/template_solution.ipynb new file mode 100644 index 0000000..2a8be48 --- /dev/null +++ b/IML Projects/Task 1a/data/template_solution.ipynb @@ -0,0 +1,811 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### General guidance\n", + "\n", + "This serves as a template which will guide you through the implementation of this task. It is advised\n", + "to first read the whole template and get a sense of the overall structure of the code before trying to fill in any of the TODO gaps.\n", + "This is the jupyter notebook version of the template. For the python file version, please refer to the file `template_solution.py`.\n", + "\n", + "First, we import necessary libraries:" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-11T20:25:46.118936Z", + "start_time": "2026-03-11T20:25:46.115270Z" + } + }, + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn.model_selection import KFold\n", + "\n", + "# Add any additional imports here (however, the task is solvable without using \n", + "# any additional imports)\n", + "# import ..." + ], + "outputs": [], + "execution_count": 55 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " #### Loading data" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-11T20:25:46.151114Z", + "start_time": "2026-03-11T20:25:46.143378Z" + } + }, + "source": [ + "data = pd.read_csv(\"train.csv\")\n", + "y = data[\"y\"].to_numpy()\n", + "data = data.drop(columns=\"y\")\n", + "# print a few data samples\n", + "print(data.head())" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 \\\n", + "0 0.06724 0.0 3.24 0.0 0.460 6.333 17.2 5.2146 4.0 430.0 16.9 \n", + "1 9.23230 0.0 18.10 0.0 0.631 6.216 100.0 1.1691 24.0 666.0 20.2 \n", + "2 0.11425 0.0 13.89 1.0 0.550 6.373 92.4 3.3633 5.0 276.0 16.4 \n", + "3 24.80170 0.0 18.10 0.0 0.693 5.349 96.0 1.7028 24.0 666.0 20.2 \n", + "4 0.05646 0.0 12.83 0.0 0.437 6.232 53.7 5.0141 5.0 398.0 18.7 \n", + "\n", + " x12 x13 \n", + "0 375.21 7.34 \n", + "1 366.15 9.53 \n", + "2 393.74 10.50 \n", + "3 396.90 19.77 \n", + "4 386.40 12.34 \n" + ] + } + ], + "execution_count": 56 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Calculating the average RMSE" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-11T20:25:46.175778Z", + "start_time": "2026-03-11T20:25:46.173181Z" + } + }, + "source": [ + "def calculate_RMSE(w, X, y):\n", + " \"\"\"This function takes test data points (X and y), and computes the empirical RMSE of \n", + " predicting y from X using a linear model with weights w. \n", + "\n", + " Parameters\n", + " ----------\n", + " w: array of floats: dim = (13,), optimal parameters of ridge regression \n", + " X: matrix of floats, dim = (15,13), inputs with 13 features\n", + " y: array of floats, dim = (15,), input labels\n", + "\n", + " Returns\n", + " ----------\n", + " rmse: float: dim = 1, RMSE value\n", + " \"\"\"\n", + " rmse = 0\n", + " n = X.shape[0]\n", + " rmse = np.sqrt(1/n * np.sum( (y - X @ w)**2 ))\n", + " assert np.isscalar(rmse)\n", + " return rmse" + ], + "outputs": [], + "execution_count": 57 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Fitting the regressor" + ] + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": [ + "The fitting can be carried out by solving the normal equations:\n", + "$$\n", + "(\\lambda \\cdot \\mathbf{I} + \\mathbf{X}) \\mathbf{w} = \\mathbf{X}^{T}\\cdot \\mathbf{y}\n", + "$$\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-11T20:25:46.200893Z", + "start_time": "2026-03-11T20:25:46.197877Z" + } + }, + "source": [ + "def fit(X, y, lam):\n", + " \"\"\"\n", + " This function receives training data points, then fits the ridge regression on this data\n", + " with regularization hyperparameter lambda. The weights w of the fitted ridge regression\n", + " are returned. \n", + "\n", + " Parameters\n", + " ----------\n", + " X: matrix of floats, dim = (135,13), inputs with 13 features\n", + " y: array of floats, dim = (135,), input labels\n", + " lam: float. lambda parameter, used in regularization term\n", + "\n", + " Returns\n", + " ----------\n", + " w: array of floats: dim = (13,), optimal parameters of ridge regression\n", + " \"\"\"\n", + " weights = np.zeros((13,))\n", + " A = lam * np.identity(13) + np.transpose(X) @ X\n", + " b = X.T @ y\n", + " weights = np.linalg.solve(A, b)\n", + "\n", + " assert weights.shape == (13,)\n", + " return weights" + ], + "outputs": [], + "execution_count": 58 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Performing computation" + ] + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-11T20:27:41.325447Z", + "start_time": "2026-03-11T20:27:41.305479Z" + } + }, + "source": [ + "\"\"\"\n", + "Main cross-validation loop, implementing 10-fold CV. In every iteration \n", + "(for every train-test split), the RMSE for every lambda is calculated, \n", + "and then averaged over iterations.\n", + "\n", + "Parameters\n", + "---------- \n", + "X: matrix of floats, dim = (150, 13), inputs with 13 features\n", + "y: array of floats, dim = (150, ), input labels\n", + "lambdas: list of floats, len = 5, values of lambda for which ridge regression is fitted and RMSE estimated\n", + "n_folds: int, number of folds (pieces in which we split the dataset), parameter K in KFold CV\n", + "\n", + "Compute\n", + "----------\n", + "avg_RMSE: array of floats: dim = (5,), average RMSE value for every lambda\n", + "\"\"\"\n", + "X = data.to_numpy()\n", + "# The function calculating the average RMSE\n", + "lambdas = [0.1, 1, 10, 100, 200]\n", + "n_folds = 10\n", + "\n", + "RMSE_mat = np.zeros((n_folds, len(lambdas)))\n", + "\n", + "\n", + "# and fill all entries in the matrix 'RMSE_mat'\n", + "for k in range(n_folds):\n", + " fold = 150 // n_folds\n", + " X_train = np.concatenate((X[:k*fold,:], X[(k+1)*fold:,:]),axis=0) # leave out the validation set\n", + " X_validation = X[k*fold:(k+1)*fold,:]\n", + " y_train = np.concatenate((y[:k*fold], y[(k+1)*fold:]))\n", + " y_validation = y[k*fold:(k+1)*fold]\n", + " for i in range(len(lambdas)):\n", + " w = fit(X_train, y_train, lambdas[i])\n", + " RMSE_mat[k,i] = calculate_RMSE(w, X_validation, y_validation)\n", + "avg_RMSE = np.mean(RMSE_mat, axis=0) # avg_RMSE: array of floats: dim = (5,), average RMSE value for every lambda\n", + "assert avg_RMSE.shape == (5,)" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[7.4412339 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 6.36717035 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 6.36717035 7.59224397 0. ]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 6.36717035 7.59224397 7.99355906]\n", + " [0. 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 6.36717035 7.59224397 7.99355906]\n", + " [4.88759828 0. 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 6.36717035 7.59224397 7.99355906]\n", + " [4.88759828 4.88177704 0. 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 6.36717035 7.59224397 7.99355906]\n", + " [4.88759828 4.88177704 4.70584949 0. 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 6.36717035 7.59224397 7.99355906]\n", + " [4.88759828 4.88177704 4.70584949 4.30299719 0. ]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 6.36717035 7.59224397 7.99355906]\n", + " [4.88759828 4.88177704 4.70584949 4.30299719 4.45025962]\n", + " [0. 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 6.36717035 7.59224397 7.99355906]\n", + " [4.88759828 4.88177704 4.70584949 4.30299719 4.45025962]\n", + " [3.5549224 0. 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 6.36717035 7.59224397 7.99355906]\n", + " [4.88759828 4.88177704 4.70584949 4.30299719 4.45025962]\n", + " [3.5549224 3.47254925 0. 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 6.36717035 7.59224397 7.99355906]\n", + " [4.88759828 4.88177704 4.70584949 4.30299719 4.45025962]\n", + " [3.5549224 3.47254925 3.38243796 0. 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 6.36717035 7.59224397 7.99355906]\n", + " [4.88759828 4.88177704 4.70584949 4.30299719 4.45025962]\n", + " [3.5549224 3.47254925 3.38243796 3.79878164 0. ]]\n", + "[[7.4412339 7.47793331 7.58146902 8.19645872 8.50748161]\n", + " [5.12826602 4.88393133 4.45282503 3.55256057 3.60399295]\n", + " [7.70764701 7.70279186 7.72774439 7.77994411 7.88968326]\n", + " [4.54006065 4.50059526 4.33989198 4.94678494 5.24054741]\n", + " [4.07531646 4.0726219 4.19425423 4.89426434 5.24272243]\n", + " [5.10975443 5.15192098 5.39446252 7.11982551 7.87880031]\n", + " [6.55136404 6.56151161 6.55275056 7.13545034 7.47865912]\n", + " [6.04021985 6.09837022 6.36717035 7.59224397 7.99355906]\n", + " [4.88759828 4.88177704 4.70584949 4.30299719 4.45025962]\n", + " [3.5549224 3.47254925 3.38243796 3.79878164 4.14775924]]\n" + ] + } + ], + "execution_count": 64 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-11T20:25:46.251095Z", + "start_time": "2026-03-11T20:25:46.248154Z" + } + }, + "cell_type": "code", + "source": [ + "A = np.array([[1,2],[3,4]])\n", + "#print(A[:,:1])\n", + "#print(np.transpose(A), A, np.transpose(A) @ A)\n", + "print(np.concatenate((A,A),axis=1))" + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[1 2 1 2]\n", + " [3 4 3 4]]\n" + ] + } + ], + "execution_count": 60 + }, + { + "cell_type": "code", + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-11T20:25:46.295067Z", + "start_time": "2026-03-11T20:25:46.292066Z" + } + }, + "source": [ + "# Save results in the required format\n", + "np.savetxt(\"./results.csv\", avg_RMSE, fmt=\"%.12f\")" + ], + "outputs": [], + "execution_count": 61 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-03-11T20:25:46.321558Z", + "start_time": "2026-03-11T20:25:46.319798Z" + } + }, + "cell_type": "code", + "source": "# Validate", + "outputs": [], + "execution_count": 62 + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/IML Projects/Task 1a/data/template_solution.py b/IML Projects/Task 1a/data/template_solution.py new file mode 100644 index 0000000..a22eb6d --- /dev/null +++ b/IML Projects/Task 1a/data/template_solution.py @@ -0,0 +1,95 @@ +# This serves as a template which will guide you through the implementation of this task. It is advised +# to first read the whole template and get a sense of the overall structure of the code before trying to fill in any of the TODO gaps. +# First, we import necessary libraries: +import pandas as pd +import numpy as np +from sklearn.model_selection import KFold + +# Add any additional imports here (however, the task is solvable without using +# any additional imports) +# import ... + +def fit(X, y, lam): + """ + This function receives training data points, then fits the ridge regression on this data + with regularization hyperparameter lambda. The weights w of the fitted ridge regression + are returned. + + Parameters + ---------- + X: matrix of floats, dim = (135,13), inputs with 13 features + y: array of floats, dim = (135,), input labels + lam: float. lambda parameter, used in regularization term + + Returns + ---------- + w: array of floats: dim = (13,), optimal parameters of ridge regression + """ + weights = np.zeros((13,)) + # TODO: Enter your code here + assert weights.shape == (13,) + return weights + + +def calculate_RMSE(w, X, y): + """This function takes test data points (X and y), and computes the empirical RMSE of + predicting y from X using a linear model with weights w. + + Parameters + ---------- + w: array of floats: dim = (13,), optimal parameters of ridge regression + X: matrix of floats, dim = (15,13), inputs with 13 features + y: array of floats, dim = (15,), input labels + + Returns + ---------- + rmse: float: dim = 1, RMSE value + """ + rmse = 0 + # TODO: Enter your code here + assert np.isscalar(rmse) + return rmse + + +def average_LR_RMSE(X, y, lambdas, n_folds): + """ + Main cross-validation loop, implementing 10-fold CV. In every iteration (for every train-test split), the RMSE for every lambda is calculated, + and then averaged over iterations. + + Parameters + ---------- + X: matrix of floats, dim = (150, 13), inputs with 13 features + y: array of floats, dim = (150, ), input labels + lambdas: list of floats, len = 5, values of lambda for which ridge regression is fitted and RMSE estimated + n_folds: int, number of folds (pieces in which we split the dataset), parameter K in KFold CV + + Returns + ---------- + avg_RMSE: array of floats: dim = (5,), average RMSE value for every lambda + """ + RMSE_mat = np.zeros((n_folds, len(lambdas))) + + # TODO: Enter your code here. Hint: Use functions 'fit' and 'calculate_RMSE' with training and test data + # and fill all entries in the matrix 'RMSE_mat' + + avg_RMSE = np.mean(RMSE_mat, axis=0) + assert avg_RMSE.shape == (5,) + return avg_RMSE + + +# Main function. You don't have to change this +if __name__ == "__main__": + # Data loading + data = pd.read_csv("train.csv") + y = data["y"].to_numpy() + data = data.drop(columns="y") + # print a few data samples + print(data.head()) + + X = data.to_numpy() + # The function calculating the average RMSE + lambdas = [0.1, 1, 10, 100, 200] + n_folds = 10 + avg_RMSE = average_LR_RMSE(X, y, lambdas, n_folds) + # Save results in the required format + np.savetxt("./results.csv", avg_RMSE, fmt="%.12f") diff --git a/IML Projects/Task 1a/data/train.csv b/IML Projects/Task 1a/data/train.csv new file mode 100644 index 0000000..fd96c42 --- /dev/null +++ b/IML Projects/Task 1a/data/train.csv @@ -0,0 +1,151 @@ +y,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13 +22.6,0.06724,0.0,3.24,0.0,0.46,6.333,17.2,5.2146,4.0,430.0,16.9,375.21,7.34 +50.0,9.2323,0.0,18.1,0.0,0.631,6.216,100.0,1.1691,24.0,666.0,20.2,366.15,9.53 +23.0,0.11425,0.0,13.89,1.0,0.55,6.373,92.4,3.3633,5.0,276.0,16.4,393.74,10.5 +8.3,24.8017,0.0,18.1,0.0,0.693,5.349,96.0,1.7028,24.0,666.0,20.2,396.9,19.77 +21.2,0.05646,0.0,12.83,0.0,0.437,6.232,53.7,5.0141,5.0,398.0,18.7,386.4,12.34 +19.9,0.62739,0.0,8.14,0.0,0.538,5.834,56.5,4.4986,4.0,307.0,21.0,395.62,8.47 +20.6,4.83567,0.0,18.1,0.0,0.583,5.905,53.2,3.1523,24.0,666.0,20.2,388.22,11.45 +18.7,0.06151,0.0,5.19,0.0,0.515,5.968,58.5,4.8122,5.0,224.0,20.2,396.9,9.29 +16.1,2.63548,0.0,9.9,0.0,0.544,4.973,37.8,2.5194,4.0,304.0,18.4,350.45,12.64 +18.6,0.22876,0.0,8.56,0.0,0.52,6.405,85.4,2.7147,5.0,384.0,20.9,70.8,10.63 +8.8,73.5341,0.0,18.1,0.0,0.679,5.957,100.0,1.8026,24.0,666.0,20.2,16.45,20.62 +17.2,14.0507,0.0,18.1,0.0,0.597,6.657,100.0,1.5275,24.0,666.0,20.2,35.05,21.22 +14.9,6.28807,0.0,18.1,0.0,0.74,6.341,96.4,2.072,24.0,666.0,20.2,318.01,17.79 +10.5,24.3938,0.0,18.1,0.0,0.7,4.652,100.0,1.4672,24.0,666.0,20.2,396.9,28.28 +50.0,1.83377,0.0,19.58,1.0,0.605,7.802,98.2,2.0407,5.0,403.0,14.7,389.61,1.92 +29.0,0.05561,70.0,2.24,0.0,0.4,7.041,10.0,7.8278,5.0,358.0,14.8,371.58,4.74 +23.0,5.82401,0.0,18.1,0.0,0.532,6.242,64.7,3.4242,24.0,666.0,20.2,396.9,10.74 +33.3,0.04011,80.0,1.52,0.0,0.404,7.287,34.1,7.309,2.0,329.0,12.6,396.9,4.08 +29.4,0.06664,0.0,4.05,0.0,0.51,6.546,33.1,3.1323,5.0,296.0,16.6,390.96,5.33 +21.0,0.08014,0.0,5.96,0.0,0.499,5.85,41.5,3.9342,5.0,279.0,19.2,396.9,8.77 +23.8,0.1676,0.0,7.38,0.0,0.493,6.426,52.3,4.5404,5.0,287.0,19.6,396.9,7.2 +19.1,2.3139,0.0,19.58,0.0,0.605,5.88,97.3,2.3887,5.0,403.0,14.7,348.13,12.03 +20.4,0.13117,0.0,8.56,0.0,0.52,6.127,85.2,2.1224,5.0,384.0,20.9,387.69,14.09 +29.1,0.07978,40.0,6.41,0.0,0.447,6.482,32.1,4.1403,4.0,254.0,17.6,396.9,7.19 +19.3,0.17142,0.0,6.91,0.0,0.448,5.682,33.8,5.1004,3.0,233.0,17.9,396.9,10.21 +23.1,13.5222,0.0,18.1,0.0,0.631,3.863,100.0,1.5106,24.0,666.0,20.2,131.42,13.33 +19.6,0.85204,0.0,8.14,0.0,0.538,5.965,89.2,4.0123,4.0,307.0,21.0,392.53,13.83 +19.4,2.14918,0.0,19.58,0.0,0.871,5.709,98.5,1.6232,5.0,403.0,14.7,261.95,15.79 +38.7,0.12083,0.0,2.89,0.0,0.445,8.069,76.0,3.4952,2.0,276.0,18.0,396.9,4.21 +18.7,0.22212,0.0,10.01,0.0,0.547,6.092,95.4,2.548,6.0,432.0,17.8,396.9,17.09 +14.6,10.233,0.0,18.1,0.0,0.614,6.185,96.7,2.1705,24.0,666.0,20.2,379.7,18.03 +20.0,6.80117,0.0,18.1,0.0,0.713,6.081,84.4,2.7175,24.0,666.0,20.2,396.9,14.7 +20.5,0.19657,22.0,5.86,0.0,0.431,6.226,79.2,8.0555,7.0,330.0,19.1,376.14,10.15 +20.1,0.10612,30.0,4.93,0.0,0.428,6.095,65.1,6.3361,6.0,300.0,16.6,394.62,12.4 +23.6,0.09178,0.0,4.05,0.0,0.51,6.416,84.1,2.6463,5.0,296.0,16.6,395.5,9.04 +16.8,4.22239,0.0,18.1,1.0,0.77,5.803,89.0,1.9047,24.0,666.0,20.2,353.04,14.64 +5.6,25.0461,0.0,18.1,0.0,0.693,5.987,100.0,1.5888,24.0,666.0,20.2,396.9,26.77 +50.0,8.26725,0.0,18.1,1.0,0.668,5.875,89.6,1.1296,24.0,666.0,20.2,347.88,8.88 +14.5,8.49213,0.0,18.1,0.0,0.584,6.348,86.1,2.0527,24.0,666.0,20.2,83.45,17.64 +13.3,6.39312,0.0,18.1,0.0,0.584,6.162,97.4,2.206,24.0,666.0,20.2,302.76,24.1 +23.9,0.08265,0.0,13.92,0.0,0.437,6.127,18.4,5.5027,4.0,289.0,16.0,396.9,8.58 +20.0,0.18836,0.0,6.91,0.0,0.448,5.786,33.3,5.1004,3.0,233.0,17.9,396.9,14.15 +19.8,0.04544,0.0,3.24,0.0,0.46,6.144,32.2,5.8736,4.0,430.0,16.9,368.57,9.09 +13.8,8.05579,0.0,18.1,0.0,0.584,5.427,95.4,2.4298,24.0,666.0,20.2,352.58,18.14 +16.5,0.02498,0.0,1.89,0.0,0.518,6.54,59.7,6.2669,1.0,422.0,15.9,389.96,8.65 +21.6,0.02731,0.0,7.07,0.0,0.469,6.421,78.9,4.9671,2.0,242.0,17.8,396.9,9.14 +20.3,0.14103,0.0,13.92,0.0,0.437,5.79,58.0,6.32,4.0,289.0,16.0,396.9,15.84 +17.0,1.41385,0.0,19.58,1.0,0.871,6.129,96.0,1.7494,5.0,403.0,14.7,321.02,15.12 +11.8,2.77974,0.0,19.58,0.0,0.871,4.903,97.8,1.3459,5.0,403.0,14.7,396.9,29.29 +27.5,0.14866,0.0,8.56,0.0,0.52,6.727,79.9,2.7778,5.0,384.0,20.9,394.76,9.42 +15.6,3.53501,0.0,19.58,1.0,0.871,6.152,82.6,1.7455,5.0,403.0,14.7,88.01,15.02 +23.1,0.17899,0.0,9.69,0.0,0.585,5.67,28.8,2.7986,6.0,391.0,19.2,393.29,17.6 +24.3,0.537,0.0,6.2,0.0,0.504,5.981,68.1,3.6715,8.0,307.0,17.4,378.35,11.65 +42.8,0.36894,22.0,5.86,0.0,0.431,8.259,8.4,8.9067,7.0,330.0,19.1,396.9,3.54 +15.6,0.97617,0.0,21.89,0.0,0.624,5.757,98.4,2.346,4.0,437.0,21.2,262.76,17.31 +21.7,0.09378,12.5,7.87,0.0,0.524,5.889,39.0,5.4509,5.0,311.0,15.2,390.5,15.71 +17.1,0.05023,35.0,6.06,0.0,0.4379,5.706,28.4,6.6407,1.0,304.0,16.9,394.02,12.43 +17.2,0.06162,0.0,4.39,0.0,0.442,5.898,52.3,8.0136,3.0,352.0,18.8,364.61,12.67 +15.0,51.1358,0.0,18.1,0.0,0.597,5.757,100.0,1.413,24.0,666.0,20.2,2.6,10.11 +21.7,0.17446,0.0,10.59,1.0,0.489,5.96,92.1,3.8771,4.0,277.0,18.6,393.25,17.27 +18.6,0.07244,60.0,1.69,0.0,0.411,5.884,18.5,10.7103,4.0,411.0,18.3,392.33,7.79 +21.0,0.47547,0.0,9.9,0.0,0.544,6.113,58.8,4.0019,4.0,304.0,18.4,396.23,12.73 +33.1,0.1,34.0,6.09,0.0,0.433,6.982,17.7,5.4917,7.0,329.0,16.1,390.43,4.86 +31.5,0.44178,0.0,6.2,0.0,0.504,6.552,21.4,3.3751,8.0,307.0,17.4,380.34,3.76 +20.1,13.0751,0.0,18.1,0.0,0.58,5.713,56.7,2.8237,24.0,666.0,20.2,396.9,14.76 +29.8,0.12579,45.0,3.44,0.0,0.437,6.556,29.1,4.5667,5.0,398.0,15.2,382.84,4.56 +15.2,5.44114,0.0,18.1,0.0,0.713,6.655,98.2,2.3552,24.0,666.0,20.2,355.29,17.73 +15.0,0.22489,12.5,7.87,0.0,0.524,6.377,94.3,6.3467,5.0,311.0,15.2,392.52,20.45 +27.5,14.4383,0.0,18.1,0.0,0.597,6.852,100.0,1.4655,24.0,666.0,20.2,179.36,19.78 +22.6,0.13642,0.0,10.59,0.0,0.489,5.891,22.3,3.9454,4.0,277.0,18.6,396.9,10.87 +20.0,0.10153,0.0,12.83,0.0,0.437,6.279,74.5,4.0522,5.0,398.0,18.7,373.66,11.97 +21.4,0.09512,0.0,12.83,0.0,0.437,6.286,45.0,4.5026,5.0,398.0,18.7,383.23,8.94 +23.5,0.03584,80.0,3.37,0.0,0.398,6.29,17.8,6.6115,4.0,337.0,16.1,396.9,4.67 +31.2,0.03049,55.0,3.78,0.0,0.484,6.874,28.1,6.4654,5.0,370.0,17.6,387.97,4.61 +23.7,5.70818,0.0,18.1,0.0,0.532,6.75,74.9,3.3317,24.0,666.0,20.2,393.07,7.74 +7.4,22.5971,0.0,18.1,0.0,0.7,5.0,89.5,1.5184,24.0,666.0,20.2,396.9,31.99 +48.3,0.33147,0.0,6.2,0.0,0.507,8.247,70.4,3.6519,8.0,307.0,17.4,378.95,3.95 +24.4,0.22969,0.0,10.59,0.0,0.489,6.326,52.5,4.3549,4.0,277.0,18.6,394.87,10.97 +22.6,0.04684,0.0,3.41,0.0,0.489,6.417,66.1,3.0923,2.0,270.0,17.8,392.18,8.81 +18.3,0.26838,0.0,9.69,0.0,0.585,5.794,70.6,2.8927,6.0,391.0,19.2,396.9,14.1 +23.3,0.09252,30.0,4.93,0.0,0.428,6.606,42.2,6.1899,6.0,300.0,16.6,383.78,7.37 +17.1,0.35233,0.0,21.89,0.0,0.624,6.454,98.4,1.8498,4.0,437.0,21.2,394.08,14.59 +27.9,11.9511,0.0,18.1,0.0,0.659,5.608,100.0,1.2852,24.0,666.0,20.2,332.09,12.13 +44.8,0.31533,0.0,6.2,0.0,0.504,8.266,78.3,2.8944,8.0,307.0,17.4,385.05,4.14 +50.0,0.52693,0.0,6.2,0.0,0.504,8.725,83.0,2.8944,8.0,307.0,17.4,382.0,4.63 +23.0,0.30347,0.0,7.38,0.0,0.493,6.312,28.9,5.4159,5.0,287.0,19.6,396.9,6.15 +21.4,0.11504,0.0,2.89,0.0,0.445,6.163,69.6,3.4952,2.0,276.0,18.0,391.83,11.34 +10.2,12.2472,0.0,18.1,0.0,0.584,5.837,59.7,1.9976,24.0,666.0,20.2,24.65,15.69 +23.3,1.42502,0.0,19.58,0.0,0.871,6.51,100.0,1.7659,5.0,403.0,14.7,364.31,7.39 +23.2,5.29305,0.0,18.1,0.0,0.7,6.051,82.5,2.1678,24.0,666.0,20.2,378.38,18.76 +18.9,0.0136,75.0,4.0,0.0,0.41,5.888,47.6,7.3197,3.0,469.0,21.1,396.9,14.8 +13.4,11.1604,0.0,18.1,0.0,0.74,6.629,94.6,2.1247,24.0,666.0,20.2,109.85,23.27 +21.9,0.04819,80.0,3.64,0.0,0.392,6.108,32.0,9.2203,1.0,315.0,16.4,392.89,6.57 +24.8,0.04417,70.0,2.24,0.0,0.4,6.871,47.4,7.8278,5.0,358.0,14.8,390.86,6.07 +11.9,0.04741,0.0,11.93,0.0,0.573,6.03,80.8,2.505,1.0,273.0,21.0,396.9,7.88 +24.3,0.33983,22.0,5.86,0.0,0.431,6.108,34.9,8.0555,7.0,330.0,19.1,390.18,9.16 +13.8,18.4982,0.0,18.1,0.0,0.668,4.138,100.0,1.137,24.0,666.0,20.2,396.9,37.97 +24.7,0.02055,85.0,0.74,0.0,0.41,6.383,35.7,9.1876,2.0,313.0,17.3,396.9,5.77 +14.1,4.75237,0.0,18.1,0.0,0.713,6.525,86.5,2.4358,24.0,666.0,20.2,50.92,18.13 +18.7,0.14932,25.0,5.13,0.0,0.453,5.741,66.2,7.2254,8.0,284.0,19.7,395.11,13.15 +28.1,0.14052,0.0,10.59,0.0,0.489,6.375,32.3,3.9454,4.0,277.0,18.6,385.81,9.38 +19.8,0.12802,0.0,8.56,0.0,0.52,6.474,97.1,2.4329,5.0,384.0,20.9,395.24,12.27 +26.7,0.35809,0.0,6.2,1.0,0.507,6.951,88.5,2.8617,8.0,307.0,17.4,391.7,9.71 +21.7,0.15876,0.0,10.81,0.0,0.413,5.961,17.5,5.2873,4.0,305.0,19.2,376.94,9.88 +22.0,0.11329,30.0,4.93,0.0,0.428,6.897,54.3,6.3361,6.0,300.0,16.6,391.25,11.38 +22.9,0.08829,12.5,7.87,0.0,0.524,6.012,66.6,5.5605,5.0,311.0,15.2,395.6,12.43 +10.4,25.9406,0.0,18.1,0.0,0.679,5.304,89.1,1.6475,24.0,666.0,20.2,127.36,26.64 +21.9,3.69695,0.0,18.1,0.0,0.718,4.963,91.4,1.7523,24.0,666.0,20.2,316.03,14.0 +20.6,0.04527,0.0,11.93,0.0,0.573,6.12,76.7,2.2875,1.0,273.0,21.0,396.9,9.08 +26.4,0.09266,34.0,6.09,0.0,0.433,6.495,18.4,5.4917,7.0,329.0,16.1,383.61,8.67 +41.3,1.22358,0.0,19.58,0.0,0.605,6.943,97.4,1.8773,5.0,403.0,14.7,363.43,4.59 +17.2,7.40389,0.0,18.1,0.0,0.597,5.617,97.9,1.4547,24.0,666.0,20.2,314.64,26.4 +27.1,0.14455,12.5,7.87,0.0,0.524,6.172,96.1,5.9505,5.0,311.0,15.2,396.9,19.15 +20.4,0.13058,0.0,10.01,0.0,0.547,5.872,73.1,2.4775,6.0,432.0,17.8,338.63,15.37 +16.5,0.21124,12.5,7.87,0.0,0.524,5.631,100.0,6.0821,5.0,311.0,15.2,386.63,29.93 +24.4,0.13587,0.0,10.59,1.0,0.489,6.064,59.1,4.2392,4.0,277.0,18.6,381.32,14.66 +8.4,13.6781,0.0,18.1,0.0,0.74,5.935,87.9,1.8206,24.0,666.0,20.2,68.95,34.02 +23.0,0.59005,0.0,21.89,0.0,0.624,6.372,97.9,2.3274,4.0,437.0,21.2,385.76,11.12 +9.7,11.5779,0.0,18.1,0.0,0.7,5.036,97.0,1.77,24.0,666.0,20.2,396.9,25.68 +50.0,0.01501,90.0,1.21,1.0,0.401,7.923,24.8,5.885,1.0,198.0,13.6,395.52,3.16 +30.5,0.06911,45.0,3.44,0.0,0.437,6.739,30.8,6.4798,5.0,398.0,15.2,389.71,4.69 +12.3,7.99248,0.0,18.1,0.0,0.7,5.52,100.0,1.5331,24.0,666.0,20.2,396.9,24.56 +19.4,0.21977,0.0,6.91,0.0,0.448,5.602,62.0,6.0877,3.0,233.0,17.9,396.9,16.2 +21.2,0.23912,0.0,9.69,0.0,0.585,6.019,65.3,2.4091,6.0,391.0,19.2,396.9,12.92 +20.3,0.3494,0.0,9.9,0.0,0.544,5.972,76.7,3.1025,4.0,304.0,18.4,396.24,9.97 +18.8,0.09849,0.0,25.65,0.0,0.581,5.879,95.8,2.0063,2.0,188.0,19.1,379.38,17.58 +33.4,0.07503,33.0,2.18,0.0,0.472,7.42,71.9,3.0992,7.0,222.0,18.4,396.9,6.47 +18.5,0.19133,22.0,5.86,0.0,0.431,5.605,70.2,7.9549,7.0,330.0,19.1,389.13,18.46 +19.6,0.10328,25.0,5.13,0.0,0.453,5.927,47.2,6.932,8.0,284.0,19.7,396.9,9.22 +33.2,0.10469,40.0,6.41,1.0,0.447,7.267,49.0,4.7872,4.0,254.0,17.6,389.25,6.05 +13.1,8.71675,0.0,18.1,0.0,0.693,6.471,98.8,1.7257,24.0,666.0,20.2,391.98,17.12 +7.5,10.8342,0.0,18.1,0.0,0.679,6.782,90.8,1.8195,24.0,666.0,20.2,21.57,25.79 +13.6,0.10574,0.0,27.74,0.0,0.609,5.983,98.8,1.8681,4.0,711.0,20.1,390.11,18.07 +17.4,1.20742,0.0,19.58,0.0,0.605,5.875,94.6,2.4259,5.0,403.0,14.7,292.29,14.43 +8.4,11.8123,0.0,18.1,0.0,0.718,6.824,76.5,1.794,24.0,666.0,20.2,48.45,22.74 +35.4,0.01311,90.0,1.22,0.0,0.403,7.249,21.9,8.6966,5.0,226.0,17.9,395.93,4.81 +24.0,0.33045,0.0,6.2,0.0,0.507,6.086,61.5,3.6519,8.0,307.0,17.4,376.75,10.88 +13.4,3.32105,0.0,19.58,1.0,0.871,5.403,100.0,1.3216,5.0,403.0,14.7,396.9,26.82 +26.2,0.19073,22.0,5.86,0.0,0.431,6.718,17.5,7.8265,7.0,330.0,19.1,393.74,6.56 +7.2,18.0846,0.0,18.1,0.0,0.679,6.434,100.0,1.8347,24.0,666.0,20.2,27.25,29.05 +13.1,23.6482,0.0,18.1,0.0,0.671,6.38,96.2,1.3861,24.0,666.0,20.2,396.9,23.69 +24.5,0.27957,0.0,9.69,0.0,0.585,5.926,42.6,2.3817,6.0,391.0,19.2,396.9,13.59 +37.2,0.0578,0.0,2.46,0.0,0.488,6.98,58.4,2.829,3.0,193.0,17.8,396.9,5.04 +25.0,0.0536,21.0,5.64,0.0,0.439,6.511,21.1,6.8147,4.0,243.0,16.8,396.9,5.28 +24.1,0.07896,0.0,12.83,0.0,0.437,6.273,6.0,4.2515,5.0,398.0,18.7,394.92,6.78 +16.6,0.67191,0.0,8.14,0.0,0.538,5.813,90.3,4.682,4.0,307.0,21.0,376.88,14.81 +32.9,0.01778,95.0,1.47,0.0,0.403,7.135,13.9,7.6534,3.0,402.0,17.0,384.3,4.45 +36.2,0.06905,0.0,2.18,0.0,0.458,7.147,54.2,6.0622,3.0,222.0,18.7,396.9,5.33 +11.0,7.36711,0.0,18.1,0.0,0.679,6.193,78.1,1.9356,24.0,666.0,20.2,96.73,21.52 +7.2,16.8118,0.0,18.1,0.0,0.7,5.277,98.1,1.4261,24.0,666.0,20.2,396.9,30.81 diff --git a/IML Projects/Task 1a/task_description_1a.pdf b/IML Projects/Task 1a/task_description_1a.pdf new file mode 100644 index 0000000000000000000000000000000000000000..385c8f929566a5323b78b5505b8e80730248e18a GIT binary patch literal 84126 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 ig_T_**3~pX zM2HQksn}mfJPxf+ES;2lePB~bN?P_=-EBGcCcaf!Cnt{?;EpHu$Y||b_0b%QrZ%e+B&vSFlt~Z>#K^Owi^H5Ibw|-V&rP5Q{gUK6J8eP)oSRZ= zKdqKT4OmkujW@`O47iweIww47=`}a~?LMQb(~^SnUkp}nORhcRwcGsaefLTB%a%Nz z6Yqhkm22Jo@0jT^iw$1u?l=+dFzxb{QG$#|iGc=JOxE?>Y|!JKow<8ezy4RP_1=3Q z8}^OdYoM|H)r4suL?t#mHX2aUi1|!)&9|O~+lNe;UVppbRr4_uvSI7{+h)?J&8dxh zH}&hk^}Df0vvgDD4$ZYT8khE`LxlE<1zx*m=9bNAuJ^Ainlho>sCLV%vK{v->?(fD zSvtD#kjBZf-?DY{eY!h1b+!BY+{<0Mr%hq&oI^(Gg z$0lroI0O?NdtZ;|waUh$guJ*zjSNe_>HYn9~LdOSWo=`Yt7tEY9po_l6}{MOx| zV=F?5T3uV$tj;n|#=Xk^XuPws76ew%MGIG z)i(;)u8DagKkNPTT*EV8{ifq}WaaYkRsK>YCc8wBSb1@md6-9jv!|W7`ggdG`$Ayg z1tXKp=ow+!+F?Y#{nRBzRX^Vd^t(BBp+}y@;TJP(Ph3jAJNodDH+@>Q3^w{EHl443 z^~c#!^(jqz&HIdh?C-zLe^#acZ1vwC8_MpDymjyG!n%xe>GTVa(wLT3XRTy$H&X<3 znO#0Qg{vYJLW`-gmonSFm zp+Ed&p)zH72LgFJ%T!PVXIs$YiZK#&r*P*NNzKHt(eQ&DJ)`CSPSRzqj8iH?Ar20X z69QO9+aIA=Bm#|asIVQQ2@xz4=n+P>V+29LcM&!QZ!i@(7){dftpYurX+hITap?$( zKv4i#bOeLZ@cE2|Y2MfvAt5284I3kIWZ}xe2nO9;hn~)|kPODF2h~kID3St2EITbF z5+fS`R(=$NqVTXW5lMov4I2YTG%=S>Op;JCHl5~;jfq7R&8=IvbkO$Q^bwB-jX@-$ z|AQ|qwBR$(E(<{*Q%^Pqy@sp>(9_w@1StXIRxUjC?+Zf`)O@G9UnOF$vD2qc9Xaf}NJadHn`U7{qnp(n&~OevF7W ze+h=*k7tHKLNlAMgyEM(0uz`+M?w$^Zdww$ms<~#=!T9&!MNCbNm$r;`7tCvKSs>s zOJNjmy{9mmmmdY$amOD;VZ1hl9!D|7SnWcIVKL!i3>1)yK@<({SQEj8pxpY3D4aK5 z#2A0y5@RBqn;#e*@pyM^5x|5&RDo@$i!X literal 0 HcmV?d00001