diff --git a/Lesson8/Task1.ipynb b/Lesson8/Task1.ipynb
new file mode 100644
index 0000000..82adc6c
--- /dev/null
+++ b/Lesson8/Task1.ipynb
@@ -0,0 +1,4329 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "p62jUuP4ONfJ"
+ },
+ "source": [
+ "# Обучение без учителя в Scikit-learn"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Задание 1\n",
+ "Импортируйте библиотеки pandas, numpy и matplotlib.\n",
+ "Загрузите \"Boston House Prices dataset\" из встроенных наборов данных библиотеки sklearn.\n",
+ "Создайте датафреймы X и y из этих данных.\n",
+ "\n",
+ "Разбейте эти датафреймы на тренировочные (X_train, y_train) и тестовые (X_test, y_test)\n",
+ "с помощью функции train_test_split так, чтобы размер тестовой выборки\n",
+ "составлял 20% от всех данных, при этом аргумент random_state должен быть равен 42.\n",
+ "\n",
+ "Масштабируйте данные с помощью StandardScaler.\n",
+ "\n",
+ "Постройте модель TSNE на тренировочный данных с параметрами:\n",
+ "n_components=2, learning_rate=250, random_state=42.\n",
+ "\n",
+ "Постройте диаграмму рассеяния на этих данных."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "metadata": {
+ "id": "QuNQtlOkONfL"
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "plt.style.use('fivethirtyeight')\n",
+ "\n",
+ "%config InlineBackend.figure_format = 'svg'\n",
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " CRIM | \n",
+ " ZN | \n",
+ " INDUS | \n",
+ " CHAS | \n",
+ " NOX | \n",
+ " RM | \n",
+ " AGE | \n",
+ " DIS | \n",
+ " RAD | \n",
+ " TAX | \n",
+ " PTRATIO | \n",
+ " B | \n",
+ " LSTAT | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 0.00632 | \n",
+ " 18.0 | \n",
+ " 2.31 | \n",
+ " 0.0 | \n",
+ " 0.538 | \n",
+ " 6.575 | \n",
+ " 65.2 | \n",
+ " 4.0900 | \n",
+ " 1.0 | \n",
+ " 296.0 | \n",
+ " 15.3 | \n",
+ " 396.90 | \n",
+ " 4.98 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 0.02731 | \n",
+ " 0.0 | \n",
+ " 7.07 | \n",
+ " 0.0 | \n",
+ " 0.469 | \n",
+ " 6.421 | \n",
+ " 78.9 | \n",
+ " 4.9671 | \n",
+ " 2.0 | \n",
+ " 242.0 | \n",
+ " 17.8 | \n",
+ " 396.90 | \n",
+ " 9.14 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 0.02729 | \n",
+ " 0.0 | \n",
+ " 7.07 | \n",
+ " 0.0 | \n",
+ " 0.469 | \n",
+ " 7.185 | \n",
+ " 61.1 | \n",
+ " 4.9671 | \n",
+ " 2.0 | \n",
+ " 242.0 | \n",
+ " 17.8 | \n",
+ " 392.83 | \n",
+ " 4.03 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 0.03237 | \n",
+ " 0.0 | \n",
+ " 2.18 | \n",
+ " 0.0 | \n",
+ " 0.458 | \n",
+ " 6.998 | \n",
+ " 45.8 | \n",
+ " 6.0622 | \n",
+ " 3.0 | \n",
+ " 222.0 | \n",
+ " 18.7 | \n",
+ " 394.63 | \n",
+ " 2.94 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 0.06905 | \n",
+ " 0.0 | \n",
+ " 2.18 | \n",
+ " 0.0 | \n",
+ " 0.458 | \n",
+ " 7.147 | \n",
+ " 54.2 | \n",
+ " 6.0622 | \n",
+ " 3.0 | \n",
+ " 222.0 | \n",
+ " 18.7 | \n",
+ " 396.90 | \n",
+ " 5.33 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX \\\n",
+ "0 0.00632 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 \n",
+ "1 0.02731 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 \n",
+ "2 0.02729 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 \n",
+ "3 0.03237 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 \n",
+ "4 0.06905 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 \n",
+ "\n",
+ " PTRATIO B LSTAT \n",
+ "0 15.3 396.90 4.98 \n",
+ "1 17.8 396.90 9.14 \n",
+ "2 17.8 392.83 4.03 \n",
+ "3 18.7 394.63 2.94 \n",
+ "4 18.7 396.90 5.33 "
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " price | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 | \n",
+ " 24.0 | \n",
+ "
\n",
+ " \n",
+ " 1 | \n",
+ " 21.6 | \n",
+ "
\n",
+ " \n",
+ " 2 | \n",
+ " 34.7 | \n",
+ "
\n",
+ " \n",
+ " 3 | \n",
+ " 33.4 | \n",
+ "
\n",
+ " \n",
+ " 4 | \n",
+ " 36.2 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " price\n",
+ "0 24.0\n",
+ "1 21.6\n",
+ "2 34.7\n",
+ "3 33.4\n",
+ "4 36.2"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "(None, None)"
+ ]
+ },
+ "execution_count": 51,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.datasets import load_boston\n",
+ "\n",
+ "boston = load_boston()\n",
+ "\n",
+ "data = boston[\"data\"]\n",
+ "\n",
+ "feature_names = boston[\"feature_names\"]\n",
+ "\n",
+ "X = pd.DataFrame(data, columns=feature_names)\n",
+ "y = pd.DataFrame(boston[\"target\"], columns=[\"price\"])\n",
+ "\n",
+ "display(X.head()), display(y.head())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 52,
+ "metadata": {
+ "id": "fvOnLpaXONfn"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "((404, 13), (102, 13))"
+ ]
+ },
+ "execution_count": 52,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
+ "\n",
+ "X_train.shape, X_test.shape"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 53,
+ "metadata": {
+ "id": "yPxQL0KZONfi"
+ },
+ "outputs": [],
+ "source": [
+ "from sklearn.preprocessing import StandardScaler\n",
+ "\n",
+ "scaler = StandardScaler(with_mean=False)\n",
+ "\n",
+ "X_train_scaled = pd.DataFrame(scaler.fit_transform(X_train), columns=X_train.columns)\n",
+ "X_test_scaled = pd.DataFrame(scaler.transform(X_test), columns=X_test.columns)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "metadata": {
+ "id": "HWt-_P61ONfo",
+ "outputId": "faac3c81-85b0-44df-9427-9494e76e33a6"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "До:\t(404, 13)\n",
+ "После:\t(404, 2)\n"
+ ]
+ }
+ ],
+ "source": [
+ "from sklearn.manifold import TSNE\n",
+ "\n",
+ "tsne = TSNE(n_components=2, learning_rate=250, random_state=42)\n",
+ "\n",
+ "X_train_tsne = tsne.fit_transform(X_train_scaled)\n",
+ "\n",
+ "print('До:\\t{}'.format(X_train_scaled.shape))\n",
+ "print('После:\\t{}'.format(X_train_tsne.shape))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 55,
+ "metadata": {
+ "id": "RIGICrkHONfo",
+ "outputId": "671f4770-6c3f-4f12-b61c-50e7025bfe20",
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/svg+xml": [
+ "\r\n",
+ "\r\n",
+ "\r\n",
+ "