diff --git a/volkov_rafael_lab_2/app.py b/volkov_rafael_lab_2/app.py
new file mode 100644
index 0000000..91dc022
--- /dev/null
+++ b/volkov_rafael_lab_2/app.py
@@ -0,0 +1,96 @@
+from flask import Flask, request, render_template
+from sklearn.linear_model import Lasso, LinearRegression
+from sklearn.feature_selection import RFE
+from sklearn.ensemble import RandomForestRegressor
+from sklearn.preprocessing import MinMaxScaler
+import numpy as np
+
+app = Flask(__name__)
+
+# Generate random data
+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))
+
+# Define and train models
+lasso = Lasso(alpha=0.1) # Example alpha value, you can adjust
+rfe = RFE(estimator=LinearRegression(), n_features_to_select=1)
+rf_regressor = RandomForestRegressor(n_estimators=100, random_state=0)
+
+# Number of bootstrap samples
+n_bootstrap = 100
+
+# Dictionary to store rankings
+feature_rankings = {}
+
+
+# Function to rank features using Lasso
+def rank_lasso():
+ lasso.fit(X, Y)
+ coef = lasso.coef_
+ ranking = np.abs(coef)
+ ranking = min_max_scale(ranking)
+ return ranking
+
+
+# Function to rank features using RFE
+def rank_rfe():
+ rfe.fit(X, Y)
+ ranking = rfe.ranking_
+ ranking = min_max_scale(ranking)
+ return ranking
+
+
+# Function to rank features using Random Forest Regressor
+def rank_random_forest_regressor():
+ rf_regressor.fit(X, Y)
+ ranking = rf_regressor.feature_importances_
+ ranking = min_max_scale(ranking)
+ return ranking
+
+
+# Function to scale scores to the range [0, 1]
+def min_max_scale(arr):
+ scaler = MinMaxScaler()
+ scaled = scaler.fit_transform(np.array(arr).reshape(-1, 1))
+ return scaled
+
+
+# Function to perform ranking and compute mean ranking
+def rank_features():
+ feature_rankings['Lasso'] = rank_lasso()
+ feature_rankings['RFE'] = rank_rfe()
+ feature_rankings['Random Forest Regressor'] = rank_random_forest_regressor()
+
+ # Mean ranking
+ mean_ranking = np.mean(list(feature_rankings.values()), axis=0)
+ feature_rankings['Mean Ranking'] = mean_ranking
+
+ # Get indices of the top 4 most important features
+ top_4_indices = np.argsort(mean_ranking)[-4:][::-1]
+
+ # Get feature names based on indices
+ top_4_feature_names = [f'Feature {i + 1}' for i in top_4_indices]
+
+ # Add X and Y values to the context
+ return {
+ 'feature_rankings': feature_rankings,
+ 'X_values': X[:, top_4_indices].tolist(),
+ 'Y_values': Y.tolist(),
+ 'top_4_feature_names': top_4_feature_names # Add the most important features
+ }
+
+
+@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/volkov_rafael_lab_2/readme.md b/volkov_rafael_lab_2/readme.md
new file mode 100644
index 0000000..888a8d9
--- /dev/null
+++ b/volkov_rafael_lab_2/readme.md
@@ -0,0 +1,28 @@
+Общее задание:Используя код из [1] (пункт «Решение задачи ранжирования признаков», стр. 205), выполните ранжирование признаков с помощью указанных по варианту моделей. Отобразите получившиеся значения\оценки каждого признака каждым методом\моделью и среднюю оценку. Проведите анализ получившихся результатов. Какие четыре признака оказались самыми важными по среднему значению? (Названия\индексы признаков и будут
+ответом на задание).
+
+8 вариант:
+Лассо (Lasso), Рекурсивное сокращение признаков (Recursive
+Feature Elimination – RFE), Сокращение признаков Случайными деревьями
+(Random Forest Regressor)
+
+Запуск через файл app.py
+
+Технологии:
+
+Flask: веб-фреймворк для Python, используется для создания веб-приложения.
+scikit-learn: библиотека машинного обучения для Python, в данном случае, используется для реализации методов машинного обучения, таких как Lasso, RFE и Random Forest Regressor.
+NumPy: библиотека для выполнения вычислений с массивами и матрицами в Python.
+Описание работы программы:
+
+Генерация случайных данных X и Y.
+Обучение моделей машинного обучения (Lasso, RFE, Random Forest Regressor) на сгенерированных данных.
+Ранжирование признаков с использованием различных методов.
+Визуализация результатов ранжирования и отображение наиболее важных признаков.
+Входные данные:
+
+X: массив случайных данных размером (750, 14).
+Y: массив случайных данных размером (750,).
+Выходные данные:
+
+Веб-страница с результатами ранжирования признаков для каждого метода, списком самых важных признаков и таблицами значений X и Y.
\ No newline at end of file
diff --git a/volkov_rafael_lab_2/templates/index.html b/volkov_rafael_lab_2/templates/index.html
new file mode 100644
index 0000000..9321ca3
--- /dev/null
+++ b/volkov_rafael_lab_2/templates/index.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+ Feature Ranking
+
+
+ Feature Ranking
+
+
+ Результаты ранжирования признаков
+
+
+ Метод |
+ Признак 1 |
+ Признак 2 |
+ Признак 3 |
+ Признак 4 |
+
+
+ {% for method, ranking in feature_rankings.items() %}
+
+ {{ method }} |
+ {% for value in ranking[:4] %}
+
+ {% if value is iterable %}
+ {% for item in value %}
+ {{ item|round(2) }}{% if not loop.last %},{% endif %}
+ {% endfor %}
+ {% else %}
+ {{ value|round(2) }}
+ {% endif %}
+ |
+ {% endfor %}
+
+ {% endfor %}
+
+
+ Самые важные признаки
+
+ {% for feature_name in top_4_feature_names %}
+ - {{ feature_name }}
+ {% endfor %}
+
+
+ Значения X
+
+
+ {% for col_num in range(4) %}
+ Признак {{ col_num + 1 }} |
+ {% endfor %}
+
+ {% for row in X_values %}
+
+ {% for value in row %}
+
+ {% if value is iterable %}
+ {% for item in value %}
+ {{ item|round(2) }}{% if not loop.last %},{% endif %}
+ {% endfor %}
+ {% else %}
+ {{ value|round(2) }}
+ {% endif %}
+ |
+ {% endfor %}
+
+ {% endfor %}
+
+
+ Значения Y
+
+
+ Y |
+
+ {% for value in Y_values %}
+
+ {{ value|round(2) }} |
+
+ {% endfor %}
+
+
+