diff --git a/zhukova_alina_lab_1/flask-server.py b/zhukova_alina_lab_1/flask-server.py
new file mode 100644
index 0000000..5ae9d12
--- /dev/null
+++ b/zhukova_alina_lab_1/flask-server.py
@@ -0,0 +1,194 @@
+import array
+import math
+import random
+
+import matplotlib.pyplot as plt
+import numpy as np
+from matplotlib.colors import ListedColormap
+from sklearn.model_selection import train_test_split
+from sklearn.datasets import make_moons, make_circles, make_classification
+from sklearn.neural_network import MLPClassifier
+from sklearn.linear_model import LinearRegression, Lasso, Ridge, Perceptron
+from sklearn.metrics import accuracy_score
+
+from flask import Flask
+
+app = Flask(__name__)
+
+@app.route("/")
+def home():
+ return "" \
+ "
Жукова Алина ПИбд-41
" \
+ "Лабораторная работа №1
" \
+ "" \
+ "" \
+ "" \
+ " | " \
+ "
" \
+ ""
+
+
+# Работа с типовыми наборами данных и различными моделями
+# сгенерируйте определенный тип данных и сравните на нем 3 модели
+# 10.Данные: make_moons (noise=0.3, random_state=rs)
+# Модели:
+# · Линейную регрессию
+# · Многослойный персептрон с 10-ю нейронами в скрытом слое (alpha = 0.01)
+# · Многослойный персептрон со 100-а нейронами в скрытом слое (alpha = 0.01)
+@app.route("/k4_1_task_1", methods=['GET'])
+def k4_1_task_1():
+ X, y = make_classification(n_features=2, n_redundant=0, n_informative=2,
+ random_state=0, n_clusters_per_class=1)
+ rng = np.random.RandomState(2)
+ X += 2 + rng.uniform(size=X.shape)
+ linearly_dataset = (X, y)
+ cm_bright = ListedColormap(['#FF0000', '#0000FF'])
+ cm_bright2 = ListedColormap(['#FF000066', '#0000FF66'])
+ moon_dataset = make_moons(noise=0.3, random_state=0)
+ circles_dataset = make_circles(noise=0.2, factor=0.5, random_state=1)
+ datasets = [moon_dataset, circles_dataset, linearly_dataset]
+
+ X, y = moon_dataset
+ X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.2, random_state=42)
+
+ ridge_regression = Ridge(alpha=3, random_state=240)
+ ridge_regression.fit(X_train, y_train)
+ linear_accuracy = str(ridge_regression.score(X_test, y_test))
+
+ plt.subplot(1, 3, 1)
+ plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm_bright)
+ plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm_bright2)
+
+ x_min = moon_dataset[0][:, 0].min()
+ g_min = None
+ y_min = None
+ x_max = moon_dataset[0][:, 0].max()
+ g_max = None
+ y_max = None
+ for k in range(-21, 50):
+ elem = np.array([[x_min, k / 20]])
+ getted = ridge_regression.predict(elem)
+ if (g_min == None or math.fabs(0.5 - getted) < math.fabs(0.5 - g_min)):
+ g_min = getted
+ y_min = elem[0][1]
+ else:
+ if(math.fabs(0.5 - getted) > math.fabs(0.5 - g_min)):
+ break
+
+ for k in range(-21, 50):
+ elem = np.array([[x_max, k / 20]])
+ getted = ridge_regression.predict(elem)
+ if (g_max == None or math.fabs(0.5 - getted) < math.fabs(0.5 - g_max)):
+ g_max = getted
+ y_max = elem[0][1]
+ else:
+ if(math.fabs(0.5 - getted) > math.fabs(0.5 - g_max)):
+ break
+
+ x = ridge_regression.predict(X_test)
+ plt.plot([x_min, x_max], [y_min, y_max], label="line", color="yellow")
+ # plt.show()
+
+ # Перцептрон 10 скрытых слоев
+ perceptr = MLPClassifier(random_state=1, max_iter=2000, n_iter_no_change=20, activation="tanh",
+ alpha=0.01, hidden_layer_sizes=[10,], tol=0.00000001)
+ perceptr.fit(X_train, y_train)
+ prediction = perceptr.predict(X_test)
+ perceptron_accuracy = str(accuracy_score(y_test, prediction))
+ prediction = perceptr.predict(moon_dataset[0])
+ perceptron_accuracy_all = str(accuracy_score(moon_dataset[1], prediction))
+
+ params_set = []
+ y_elem = None
+ g_elem = None
+
+ for data_elem in moon_dataset[0]:
+ for k in range(-21, 50):
+ elem = np.array([[data_elem[0], k / 20]])
+ getted = perceptr.predict(elem)
+ if (g_elem == None and getted == 0):
+ params_set.append([data_elem[0], -21 / 20])
+ g_elem = None
+ else:
+ if(getted == 1 and (getted == g_elem or g_elem == None)):
+ g_elem = getted
+ y_elem = elem[0][1]
+ else:
+ params_set.append([data_elem[0], y_elem])
+ g_elem = None
+ break
+
+ if (g_elem != None):
+ params_set.append([data_elem[0], 50 / 20])
+ g_elem = None
+
+
+ params_set.sort()
+ params_set = np.array(params_set)
+ plt.subplot(1, 3, 2)
+ plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm_bright)
+ plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm_bright2)
+ plt.plot(params_set[:, 0], params_set[:, 1], label="line", color="yellow")
+ # plt.show()
+
+ # Перцептрон 100 скрытых слоев
+ perceptr100 = MLPClassifier(random_state=1, max_iter=2000, n_iter_no_change=20, activation="tanh",
+ alpha=0.01, hidden_layer_sizes=[100, ], tol=0.00000001)
+ perceptr100.fit(X_train, y_train)
+ prediction = perceptr100.predict(X_test)
+ perceptron100_accuracy = str(accuracy_score(y_test, prediction))
+ prediction = perceptr100.predict(moon_dataset[0])
+ perceptron100_accuracy_all = str(accuracy_score(moon_dataset[1], prediction))
+
+ params_set = []
+ y_elem = None
+ g_elem = None
+
+ for data_elem in moon_dataset[0]:
+ for k in range(-21, 30):
+ elem = np.array([[data_elem[0], k / 20]])
+ getted = perceptr100.predict(elem)
+ if (g_elem == None and getted == 0):
+ params_set.append([data_elem[0], -21 / 20])
+ g_elem = None
+ else:
+ if(getted == 1 and (getted == g_elem or g_elem == None)):
+ g_elem = getted
+ y_elem = elem[0][1]
+ else:
+ params_set.append([data_elem[0], y_elem])
+ g_elem = None
+ break
+
+ if (g_elem != None):
+ params_set.append([data_elem[0], 30 / 20])
+ g_elem = None
+
+
+ params_set.sort()
+ params_set = np.array(params_set)
+ plt.subplot(1, 3, 3)
+ plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm_bright)
+ plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm_bright2)
+ plt.plot(params_set[:, 0], params_set[:, 1], label="line", color="yellow")
+ plt.show()
+
+
+ return "" \
+ "Работа с типовыми наборами данных и различными моделями
" \
+ "Вариант 10. Данные: make_moons (noise=0.3, random_state=rs)
" \
+ "Модели:\n 1) Линейная регрессия" \
+ "\n 2) Многослойный персептрон с 10-ю нейронами в скрытом слое (alpha = 0.01)" \
+ "\n 3) Многослойный персептрон со 100-а нейронами в скрытом слое (alpha = 0.01)
" \
+ "Оценка точности линейной регрессии: " + linear_accuracy + "
" \
+ "Оценка точности (тестовые данные) перцептрона 10 нейронов в скрытом слое: " + perceptron_accuracy + "
" \
+ "Оценка точности (тестовые данные) перцептрона 100 нейронов в скрытом слое: " + perceptron100_accuracy + "
" \
+ "Оценка точности (все точки) перцептрона 10 нейронов в скрытом слое: " + perceptron_accuracy_all + "
" \
+ "Оценка точности (все точки) перцептрона 100 нейронов в скрытом слое: " + perceptron100_accuracy_all + "
" \
+ ""
+
+
+if __name__ == "__main__":
+ app.run(debug=True)
diff --git a/zhukova_alina_lab_1/img_screen_1.png b/zhukova_alina_lab_1/img_screen_1.png
new file mode 100644
index 0000000..5a86420
Binary files /dev/null and b/zhukova_alina_lab_1/img_screen_1.png differ
diff --git a/zhukova_alina_lab_1/img_screen_2.png b/zhukova_alina_lab_1/img_screen_2.png
new file mode 100644
index 0000000..0659cbe
Binary files /dev/null and b/zhukova_alina_lab_1/img_screen_2.png differ
diff --git a/zhukova_alina_lab_1/img_screen_3.png b/zhukova_alina_lab_1/img_screen_3.png
new file mode 100644
index 0000000..09595fd
Binary files /dev/null and b/zhukova_alina_lab_1/img_screen_3.png differ
diff --git a/zhukova_alina_lab_1/readme.md b/zhukova_alina_lab_1/readme.md
new file mode 100644
index 0000000..1af0e4e
--- /dev/null
+++ b/zhukova_alina_lab_1/readme.md
@@ -0,0 +1,60 @@
+## Задание
+Работа с типовыми наборами данных и различными моделями.
+Сгенерируйте определенный тип данных и сравните на нем 3 модели
+
+Вариант №10
+
+Данные: make_moons (noise=0.3, random_state=rs)
+
+Модели:
++ Линейная регрессия
++ Многослойный персептрон с 10-ю нейронами в скрытом слое (alpha = 0.01)
++ Многослойный персептрон со 100-а нейронами в скрытом слое (alpha = 0.01)
+
+## Используемые технологии
+В лабораторной были использованы библиотеки:
++ numpy - позволяет работать с массивами и матрицами
++ matplotlib - используется для создания графиков
++ sklearn - используется для работы с моделями машинного обучения
++ Flask - предоставляет способ быстрого создания веб-страниц для визуализации работы приложения
+
+## Как запустить
+Запустить файл flask-server, который поднимет локальный сервер
+и позволит обратиться к программе через браузер по ссылке [http://127.0.0.1:5000/](http://127.0.0.1:5000/)
+
+## Что делает программа
+Генерирует набор данных типа луны (moons), делит его на обучающую и тестовую выборки.
+По очереди обучает на данных обучающей выборки 3 модели:
+модель линейной регрессии, модель многослойного перцептрона с 10 нейронами в скрытом слое и
+модель многослойного перцептрона со 100 нейронами в скрытом слое.
+
+После обучения проверяются предсказания моделей на тестовых данных. Строится три графика, по одному для каждой модели,
+где `#FF0000`, `#0000FF` - точки обучающей выборки первого и второго типа.
+
+`#FF000066`, `#0000FF66` - точки тестовой выборки первого и второго типа
+
+`#FFFF00` - линия по которой модель разделила данные на группы
+
+Далее программа выведет оценки точности моделей. Полученные оценки:
++ Линейная регрессия - 0.68
++ Перцептрон с 10 нейронами в скрытом слое - 0.95
++ Перцоптрон со 100 нейронами в скрытом слое - 0.95
+
+Так как для двух последних моделей оценки оказались одинаковы,
+я сравнила их точность на всех данных, а не только на тестовой выборке.
+
++ Точность Перцептрона с 10 нейронами в скрытом слое - 0.91
++ Точность Перцептрона со 100 нейронами в скрытом слое - 0.95
+
+## Скриншоты работы программы
+Главная страница в браузере (доступ по ссылке [http://127.0.0.1:5000/](http://127.0.0.1:5000/))
+![img.png](img_screen_1.png)
+
+Полученные графики разбиения точек на классы
+
+Линейная регрессия - Перцептрон 10 нейронов - Перцептрон 100 нейронов
+![img.png](img_screen_2.png)
+
+Вывод анализа точности работы моделей
+![img.png](img_screen_3.png)
+