diff --git a/shadaev_anton_lab_2/README.md b/shadaev_anton_lab_2/README.md
index 00592cb..61236ec 100644
--- a/shadaev_anton_lab_2/README.md
+++ b/shadaev_anton_lab_2/README.md
@@ -1 +1,45 @@
-# IIS_2023_1
\ No newline at end of file
+# IIS_2023_1
+
Задание
+
+Используя код из [1](пункт «Решение задачи ранжирования признаков», стр. 205), выполните ранжирование признаков с помощью указанных по варианту моделей. Отобразите получившиеся значения\оценки каждого признака каждым методом\моделью и среднюю оценку. Проведите анализ получившихся результатов. Какие четыре признака оказались самыми важными по среднему значению? (Названия\индексы признаков и будут ответом на задание).
+
+
+9.
+
+ - Лассо (Lasso)
+ - Сокращение признаков случайными деревьями (Random Forest Regressor)
+ - Линейная корреляция (f-regression)
+
+
+Способок запуска программы
+Запустить скрипт shadaev_anton_lab_2/main.py, после чего в консоль будут выведены результаты выполнения программы.
+Стек технологий
+
+
+ - NumPy - это библиотека Python, предоставляющая поддержку для больших, многомерных массивов и матриц, а также набор функций для их манипуляции и обработки.
+ - Sklearn - предоставляет ряд инструментов для моделирования данных, включая классификацию, регрессию, кластеризацию и уменьшение размерности.
+
+
+Описание кода
+
+В этом коде мы генерируем 500 наблюдений с 15 признаками. Затем создается словарь для хранения рангов признаков для каждого метода (Lasso, Random Forest, f_regression).
+
+Функция calculate_ranks() используется для вычисления рангов признаков для каждого метода. Для этого она обучает модель (Lasso или Random Forest) на данных и затем возвращает словарь, где ключами являются имена признаков, а значениями - коэффициенты признаков модели.
+
+Если используется метод f_regression, функция возвращает словарь с f-статистиками признаков.
+
+Затем функция create_normalized_rank_dict() используется для нормализации рангов признаков. Она принимает ранги и имена признаков, приводит ранги к абсолютному значению, нормализует их с использованием MinMaxScaler из sklearn.preprocessing и возвращает словарь, где ключами являются имена признаков, а значениями - нормализованные ранги.
+
+Наконец, код вычисляет среднее значение рангов для каждого признака, сортирует признаки по средним значениям рангов в порядке убывания и выводит признаки и их ранги.
+
+Результат:
+
+
+
+ - x4, x14 - высшая значимость
+ - x2, x12 - средняя значимость
+ - x1, x11 - значимость ниже среднего
+ - x5, x15 - низкая значимость
+ - x3, x6, x7, x8, x9, x10, x13 - очень низкая значимость
+
+
\ No newline at end of file
diff --git a/shadaev_anton_lab_2/img.png b/shadaev_anton_lab_2/img.png
new file mode 100644
index 0000000..b0b5e3d
Binary files /dev/null and b/shadaev_anton_lab_2/img.png differ
diff --git a/shadaev_anton_lab_2/main.py b/shadaev_anton_lab_2/main.py
index e0369f7..9f81af7 100644
--- a/shadaev_anton_lab_2/main.py
+++ b/shadaev_anton_lab_2/main.py
@@ -1 +1,66 @@
-print('test')
\ No newline at end of file
+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 = 500
+X = np.random.uniform(0, 1, (size, 15))
+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[:, :5] + np.random.normal(0, .025, (size, 5))
+
+# Имена признаков
+names = ["x%s" % i for i in range(1, 16)]
+
+# Ранги признаков
+ranks = {}
+
+
+# Функция для расчета рангов
+def calculate_ranks(method, X, Y):
+ if method == "Lasso":
+ model = Lasso(alpha=0.5)
+ elif method == "Random Forest":
+ model = RandomForestRegressor(n_estimators=100)
+ elif method == "f_regression":
+ f_scores, _ = f_regression(X, Y)
+ return dict(zip(names, f_scores))
+ model.fit(X, Y)
+ return dict(zip(names, model.coef_ if method == "Lasso" else model.feature_importances_))
+
+
+# Ранг для каждого метода
+for method in ["Lasso", "Random Forest", "f_regression"]:
+ ranks[method] = calculate_ranks(method, X, Y)
+
+
+# Нормализация рангов
+def create_normalized_rank_dict(ranks, names):
+ ranks = np.abs(ranks)
+ minmax = MinMaxScaler()
+ ranks = minmax.fit_transform(
+ np.array(ranks).reshape(15, 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]}')