From b2bd5ab410c00a5b67eb86906d83244c478cfba3 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 6 Dec 2023 15:02:51 +0400 Subject: [PATCH] tsyppo_anton_lab_2 is ready --- tsyppo_anton_lab_2/README.md | 73 +++++++++++++++++++++++++++++++++++ tsyppo_anton_lab_2/img.png | Bin 0 -> 37225 bytes tsyppo_anton_lab_2/main.py | 63 ++++++++++++++++++++++++++++++ 3 files changed, 136 insertions(+) create mode 100644 tsyppo_anton_lab_2/README.md create mode 100644 tsyppo_anton_lab_2/img.png create mode 100644 tsyppo_anton_lab_2/main.py diff --git a/tsyppo_anton_lab_2/README.md b/tsyppo_anton_lab_2/README.md new file mode 100644 index 0000000..0b6acf4 --- /dev/null +++ b/tsyppo_anton_lab_2/README.md @@ -0,0 +1,73 @@ +# Лабораторная работа №2: Ранжирование признаков +## Задание. Вариант 8 +Всего вариантов 20, мой вариант 28, поэтому взял 8 вариант + +Задание: +Используя код из [1](пункт «Решение задачи ранжирования признаков», стр. 205), выполните ранжирование признаков с +помощью указанных по варианту моделей. Отобразите получившиеся значения\оценки каждого признака каждым методом\моделью +и среднюю оценку. Проведите анализ получившихся результатов. Какие четыре признака оказались самыми важными по +среднему значению? (Названия\индексы признаков и будут ответом на задание). + +8.Лассо (Lasso), Рекурсивное сокращение признаков (Recursive Feature Elimination –RFE), Сокращение признаков +Случайными деревьями (Random Forest Regressor) + +## Описание программы + +Программа выполняет ранжирование признаков с использованием трех методов: Lasso (лассо), Рекурсивное сокращение +признаков (RFE), и Сокращение признаков Случайными деревьями (Random Forest Regressor). Вводится набор случайных данных, +содержащих 10 признаков, и генерируется целевая переменная на основе линейной комбинации этих признаков. +В конце выводится 4 самых важных признака. + + +## Как запустить лабораторную работу + +1. Установите необходимые библиотеки: + + ```bash + pip install numpy pandas scikit-learn + ``` + +2. Запустите скрипт: + + ```bash + python main.py + ``` + +## Использованные технологии + +- Python +- NumPy +- Pandas +- scikit-learn + +## Что программа делает + +Программа выполняет ранжирование признаков в данных с использованием трех различных методов: + +1. Lasso (лассо): стремится уменьшить веса некоторых признаков до нуля, что может служить признаком их неважности. +2. Рекурсивное сокращение признаков (RFE): удаляет наименее значимые признаки на каждом шаге, создавая ранжированный +список признаков. +3. Сокращение признаков Случайными деревьями (Random Forest Regressor): оценивает важность каждого признака на том, +как часто признак используется для разделения данных в деревьях случайного леса. +4. Средняя оценка: Для каждого признака вычисляется среднее значение его оценок важности по трем методам. +Это создает обобщенную меру важности для каждого признака. + +Итоговый результат представлен в виде таблицы, где для каждого признака указаны его оценки важности по каждому методу, +а также средняя оценка важности. Программа также выводит четыре признака с наивысшими средними оценками, считая их +наиболее важными. + +## Тесты + +![Графики моделей](img.png) + +## Вывод + +_Анализ оценок признаков, проведенный с использованием трех различных методов ранжирования, выявил следующие ключевые +выводы: +Feature_8 оценен как наиболее важный признак по всем трем методам. Feature_1, Feature_7 и Feature_3 также считаются +важными, занимая второе, третье и четвертое место соответственно. Оценки признаков варьируются в зависимости от метода, +что подчеркивает важность использования нескольких подходов для достоверного определения важности признаков. Важность +признаков оценивается как среднее значение оценок по трем методам._ + +--- + diff --git a/tsyppo_anton_lab_2/img.png b/tsyppo_anton_lab_2/img.png new file mode 100644 index 0000000000000000000000000000000000000000..3de9a06e697b2744b22ba9ebf4a28f3e0ad77292 GIT binary patch literal 37225 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

Qq7`G4I^XcfoI1FcP4iP#OuYc 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 L+t;Pyh5`Q{d_J+P literal 0 HcmV?d00001 diff --git a/tsyppo_anton_lab_2/main.py b/tsyppo_anton_lab_2/main.py new file mode 100644 index 0000000..3079d61 --- /dev/null +++ b/tsyppo_anton_lab_2/main.py @@ -0,0 +1,63 @@ +import numpy as np +import pandas as pd +from sklearn.linear_model import Lasso +from sklearn.feature_selection import RFE +from sklearn.ensemble import RandomForestRegressor +from sklearn.preprocessing import StandardScaler + +# Создаём случайные данные +np.random.seed(42) +n_samples = 100 +n_features = 10 +X = np.random.rand(n_samples, n_features) + +true_coefficients = np.array([3, -1, 2, 0, 1, 2, -3, 4, 0, -2]) +noise = np.random.normal(0, 0.1, n_samples) +y = np.dot(X, true_coefficients) + noise + +# Нормализуем данные +scaler = StandardScaler() +X_normalized = scaler.fit_transform(X) + +# Преобразуем данные в DataFrame +columns = [f'Feature_{i}' for i in range(1, n_features + 1)] +df = pd.DataFrame(X_normalized, columns=columns) +df['Target'] = y + +# 1. Лассо (Lasso) +lasso = Lasso(alpha=0.1) +lasso.fit(X_normalized, y) +lasso_coefs = np.abs(lasso.coef_) + +# 2. Рекурсивное сокращение признаков (RFE) +rfe = RFE(estimator=RandomForestRegressor(), n_features_to_select=1) +rfe.fit(X_normalized, y) +rfe_ranks = rfe.ranking_ + +# 3. Сокращение признаков Случайными деревьями (Random Forest Regressor) +rf = RandomForestRegressor() +rf.fit(X_normalized, y) +rf_importances = rf.feature_importances_ + +# 4. Средняя оценка +average_scores = (lasso_coefs + (1 / rfe_ranks) + rf_importances) / 3 + +# Масштабируем средние оценки так, чтобы они лежали в диапазоне от 0 до 1 +scaled_average_scores = (average_scores - np.min(average_scores)) / (np.max(average_scores) - np.min(average_scores)) + +# Создаем DataFrame для анализа результатов +results_df = pd.DataFrame({ + 'Lasso': np.round(lasso_coefs, 2), + 'RFE Rank': np.round(1 / rfe_ranks, 2), + 'Random Forest': np.round(rf_importances, 2), + 'Average': np.round(scaled_average_scores, 2) +}, index=columns) + +# Выводим результаты +print("Оценки признаков:") +print(results_df) + +# Четыре признака с самыми высокими средними оценками +top_features = results_df.nlargest(4, 'Average').index +print("\nСамые важные признаки:") +print(top_features)