From 3a68c16a44f2365e59cf93b56075a1f24401a850 Mon Sep 17 00:00:00 2001 From: vladg Date: Thu, 26 Oct 2023 11:49:09 +0400 Subject: [PATCH] gusev_vladislav_lab_2 is ready --- gusev_vladislav_lab_2/README.md | 36 ++++++++++++ .../gusev_vladislav_lab_2.py | 53 ++++++++++++++++++ gusev_vladislav_lab_2/img.png | Bin 0 -> 11806 bytes 3 files changed, 89 insertions(+) create mode 100644 gusev_vladislav_lab_2/README.md create mode 100644 gusev_vladislav_lab_2/gusev_vladislav_lab_2.py create mode 100644 gusev_vladislav_lab_2/img.png diff --git a/gusev_vladislav_lab_2/README.md b/gusev_vladislav_lab_2/README.md new file mode 100644 index 0000000..afc2fc3 --- /dev/null +++ b/gusev_vladislav_lab_2/README.md @@ -0,0 +1,36 @@ +### Вариант 9 +### Задание на лабораторную работу: +Выполнить ранжирование признаков с помощью указанных по варианту моделей: +- Лассо (Lasso) +- Сокращение признаков Случайными деревьями (Random Forest Regressor) +- Линейная корреляция (f_regression) + +### Как запустить лабораторную работу: +Выполняем файл gusev_vladislav_lab_2.py, в консоль будут выведены результаты. + +### Технологии +NumPy - библиотека для работы с многомерными массивами. Sklearn - библиотека с большим количеством алгоритмов машинного обучения. + +### По коду +В начале генерируем исходные данные: 750 строк-наблюдений и 14 столбцов-признаков, задаем функцию-выход: регрессионную проблему Фридмана, добавляем зависимость признаков + +Далее создаем пустой словарь для хранения рангов признаков, используем методы из библиотеки Sklearn: Lasso, RandomForestRegressor и f_regression для задания по варианту. + +Далее необходимо объявить функцию def rank_to_dict(ranks, names): для соотнесения нашего списка рангов и списка оценок по признакам. Возвращает он словарь типа (имя_признака: оценка_признака) и оценки приведены к единому диапазону от 0 до 1 и округлены до сотых. + +В конце формируем среднее по каждому признаку, сортируем по убыванию и выводим на экран. + +Пример: + +![img.png](img.png) + +Признаки х4 и х14 имеют наивысшие ранги, что говорит об их наибольшей значимости для решения задачи + +Далее x2 и x12 занимают второе место по значимости (средняя значимость) + +х1, х11 ниже среднего + +х5, х8, х7 низкая значимость + +х9, х3, х13, х10, х6 очень низкая значимость + diff --git a/gusev_vladislav_lab_2/gusev_vladislav_lab_2.py b/gusev_vladislav_lab_2/gusev_vladislav_lab_2.py new file mode 100644 index 0000000..1ab41b1 --- /dev/null +++ b/gusev_vladislav_lab_2/gusev_vladislav_lab_2.py @@ -0,0 +1,53 @@ +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 + +#генерируем исходные данные: 750 строк-наблюдений и 14 столбцов-признаков +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)) + +names = ["x%s" % i for i in range(1,15)] +#Создается пустой словарь для хранения рангов признаков +ranks = {} + +#Lasso +lasso = Lasso(alpha=0.5) +lasso.fit(X, Y) +ranks["Lasso"] = dict(zip(names, lasso.coef_)) +#Случайные деревья +rf = RandomForestRegressor(n_estimators=100) +rf.fit(X, Y) +ranks["Random Forest"] = dict(zip(names, rf.feature_importances_)) +#Линейная корреляция +f_scores, p_values = f_regression(X, Y) +ranks["f_regression"] = dict(zip(names, f_scores)) + +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)) + +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]}') + diff --git a/gusev_vladislav_lab_2/img.png b/gusev_vladislav_lab_2/img.png new file mode 100644 index 0000000000000000000000000000000000000000..bf1bf97a1c2dc460bec580211c21f4cb671c6670 GIT binary patch literal 11806 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