From 2506e7cd95c1be6b082e7e996ba172873aa651b8 Mon Sep 17 00:00:00 2001 From: Alina5757 <445390@mail.ru> Date: Wed, 15 Nov 2023 16:54:40 +0400 Subject: [PATCH] zhukova_alina_lab_2 is ready --- zhukova_alina_lab_2/flask-server.py | 139 +++++++++++++++++++++++++++ zhukova_alina_lab_2/img_screen_1.png | Bin 0 -> 33238 bytes zhukova_alina_lab_2/readme.md | 42 ++++++++ 3 files changed, 181 insertions(+) create mode 100644 zhukova_alina_lab_2/flask-server.py create mode 100644 zhukova_alina_lab_2/img_screen_1.png create mode 100644 zhukova_alina_lab_2/readme.md diff --git a/zhukova_alina_lab_2/flask-server.py b/zhukova_alina_lab_2/flask-server.py new file mode 100644 index 0000000..c872a23 --- /dev/null +++ b/zhukova_alina_lab_2/flask-server.py @@ -0,0 +1,139 @@ +import pandas +import numpy as np +from flask import Flask +from sklearn.feature_selection import RFE +from sklearn.linear_model import Lasso, LinearRegression +from sklearn.preprocessing import MinMaxScaler + +app = Flask(__name__) + + +@app.route("/") +def home(): + return "" \ + "

Жукова Алина ПИбд-41

" \ + "

Лабораторная работа №2

" \ + "" \ + "" \ + "
" \ + "
" \ + "" \ + "
" \ + "
" \ + "" + +# Ранжирование признаков +# Линейная регрессия, Лассо, Рекурсивное сокращение признаков +# Отобразить оценки/значения каждого признака каждым методом, и среднюю оценку +# 4 самых важных признака (индексы/названия) +@app.route("/k4_1_task_2", methods=['GET']) +def k4_1_task_2(): + # Генерация даных + np.random.seed(0) + size = 750 + X = np.random.uniform(0, 1, (size, 14)) + # Функция выход: регрессионная проблема Фридмана + 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)) + + linear_Regr = LinearRegression() + linear_Regr.fit(X, Y) + + lasso = Lasso(alpha=.05) + lasso.fit(X, Y) + + recurs_sokr_RFE = RFE(linear_Regr, n_features_to_select=1) + recurs_sokr_RFE.fit(X, Y) + + new_RFE = [] + elem_ind = 0 + for value in recurs_sokr_RFE.ranking_: + new_RFE.append(recurs_sokr_RFE.ranking_.max() - value + 1) + elem_ind += 1 + + + names = ["x%s" % i for i in range(1, 15)] + + ranks = {} + ranks["Linear"] = rank_to_dict(linear_Regr.coef_, names) + ranks["Lasso"] = rank_to_dict(lasso.coef_, names) + ranks["RFE"] = rank_to_dict(np.array(new_RFE), names) + + mean = {} + # Пройти по словарю + for key, value in ranks.items(): + # Пройти по списку значений которые являются парой имя:оценка + for item in value.items(): + # Имя = ключ для mean + if(item[0] not in mean): + mean[item[0]] = 0 + mean[item[0]] += item[1] + + for key, value in mean.items(): + res = value/len(ranks) + mean[key] = round(res, 2) + + mean_1 = [None, None] + mean_2 = [None, None] + mean_3 = [None, None] + mean_4 = [None, None] + + for key, value in mean.items(): + if(mean_1[0] == None or value >= mean_1[0]): + mean_4 = mean_3 + mean_3 = mean_2 + mean_2 = mean_1 + mean_1 = [value, key] + else : + if (mean_2[0] == None or value >= mean_2[0]): + mean_4 = mean_3 + mean_3 = mean_2 + mean_2 = [value, key] + else: + if (mean_3[0] == None or value >= mean_3[0]): + mean_4 = mean_3 + mean_3 = [value, key] + else: + if (mean_4[0] == None or value >= mean_4[0]): + mean_4 = [value, key] + + mean_mass = [] + mass_linear = [] + mass_lasso = [] + mass_RFE = [] + for key, value in mean.items(): + mean_mass.append(value) + for key, value in ranks['Linear'].items(): + mass_linear.append(value) + for key, value in ranks['Lasso'].items(): + mass_lasso.append(value) + for key, value in ranks['RFE'].items(): + mass_RFE.append(value) + + data = {"Linear": mass_linear, + "Lasso": mass_lasso, + "RFE": mass_RFE, + "Mean": mean_mass} + df = pandas.DataFrame(data, index=names) + + return "" \ + "

Ранжирование признаков

" \ + "

Вариант 10. Линейная регрессия, Лассо, Рекурсивное сокращение признаков

" \ + "

Отобразить оценки/значения каждого признака каждым методом, и среднюю оценку

" \ + "

4 самых важных признака: 1) " + mean_1[1] + "; 2) " + mean_2[1] + "; 3) " + mean_3[1] + "; 4) " + mean_4[1] + "

" \ + "
" + df.to_html() + "
" \ + "" + +def rank_to_dict(ranks, names): + ranks = np.abs(ranks) + + minmax = MinMaxScaler() + + ranks = minmax.fit_transform(np.array(ranks).reshape(14, 1)).ravel() + ranks = map(lambda x: round(x, 2), ranks) + return dict(zip(names, ranks)) + +if __name__ == "__main__": + app.run(debug=True) \ No newline at end of file diff --git a/zhukova_alina_lab_2/img_screen_1.png b/zhukova_alina_lab_2/img_screen_1.png new file mode 100644 index 0000000000000000000000000000000000000000..88ae6497fb1c4951598eb624996ba3a9867265d3 GIT binary patch literal 33238 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 z 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 literal 0 HcmV?d00001 diff --git a/zhukova_alina_lab_2/readme.md b/zhukova_alina_lab_2/readme.md new file mode 100644 index 0000000..a7f9b9c --- /dev/null +++ b/zhukova_alina_lab_2/readme.md @@ -0,0 +1,42 @@ +## Задание +Выполнить ранжирование признаков с помощью указанных по варианту моделей. +Отобразить получившиеся значения\оценки каждого признака каждым методом\моделью и среднюю оценку. +Провести анализ получившихся результатов. +Указать самые значимые четыре признака по среднему значению + +Вариант №10 + +Методы: ++ Линейная регрессия ++ Лассо ++ Рекурсивное сокращение признаков + +## Используемые технологии +В лабораторной были использованы библиотеки: ++ numpy - позволяет работать с массивами и матрицами ++ pandas - позволяет работать с наборами данных ++ sklearn - используется для работы с моделями и методами машинного обучения ++ Flask - предоставляет способ быстрого создания веб-страниц для визуализации работы приложения + +## Используемые компоненты ++ LinearRegression - библиотечная реализация модели линейной регрессии ++ Lasso - модификация линейной регрессии ++ RFE - модель рекурсивноего исключения признаков + +## Как запустить +Запустить файл flask-server, который поднимет локальный сервер +и позволит обратиться к программе через браузер по ссылке [http://127.0.0.1:5000/](http://127.0.0.1:5000/) + +## Что делает программа +Генерирует набор данных с 14 признаками размером 750, делит его на обучающую и тестовую выборки. +По очереди обучает на данных обучающей выборки 3 модели: +модель линейной регрессии, модель лассо и модель рекурсивного сокращения признаков. + +После обучения из каждой модели берутся оценки значимостей признаков. +Исходя из полученных оценок высчитываются средние оценки для признаков, +полученные данные отражаеются в виде таблицы. Указываются самые значимые 4 признака + +## Скриншоты работы программы + +Полученные оценки значимости признаков +![img.png](img_screen_1.png)