From e04e1cab3cf20f09ea4822d9a917c68750abf4bd Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 6 Jun 2024 09:01:03 +0200 Subject: [PATCH] update --- FinalExam_lastname_mnr.ipynb | 1015 +++++++++++++++++++++ coordinates.csv | 722 +++++++++++++++ data.csv | 1000 +++++++++++++++++++++ my_database.db | Bin 0 -> 36864 bytes salary.csv | 31 + winequality-red.csv | 1600 ++++++++++++++++++++++++++++++++++ 6 files changed, 4368 insertions(+) create mode 100644 FinalExam_lastname_mnr.ipynb create mode 100644 coordinates.csv create mode 100644 data.csv create mode 100644 my_database.db create mode 100644 salary.csv create mode 100644 winequality-red.csv diff --git a/FinalExam_lastname_mnr.ipynb b/FinalExam_lastname_mnr.ipynb new file mode 100644 index 0000000..cfa2358 --- /dev/null +++ b/FinalExam_lastname_mnr.ipynb @@ -0,0 +1,1015 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "11174c4d-dcb5-49d8-96fc-b83ad35a6193", + "metadata": {}, + "source": [ + "
\n", + "\n", + "
\n", + "Chair of Cyber-Physical-Systems, Austria" + ] + }, + { + "cell_type": "markdown", + "id": "a04ead7b-4fce-4ea2-9501-d60a112aadcb", + "metadata": {}, + "source": [ + "\n", + "\n", + "| Credentials | |\n", + "|----|---|\n", + "|Host | Montanuniversitaet Leoben |\n", + "|Web | https://cps.unileoben.ac.at |\n", + "|Mail | cps@unileoben.ac.at |\n", + "|Authors | Melanie Neubauer & Elmar Rückert|\n", + "|Corresponding Authors | melanie.neubauer@unileoben.ac.at, rueckert@unileoben.ac.at |\n", + "|Last edited | 07.06.2024 |\n" + ] + }, + { + "cell_type": "markdown", + "id": "35a0d7a0", + "metadata": {}, + "source": [ + "# Final Exam" + ] + }, + { + "cell_type": "raw", + "id": "3dfb754b-ee67-4090-aa8c-394880ede449", + "metadata": {}, + "source": [ + "Name:\n", + "Mat Number:" + ] + }, + { + "cell_type": "raw", + "id": "36aa65d0-1304-413f-88e9-04a98e2add1a", + "metadata": {}, + "source": [ + "Point overview:\n", + "- Import Section /2\n", + "- Q1 Descr. Testing /4\n", + "- Q2 write function /4\n", + "- Q3 answer questions /2\n", + "- Q4 databases /6\n", + "- Q5 write class /4\n", + "- Q6 descr. code and answer /4\n", + "- Q7 linear reg basics /4\n", + "- Q8 linear reg coding /4\n", + "- Q9 gaussian processes /6\n", + "\n", + "You reached /40 Points!" + ] + }, + { + "cell_type": "markdown", + "id": "4b05e025-9843-410e-80cd-f2db24148da8", + "metadata": {}, + "source": [ + "
\n", + "Please read the following tasks carefully. Good luck :)" + ] + }, + { + "cell_type": "markdown", + "id": "480d04cd-83c9-43e7-827f-2cf3d357ab7e", + "metadata": {}, + "source": [ + "### Install Section" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "9c4525f3-aeab-4dcb-9cc5-eb79ac3e04a2", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: matplotlib in /opt/conda/lib/python3.10/site-packages (3.8.3)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (1.2.0)\n", + "Requirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (4.50.0)\n", + "Requirement already satisfied: kiwisolver>=1.3.1 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (1.4.5)\n", + "Requirement already satisfied: numpy<2,>=1.21 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (1.26.4)\n", + "Requirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (23.2)\n", + "Requirement already satisfied: pillow>=8 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (10.2.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (3.1.2)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /opt/conda/lib/python3.10/site-packages (from matplotlib) (2.8.2)\n", + "Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install matplotlib" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "0e5aad9c-bbba-429a-b541-36a36591b68a", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: pandas in /opt/conda/lib/python3.10/site-packages (2.2.2)\n", + "Requirement already satisfied: numpy>=1.22.4 in /opt/conda/lib/python3.10/site-packages (from pandas) (1.26.4)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /opt/conda/lib/python3.10/site-packages (from pandas) (2.8.2)\n", + "Requirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.10/site-packages (from pandas) (2023.3)\n", + "Requirement already satisfied: tzdata>=2022.7 in /opt/conda/lib/python3.10/site-packages (from pandas) (2024.1)\n", + "Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.10/site-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install pandas" + ] + }, + { + "cell_type": "markdown", + "id": "e807646d-e717-4825-a3d3-9d4a652d4851", + "metadata": {}, + "source": [ + "_________________________" + ] + }, + { + "cell_type": "markdown", + "id": "9208862e-7b8b-435a-8ef5-4bbf09fe9feb", + "metadata": {}, + "source": [ + "### Import Section (2 Points)\n", + "Import all the needed libaries here in the beginning! Do not import libaries below this section!" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "34bbdd51-4cd9-4dd3-a27e-3809b3705f60", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# import all necessary libaries here!\n", + "import os\n", + "#add code" + ] + }, + { + "cell_type": "markdown", + "id": "c7cac7dd-43b1-4c10-a186-950f3f826700", + "metadata": {}, + "source": [ + "__________________________________" + ] + }, + { + "cell_type": "markdown", + "id": "3b371f61-68f9-4f46-a624-c243f559027c", + "metadata": {}, + "source": [ + "### Question 1: Describing and Testing the Code (4 Points)\n", + "\n", + "Break down and explain each line of the provided code snippet. Additionally, describe the role of the '%' symbol in this context. Why is it necessary within this code?" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "6458bfad-fab3-48aa-b42c-b67329fc8332", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def calc_median(dataset):\n", + " tmp_dataset = dataset.copy()\n", + " tmp_dataset.sort()\n", + " if len(tmp_dataset) % 2 == 0:\n", + " median = (tmp_dataset[len(tmp_dataset) // 2] + tmp_dataset[len(tmp_dataset) // 2 - 1]) / 2\n", + " else:\n", + " median = tmp_dataset[len(tmp_dataset) // 2]\n", + " return median\n", + "\n", + "def get_dataset(path):\n", + " with open(path, 'r') as f:\n", + " reader = csv.reader(f)\n", + " dataset = list(reader)\n", + " dataset = [float(x[0]) for x in dataset]\n", + " return dataset" + ] + }, + { + "cell_type": "markdown", + "id": "afa185ff-bd11-4c2b-ae55-277217c63bf8", + "metadata": {}, + "source": [ + "Test the above code on the *data.csv* and print the result." + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "5d7a7ac6-5a5c-422c-b310-82b2779cd7fe", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# your code" + ] + }, + { + "cell_type": "markdown", + "id": "5b407d76-41d0-4834-bdc5-a71526d2f416", + "metadata": {}, + "source": [ + "___________________________" + ] + }, + { + "cell_type": "markdown", + "id": "686678ee-16ab-4dd9-a9a6-dddeb74ae0f9", + "metadata": {}, + "source": [ + "### Question 2: Write a short Function (4 Points)\n", + "Write a short function which calculates the variance of a dataset and returns it. (hint: to perform x² use ** instead of ^, Pandas is not allowed)" + ] + }, + { + "cell_type": "markdown", + "id": "399589fd-dc12-4c8f-8902-9bfe374add4a", + "metadata": { + "tags": [] + }, + "source": [ + "The variance of a dataset can be calculated using the formula:\n", + "\n", + "$ \\text{mean} = \\frac{1}{n} \\sum_{i=1}^{n} x_i$\n", + "\n", + "$ \\text{variance} = \\frac{\\sum_{i=1}^{n} (x_i - \\text{mean})^2}{n}$\n", + "\n", + "\n", + "where:\n", + "- $n$ is the number of elements in the dataset,\n", + "- $x_i$ represents each individual value in the dataset, and\n", + "- $\\text{mean}$ is the mean of the dataset." + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "8df48b65-79be-4a7f-8f47-cdecaa11d390", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# your function" + ] + }, + { + "cell_type": "markdown", + "id": "c7ff344b-f9d2-4ee8-8ad9-ce3be8ecbb33", + "metadata": {}, + "source": [ + "Test your code on the data.csv table below and print the results:" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "705b0c3b-72a0-438d-a9b7-dbb5600aa9c3", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# your test code" + ] + }, + { + "cell_type": "markdown", + "id": "6eb9cbcb-7944-4779-a0f8-4666a08fba0e", + "metadata": {}, + "source": [ + "____________________________________________" + ] + }, + { + "cell_type": "markdown", + "id": "8058570f-45f7-447d-b956-ee2fd63042f3", + "metadata": {}, + "source": [ + "### Question 3: Answer the following Questions (2 Points)\n", + "a) Why is it necessary to preprocess the data? " + ] + }, + { + "cell_type": "raw", + "id": "36d73f9a-2716-4e39-81e8-bb906380f250", + "metadata": {}, + "source": [ + "Your Answer:" + ] + }, + { + "cell_type": "markdown", + "id": "d1ceee7e-8269-4cc0-af46-90886fb27cae", + "metadata": {}, + "source": [ + "b) How would you preprocess your data? Describe the steps." + ] + }, + { + "cell_type": "raw", + "id": "61969d27-0b98-410c-bffc-16a1de912972", + "metadata": {}, + "source": [ + "Your Answer:" + ] + }, + { + "cell_type": "markdown", + "id": "aae08c0a-5ffe-482f-8463-e67be8d93e41", + "metadata": {}, + "source": [ + "_____________________________" + ] + }, + { + "cell_type": "markdown", + "id": "e6bf5855-09f5-4bee-a42c-5360593945fb", + "metadata": {}, + "source": [ + "### Question 4: Databases (6 Points)\n", + "Put the following code into the correct order and run it. Describe each line with comments:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "df3b243b-e660-4bb2-b1c8-9c556401ddbc", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "for i in my_text:\n", + " cur.execute(\"INSERT INTO finalExam VALUES (?)\", (i,))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d10e84ab-8ae3-4bb5-a7f6-223e1026e443", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "conn.commit()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f7d0ed77-eb9f-47af-8213-876036175b0d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "cur.execute(\"DELETE FROM finalExam WHERE w = 'Bad'\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9f3abf3c-c1b6-4fe1-a5ba-c4f42acd5279", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "cur = conn.cursor()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "866766f6-6791-4b48-9162-cd0a27c78c51", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "cur.execute(\"INSERT INTO finalExam VALUES (?)\", ('Nice',))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "31cf9cf5-2bef-4133-989e-c0f9e6db6b1d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "cur.execute(\"SELECT * FROM finalExam\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5eb267d8-b049-4a26-ad4f-556c842921b3", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "print(cur.fetchall())\n", + "conn.close()\n", + "os.remove('new.db')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f43304ba-6b54-4615-896e-68c8c7250667", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "conn = sqlite3.connect('new.db')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "003e239e-a23f-4de5-92d1-f2130c43b500", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "cur.execute(\"SELECT COUNT(*) FROM finalExam\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8ec6794f-5645-4fae-b31c-2c4403407470", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "my_text = 'My Final Exam Is Bad'\n", + "my_text = my_text.split(' ')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "19b1b7a0-f0fd-4405-88ef-e2c106f1b6f1", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "cur.execute('''CREATE TABLE IF NOT EXISTS finalExam\n", + " (w Text)''')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "69c2daf9-ec2e-40c6-9d11-8dab7ef31982", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "print(cur.fetchone())" + ] + }, + { + "cell_type": "markdown", + "id": "6f401683-92a3-4f14-8a34-b5c451fa79a7", + "metadata": {}, + "source": [ + "________________________________________________" + ] + }, + { + "cell_type": "markdown", + "id": "29a762ac-a1af-44e4-9eef-5e9617ec2ab2", + "metadata": {}, + "source": [ + "### Question 5: Data Analyzer (4 Points)\n", + "Design a Python class, DataAnalyzer, to facilitate the analysis and visualization of data stored in a database. The class should provide methods to create a SQLite database from a DataFrame and plot the data using Matplotlib." + ] + }, + { + "cell_type": "markdown", + "id": "e1f08f56-dd0c-4df3-95b8-cffed58b1d07", + "metadata": {}, + "source": [ + "The class should be initialized with the following parameters:\n", + "- database_name: A string representing the name of the SQLite database.\n", + "- x_values: A list with x-values.\n", + "- y_values: A list with y-values.\n", + "\n", + "Method: create_database\n", + "- Connect to the SQLite database specified by database_name.\n", + "- Create a table and insert the x and y values.\n", + "- Print the number of entries in the database after creating.\n", + "\n", + "Method: plot_values\n", + "- Plot the data with Matplotlib.\n", + "- Include axis labels and title for better visualization." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "cdd18556-9fd8-441d-9c1f-8f40bbd0ad01", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# your Class:\n", + "class DataAnalyzer:\n", + " def __init__(self, database_name, x_values, y_values):\n", + " self.database_name = database_name\n", + " self.x_values = x_values\n", + " self.y_values = y_values\n", + "\n", + " def create_database(self):\n", + " # Your Code\n", + " pass\n", + "\n", + " def plot_values(self):\n", + " \"\"\"\n", + " Plots the X and Y values using Matplotlib.\n", + " \"\"\"\n", + " plt.plot(self.x_values, self.y_values, marker='o', linestyle='')\n", + " plt.title('Data Plot')\n", + " plt.xlabel('X')\n", + " plt.ylabel('Y')\n", + " plt.grid(True)\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "30605de1-8eb0-4403-a36b-d22418341e9e", + "metadata": {}, + "source": [ + "Test your code below on *coordinates.csv*. The name of the database should be your *matr. nr.* You should test both functions! (for import use pandas or csv)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "6ea4c395-1246-4530-994b-9c764a5c57ed", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# your test code:" + ] + }, + { + "cell_type": "markdown", + "id": "8eec9931-ddac-4128-9b42-dbd349186c10", + "metadata": {}, + "source": [ + "____________________________" + ] + }, + { + "cell_type": "markdown", + "id": "7fccb26e-6d90-480b-b449-82d8d3c24a8e", + "metadata": { + "tags": [] + }, + "source": [ + "### Question 6: Describe the code and answer the questions (4 Points)" + ] + }, + { + "cell_type": "markdown", + "id": "f110bc78-13dc-4251-af7a-32bff74ce5bc", + "metadata": {}, + "source": [ + "a) Describe the following code with comments." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "3f6d6805-5e97-4fbd-b202-4020e9485643", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "def function(X, y, factor=0.2):\n", + " idx = np.arange(X.shape[0])\n", + " np.random.shuffle(idx)\n", + " X = X[idx]\n", + " y = y[idx]\n", + " split = int((1 - factor) * X.shape[0])\n", + " X_train, X_test = X[:split], X[split:]\n", + " y_train, y_test = y[:split], y[split:]\n", + " return X_train, X_test, y_train, y_test" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d99078f3-a670-4d04-bb7a-f93e9054b50d", + "metadata": {}, + "outputs": [], + "source": [ + "X = normalized_data.drop(target_column, axis=1).values\n", + "y = normalized_data[target_column].values\n", + "X_train, X_test, y_train, y_test = function(X, y, factor=0.2)" + ] + }, + { + "cell_type": "markdown", + "id": "c9dbe438-5c74-4a02-8ea3-efc0e966e483", + "metadata": {}, + "source": [ + "b) Why do we need the above code?" + ] + }, + { + "cell_type": "raw", + "id": "161a52a4-79e2-4401-ba8a-6f680d47771e", + "metadata": {}, + "source": [ + "Your Answer:" + ] + }, + { + "cell_type": "markdown", + "id": "f117c05a-8d98-4dbd-a4c4-6c252bb10fb3", + "metadata": { + "tags": [] + }, + "source": [ + "c) Why do we drop the target_column? " + ] + }, + { + "cell_type": "raw", + "id": "e998c866-416e-457d-aee8-d1034ae21f84", + "metadata": {}, + "source": [ + "Your Answer:" + ] + }, + { + "cell_type": "markdown", + "id": "1a5e037a-f9d7-4e13-88c0-3f88241e4398", + "metadata": {}, + "source": [ + "d) What would happen if we change the factor to 0.4?" + ] + }, + { + "cell_type": "raw", + "id": "8d3ec404-4508-413c-9d00-9ce1f24c492f", + "metadata": {}, + "source": [ + "Your Answer:" + ] + }, + { + "cell_type": "markdown", + "id": "7585983a-1ec5-48e2-930a-e8316604fc97", + "metadata": {}, + "source": [ + "_______________________" + ] + }, + { + "cell_type": "markdown", + "id": "99b839a4-c249-43c0-a035-0a240e1bb350", + "metadata": {}, + "source": [ + "### Question 7: Linear Regression Basics (4 Points)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "fb9fef79-41bb-4be3-8c40-57095e133c47", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "class LinearRegression:\n", + " def __init__(self):\n", + " self.coefficients = None\n", + "\n", + " def train(self, X, y):\n", + " X = np.hstack((np.ones((X.shape[0], 1)), X))\n", + " self.coefficients = np.linalg.inv(X.T @ X) @ X.T @ y\n", + "\n", + " def predict(self, X):\n", + " X = np.hstack((np.ones((X.shape[0], 1)), X))\n", + " return X @ self.coefficients" + ] + }, + { + "cell_type": "markdown", + "id": "d67a67c9-b129-412c-b29b-2869892fcf88", + "metadata": {}, + "source": [ + "a) Why do we need linear regression?" + ] + }, + { + "cell_type": "raw", + "id": "29d16a49-69d4-4c59-921a-33201fa04d95", + "metadata": {}, + "source": [ + "Your Answer:" + ] + }, + { + "cell_type": "markdown", + "id": "43ef5af3-9da0-4dc0-84e1-4731f5687040", + "metadata": {}, + "source": [ + "b) What is the difference of using scikit-learn for linear regression and your own method?" + ] + }, + { + "cell_type": "raw", + "id": "b6bcafd8-8e89-4fa6-888f-f30a93b019ec", + "metadata": {}, + "source": [ + "Your Answer:" + ] + }, + { + "cell_type": "markdown", + "id": "fdb3bd28-59ca-47ec-a750-79652cbc7d74", + "metadata": {}, + "source": [ + "c) Write down the function of the mean squared error? When do you use it?" + ] + }, + { + "cell_type": "raw", + "id": "791be49f-75ea-43a0-825a-0567ecf72aa1", + "metadata": {}, + "source": [ + "Your Answer:" + ] + }, + { + "cell_type": "markdown", + "id": "24b784d2-005e-4537-b0ce-c534f0303ced", + "metadata": {}, + "source": [ + "d) Describe step per step how you would perform linear regression on a given dataset. (more detailed answer)" + ] + }, + { + "cell_type": "raw", + "id": "c6b02c04-2ad1-48f2-9719-14df04846d8e", + "metadata": {}, + "source": [ + "Your Answer:" + ] + }, + { + "cell_type": "markdown", + "id": "43b95d6a-44ea-4631-bdad-524754d1d11a", + "metadata": {}, + "source": [ + "_________" + ] + }, + { + "cell_type": "markdown", + "id": "484c2dc0-67a1-48ab-87b4-db41ebfb6d02", + "metadata": {}, + "source": [ + "### Question 8: Linear Regression Coding (4 Points)\n", + "Perform linear regression on the *winequality-red.csv* with the target *alcohol* (pandas is allowed). Calculate the mean squared error and print it. Perform the task without preprocessing your data. It is necessary to split the data. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8f36613b-ecb5-40b0-9918-4119cb8943e2", + "metadata": {}, + "outputs": [], + "source": [ + "#your Code" + ] + }, + { + "cell_type": "markdown", + "id": "bda2c424-b619-4e88-8431-c2232fb7babc", + "metadata": {}, + "source": [ + "_______________" + ] + }, + { + "cell_type": "markdown", + "id": "ea23296e-ef5b-4268-9398-e36190b8ea96", + "metadata": {}, + "source": [ + "### Question 9: Gaussian Processes (6 Points)\n", + "Fit the names to the different kernels below:" + ] + }, + { + "cell_type": "markdown", + "id": "e3680ed3-eb35-41a5-aa35-4a1b5bf45ec3", + "metadata": { + "tags": [] + }, + "source": [ + "Add the Names:\n", + "\n", + "1. **... Kernel**: $k(x, x') = \\exp \\left( -2 \\sin^2 \\left( \\frac{\\pi ||x - x'||}{p} \\right) \\right) / \\sigma^2 $\n", + "2. **... Kernel**: $k(x, x') = x^T x' $\n", + "3. **... Kernel**: $k(x, x') = \\exp \\left( - \\frac{||x - x'||^2}{2\\sigma^2} \\right)$\n", + "4. **... Kernel**: $k(x, x') = (x^T x' + 1)^d $" + ] + }, + { + "cell_type": "markdown", + "id": "1759762b-5b0a-4e6f-9651-277bc4643fb4", + "metadata": {}, + "source": [ + "Fit the above numbers to the code below" + ] + }, + { + "cell_type": "raw", + "id": "0c6ddc30-f804-472c-92d1-8a03d3c3b020", + "metadata": {}, + "source": [ + "Your Answer:\n", + " function1 = ...\n", + " function2 = ...\n", + " function3 = ...\n", + " function4 = ..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "530bc9da-a454-4de1-ba07-d4b62a4fae1e", + "metadata": {}, + "outputs": [], + "source": [ + "class function1:\n", + " def __init__(self, theta=1.0):\n", + " self.theta = theta\n", + " self.bounds = ((1e-5, 1e5),)\n", + " self.num_params = 1\n", + "\n", + " def __call__(self, X1, X2):\n", + " return self.theta * np.dot(X1, X2.T)\n", + "\n", + " def set_params(self, params):\n", + " self.theta = params[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c7518ccc-f5f5-4401-8d1d-d9167cc6dde8", + "metadata": {}, + "outputs": [], + "source": [ + "class function2:\n", + " def __init__(self, theta=1.0, d=3):\n", + " self.theta = theta\n", + " self.d = d\n", + " self.bounds = ((1e-5, 1e5), (1, 10))\n", + " self.num_params = 2\n", + "\n", + " def __call__(self, X1, X2):\n", + " return (self.theta * np.dot(X1, X2.T) + 1) ** self.d\n", + "\n", + " def set_params(self, params):\n", + " self.theta = params[0]\n", + " self.d = params[1]\n", + "\n", + " def gradient(self, X):\n", + " return np.array(\n", + " [\n", + " self.d * self.theta * np.dot(X, X.T) ** (self.d - 1),\n", + " self.theta * np.dot(X, X.T) ** self.d * np.log(np.dot(X, X.T)),\n", + " ]\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ce47fa6e-038c-488f-b05e-a5ddddbc4e90", + "metadata": {}, + "outputs": [], + "source": [ + "class function3:\n", + " def __init__(self, theta=1.0):\n", + " self.theta = theta\n", + " self.bounds = ((1e-5, 1e5),)\n", + " self.num_params = 1\n", + "\n", + " def __call__(self, X1, X2):\n", + " return np.exp(-2 * np.sin(np.pi * cdist(X1, X2) / self.theta) ** 2)\n", + "\n", + " def set_params(self, params):\n", + " self.theta = params[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "07bad441-5c3c-42c2-8507-b884d827acf0", + "metadata": {}, + "outputs": [], + "source": [ + "class function4:\n", + " def __init__(self, theta=1.0):\n", + " self.theta = theta\n", + " self.bounds = ((1e-5, 1e5),)\n", + " self.num_params = 1\n", + "\n", + " def __call__(self, X1, X2):\n", + " return np.exp(-self.theta * cdist(X1, X2) ** 2)\n", + "\n", + " def set_params(self, params):\n", + " self.theta = params[0]" + ] + }, + { + "cell_type": "markdown", + "id": "df5f819b-98d9-4e76-bc42-d9c71ca7b076", + "metadata": {}, + "source": [ + "___________________________" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/coordinates.csv b/coordinates.csv new file mode 100644 index 0000000..0301411 --- /dev/null +++ b/coordinates.csv @@ -0,0 +1,722 @@ +X,Y +129,267 +128,267 +127,267 +127,268 +126,268 +126,269 +125,270 +124,270 +123,270 +122,270 +121,271 +120,272 +119,273 +118,273 +117,274 +116,275 +115,276 +114,277 +113,278 +112,279 +111,279 +110,280 +110,281 +109,281 +108,281 +107,282 +106,282 +105,282 +104,283 +103,284 +103,285 +102,285 +101,285 +100,285 +99,285 +98,286 +97,286 +96,286 +95,287 +94,287 +93,287 +92,287 +91,287 +90,287 +89,287 +88,287 +87,287 +86,287 +85,287 +84,287 +83,287 +82,287 +81,287 +80,287 +79,287 +78,287 +77,287 +76,287 +75,287 +74,287 +73,287 +72,287 +71,287 +70,287 +68,287 +67,287 +67,286 +66,286 +65,286 +64,286 +63,285 +62,284 +61,284 +60,284 +59,283 +59,282 +58,282 +58,281 +57,281 +56,280 +55,280 +55,279 +54,279 +54,278 +53,278 +53,277 +52,276 +52,275 +51,274 +51,273 +50,273 +50,272 +49,272 +48,272 +47,271 +47,270 +46,269 +45,268 +44,267 +44,266 +43,266 +43,265 +43,264 +42,263 +41,262 +40,261 +40,260 +39,259 +39,258 +38,258 +38,257 +38,256 +37,255 +37,254 +37,253 +36,253 +36,252 +35,252 +35,251 +35,250 +35,249 +35,248 +35,247 +35,246 +35,245 +36,245 +37,244 +37,243 +37,242 +37,241 +37,240 +37,239 +38,238 +38,237 +38,236 +38,235 +38,234 +39,234 +39,233 +40,233 +40,232 +40,231 +40,230 +40,229 +40,228 +41,228 +41,227 +41,226 +42,226 +42,225 +43,225 +43,224 +44,224 +44,223 +44,222 +45,222 +45,221 +46,220 +46,219 +47,219 +47,218 +48,218 +49,217 +50,216 +51,215 +52,214 +53,213 +54,213 +55,212 +55,211 +56,211 +57,211 +58,210 +59,210 +59,209 +60,209 +61,208 +62,208 +62,207 +63,207 +64,207 +65,206 +66,206 +67,205 +68,205 +69,204 +70,204 +71,204 +72,204 +73,203 +74,202 +77,200 +78,199 +80,198 +82,196 +83,195 +84,195 +85,195 +86,195 +87,195 +88,195 +89,195 +90,195 +91,195 +92,194 +93,194 +94,193 +95,193 +96,193 +97,193 +98,193 +99,193 +100,193 +101,193 +102,193 +103,193 +104,193 +105,193 +106,193 +107,193 +107,194 +108,194 +108,195 +109,195 +110,195 +110,196 +111,196 +112,197 +113,198 +113,199 +114,199 +115,199 +116,200 +117,201 +118,202 +119,202 +119,203 +120,203 +121,204 +122,204 +122,205 +123,206 +123,207 +124,208 +125,208 +125,209 +126,210 +127,211 +128,211 +151,282 +150,282 +149,282 +148,281 +148,280 +148,279 +148,278 +148,277 +148,275 +148,274 +148,273 +148,272 +148,271 +147,271 +147,270 +146,269 +146,268 +146,267 +146,266 +146,265 +146,264 +146,263 +146,262 +146,261 +146,260 +146,259 +146,258 +146,257 +146,256 +146,255 +146,254 +147,254 +147,253 +148,253 +148,252 +148,251 +148,250 +148,249 +148,248 +148,247 +148,246 +148,245 +148,244 +148,243 +148,242 +148,241 +148,240 +148,239 +148,238 +148,237 +148,236 +148,235 +148,234 +148,233 +148,231 +148,230 +148,229 +148,228 +148,227 +148,226 +148,225 +148,224 +148,223 +148,222 +148,221 +148,220 +148,219 +148,218 +148,217 +147,216 +147,215 +146,214 +146,213 +146,211 +146,210 +146,208 +146,207 +146,206 +146,205 +146,204 +145,203 +145,202 +145,201 +145,200 +145,199 +145,198 +144,197 +144,196 +143,195 +143,194 +143,193 +143,192 +143,191 +142,191 +151,285 +152,285 +153,285 +154,285 +154,286 +155,286 +155,287 +156,287 +157,287 +157,288 +158,288 +159,288 +160,288 +161,288 +161,288 +161,289 +162,289 +162,290 +163,290 +164,290 +165,290 +166,290 +167,290 +168,290 +169,290 +170,290 +171,290 +172,290 +172,289 +173,289 +174,288 +175,288 +176,288 +177,287 +178,287 +179,287 +179,286 +180,286 +180,285 +181,285 +182,285 +182,284 +183,283 +184,282 +185,282 +186,282 +186,281 +187,281 +188,280 +189,279 +190,278 +190,277 +191,277 +191,276 +192,276 +192,276 +192,275 +192,274 +192,273 +192,272 +193,272 +194,271 +195,270 +196,267 +196,266 +196,265 +196,264 +196,263 +196,262 +196,261 +196,260 +196,259 +196,258 +196,257 +196,256 +196,256 +196,255 +196,254 +196,253 +195,253 +195,252 +194,252 +193,252 +193,251 +193,250 +192,249 +191,248 +190,248 +190,247 +190,246 +189,246 +188,246 +187,246 +187,245 +186,245 +185,245 +185,244 +184,243 +183,243 +182,243 +181,243 +181,242 +180,242 +179,242 +178,242 +178,241 +177,241 +177,240 +176,240 +175,240 +174,240 +173,240 +172,240 +171,240 +170,239 +170,238 +169,238 +168,238 +167,238 +166,238 +165,238 +164,238 +163,238 +162,238 +161,238 +161,237 +160,237 +159,237 +158,237 +158,237 +157,237 +156,237 +155,237 +154,237 +154,238 +153,238 +153,239 +153,240 +152,240 +151,240 +150,240 +150,240 +252,279 +252,280 +251,281 +251,282 +250,282 +249,283 +248,284 +247,285 +245,287 +244,288 +243,289 +240,291 +239,292 +238,293 +236,294 +235,295 +234,295 +233,295 +232,295 +231,295 +230,295 +229,295 +227,295 +226,295 +225,295 +224,294 +223,293 +222,293 +221,293 +220,293 +219,293 +219,292 +218,292 +218,291 +217,291 +217,290 +216,290 +216,289 +215,289 +215,288 +215,287 +214,287 +214,286 +213,286 +213,285 +212,285 +212,284 +212,283 +211,283 +211,282 +210,281 +209,281 +209,280 +209,279 +209,278 +209,277 +208,277 +208,276 +207,276 +207,275 +207,274 +206,274 +206,273 +205,273 +204,272 +204,271 +204,270 +204,269 +204,268 +204,267 +204,266 +204,265 +204,264 +204,263 +204,262 +204,261 +204,260 +205,259 +205,258 +205,257 +205,256 +205,255 +206,255 +206,254 +207,253 +208,252 +209,251 +209,250 +210,250 +210,249 +211,248 +211,247 +212,247 +212,246 +213,246 +214,246 +215,245 +216,244 +217,244 +218,244 +218,243 +219,243 +220,242 +221,241 +222,241 +223,241 +224,240 +225,239 +226,239 +226,238 +227,238 +228,238 +229,238 +230,238 +231,238 +232,238 +233,237 +234,237 +235,237 +236,237 +237,237 +238,236 +239,235 +240,235 +241,235 +242,234 +243,234 +244,233 +245,232 +245,232 +246,231 +247,230 +248,230 +249,230 +249,229 +250,228 +251,227 +252,226 +252,225 +253,225 +253,224 +253,223 +254,222 +254,221 +255,220 +256,219 +256,218 +257,218 +257,217 +257,216 +257,215 +258,214 +258,213 +259,212 +259,211 +259,210 +259,209 +259,208 +259,207 +259,206 +259,206 +259,205 +258,205 +257,205 +256,205 +255,205 +255,204 +254,203 +253,202 +252,202 +251,201 +250,201 +249,201 +248,200 +247,199 +246,199 +246,198 +245,198 +244,198 +244,197 +243,196 +242,196 +241,196 +240,196 +240,195 +239,195 +238,195 +237,195 +236,195 +235,195 +234,195 +233,195 +232,195 +231,195 +230,196 +229,196 +228,196 +227,197 +226,197 +226,198 +225,198 +224,198 +224,199 +223,199 +222,199 +221,199 +220,200 +220,201 +219,201 +218,202 +216,203 +215,203 +215,204 +213,205 +212,206 +211,206 +211,207 +210,208 +209,208 +208,208 +207,209 +206,210 +205,211 +204,212 +203,213 +202,214 +201,215 +200,216 +199,217 +198,217 +197,217 +197,218 +197,219 +196,219 +195,219 +194,220 diff --git a/data.csv b/data.csv new file mode 100644 index 0000000..e9476a1 --- /dev/null +++ b/data.csv @@ -0,0 +1,1000 @@ +2.689153042506701 +2.585259917014049 +4.4782277760781835 +2.4527088542170237 +5.317264964816077 +2.042580132995284 +3.23258118494783 +2.870702460351129 +5.0599379818426975 +0.6597496260144271 +3.207345361708888 +5.090665607662723 +3.559942918299017 +4.702867675001114 +5.072139838414467 +1.4200348729949859 +4.044955008085771 +3.4638064406112843 +2.65406593035517 +3.1921830828005633 +4.255773022526533 +5.9231174604518735 +9.96507329241043 +5.910144050575309 +5.207768500767189 +5.399872743212025 +3.4197882545738327 +1.530686976206479 +1.7973893884375158 +3.6086366767724165 +4.4367594858376345 +7.730450840919259 +1.2565014146407432 +4.733167945178101 +2.7033638569138585 +3.710117164132714 +3.5448819536013887 +3.4610613901831275 +9.09593916398689 +5.541781062593467 +2.4768110229387075 +6.766869962546874 +2.7562887969127017 +4.05600802014932 +5.747785489197579 +4.486479078694474 +3.274713658840101 +6.240589186500136 +1.8730457199106718 +2.9241475386086537 +3.0220467949365433 +5.7127491771584555 +5.933393558400693 +4.941135879158917 +4.186712110793981 +4.877281601172718 +4.146942429377037 +3.9748422139952453 +5.3291305354710445 +3.6429158071380834 +3.487859296850953 +3.348748495489016 +-0.3790732409470383 +2.5302939212790085 +4.467620159841221 +5.032579305739155 +9.176204652203335 +1.1625378479348525 +6.84754285352548 +5.274576532073422 +5.677491060574092 +1.04438839496384 +2.8593652299784926 +1.9551406598598149 +1.488226741645248 +4.914014725353007 +5.411589055690732 +6.353485284263961 +7.2375488815278235 +5.117946122865169 +0.8177724269199751 +6.09117953437854 +4.976129267332026 +8.668966320434484 +4.945711378678295 +4.089008569941595 +2.581686913529201 +1.062530189159733 +5.685882180948061 +2.3608821790915075 +2.6226594966241583 +2.880236513299179 +2.293872942065463 +1.6522047178625456 +3.5000595291394023 +2.8855830391161073 +5.994806019563915 +4.754485753944785 +1.7259373545708772 +3.0951824681713136 +6.7199515155385505 +3.893520562924978 +4.971766270772695 +3.2289906067263066 +4.661663555588959 +5.5073609452366945 +8.375560709422636 +2.447817961227747 +6.855332824644255 +5.020214824254501 +5.894793289828743 +2.426220292667407 +3.3252344138885994 +2.2646475071939776 +6.156715755248239 +5.445300117504853 +3.9683352901831985 +4.990650727092884 +3.4280300194201225 +4.43095729330283 +3.649829513661719 +4.977711131456569 +-2.1588990471868597 +4.362666744637488 +2.936910797566809 +4.118623073945427 +4.867192698737905 +4.591469739168252 +6.432019942641274 +10.125944707589824 +2.5566039190673746 +2.6354751645436347 +2.660433723134812 +2.3829561816933005 +4.133577252750691 +5.291230243286135 +6.4866892671293 +-0.3300175315422429 +2.245711898731514 +4.896242814238375 +1.3835407305206329 +0.7100353479639332 +0.40285303594183963 +-0.3361443111559206 +1.8177891074201118 +5.768941597405311 +3.1450567647799295 +1.5543796935443743 +6.370380873613181 +6.214596362607484 +0.8854732852079223 +3.8312179236848016 +4.580558907973966 +3.4847243361398146 +7.165950252297733 +-0.28915588708852447 +9.428028615193686 +2.7869131558143247 +5.788234218444475 +4.254733901271949 +2.0927139799285848 +3.2994496900954644 +1.3579845835359867 +4.310294402526269 +3.331843831493352 +7.8234570949189015 +5.406452373145415 +3.3591289368772417 +3.7718574187317477 +3.957242884675085 +2.668832407156276 +6.952063192547443 +-1.1014357451260564 +5.41098013709094 +2.6602004260747325 +6.631191376233003 +4.658440015009706 +4.8074798670110575 +2.6212106188003887 +4.667807636095508 +4.604480967209367 +0.31051631249175315 +5.8685561069715275 +8.009700473837205 +2.7706541433160377 +5.2038900885016846 +1.6194847093191571 +5.976606143814507 +7.980038917095726 +2.496945117251365 +1.697931013601023 +5.814161470977444 +-0.3861035049549093 +3.063936464052423 +3.6038341690591253 +3.7934085284581336 +4.220859478277279 +-0.6199483828183565 +0.5951146158279483 +5.320657609662644 +7.0437028930532986 +4.554217441685907 +3.3360303481286278 +8.074674665074307 +6.552728170354682 +6.834246057598703 +2.6854526481355787 +3.5685998552601887 +1.1630753292949647 +3.0249028876855775 +5.277707383952562 +2.4840056877919903 +4.419854704742826 +3.6709665996633625 +3.314674564248338 +7.712969651555708 +6.870457026863946 +3.935754325474791 +5.413766024585499 +5.154874768719094 +5.502923810238611 +3.2331528030055754 +2.405888219842092 +6.098509161057032 +5.673043219136078 +4.848018441799356 +4.11385545236863 +3.647052035785619 +5.661040305835003 +1.4722570712704197 +5.719180416378758 +1.5781526528948446 +4.3804913109723564 +2.004924270567621 +4.4901125079900615 +0.9824348515268615 +6.564371477721987 +7.046628938559197 +5.2867199097958695 +4.435602737593104 +1.8233430166946634 +1.1953448637638053 +6.803620172592961 +4.738554507162778 +4.459315882879417 +4.511728451195292 +6.795048686728858 +4.985133778670852 +2.6452318725488704 +3.631232459543203 +2.6084294504158394 +6.560178513211742 +3.3448269146781087 +6.922421879703172 +-0.286933553800365 +5.46100634114974 +3.4000887979091186 +3.0202546992196053 +3.8971546430608344 +7.280740728730175 +3.693548952026755 +1.1734126825625664 +6.1416993454527145 +2.3435987630327295 +2.382441647235071 +1.3681649645454605 +4.008115676994585 +5.4159587837628 +3.419561902522217 +3.4826536127379697 +4.1332957376820865 +5.092263556020372 +4.203247169809998 +0.40148110592817465 +1.7596918295819832 +3.3136078569861267 +6.650673275686168 +3.3504294420647707 +2.529906001203563 +5.682911367973592 +6.7394265554352675 +7.21912542289151 +4.225171794704962 +4.2563934124996745 +6.674160626290946 +4.594958301547773 +4.178070640623427 +2.351709843673415 +3.4951925681560914 +0.8695068700347099 +5.9901634905718355 +4.17237183122033 +8.080621147014199 +4.736536740622178 +5.72921338749185 +7.740610822080836 +3.3753059788167925 +4.895233405790137 +3.846382832648352 +4.350342601256788 +0.5413761300719471 +-0.03773631256278165 +5.000442959030216 +5.352369926337688 +4.586130576354651 +7.720587711504757 +5.721365194550425 +3.1828917914768073 +4.12723106774695 +6.628653594255629 +5.32938821605513 +5.6292778331573725 +2.862167631702037 +6.346602810849329 +3.847128585964338 +1.3718296187254446 +4.983036669089974 +3.38480660214716 +5.143588034444478 +8.349113075200734 +4.492885800008515 +2.0309396022796387 +6.476362695217802 +3.424158713012533 +3.6245829271777397 +3.8692778336234372 +2.4203684985548994 +5.57292971544922 +2.589740230490774 +3.3470716016766526 +3.24295548723392 +6.177916290304866 +2.636949088005455 +3.2108726920325874 +6.669858450705858 +8.338994433461846 +7.978827902168762 +5.966737682121143 +4.923909270855499 +5.860516110855073 +5.435750789496474 +3.7712599232412325 +5.816310713416185 +4.9477903780590005 +7.331799702280761 +3.5831127168879493 +3.7343039508806983 +5.894732150369208 +3.810164216814902 +5.0887430860733724 +6.242966783899863 +3.1187169016887077 +6.008290214078318 +5.658802987164508 +4.377030891438312 +2.8724949429752047 +0.6448946683483525 +2.549897609913983 +8.105405343894548 +4.3141530418521805 +3.7298087095258916 +2.8208923422594863 +1.2861962130186342 +4.7253568668507615 +5.212625514688485 +4.6876955471713675 +1.9840189911068093 +9.520842451831452 +4.411641829992209 +6.229110758744857 +5.730133140946514 +1.2997089960521042 +3.0526838042183266 +-1.6769756880239983 +2.4700142768519386 +3.368689064659084 +-0.44980266934011937 +4.487342081020114 +7.977398398245765 +3.24073124553752 +5.719944687127951 +4.030619164153766 +4.0619474892136775 +1.7286279748806042 +4.603780030456371 +3.662393544487736 +3.9452036453583963 +2.9907106001119548 +3.8706461070069818 +2.9306023319400047 +5.051381119524493 +5.298144188645812 +5.050534981532823 +2.92507171454053 +4.382568320656583 +4.638300877446537 +1.7591049114128765 +4.561022261976081 +4.437726215051167 +1.8256056042129192 +0.6514200247169453 +4.466853405879387 +4.883704590589709 +4.680789606546891 +5.744064693182255 +4.986337161151179 +2.095663995095311 +5.165714075680632 +4.193320651160642 +1.043372715113144 +3.261865116406162 +1.1653676649941715 +5.554019406876201 +-1.3433321890946024 +3.3480005966886393 +1.4287780611293561 +-0.6103525662519464 +1.7788491124066637 +5.028583077429991 +3.7613406713986035 +3.8721429033853276 +2.3552404543074505 +7.80729833301285 +6.394786247739477 +8.44379829525015 +0.7030165434969926 +3.3035019886445416 +0.034618217760302716 +1.4960533752325018 +3.3914736835802284 +6.634315204682659 +4.04932477610062 +1.438906570068431 +5.699684174000463 +4.8644600740946355 +1.1973832865581224 +3.9751396842444633 +1.9570826959106995 +8.174776981322626 +3.1045599400435844 +3.3690852011043924 +6.563936594987087 +1.399399947402717 +0.38037694658980614 +8.483605892637806 +2.7053250752366726 +5.382596307707048 +1.9306285358897446 +0.5575902246878321 +2.7593216645224645 +2.183228494835924 +4.797643057119027 +3.3279468167531263 +3.369172333901873 +3.897847188933661 +0.5416760667518985 +4.515471505962432 +2.528439138353228 +3.530779869929204 +6.313395056444017 +1.3024352396261625 +5.165635494588551 +-0.10972638674263546 +9.63657994623221 +1.2438046787017938 +3.1595755502401315 +4.282670013120758 +-0.5584973523650989 +2.3527121875885757 +6.74895516382166 +2.8506856554345332 +-0.10539091112979548 +2.252364704682378 +4.029508946069469 +5.3899634965364855 +5.5286423934977895 +3.6474555113455946 +4.2413542126371615 +2.6389111178343443 +4.909160154867327 +5.827463183618943 +4.366785861872457 +2.3452988350264725 +5.245705815962154 +-0.13160823527407217 +5.32310602456217 +5.118914410922122 +4.123115551995858 +8.077438148667529 +5.035693079156829 +-0.31355563603079606 +5.524896649380621 +2.761170417348458 +6.545472136473213 +5.105047044168353 +3.851381072032796 +1.7324842415844217 +2.1866926112020284 +7.718713744031322 +3.7915859089080763 +8.516330810471521 +6.997009487194695 +2.2193655338382463 +6.876562020810779 +2.2508203239758764 +5.036206437018488 +5.661208172218584 +10.057528352875778 +4.83636759865405 +4.105070277726527 +3.829197091180964 +5.975708227143428 +0.27487347636758974 +5.061163179424857 +1.0390294161978915 +4.478300833974426 +5.24395117051941 +3.445478996732843 +5.456110955749873 +5.227042924937617 +4.689620611861213 +6.480776326341598 +3.3526814765391304 +4.029211097972369 +4.959200678308578 +6.492239483726651 +6.913630973680778 +6.313844156659259 +4.820374948089052 +2.1777866499890397 +1.6702547215132229 +4.513439821529645 +4.180907007283983 +2.4884514899083534 +3.946893118903233 +4.960102692698841 +3.27293548331257 +1.0754497379488597 +5.608950007894329 +3.379512049023085 +8.609660858803387 +1.8705291770725214 +5.081640261958688 +6.583715131553735 +4.325804104621895 +5.860427351811329 +4.395447375418427 +2.4250785940799466 +-0.04701684841967335 +5.2293124521189345 +2.15379970951093 +3.774168288269875 +6.7791566409880515 +1.3325516003767643 +2.1170708715669413 +3.196367697948254 +5.904473817160046 +1.7068322002095373 +4.4052896483644695 +5.462464197911512 +2.710803039942937 +0.6208008941784389 +7.052523943403728 +4.1582279491456555 +4.684834953182973 +3.3620923833571092 +1.6594410129890984 +5.721218134713693 +5.964338600408132 +2.714691123183091 +5.110741458350106 +4.080222322665387 +1.3133384843643365 +1.4076393141747245 +6.12591195687761 +6.67056828875994 +5.636303468891031 +6.023078823132284 +6.819095222023275 +6.296481731063605 +5.805616802405598 +6.674261139363391 +2.7178126899632993 +4.430781799341032 +3.4972345638503324 +4.625861797403806 +2.3647227804642577 +6.735201370207259 +3.992712221318478 +8.912722569264304 +6.270426252305056 +2.994304259881275 +2.5838458119737124 +2.4932974101254963 +4.578493373305157 +3.5602000099371622 +3.88670243295602 +4.359048277798837 +1.4142040204451591 +3.404071602610171 +4.164302634426298 +3.7640429145431535 +5.6441551573136675 +7.557514309235145 +3.841191793042736 +1.8243973972785201 +1.6555099370318107 +5.6155212084199935 +5.065363837823299 +5.519792672250834 +5.096269483379877 +6.073235369751279 +2.551197274125597 +3.991180126614593 +5.220963392194765 +3.6822652592898284 +3.354067475887086 +5.681181248796323 +2.89675767479685 +1.8251203753227605 +6.596508264216466 +6.066462201766163 +2.2782749427955196 +4.445823539818711 +6.0963970448383895 +6.658380038362896 +4.040134307195883 +6.008190452002518 +3.8845539335676635 +3.224126082547469 +5.26327005695633 +3.611765560795525 +2.5440624009975163 +6.215796705805021 +4.858627456285753 +1.946772707827642 +2.3973191756672447 +-1.9918693168945687 +6.3100912358123376 +4.028347340527565 +1.3151371068010578 +5.246162279738138 +7.123324348772121 +6.822688417935544 +3.72085161949745 +4.430477969540991 +2.6903887868677674 +8.452678270091848 +4.173258049074187 +0.7229878695132892 +5.21119554396932 +5.1503869238584 +4.000019467600294 +4.709531658804889 +4.469577246744086 +9.782183696727689 +5.547805674942245 +2.3712999022105015 +5.3961648034269345 +2.322131709565462 +4.135362769878601 +4.135154532257675 +2.829095933126375 +5.262056620779272 +0.9655708316984213 +3.8322633137982303 +3.366672748600716 +6.524991251725515 +5.6615156084199825 +1.1979487977952985 +3.9143746637028496 +4.849102698231194 +5.387863073738997 +6.192949672634511 +6.692738210390985 +3.0132674549741147 +3.676789589804515 +0.66639346305957 +4.037532137962043 +1.3699496575054857 +4.497118503022807 +4.1153273633935985 +4.9925766480882725 +2.887033774329298 +7.719253570003152 +3.78533972817488 +5.4217128545334825 +5.8073989845666185 +2.8903172114551654 +3.118527991314653 +5.620307467774826 +5.190897257750207 +1.9988309067607806 +-0.5861894937700685 +4.321125184299055 +2.325645865000002 +2.7739489804220767 +6.9815238521848855 +2.005959861903693 +3.2786113589800356 +2.373364903927037 +2.1101845273833764 +1.4035595480757252 +6.424989310338559 +3.846027360448069 +3.8580325684497754 +4.337428871523804 +4.556125644040593 +2.285314288019711 +4.731935336354157 +1.4985964318308373 +4.365216687734469 +3.2657779624920327 +3.0830547796456202 +1.3342218891602697 +4.539472386235201 +4.401617718665674 +5.346013064553848 +6.26968078772855 +5.626143442226762 +2.996114981534583 +6.418006176381546 +5.337104381454104 +1.5282498310762014 +2.072012374870801 +2.7029767750829645 +1.163669643201159 +6.261317004473879 +1.2126092919874578 +6.983039392683159 +2.0377691408636744 +4.160264868310786 +5.1187158358736635 +5.016625765205338 +5.0428138330852 +4.334309505135922 +2.092295200100728 +4.295704887763861 +-1.3069806941859534 +2.8623339108944714 +3.7657014799565176 +4.338893546400138 +2.403261904849052 +6.128500617223828 +2.765553342751282 +4.452687901739111 +8.272570048083917 +0.7156450206982417 +7.547645282212972 +2.434316044676936 +7.147852548808345 +8.132094808932596 +4.8644357078214355 +2.3077473769677015 +5.681428169927798 +5.816775249089974 +-0.9932098903477229 +5.797790422524081 +4.401640328984458 +6.231683859982171 +2.6852927147675523 +0.9308136892783554 +1.10016732080661 +3.1659480952100423 +7.085195328877504 +4.270640134316408 +4.101246046656604 +1.2296622905189034 +4.826321018110866 +4.1006672668046775 +7.061427795060223 +6.526582580051215 +4.362810907032141 +1.6351570141398737 +8.422428961958866 +3.5109059049524323 +5.332619904675244 +2.489709241894081 +5.418364133832585 +7.6679253828045875 +6.887462473273217 +2.5334870950271062 +3.595381486858153 +4.680226192410265 +2.9896228325573473 +4.911843804346371 +6.338694251000367 +3.0755808363945962 +5.121832740126578 +3.922938416420706 +5.550146253558007 +7.300049333872138 +2.9025421643083096 +8.479994472784748 +4.782380345757757 +4.583588808255032 +-0.02870667549524164 +6.477887681115124 +3.1920211660163673 +3.3837434966114524 +4.030181848063413 +5.135912469880853 +0.3583764962466449 +0.6079878893843902 +1.9710745279733577 +4.983603255309475 +5.045806127226815 +3.3957400889162916 +-0.019127614640400914 +3.39041672376152 +0.017349548378210677 +2.245231271326838 +3.350458766059504 +3.29054434258418 +3.1074714249454867 +4.483975987169114 +6.707698826241836 +4.268958864264588 +-0.35048584480263756 +2.2854832740158697 +5.051274169193449 +3.858535874210001 +-0.33005506161929876 +2.8686517104042464 +3.4680243800100543 +2.7827157593315186 +1.5214442085719453 +4.246911385757794 +2.9815701419097858 +6.3287804811982955 +4.297961797663174 +4.310133350403759 +4.2217129833343 +4.11843139835593 +2.3796972477176634 +6.303433678867339 +4.7078115716705415 +1.2784577452009946 +6.523765920220638 +2.042466937865573 +2.306935860200243 +4.334868122095103 +4.2372660891426275 +2.1708496781433784 +4.120532902294237 +3.6406795827084273 +2.7648357274567283 +3.7734217950333435 +4.501220086739509 +1.9164123792554446 +4.09942107107749 +4.081680647205367 +0.7911419126456676 +4.154179318303287 +4.981816118734658 +2.7361620452243587 +5.640442323181031 +2.306823953070443 +5.08920267276209 +4.847581163631006 +2.0611384912051895 +4.92709243789088 +2.435987831519615 +6.261412443449885 +2.197619448747608 +2.131909514417692 +8.572038841291459 +1.6389786490555442 +3.9902664396745045 +5.541634302604587 +5.946255094482753 +4.228357978035874 +4.414517705751805 +0.6682402338244255 +4.1890286168871045 +1.3489399075596813 +2.8551699970729434 +4.4921868630915025 +6.4402300781402495 +2.607297894704174 +0.2545084127764161 +4.201963692271406 +5.347315660546459 +4.335723784682021 +3.6413201642197897 +4.992807297801281 +4.699591869293056 +3.5055661975634274 +1.6128190424495612 +5.037422027346231 +5.728068919695582 +2.889431242161529 +6.530104285748399 +5.309213586736737 +5.5645530513092805 +0.34586861970713745 +3.6605622988930224 +2.6341032194533742 +1.5165244117482066 +4.333924572873718 +4.793340458275679 +-0.5052418970423513 +2.2840678601163336 +6.643828012404331 +-0.05161554378743638 +4.598065205065524 +3.9160295944124734 +2.8397379624888206 +3.1937821088246015 +7.558981006866665 +3.1211887325138297 +5.647812928639589 +6.832456698636376 +1.4406123511562097 +0.9920583671050283 +3.212732413320521 +5.009302104721837 +2.7018124758933446 +3.089216336547374 +5.891910713421512 +3.814999270078587 +2.2096804475303684 +2.561544553030119 +5.754678499230962 +3.6344783456107117 +2.7534422397964855 +3.7556597794094864 +4.824147232634237 +4.459448925646199 +5.290009536863388 +3.2372975476133528 +4.810191347673547 +6.744569974339575 +2.7613446461010938 +5.536249920353404 +5.778662391184744 +6.581010586867201 +2.988825292024301 +6.925206421690837 +4.436694976998666 +5.052703321899659 +7.0126006544164845 +5.540123328434877 +4.250733165633178 +7.073113751382264 +4.849696610236285 +3.472489429162489 +1.3907876098362553 +4.330332019453364 +6.106682213936788 +3.617109330066035 +3.4476403784572383 +3.2232803803426417 +1.3366894878041786 +9.572976569321277 +5.219280078509635 +2.895023632925267 +4.479433972784784 +7.765030547828888 +4.4619180172804676 +3.749713305515625 +6.207883701188733 +4.959609602117644 +3.305822008145861 +6.556498228624349 +3.4232783170135352 +1.1576894268146076 +2.818768819679796 +6.363332450461994 +5.2618836657282655 +3.0695477496728003 +2.162588020777456 +6.128363116971531 +7.055083303736294 +-0.010550030937442223 +4.284295435816428 +7.432439761702388 +4.304040147137142 +4.017839899315415 +4.779359829406187 +5.17826576194207 +3.5294703395228595 +4.346406782587829 +1.6141380240131094 +6.592157843052737 +3.8611376431654714 +6.336542326088759 +6.305461029462689 +6.269457562769368 +2.4043685326366604 +2.8681051175896295 +6.199636599738786 +3.7229171141632538 +6.487867832083127 +5.593554565362593 +3.887113675626026 +5.757393795864441 +2.9576335083499656 +5.037314186010199 +5.9009336208263585 diff --git a/my_database.db b/my_database.db new file mode 100644 index 0000000000000000000000000000000000000000..b813025abd1973aa245ffc85f94fdb9372c6bf7f GIT binary patch literal 36864 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