From cc1802b4f0dfd1a4dcc1fcc5351d6245cb873b68 Mon Sep 17 00:00:00 2001
From: altteam
Date: Wed, 22 Nov 2023 22:52:44 +0400
Subject: [PATCH] laba 2 ready!!!
---
verina_daria_lab_2/README.md | 35 ++++++++++++++++
verina_daria_lab_2/main.py | 71 +++++++++++++++++++++++++++++++++
verina_daria_lab_2/result1.png | Bin 0 -> 17643 bytes
verina_daria_lab_2/result2.png | Bin 0 -> 22043 bytes
4 files changed, 106 insertions(+)
create mode 100644 verina_daria_lab_2/README.md
create mode 100644 verina_daria_lab_2/main.py
create mode 100644 verina_daria_lab_2/result1.png
create mode 100644 verina_daria_lab_2/result2.png
diff --git a/verina_daria_lab_2/README.md b/verina_daria_lab_2/README.md
new file mode 100644
index 0000000..e037536
--- /dev/null
+++ b/verina_daria_lab_2/README.md
@@ -0,0 +1,35 @@
+# IIS_2023_1
+Задание
+
+Используя код из [1](пункт «Решение задачи ранжирования признаков», стр. 205), выполните ранжирование признаков с помощью указанных по варианту моделей. Отобразите получившиеся значения\оценки каждого признака каждым методом\моделью и среднюю оценку. Проведите анализ получившихся результатов. Какие четыре признака оказались самыми важными по среднему значению? (Названия\индексы признаков и будут ответом на задание).
+
+
+7 Вариант.
+
+ - Лассо (Lasso)
+ - Случайное лассо (RandomizedLasso)
+ - Рекурсивное сокращение признаков (Recursive Feature Elimination –RFE)
+
+Как запустить программу
+Запустить скрипт verina_daria_lab_2/main.py, после чего в консоль будут выведены результаты выполнения программы.
+Стек технологий
+
+
+ - NumPy - это библиотека Python, предоставляющая поддержку для больших, многомерных массивов и матриц, а также набор функций для их манипуляции и обработки.
+ - Sklearn - предоставляет ряд инструментов для моделирования данных, включая классификацию, регрессию, кластеризацию и уменьшение размерности.
+ - pandas - программная библиотека на языке Python для обработки и анализа данных.
+
+
+Описание кода
+
+Программа выполняет ранжирование и сравнение признаков с использованием трех различных методов: LassoCV, Lasso и Random Forest для последующего их ранжирования и обрабатывает тремя моделями по варианту.
+Таким образом можно легко определить наиважнейшие признаки.
+
+Результат:
+
+
+
+
+ - Вывод: по среднему значению самыми важными признаками являются 2, 4, 12 и 13 признаки
+
+
\ No newline at end of file
diff --git a/verina_daria_lab_2/main.py b/verina_daria_lab_2/main.py
new file mode 100644
index 0000000..339b6df
--- /dev/null
+++ b/verina_daria_lab_2/main.py
@@ -0,0 +1,71 @@
+from sklearn.linear_model import LassoCV
+from sklearn.ensemble import RandomForestRegressor
+from sklearn.feature_selection import RFE
+from sklearn.preprocessing import MinMaxScaler
+import numpy as np
+import pandas as pd
+
+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))
+
+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))
+
+lasso_cv = LassoCV(alphas=np.linspace(0.001, 1, 100), cv=5)
+lasso_cv.fit(X, Y)
+
+rf = RandomForestRegressor(n_estimators=100)
+rfe = RFE(estimator=rf, n_features_to_select=1, step=1)
+rfe.fit(X, Y)
+
+# названия признаков
+names = ["x%s" % i for i in range(1, 15)]
+
+# Stable Randomized Lasso Simulation
+n_resampling = 200
+rlasso_coefs = np.zeros((X.shape[1], n_resampling))
+for i in range(n_resampling):
+ Y_permuted = np.random.permutation(Y)
+ rlasso = LassoCV(alphas=np.linspace(0.001, 1, 100), cv=5)
+ rlasso.fit(X, Y_permuted)
+ rlasso_coefs[:, i] = rlasso.coef_
+
+rlasso_scores = np.std(rlasso_coefs, axis=1)
+
+# словарь для ранжирования
+ranks = {"Lasso": rank_to_dict(lasso_cv.coef_, names),
+ "RFE": rank_to_dict(rfe.ranking_, names),
+ "RandomizedLassoSim": rank_to_dict(rlasso_scores, names)}
+
+mean = {}
+for method, values in ranks.items():
+ for feature, score in values.items():
+ # Если элемента с текущим ключом в mean нет - добавляем
+ if feature not in mean:
+ mean[feature] = 0
+ # Суммируем значения по каждому ключу-имени признака
+ mean[feature] += score
+df_ranks = pd.DataFrame(ranks)
+
+# Выводим ранжирование
+print("ПО КАЖДОМУ МЕТОДУ:")
+print(df_ranks)
+
+# Находим среднее по каждому признаку
+for feature, score in mean.items():
+ mean[feature] = round(score / len(ranks), 2)
+
+# Отсортированные средние значени
+mean = sorted(mean.items(), key=lambda x: x[1], reverse=True)
+print("СРЕДНИЕ")
+print(mean)
diff --git a/verina_daria_lab_2/result1.png b/verina_daria_lab_2/result1.png
new file mode 100644
index 0000000000000000000000000000000000000000..9479691ae923ab3bdee9de86d9dc78e0d6bf6ffd
GIT binary patch
literal 17643
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