diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/IIS_2023_1.iml b/.idea/IIS_2023_1.iml deleted file mode 100644 index 4e6ce24..0000000 --- a/.idea/IIS_2023_1.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 3c29c38..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 89e118a..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index b610ec7..0000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1695412818437 - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 554ca30..0000000 --- a/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# IIS_2023_1 - -ПРАВИЛА ИГРЫ при сдаче лабораторных работ по предмету "Интеллектуальные информационные системы". - -Всем Доброго времени суток! Настоятельно прошу прочитать этот файл от начала и до конца. - -**Задание на л/р** - -0. Требования к языку программирования: python. -Для выполнения лабораторных работ можно использовать любую IDE или текстовый редактор. - -1. Файл с заданиями находится в корне проекта ([MetodichkaMII_MO.pdf](http://student.git.athene.tech/Alexey/IIS_2023_1/src/branch/main/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D0%B8%D1%87%D0%BA%D0%B0%D0%9C%D0%98%D0%98_%D0%9C%D0%9E-1.pdf)). - -2. Наши л/р показаны на [скриншоте](http://student.git.athene.tech/Alexey/IIS_2023_1/src/branch/main/labs.jpg). Или все 7 л/р по курсу "Машинное обучение". -Обратите внимание, что лабораторные работы 3-7 выполняются на варианте данных вашей курсовой работы (Массивы данныхдля лабораторныхработ). - -**Воркфлоу по сдаче лабораторных работ** - -0. Клонируем себе репозиторий на компьютер - -> git clone http://student.git.athene.tech/Alexey/IIS_2023_1.git - -1. Для выполнения очередной лабораторной работы необходимо завести отдельную ветку (перед этим необходимо выполнить команду git checkout master). Указанный формат наименования ветки <фамилия_имя_lab_номер_лабораторной> ОБЯЗАТЕЛЕН, в противном случае лабораторная работа не проверяется! - -> git checkout -b "zhelepov_alex_lab_1" - -При этом Вы окажетесь в своей ветке, в которой Вам и предстоит выполнять лабораторную работу. - -2. В ветке создаём папку в аналогичном формате <фамилия_имя_lab_номер_лабораторной>, формат также ОБЯЗАТЕЛЕН, в противном случае лабораторная работа не проверяется! - -> mkdir zhelepov_alex_lab_1 - -3. Весь код лабораторной работы и отчет должны находится внутри этой папки! То есть файловая структура репозитория должна иметь такой вид - -> ivanov_ivan_lab_1 zhelepov_alex_lab_1 README.md - -4. Отчет к лабораторной работе должен быть оформлен в виде файла readme.md, в котором Вы сможете дать краткое описание того, что делает Ваша программа. Очень хорошо (большой плюс при сдаче), если Вы опишите следующие пункты: -* как запустить лабораторную работу -* какие технологии использовали -* что она делает -* тесты, то есть несколько примеров входных и выходных значений - -Небольшой [гайд](https://guides.github.com/features/mastering-markdown/) по синтаксису для оформления отчёта. - -P.S. я знаю про хак "хочу скопировать у товарища этот волшебный readme и ничего не делать", но пожалуйста не делайте так (я буду обязательно проверять это) - -4. Как только Вы закончили работу над лабораторной работой, то находясь в своей ветке (убедитесь в этом пожалуйста, использую команду git branch - ваша текущая ветка будет подсвечена), вы должны закоммитить и запушить свои изменения в репозиторий, другими словами сохранить их в репозиторий. - -> git commit -m "zhelepov_alex_lab_1 is ready" -> git push origin - -P.S. я знаю про хак "скопируй у товарища и закоммить - все равно он (я) смотреть не будет" - не сработает - давайте быть честными и делать все самостоятельно. А во-вторых, на реальной работе так не прокатит - скорее всего Вас просто уволят. - -5. После этого Вы должны перейти в наш git и создать merge request, назначив его на меня. Дополнительно лучше маякнуть меня в нашем [телеграм-чате](https://t.me/+XSq2xEbEuD05N2Vi). Я проведу ревью и отпишу замечания, которые нужно будет исправить. Если все хорошо, то вмержу ваш pull-request в мастер-ветку. Данное состояние говорит о том, что ваша л/р принята. - -6. **Важный момент**: Устно я не принимаю лабораторные работы (подойти к компьютеру, посмотреть код, поставить оценку), только через репозиторий и после успешного code review ревью кода вашей л/р и ее результатов в виде отчета. Это делается для того, чтобы вы привыкали к воркфлоу, который применяется практически всеми IT-компаниями, где между разработчиками в основном общение идет через "текст". Что касается лабораторных работ в расписании - они используются в качестве консультаций, а сдача и проверка л/р идет только через репозиторий (то есть все замечания вы получаете на code review). Проверяю я обычно лабораторную в течение 1-3 дней после создания pull-request-а (всегда можно маякнуть меня в нашем telegram-чате). - -**Чек-лист для старост групп** - -0. Убедиться, что все из списка зашли в [телеграм-чат](https://t.me/+XSq2xEbEuD05N2Vi), где мы будем общаться + я буду публиковать различные объявления. ПОЖАЛУЙСТА, ОБРАТИТЕ НА ЭТО ВНИМАНИЕ и доведите до всех! В других каналах связя меня сложно выцепить или я могу пропустить сообщение. - -1. Убедиться, что все зарегистрировались на университетском [git](http://student.git.athene.tech/) и добавились для работы с нашим репозиторием. А добавляться в этот [репозиторий](http://student.git.athene.tech/Alexey/IIS_2023_1). - -**Полезные ссылки:** - -0. Отличный тьюториал по гиту (рекомендую всем его пройти), вот [тут](https://learngitbranching.js.org/) - -1. Гайд по markdown [тут](https://guides.github.com/features/mastering-markdown/) - -БОЛЬШОЕ СПАСИБО, что дочитали этот README до конца! И Удачи Вам в сдаче л/р и не только! diff --git a/alexandrov_dmitrii_lab_1/lab1.py b/alexandrov_dmitrii_lab_1/lab1.py deleted file mode 100644 index 071ff62..0000000 --- a/alexandrov_dmitrii_lab_1/lab1.py +++ /dev/null @@ -1,56 +0,0 @@ -import random -from matplotlib import pyplot as plt -from matplotlib.colors import ListedColormap -from sklearn.datasets import make_moons -from sklearn.linear_model import LinearRegression, Ridge -from sklearn.model_selection import train_test_split -from sklearn.preprocessing import PolynomialFeatures -from sklearn.pipeline import Pipeline - -rs = random.randrange(50) - -X, y = make_moons(n_samples=250, noise=0.3, random_state=rs) -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=42) - -figure = plt.figure(1, figsize=(16, 9)) -axis = figure.subplots(4, 3) -cm = ListedColormap(['#FF0000', "#0000FF"]) -arr_res = list(range(len(y_test))) -X_scale = list(range(len(y_test))) - - -def test(col, model): - global axis - global arr_res - global X_test - global X_train - global y_train - global y_test - - model.fit(X_train, y_train) - res_y = model.predict(X_test) - print(model.score(X_test, y_test)) - - axis[0, col].scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm) - axis[1, col].scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm) - axis[2, col].scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm) - axis[2, col].scatter(X_test[:, 0], X_test[:, 1], c=res_y, cmap=cm) - axis[3, col].plot([i for i in range(len(res_y))], y_test, c="g") - axis[3, col].plot([i for i in range(len(res_y))], res_y, c="r") - - -def start(): - lin = LinearRegression() - poly = Pipeline([('poly', PolynomialFeatures(degree=3)), - ('linear', LinearRegression())]) - ridge = Pipeline([('poly', PolynomialFeatures(degree=3)), - ('ridge', Ridge(alpha=1.0))]) - - test(0, lin) - test(1, poly) - test(2, ridge) - - plt.show() - - -start() diff --git a/alexandrov_dmitrii_lab_1/readme.md b/alexandrov_dmitrii_lab_1/readme.md deleted file mode 100644 index 5fb7f17..0000000 --- a/alexandrov_dmitrii_lab_1/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -## Задание -Сгенерировать определенный тип данных и сравнить на нем 3 модели. Построить графики, отобразить качество моделей, объяснить полученные результаты. -Вариант 1. -Данные: make_moons (noise=0.3, random_state=rs) -Модели: -· Линейная регрессия -· Полиномиальная регрессия (со степенью 3) -· Гребневая полиномиальная регрессия (со степенью 3, alpha = 1.0) - -### Запуск программы -Файл lab1.py содержит и запускает программу, аргументов и настройки ~~вроде~~ не требует, - -### Описание программы -Генерирует один из 50 наборов данных, показывает окно с графиками и пишет оценку моделей обучения по заданию. -Использует библиотеки matplotlib для демонстрации графиков и sklearn для создания и использования моделей. - -### Результаты тестирования -Для различных значений rs результаты следующие: -значение - линейная - полиномиальная - гребневая полиномиальная -1 - 0.54 - 0.08 - 0.35 -2 - 0.62 - 0.58 - 0.63 -3 - 0.6 - 0.67 - 0.65 -4 - 0.52 - 0.46 - 0.5 -5 - 0.4 - 0.42 - 0.44 -Из данных результатов можно заключить, что чёткой зависимости точности от выбранной модели нет. - -Однако, после этого я добавил в генератор данных число значений: 500. Результаты оказались более детерминированными: -значение - линейная - полиномиальная - гребневая полиномиальная -1 - 0.54 - 0.63 - 0.63 -2 - 0.52 - 0.63 - 0.62 -3 - 0.56 - 0.64 - 0.64 -4 - 0.5 - 0.63 - 0.62 -5 - 0.5 - 0.52 - 0.53 -Из данных результатов можно заключить, что в общем случае модель линейной регрессии уступает полиномиальным. Гребневая полиномиальная регрессия чаще уступала обычной полиномиальной, однако в незначительном количестве ситуаций была оценена выше - но во всех случаях результаты были близки, поэтому можно с уверенностью предположить, что результаты идентичны и различаются по воле шума обучения. - -После изучения число значений в генераторе заменено на 250, поскольку графики становились неразличимыми^ -значение - линейная - полиномиальная - гребневая полиномиальная -1 - 0.48 - 0.54 - 0.54 -2 - 0.5 - 0.56 - 0.56 -3 - 0.57 - 0.6 - 0.6 -4 - 0.57 - 0.66 - 0.68 -5 - 0.49 - 0.54 - 0.55 -По данным результатам видно, что в большинстве ситуаций уже гребневая полиномиальная регрессия показывает лучшую точность. - -Результаты объясняются следующим образом: -Линейная регрессия будучи математически прямой плохо отражает сложные функции и нелинейные зависимости, в то время как полиномиальная регрессия способна отражать перегибы и изменяющиеся в зависимости от меры значений зависимости. Гребневая полиномиальная вышла идентичной простой полиномиальной из-за одинаковых настроек - обе они по заданию имеют третью степень, а гребневая регрессия имеет слишком малый параметр alpha, что результирует в малом эффекте гребневой функции. diff --git a/antonov_dmitry_lab_1/README.md b/antonov_dmitry_lab_1/README.md deleted file mode 100644 index be111c3..0000000 --- a/antonov_dmitry_lab_1/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# Лаб 1 - -Работа с типовыми наборами данных и различными моделями - -# Вариант 3 - -Данные: make_classification (n_samples=500, n_features=2, -n_redundant=0, n_informative=2, random_state=rs, n_clusters_per_class=1) - -# Запуск - -Выполнением скрипта файла (вывод в консоль + рисует графики). - -# Модели: - -1. Линейная регрессия -1. Полиномиальная регрессия (со степенью 3) -1. Гребневая полиномиальная регрессия (со степенью 3, alpha = 1.0) - -# Графики - -
-Качество каждой модели может быть оценено на основе среднеквадратичной ошибки (MSE). -Более низкая MSE указывает на лучшее соответствие данным. -Однако выбор модели зависит от набора данных и лежащей в основе взаимосвязи между объектами и целевой переменной. - -Линейная регрессия: Линейная регрессия предполагает линейную зависимость между признаками и целевой переменной. -Это хорошо работает, когда взаимосвязь линейна, а шум в наборе данных минимален. -Лучше всего сработала на наборе лун. Хуже всего на кругах. -На линейном наборе показала себя на равне с остальными. - -Полиномиальная и гребневая показали примерно одинаково на всех наборах. - -Полиномиальная регрессия (степень=3): -Полиномиальная регрессия обеспечивает более гибкую подгонку за счет полинома более высокого порядка(кубическая кривая). -Она может выявить более сложные взаимосвязи между объектами и целевой переменной. -Она может сработать лучше, чем линейная регрессия, если истинная взаимосвязь нелинейна. - -Гребневая регрессия (степень= 3, альфа=1,0): -В случае полиномиальной регрессии с регуляризацией (альфа=1,0) модель добавляет коэффициент регуляризации -для управления сложностью обучения. Регуляризация помогает предотвратить переобучение, когда набор -данных содержит шум или когда он ограничен. -
- -

-

Набор лун (moon_dataset)
- -

-

-

Графики регрессии
- - - -
- Линейная MSE: 0.0936 - Полиномиальная (degree=3) MSE: 0.0674 - Гребневая (degree=3, alpha=1.0) MSE: 0.0682 -
-

- -

-

Набор кругов (circles_dataset)
- -

-

-

Графики регрессии
- - - -
- Линейная MSE: 0.2684 - Полиномиальная (degree=3) MSE: 0.1341 - Гребневая (degree=3, alpha=1.0) MSE: 0.1312 -
-

- -

-

Набор линейный (linearly_dataset)
- -

-

-

Графики регрессии
- - - -
- Линейная MSE: 0.1101 - Полиномиальная (degree=3) MSE: 0.1045 - Гребневая (degree=3, alpha=1.0) MSE: 0.1078 -
-

- -
-Итоговая модель подбирается учитывая зависимость в данных, -как правило полиномиальная регрессия справляется лучше, а коэф регуляризации в гребневой регрессии помогает избежать -переобучения. -
\ No newline at end of file diff --git a/antonov_dmitry_lab_1/lab1.py b/antonov_dmitry_lab_1/lab1.py deleted file mode 100644 index f92c5d4..0000000 --- a/antonov_dmitry_lab_1/lab1.py +++ /dev/null @@ -1,97 +0,0 @@ -import numpy as np -from matplotlib import pyplot as plt -from skimage.metrics import mean_squared_error -from sklearn.datasets import make_moons, make_circles, make_classification -from sklearn.linear_model import LinearRegression, Ridge -from sklearn.model_selection import train_test_split -from sklearn.pipeline import make_pipeline -from sklearn.preprocessing import StandardScaler, PolynomialFeatures - -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) -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] - -""" -Данные: -· moon_dataset -· circles_dataset -· linearly_dataset -""" -for ds_cnt, ds in enumerate(datasets): - X, y = ds - X = StandardScaler().fit_transform(X) - X_train, X_test, y_train, y_test = train_test_split( - X, y, test_size=.4, random_state=42 - ) - """ - Модели: - · Линейную регрессию - · Полиномиальную регрессию (со степенью 3) - · Гребневую полиномиальную регрессию (со степенью 3, alpha = 1.0) - """ - - # Линейная - linear_regression = LinearRegression() - linear_regression.fit(X_train, y_train) - linear_predictions = linear_regression.predict(X_test) - linear_mse = mean_squared_error(y_test, linear_predictions) - - # Полиномиальная (degree=3) - poly_regression = make_pipeline(PolynomialFeatures(degree=3), LinearRegression()) - poly_regression.fit(X_train, y_train) - poly_predictions = poly_regression.predict(X_test) - poly_mse = mean_squared_error(y_test, poly_predictions) - - # Гребневая (degree=3, alpha=1.0) - poly_regression_alpha = make_pipeline(PolynomialFeatures(degree=3), Ridge(alpha=1.0)) - poly_regression_alpha.fit(X_train, y_train) - poly_alpha_predictions = poly_regression_alpha.predict(X_test) - poly_alpha_mse = mean_squared_error(y_test, poly_alpha_predictions) - - # График данных - plt.figure(figsize=(10, 6)) - plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='coolwarm') - plt.title('Датасет №' + str(ds_cnt)) - plt.xlabel('X') - plt.ylabel('Y') - - # График линейной модели - plt.figure(figsize=(10, 6)) - plt.scatter(X_test[:, 0], X_test[:, 1], c=linear_predictions, cmap='coolwarm') - plt.title('Линейная ds'+ str(ds_cnt)) - plt.xlabel('X') - plt.ylabel('Y') - plt.show() - - # График полиномиальной модели (degree=3) - plt.figure(figsize=(10, 6)) - plt.scatter(X_test[:, 0], X_test[:, 1], c=poly_predictions, cmap='coolwarm') - plt.title('Полиномиальная (degree=3) ds' + str(ds_cnt)) - plt.xlabel('X') - plt.ylabel('Y') - plt.show() - - # График гребневой модели (degree=3, alpha=1.0) - plt.figure(figsize=(10, 6)) - plt.scatter(X_test[:, 0], X_test[:, 1], c=poly_alpha_predictions, cmap='coolwarm') - plt.title('Гребневая (degree=3, alpha=1.0) ds' + str(ds_cnt)) - plt.xlabel('X') - plt.ylabel('Y') - plt.show() - - # Сравнение качества - print('Линейная MSE:', linear_mse) - print('Полиномиальная (degree=3) MSE:', poly_mse) - print('Гребневая (degree=3, alpha=1.0) MSE:', poly_alpha_mse) - diff --git a/antonov_dmitry_lab_1/screens/myplot1.png b/antonov_dmitry_lab_1/screens/myplot1.png deleted file mode 100644 index 8341361..0000000 Binary files a/antonov_dmitry_lab_1/screens/myplot1.png and /dev/null differ diff --git a/antonov_dmitry_lab_1/screens/myplot10.png b/antonov_dmitry_lab_1/screens/myplot10.png deleted file mode 100644 index ad58249..0000000 Binary files a/antonov_dmitry_lab_1/screens/myplot10.png and /dev/null differ diff --git a/antonov_dmitry_lab_1/screens/myplot11.png b/antonov_dmitry_lab_1/screens/myplot11.png deleted file mode 100644 index a26f8ba..0000000 Binary files a/antonov_dmitry_lab_1/screens/myplot11.png and /dev/null differ diff --git a/antonov_dmitry_lab_1/screens/myplot12.png b/antonov_dmitry_lab_1/screens/myplot12.png deleted file mode 100644 index 84e0d74..0000000 Binary files a/antonov_dmitry_lab_1/screens/myplot12.png and /dev/null differ diff --git a/antonov_dmitry_lab_1/screens/myplot2.png b/antonov_dmitry_lab_1/screens/myplot2.png deleted file mode 100644 index 0c50b29..0000000 Binary files a/antonov_dmitry_lab_1/screens/myplot2.png and /dev/null differ diff --git a/antonov_dmitry_lab_1/screens/myplot3.png b/antonov_dmitry_lab_1/screens/myplot3.png deleted file mode 100644 index 19cc7d4..0000000 Binary files a/antonov_dmitry_lab_1/screens/myplot3.png and /dev/null differ diff --git a/antonov_dmitry_lab_1/screens/myplot4.png b/antonov_dmitry_lab_1/screens/myplot4.png deleted file mode 100644 index 03c667b..0000000 Binary files a/antonov_dmitry_lab_1/screens/myplot4.png and /dev/null differ diff --git a/antonov_dmitry_lab_1/screens/myplot5.png b/antonov_dmitry_lab_1/screens/myplot5.png deleted file mode 100644 index de743ae..0000000 Binary files a/antonov_dmitry_lab_1/screens/myplot5.png and /dev/null differ diff --git a/antonov_dmitry_lab_1/screens/myplot6.png b/antonov_dmitry_lab_1/screens/myplot6.png deleted file mode 100644 index d22bdbc..0000000 Binary files a/antonov_dmitry_lab_1/screens/myplot6.png and /dev/null differ diff --git a/antonov_dmitry_lab_1/screens/myplot7.png b/antonov_dmitry_lab_1/screens/myplot7.png deleted file mode 100644 index 29f6740..0000000 Binary files a/antonov_dmitry_lab_1/screens/myplot7.png and /dev/null differ diff --git a/antonov_dmitry_lab_1/screens/myplot8.png b/antonov_dmitry_lab_1/screens/myplot8.png deleted file mode 100644 index d75641a..0000000 Binary files a/antonov_dmitry_lab_1/screens/myplot8.png and /dev/null differ diff --git a/antonov_dmitry_lab_1/screens/myplot9.png b/antonov_dmitry_lab_1/screens/myplot9.png deleted file mode 100644 index 0ef0f8c..0000000 Binary files a/antonov_dmitry_lab_1/screens/myplot9.png and /dev/null differ diff --git a/arutunyan_dmitry_lab_1/1.png b/arutunyan_dmitry_lab_1/1.png new file mode 100644 index 0000000..e8cfe6a Binary files /dev/null and b/arutunyan_dmitry_lab_1/1.png differ diff --git a/arutunyan_dmitry_lab_1/2.png b/arutunyan_dmitry_lab_1/2.png new file mode 100644 index 0000000..8f018c9 Binary files /dev/null and b/arutunyan_dmitry_lab_1/2.png differ diff --git a/arutunyan_dmitry_lab_1/3.png b/arutunyan_dmitry_lab_1/3.png new file mode 100644 index 0000000..53b2e59 Binary files /dev/null and b/arutunyan_dmitry_lab_1/3.png differ diff --git a/arutunyan_dmitry_lab_1/README.md b/arutunyan_dmitry_lab_1/README.md new file mode 100644 index 0000000..afcc89b --- /dev/null +++ b/arutunyan_dmitry_lab_1/README.md @@ -0,0 +1,93 @@ + +## Лабораторная работа 1. Вариант 4. +### Задание +Построить графики, отобразить +качество моделей, объяснить полученные результаты. + +Данные: `make_moons (noise=0.3, random_state=rs)` + +Модели: +- Линейная регресся +- Полиномиальная регрессия (со степенью 4) +- Гребневая полиномиальная регресся (со степенью 4, alpha = 1.0) + +### Как запустить +Для запуска программы необходимо с помощью командной строки в корневой директории файлов прокета прописать: +``` +python main.py +``` +После этого в папке static сгенерируются 4 графика, по которым оценивается результат выполнения программы. + +### Используемые технологии +- Библиотека `pyplot`, используемая для построения графиков. +- Библиотека `sklearn` - большой набор функционала для анализа данных. Из неё были использованы инструменты: + - `make_moons` - генератор случайных структурированных данных + - `train_test_split` - разделитель данных на обучающиую и тестовую выборки + - `LinearRegression` - инструмент работы с моделью "Линейная регрессия" + - `Ridge` - инструмент работы с моделью "Гребневая регрессия" + - `PolynomialFeatures` - инструмент работы с моделью "Полиномиальная регрессия" + - `metrics` - набор инструменов для оценки моделей +- Библиотека `numpy`, используемая для обработки массивов данных и вычислений + +### Описание работы +Программа генерирует данные для обучения и тестирования моделей, стандартизирует данные и разделяет их на обучающую и тестовую выборки. +```python +X, y = make_moons(noise=0.3, random_state=None) +X = StandardScaler().fit_transform(X) +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=42) +``` +После чего, на данных `X_train` и `y_train` производится обучение моделей, а на данных `X_test` и `y_test` - оценка их качества. + +Поскольку все модели в задании регрессионные, результаты работы будем оценивать через решение задачи предсказания. Это позволит нам использовать для оценки только `y` данные, что облегчит построение графиков. + +Оценка качества моделей будет производиться по двум критериям - среднеквадратическому отклонению `mid_square` от истинного результата и коэфициенту детерминации `det_kp`. Чем среднеквадратическая ошибка меньше и чем коэфициент детерминации больше, тем лучше модель показала себя на данной выборке. +```python +mid_square = np.round(np.sqrt(metrics.mean_squared_error(y_test, y_predict)), 3) +det_kp = np.round(metrics.r2_score(y_test, y_predict), 2) +``` +Где `y_predict` - решение задачи предсказания. Для наглядности, оценочные параметры округлим с помощью функции `round` до 3х и 2х знаков после запятой. + +#### Линейная регрессия +Для создания модели линейной регрессии воспользуемся объектом `LinearRegression()`, обучим модель и заставим её предсказать значения `y` на тестовой выборке `x_text`. +```python +linear = LinearRegression() +linear.fit(X_train, y_train) +y_predict = linear.predict(X_test) +``` +Построим график для оценки результатов: + +![](1.png "") + +#### Полиномиальная регрессия +Линейная регрессия является разновидностью полиномиальной регрессии со степенью ведущего члена равной 1. Чтобы построить модель полиномиальной регрессии со степенью 4 необходимо к данным модели линейной регрессии добавить 3 недостающих члена, возведённых в соответствующие степени 2, 3 и 4. +```python +poly = PolynomialFeatures(degree=4, include_bias=False) +x_poly_train = poly.fit_transform(X_train) +x_poly_test = poly.fit_transform(X_test) +``` +Где `degree` - старшая степень полинома, `include_bias` - приведение свободного члена полинома к 0. + +Обучение и прогнозирование модели далее производится также, как с моделью линейной регрессии, но уде на данных `x_poly_train` и `x_poly_test` + +Построим график для оценки результатов: + +![](2.png "") + +#### Полиномиальная гребневая регрессия +Полиномиальная гребневая регрессия - это та же самая полиномиальная регрессия, но построенная с использованием усредняющего коэфициента. Для этого воспользуемся объёктом `Ridge()` и построим модель аналогично первым. +```python +ridge = Ridge(alpha=1.0) +ridge.fit(x_poly_train, y_train) +y_predict = ridge.predict(x_poly_test) +``` + +Построим график для оценки результатов: + +![](3.png "") + +Теперь построим график для сравнения работы всех моделей и выберем наилучшую: + +![](result.png "") + +### Вывод +Наиболее низкое среднеквадратичное отклонение и наиболее высокий коэфициент детерминации показала модель линейной регрессии, а это значит что она наилучшем образом подходит для работы со сгенерированным данными. В этом случае мы можем предположить что данные выборки находятся на небольшом расстоянии друг от друга и располагаются линейно. \ No newline at end of file diff --git a/arutunyan_dmitry_lab_1/main.py b/arutunyan_dmitry_lab_1/main.py new file mode 100644 index 0000000..f7a0003 --- /dev/null +++ b/arutunyan_dmitry_lab_1/main.py @@ -0,0 +1,89 @@ +import numpy as np +from matplotlib import pyplot as plt +from sklearn import metrics +from sklearn.model_selection import train_test_split +from sklearn.linear_model import LinearRegression, Ridge +from sklearn.preprocessing import StandardScaler, PolynomialFeatures +from sklearn.datasets import make_moons + +X, y = make_moons(noise=0.3, random_state=None) # Генерация данных с пересечениями признаков +X = StandardScaler().fit_transform(X) # Стандартизация. Удаление средних, увеличение дисперсии до 1 +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=42) # Разделение данных на обучающую и тестовую выборки + + +# Модель линейной регрессии +def lr_prediction(): + linear = LinearRegression() # Создание модели + linear.fit(X_train, y_train) # Обучение модели + y_predict = linear.predict(X_test) # Решение задачи предсказания + + mid_square = np.round(np.sqrt(metrics.mean_squared_error(y_test, y_predict)), 3) # Рассчёт среднеквадратичной ошибки модели + det_kp = np.round(metrics.r2_score(y_test, y_predict), 2) # Рассчёт коэфициента детерминации модели + + return "Модель линейной регрессии", y_predict, mid_square, det_kp + + +# Модель полиномиальной регрессии +def poly_lr_prediction(): + poly = PolynomialFeatures(degree=4, include_bias=False) # Создание характеристик полиномиальной модели (степень - 4, обнуление свободного члена - нет) + x_poly_train = poly.fit_transform(X_train) # Трансформация выборки обучения (добавление недостающих аргументов многочлена 4го порядка) + x_poly_test = poly.fit_transform(X_test) # Трансформация тестовой выборки (добавление недостающих аргументов многочлена 4го порядка) + linear = LinearRegression() # Создание модели + linear.fit(x_poly_train, y_train) # Обучение модели + y_predict = linear.predict(x_poly_test) # Решение задачи предсказания + + mid_square = np.round(np.sqrt(metrics.mean_squared_error(y_test, y_predict)), 3) # Рассчёт среднеквадратичной ошибки модели + det_kp = np.round(metrics.r2_score(y_test, y_predict), 2) # Рассчёт коэфициента детерминации модели + + return "Модель полиномиальной регрессии", y_predict, mid_square, det_kp + + +# Модель полиномиальной гребневой регрессии +def poly_rg_prediction(): + poly = PolynomialFeatures(degree=4, include_bias=False) # Создание характеристик полиномиальной модели (степень - 4, обнуление свободного члена - нет) + x_poly_train = poly.fit_transform(X_train) # Трансформация выборки обучения (добавление недостающих аргументов многочлена 4го порядка) + x_poly_test = poly.fit_transform(X_test) # Трансформация тестовой выборки (добавление недостающих аргументов многочлена 4го порядка) + ridge = Ridge(alpha=1.0) # Создание гребневой модели (уср. коэф - 1.0) + ridge.fit(x_poly_train, y_train) # Обучение модели + y_predict = ridge.predict(x_poly_test) # Решение задачи предсказания + + mid_square = np.round(np.sqrt(metrics.mean_squared_error(y_test, y_predict)), 3) # Рассчёт среднеквадратичной ошибки модели + det_kp = np.round(metrics.r2_score(y_test, y_predict), 2) # Рассчёт коэфициента детерминации модели + + return "Модель полиномиальной регрессии", y_predict, mid_square, det_kp + + +# Создание графиков поотдельности (для себя) +def make_plots(models): + i = 0 + for model in models: + plt.plot(y_test, c="red", label="\"y\" исходная") # Создание графика исходной функции + plt.plot(model[1], c="green", label="\"y\" предсказанная \n" + "Ср^2 = " + str(model[2]) + "\n" + "Кд = " + str(model[3])) # Создание графика предсказанной функции + plt.legend(loc='lower left') + plt.title(model[0]) + plt.savefig('static/' + str(i + 1) + '.png') + plt.close() + i += 1 + + +if __name__ == '__main__': + models = lr_prediction(), poly_lr_prediction(), poly_rg_prediction() + make_plots(models) + + fig, axs = plt.subplots(3, 1, layout='constrained') # Создание общего графика для сравнения моделей + i = 0 + for model in models: + fig.set_figwidth(6) + fig.set_figheight(10) + axs[i].set_title(model[0]) + axs[i].plot(y_test, c="red", label="\"y\" исходная") + axs[i].plot(model[1], c="green", label="\"y\" предсказанная \n" + "Ср^2 = " + str(model[2]) + "\n" + "Кд = " + str(model[3])) + axs[i].legend(loc='lower left') + i += 1 + plt.savefig('static/result.png') + + diff --git a/arutunyan_dmitry_lab_1/result.png b/arutunyan_dmitry_lab_1/result.png new file mode 100644 index 0000000..f609835 Binary files /dev/null and b/arutunyan_dmitry_lab_1/result.png differ diff --git a/gordeeva_anna_lab_1/1graf.jpg b/gordeeva_anna_lab_1/1graf.jpg deleted file mode 100644 index 1784faa..0000000 Binary files a/gordeeva_anna_lab_1/1graf.jpg and /dev/null differ diff --git a/gordeeva_anna_lab_1/2graf.jpg b/gordeeva_anna_lab_1/2graf.jpg deleted file mode 100644 index 5c7deb8..0000000 Binary files a/gordeeva_anna_lab_1/2graf.jpg and /dev/null differ diff --git a/gordeeva_anna_lab_1/3graf.jpg b/gordeeva_anna_lab_1/3graf.jpg deleted file mode 100644 index c26f736..0000000 Binary files a/gordeeva_anna_lab_1/3graf.jpg and /dev/null differ diff --git a/gordeeva_anna_lab_1/lab1.py b/gordeeva_anna_lab_1/lab1.py deleted file mode 100644 index de328ff..0000000 --- a/gordeeva_anna_lab_1/lab1.py +++ /dev/null @@ -1,66 +0,0 @@ -import streamlit as st -import numpy as np -from matplotlib import pyplot as plt -from matplotlib.colors import ListedColormap -from sklearn.model_selection import train_test_split -from sklearn.preprocessing import StandardScaler -from sklearn.datasets import make_moons, make_circles, make_classification -from sklearn.linear_model import Perceptron -from sklearn.neural_network import MLPClassifier -from sklearn.metrics import accuracy_score - -st.header("Лабораторная работа 1. Вариант 7") - -#Создаем данные -moon_dataset = make_moons(noise=0.3, random_state=0) -X, y = moon_dataset #Х это двумерный массив с признаками (координатами), а y - одномерный массив с 0 и 1.(Либо к 1 классу, либо к другому) -X = StandardScaler().fit_transform(X) #Данные нужно обязательно стандартизировать, для того, что бы один признак не перевешивал в обучении другой признак -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=42) #Делим на обучающую и тестовую выборку. Число выбираем для того, чтобы выборка при каждом старте не менялась - -def print_perceptron(perceptron): - # Обучение модели на обучающих данных - perceptron.fit(X_train, y_train) - - #Определение точности модели - y_pred = perceptron.predict(X_test)#На тестовой выборке получаем принадлежность к классу - accuracy = accuracy_score(y_test, y_pred) - st.write("Точность:", accuracy) - - #График с помощью Matplotlib - fig, ax = plt.subplots() - cm_bright = ListedColormap(['#FF0000', '#0000FF']) - cm_bright2 = ListedColormap(['#FFBBBB', '#BBBBFF']) - cmap = ListedColormap(['#FFBBBB', '#BBBBFF']) - - #Отрисовка градиента/фона - h = .02 # шаг регулярной сетки - x0_min, x0_max = X_train[:, 0].min() - .5, X_train[:, 0].max() + .5 #Определение границы множества по оси х - x1_min, x1_max = X_train[:, 1].min() - .5, X_train[:, 1].max() + .5 #Определение границы множества по оси y - #np.arange(start, stop, inter) позволяет создать последовательность числен в интервале от start до stop c интервалом/шагом inter - xx0, xx1 = np.meshgrid(np.arange(x0_min, x0_max, h), np.arange(x1_min, x1_max, h)) #получаем координатную матрицу из координатных векторов - Z = perceptron.predict(np.c_[xx0.ravel(), xx1.ravel()]) - Z = Z.reshape(xx0.shape) # Изменяем форму Z в соответствии с сеткой - # Применяем обученную модель к сетке точек и отображаем результат как цветовую карту - ax.contourf(xx0, xx1, Z, cmap=cmap, alpha=.8) - scatter_train = ax.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm_bright, marker='o', label='Обучающая выборка') - scatter_test = ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm_bright2, marker='x', label='Тестовая выборка') - ax.legend(handles=[scatter_train, scatter_test], labels=['Обучающая выборка', 'Тестовая выборка']) - st.pyplot(fig) - -# Создание объекта модели персептрона -on = st.toggle('Персептрон') -if on: - perceptron = Perceptron(max_iter=100, random_state=0) - print_perceptron(perceptron) - -# Создание объекта модели персептрона -on = st.toggle('Многослойный персептрон с 10-ю нейронами в скрытом слое (alpha = 0.01)') -if on: - perceptron = MLPClassifier(hidden_layer_sizes=(10,), alpha=0.01, max_iter=1000, random_state=0) - print_perceptron(perceptron) - -# Создание объекта модели персептрона -on = st.toggle('Многослойный персептрон с 100-а нейронами в скрытом слое (alpha = 0.01)') -if on: - perceptron = MLPClassifier(hidden_layer_sizes=(100,), alpha=0.01, max_iter=1000, random_state=0) - print_perceptron(perceptron) \ No newline at end of file diff --git a/gordeeva_anna_lab_1/readme.md b/gordeeva_anna_lab_1/readme.md deleted file mode 100644 index 6b1815c..0000000 --- a/gordeeva_anna_lab_1/readme.md +++ /dev/null @@ -1,63 +0,0 @@ -## Задание -Данные: make_moons (noise = 0.3, random_state = 0) - -Модели: -* Персептрон -* Многослойный персептрон с 10-ю нейронами в скрытом поле (alpha = 0.01) -* Многослойный персептрон с 100-а нейронами в скрытом поле (alpha = 0.01) - -## В чем различие каждой модели - -Персептрон: -* самая простая форма искусственной нейронной сети -* состоит из одного или нескольких нейронов -* только один слой нейронов -* разделяет данные линейно - -Многослойный персептрон с 10-ю/100-а нейронами в скрытом поле (alpha = 0.01) -* более сложная форма искусственной нейронной сети -* состоит из нескольких слоев, причем имеет один или несколько скрытых слоев -* способен решать задачи классификации, регрессии, обработки изображений, текста и т.д - -Общий вывод таков, что многослойный персептрон способен решать более сложные задачи, требующие нелинейных решений. - - -## Библиотеки -Streamlit. Предоставляет простой способ создания веб-приложений для визуализации данных. - -Numpy. Предоставляет возможность работать с массивами и матрицами. - -Matplotlib. Используется для создания графиков. - -Sklearn. Предоставляет инструменты и алгоритмы, которые упрощают задачи, связанные с машинным обучением. - -## Функционал -Предоставляет создание объекта для каждой модели персептрона. - -Создание данных с помощью функции make_moon c последующим -делением данных на обучающую и тестовую выборку. - -Метод print_perceptron, в котором происходит обучение модели, определение точности и отрисовка графика. - -## Запуск -Перед запуском необходимо запустить виртуальную среду venv. Так как я использую streamlit, то для запуска необходимо в терминал прописать следующую строку: -``` -streamlit run lab1.py -``` -Приложение развернется на локальном сервере и автоматически откроется в браузере. - -## Скриншоты работы программы -При запуске выглядит так: -![Alt text](win_start.jpg "Optional Title") - -Построенные графики - -![Alt text](1graf.jpg "Optional Title") - -![Alt text](2graf.jpg "Optional Title") - -![Alt text](3graf.jpg "Optional Title") - -## Вывод -В первой модели, как сказано выше, данные делятся линейно. Но точность разделения близка к 1, поэтому задача в данном случае решена. -В других моделях данные делятся нелинейно и чем выше кол-во нейронов, тем разбиение становится точнее. Но точность в обоих случаях одинаковая. \ No newline at end of file diff --git a/gordeeva_anna_lab_1/win_start.jpg b/gordeeva_anna_lab_1/win_start.jpg deleted file mode 100644 index a7d8a4c..0000000 Binary files a/gordeeva_anna_lab_1/win_start.jpg and /dev/null differ diff --git a/labs.jpg b/labs.jpg deleted file mode 100644 index 299cbd1..0000000 Binary files a/labs.jpg and /dev/null differ diff --git a/zavrazhnova_svetlana_lab_1/README.md b/zavrazhnova_svetlana_lab_1/README.md deleted file mode 100644 index efdcb74..0000000 --- a/zavrazhnova_svetlana_lab_1/README.md +++ /dev/null @@ -1,31 +0,0 @@ -### Задание: -Данные: make_classification (n_samples=500, n_features=2, n_redundant=0, n_informative=2, random_state=rs, n_clusters_per_class=1) - -Модели: -- Персептрон, -- Многослойный персептрон с 10-ю нейронами в скрытом слое (alpha = 0.01) -- Многослойный персептрон со 100-а нейронами в скрытом слое (alpha = 0.01) - -### как запустить лабораторную работу: -Лабораторная работа запускается в файле `zavrazhnova_svetlana_lab_1.py` через Run, должно запуститься диалоговое окно и вычисления в консоли - -### Технологии: -Библиотека Scikit-learn содержит множество наборов данных - -### Что делает лабораторная: -Выполнение кода выводит точность каждой модели (в консоль) и отображает графики с границами решений для каждой модели. - -В данном коде генерируются данные с использованием функции make_classification() из библиотеки scikit-learn. Генерируется набор данных с 500 примерами и 2 признаками. Классы точек представлены переменной y, которая содержит метки классов для каждой точки. В данном случае, сгенерировано два класса, обозначенных как 0 и 1. - -Визуализация данных и границ решения моделей выполняется с помощью функции scatter() и функции contourf() из библиотеки matplotlib. Функция scatter() отображает точки данных на графике, окрашивая их в соответствии с классами, заданными переменной y. - -Таким образом, графики помогают визуализировать данные, их классификацию и границы решения моделей, позволяя лучше понять, как модели принимают решение о классификации объектов. - -### Пример выходных значений: -Консоль: - -![результат в консоль](imgConsoleRes.png) - -Графики: - -![img.png](imgGraphicsRes.png) \ No newline at end of file diff --git a/zavrazhnova_svetlana_lab_1/imgConsoleRes.png b/zavrazhnova_svetlana_lab_1/imgConsoleRes.png deleted file mode 100644 index 3628841..0000000 Binary files a/zavrazhnova_svetlana_lab_1/imgConsoleRes.png and /dev/null differ diff --git a/zavrazhnova_svetlana_lab_1/imgGraphicsRes.png b/zavrazhnova_svetlana_lab_1/imgGraphicsRes.png deleted file mode 100644 index 7c9788f..0000000 Binary files a/zavrazhnova_svetlana_lab_1/imgGraphicsRes.png and /dev/null differ diff --git a/zavrazhnova_svetlana_lab_1/zavrazhnova_svetlana_lab_1.py b/zavrazhnova_svetlana_lab_1/zavrazhnova_svetlana_lab_1.py deleted file mode 100644 index e2fd9b8..0000000 --- a/zavrazhnova_svetlana_lab_1/zavrazhnova_svetlana_lab_1.py +++ /dev/null @@ -1,89 +0,0 @@ -import numpy as np -from sklearn.datasets import make_classification -from sklearn.model_selection import train_test_split -from sklearn.linear_model import Perceptron -from sklearn.neural_network import MLPClassifier -from sklearn.metrics import accuracy_score -from matplotlib import pyplot as plt - -#Задание случайного состояния -rs = 42 -#Генерируются 500 примеров с 2 признаками, 0 лишними признаками, 2 информативными признаками, -# random_state устанавливается в rs для воспроизводимости данных и n_clusters_per_class устанавливается в 1 для генерации одного кластера классов -X, y = make_classification(n_samples=500, n_features=2, n_redundant=0, n_informative=2, random_state=rs, n_clusters_per_class=1) - -# Разделение данных на обучающую и тестовую выборки -#test_size установлен на 0.4, что означает, что 40% данных будет использовано для тестирования. -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=rs) - -# Инициализация моделей -perceptron = Perceptron() -mlp_10 = MLPClassifier(hidden_layer_sizes=(10,), alpha=0.01, random_state=rs) -mlp_100 = MLPClassifier(hidden_layer_sizes=(100,), alpha=0.01, random_state=rs) - -# Обучение моделей -perceptron.fit(X_train, y_train) -mlp_10.fit(X_train, y_train) -mlp_100.fit(X_train, y_train) - -# Предсказание на тестовой выборке -y_pred_perceptron = perceptron.predict(X_test) -y_pred_mlp_10 = mlp_10.predict(X_test) -y_pred_mlp_100 = mlp_100.predict(X_test) - -# Оценка качества моделей, Оценка точности (accuracy) каждой модели сравнивается с истинными метками классов на тестовой выборке -accuracy_perceptron = accuracy_score(y_test, y_pred_perceptron) -accuracy_mlp_10 = accuracy_score(y_test, y_pred_mlp_10) -accuracy_mlp_100 = accuracy_score(y_test, y_pred_mlp_100) - -# Вывод результатов -print("Точность - Perceptron:", accuracy_perceptron) -print("Точность - MLP (10 neurons):", accuracy_mlp_10) -print("Точность - MLP (100 neurons):", accuracy_mlp_100) - -# Визуализация данных и границ решения моделей -#Определение интервала значений для графиков, чтобы включить все точки данных и оставить небольшую дополнительную поверхность вокруг границы графика -x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5 -y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5 -xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), - np.arange(y_min, y_max, 0.02)) - -#Предсказание класса для каждой точки в сетке графика и изменение формы результата, чтобы соответствовать размерам сетки -Z_perceptron = perceptron.predict(np.c_[xx.ravel(), yy.ravel()]) -Z_perceptron = Z_perceptron.reshape(xx.shape) - -Z_mlp_10 = mlp_10.predict(np.c_[xx.ravel(), yy.ravel()]) -Z_mlp_10 = Z_mlp_10.reshape(xx.shape) - -Z_mlp_100 = mlp_100.predict(np.c_[xx.ravel(), yy.ravel()]) -Z_mlp_100 = Z_mlp_100.reshape(xx.shape) - -#Визуализация данных и границ решения моделей на трех графиках. -# Границы решения отмечены заштрихованными областями, а точки данных на графике окрашены в соответствии с их классами -plt.figure(figsize=(12, 9)) -plt.subplot(221) -plt.contourf(xx, yy, Z_perceptron, alpha=0.8) -plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, edgecolors='k', alpha=0.6) -plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, edgecolors='k') -plt.title('Персептрон') -plt.xlabel('Признак 1') -plt.ylabel('Признак 2') - -plt.subplot(222) -plt.contourf(xx, yy, Z_mlp_10, alpha=0.8) -plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, edgecolors='k', alpha=0.6) -plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, edgecolors='k') -plt.title('MLP (10 нейронов)') -plt.xlabel('Признак 1') -plt.ylabel('Признак 2') - -plt.subplot(223) -plt.contourf(xx, yy, Z_mlp_100, alpha=0.8) -plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, edgecolors='k', alpha=0.6) -plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, edgecolors='k') -plt.title('MLP (100 нейронов)') -plt.xlabel('Признак 1') -plt.ylabel('Признак 2') - -plt.tight_layout() -plt.show() \ No newline at end of file diff --git a/zavrazhnova_svetlana_lab_2/README.md b/zavrazhnova_svetlana_lab_2/README.md deleted file mode 100644 index 95eecf7..0000000 --- a/zavrazhnova_svetlana_lab_2/README.md +++ /dev/null @@ -1,30 +0,0 @@ -### Задание по варианту -Лассо (Lasso),Сокращение признаков Случайными деревьями (Random Forest Regressor), Линейная корреляция (f_regression) - -### Как запустить лабораторную работу -ЛР запускается через файл `zavrazhnova_svetlana_lab_2.py` - -### Какие технологии использовали -импорт класса `MinMaxScaler`, выполняющего масштабирование данных до заданного диапазона (от 0 до 1). -Необходимость его использования объясняется следующим: каждая модель регрессии дает оценки -важности признаков в своем диапазоне. Для того чтобы найти признак с максимальной средней важностью по трем моделям, нам необходимо привести выданные ими оценки к одному виду. -Модели линейной регрессии, ридж-регрессии и лассо-регрессии из библиотеки `scikit-learn` - -### Что делает -Применение регрессионных моделей для определения важности признаков. - -Результат работы программы показывает ранжирование признаков по их значимости для задачи. Чем больше значение ранга, тем более значимый признак. -Полученные ранги можно использовать для отбора наиболее значимых признаков и сокращения размерности данных. - -### Примеры выходных значений - -![example program result](result.png) - -В данном случае, в соответствии с полученными результатами, можно сказать следующее: - -1. Признаки 'x4' и 'x14' имеют наивысшие ранги (больше 380), что указывает на их большую значимость в решении задачи. -2. Признаки 'x2' и 'x12' имеют средние ранги (от 170 до 180), что означает их среднюю значимость. -3. Признаки 'x1' и 'x11' имеют ранги около 120, что указывает на их относительную значимость. -4. Признаки 'x5', 'x8' и 'x7' имеют низкие ранги (от 5 до 17), что говорит о их низкой значимости. -5. Признаки 'x9', 'x3', 'x13', 'x10' и 'x6' имеют очень низкие ранги (меньше 3), что указывает на их минимальную значимость или наличие практически нулевых эффектов. - diff --git a/zavrazhnova_svetlana_lab_2/result.png b/zavrazhnova_svetlana_lab_2/result.png deleted file mode 100644 index 2bda0ed..0000000 Binary files a/zavrazhnova_svetlana_lab_2/result.png and /dev/null differ diff --git a/zavrazhnova_svetlana_lab_2/zavrazhnova_svetlana_lab_2.py b/zavrazhnova_svetlana_lab_2/zavrazhnova_svetlana_lab_2.py deleted file mode 100644 index 693ef46..0000000 --- a/zavrazhnova_svetlana_lab_2/zavrazhnova_svetlana_lab_2.py +++ /dev/null @@ -1,54 +0,0 @@ -from sklearn.linear_model import Lasso -from sklearn.ensemble import RandomForestRegressor -from sklearn.feature_selection import f_regression -from sklearn.preprocessing import MinMaxScaler -import numpy as np - -np.random.seed(0) -size = 750 -#входные данные. -X = np.random.uniform(0, 1, (size, 14)) - -#Генерируется целевая переменная Y на основе математической функции от входных данных X. -Y = (10 * np.sin(np.pi*X[:,0]*X[:,1]) + 20*(X[:,2] - .5)**2 + - 10*X[:,3] + 5*X[:,4]**5 + np.random.normal(0,1)) -X[:,10:] = X[:,:4] + np.random.normal(0, .025, (size,4)) - -names = ["x%s" % i for i in range(1,15)] -#Создается пустой словарь для хранения рангов признаков -ranks = {} - -#Создается экземпляр модели лассо-регрессии -lasso = Lasso(alpha=.05) -#Модель подгоняется под входные данные X и целевую переменную Y -lasso.fit(X, Y) -ranks["Lasso"] = dict(zip(names, lasso.coef_)) - -rf = RandomForestRegressor(n_estimators=100, random_state=0) -rf.fit(X, Y) -ranks["Random Forest"] = dict(zip(names, rf.feature_importances_)) - -f, _ = f_regression(X, Y, center=True) -ranks["f_regression"] = dict(zip(names, f)) - -def rank_to_dict(ranks, names): - ranks = np.abs(ranks) - minmax = MinMaxScaler() - #масштабирование рангов с помощью MinMaxScaler - ranks = minmax.fit_transform(np.array(ranks).reshape(-1, 1)).ravel() - ranks = map(lambda x: round(x, 2), ranks) - return dict(zip(names, ranks)) - -#словарь для хранения средних рангов признаков -mean = {} -for key, value in ranks.items(): - for item in value.items(): - if item[0] not in mean: - mean[item[0]] = 0 - mean[item[0]] += item[1] - -sorted_mean = sorted(mean.items(), key=lambda x: x[1], reverse=True) -result = {} -for item in sorted_mean: - result[item[0]] = item[1] - print(f'{item[0]}: {item[1]}') diff --git a/МетодичкаМИИ_МО-1.pdf b/МетодичкаМИИ_МО-1.pdf deleted file mode 100644 index 43c4192..0000000 Binary files a/МетодичкаМИИ_МО-1.pdf and /dev/null differ