diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 21abd8a..42c41de 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -118,9 +118,11 @@
-
+
+
+
diff --git a/savenkov_alexander_lab_2/.idea/.gitignore b/savenkov_alexander_lab_2/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/savenkov_alexander_lab_2/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/savenkov_alexander_lab_2/.idea/.name b/savenkov_alexander_lab_2/.idea/.name
new file mode 100644
index 0000000..aa15e3e
--- /dev/null
+++ b/savenkov_alexander_lab_2/.idea/.name
@@ -0,0 +1 @@
+app.py
\ No newline at end of file
diff --git a/savenkov_alexander_lab_2/.idea/Lab_2_IIS.iml b/savenkov_alexander_lab_2/.idea/Lab_2_IIS.iml
new file mode 100644
index 0000000..aee9ef2
--- /dev/null
+++ b/savenkov_alexander_lab_2/.idea/Lab_2_IIS.iml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/savenkov_alexander_lab_2/.idea/discord.xml b/savenkov_alexander_lab_2/.idea/discord.xml
new file mode 100644
index 0000000..30bab2a
--- /dev/null
+++ b/savenkov_alexander_lab_2/.idea/discord.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/savenkov_alexander_lab_2/.idea/inspectionProfiles/profiles_settings.xml b/savenkov_alexander_lab_2/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/savenkov_alexander_lab_2/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/savenkov_alexander_lab_2/.idea/misc.xml b/savenkov_alexander_lab_2/.idea/misc.xml
new file mode 100644
index 0000000..a377feb
--- /dev/null
+++ b/savenkov_alexander_lab_2/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/savenkov_alexander_lab_2/.idea/modules.xml b/savenkov_alexander_lab_2/.idea/modules.xml
new file mode 100644
index 0000000..05f122b
--- /dev/null
+++ b/savenkov_alexander_lab_2/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/savenkov_alexander_lab_2/app.py b/savenkov_alexander_lab_2/app.py
new file mode 100644
index 0000000..2c0384c
--- /dev/null
+++ b/savenkov_alexander_lab_2/app.py
@@ -0,0 +1,94 @@
+from flask import Flask, request, render_template
+from sklearn.linear_model import LinearRegression
+from sklearn.feature_selection import RFE
+from sklearn.ensemble import RandomForestRegressor
+from sklearn.preprocessing import MinMaxScaler
+import pandas as pd
+import numpy as np
+
+app = Flask(__name__)
+
+# Генерируем случайные данные
+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, size))
+X[:, 10:] = X[:, :4] + np.random.normal(0, .025, (size, 4))
+
+# Определяем и обучаем модели
+lr = LinearRegression()
+rfe = RFE(lr, n_features_to_select=2)
+rfe.fit(X, Y)
+
+rf = RandomForestRegressor(n_estimators=100)
+rf.fit(X, Y)
+
+# Словарь для хранения результатов оценок
+feature_rankings = {}
+
+
+# Функция для ранжирования признаков с использованием линейной регрессии
+def rank_lr():
+ lr.fit(X, Y)
+ coef = lr.coef_
+ ranking = np.abs(coef)
+ ranking = min_max_scale(ranking)
+ return ranking
+
+
+# Функция для ранжирования признаков с использованием RFE
+def rank_rfe():
+ ranking = rfe.ranking_
+ ranking = min_max_scale(ranking)
+ return ranking
+
+
+# Функция для ранжирования признаков с использованием Random Forest
+def rank_rf():
+ importances = rf.feature_importances_
+ importances = min_max_scale(importances)
+ return importances
+
+
+# Функция для масштабирования оценок в диапазоне [0, 1]
+def min_max_scale(arr):
+ scaler = MinMaxScaler()
+ scaled = scaler.fit_transform(np.array(arr).reshape(-1, 1))
+ return scaled
+
+
+# Функция для выполнения ранжирования и вычисления средней оценки
+def rank_features():
+ feature_rankings['Linear Regression'] = rank_lr()
+ feature_rankings['RFE'] = rank_rfe()
+ feature_rankings['Random Forest'] = rank_rf()
+ # Средняя оценка
+ mean_ranking = np.mean(list(feature_rankings.values()), axis=0)
+ feature_rankings['Mean Ranking'] = mean_ranking
+
+ # Получите индексы 4 самых важных признаков
+ top_4_indices = np.argsort(mean_ranking)[-4:][::-1]
+
+ # Получите названия признаков по индексам
+ top_4_feature_names = [f'Признак {i + 1}' for i in top_4_indices]
+
+ # Добавьте значения X и Y в контекст
+ return {
+ 'feature_rankings': feature_rankings,
+ 'X_values': X.tolist(),
+ 'Y_values': Y.tolist(),
+ 'top_4_feature_names': top_4_feature_names # Добавляем самые важные признаки
+ }
+
+
+@app.route('/', methods=['GET', 'POST'])
+def index():
+ if request.method == 'POST':
+ context = rank_features()
+ return render_template('index.html', **context)
+ return render_template('index.html', feature_rankings=feature_rankings)
+
+
+if __name__ == '__main__':
+ app.run(debug=True)
diff --git a/savenkov_alexander_lab_2/readme.md b/savenkov_alexander_lab_2/readme.md
new file mode 100644
index 0000000..60457cb
--- /dev/null
+++ b/savenkov_alexander_lab_2/readme.md
@@ -0,0 +1,60 @@
+Общее задание:
+Используя код из [1] (пункт «Решение задачи ранжирования признаков»,
+стр. 205), выполните ранжирование признаков с помощью указанных по
+варианту моделей. Отобразите получившиеся значения\оценки каждого
+признака каждым методом\моделью и среднюю оценку. Проведите анализ
+получившихся результатов. Какие четыре признака оказались самыми
+45
+важными по среднему значению? (Названия\индексы признаков и будут
+ответом на задание).
+
+Задание по вариантам 2 вариант (22), взял 2 т.к. всего 20 вариант задания:
+2. Линейная регрессия (LinearRegression), Рекурсивное сокращение
+признаков (Recursive Feature Elimination – RFE), Сокращение признаков
+Случайными деревьями (Random Forest Regressor)
+
+Запуск приложения осуществляется запуском файла app.py
+
+Использованные технологии:
+Среда программирования Pycharm
+Версия языка python: 3.11
+Flask: Flask - это микрофреймворк для создания веб-приложений на языке Python. Он используется для создания веб-интерфейса и обработки HTTP-запросов и ответов.
+
+scikit-learn: Scikit-learn - это библиотека для машинного обучения в Python. В вашей программе она используется для обучения моделей машинного обучения, таких как линейная регрессия, RFE и случайный лес, а также для выполнения ранжирования признаков.
+
+NumPy: NumPy - это библиотека для научных вычислений в Python. Она используется для работы с массивами и матрицами данных.
+
+Pandas: Pandas - это библиотека для анализа данных. Она используется для создания и обработки данных, включая таблицы и структуры данных.
+
+MinMaxScaler: Это функция из библиотеки Scikit-learn, используемая для масштабирования оценок признаков в диапазоне [0, 1].
+
+HTML и шаблоны Jinja2: HTML - это язык разметки для создания веб-страниц, а Jinja2 - это шаблонный движок для вставки данных в HTML-шаблоны.
+
+HTTP и формы: Ваше приложение Flask обрабатывает HTTP-запросы и использует форму
+
+
Результаты ранжирования признаков
+
+
+
Метод
+
Признак 1
+
Признак 2
+
+
+
+
Линейная регрессия
+
{{ feature_rankings['Linear Regression'][0] if 'Linear Regression' in feature_rankings else '' }}
+
{{ feature_rankings['Linear Regression'][1] if 'Linear Regression' in feature_rankings else '' }}
+
+
+
RFE
+
{{ feature_rankings['RFE'][0] if 'RFE' in feature_rankings else '' }}
+
{{ feature_rankings['RFE'][1] if 'RFE' in feature_rankings else '' }}
+
+
+
Случайные деревья
+
{{ feature_rankings['Random Forest'][0] if 'Random Forest' in feature_rankings else '' }}
+
{{ feature_rankings['Random Forest'][1] if 'Random Forest' in feature_rankings else '' }}
+
+
+
Средняя оценка
+
{{ feature_rankings['Mean Ranking'][0] if 'Mean Ranking' in feature_rankings else '' }}
+
{{ feature_rankings['Mean Ranking'][1] if 'Mean Ranking' in feature_rankings else '' }}