diff --git a/kutygin_andrey_lab_2/README.md b/kutygin_andrey_lab_2/README.md new file mode 100644 index 0000000..c613c9f --- /dev/null +++ b/kutygin_andrey_lab_2/README.md @@ -0,0 +1,71 @@ +**Задание** +*** +Используя код из пункта «Решение задачи ранжирования признаков», выполните ранжирование признаков с помощью указанных по варианту моделей. Отобразите получившиеся оценки каждого признака каждой моделью и среднюю оценку. Проведите анализ получившихся результатов. Какие четыре признака оказались самыми важными по среднему значению? (Названия\индексы признаков и будут ответом на задание). + +**Вариант 16:** + +Линейная регрессия (LinearRegression) + +Случайное Лассо (RandomizedLasso) + +Линейная корреляция (f_regression) + + +**Как запустить лабораторную** +*** +Запустить файл main.py + +**Используемые технологии** +*** +Библиотеки numpy, scikit-learn, их компоненты + +**Описание лабораторной (программы)** +*** +Этот код демонстрирует, как выполнить ранжирование признаков в задаче регрессии с использованием моделей Linear Regression и Random Forest Regression, а также метода f_regression. + +Первым этапом является создание случайных данных с помощью функции make_regression. Затем мы обучаем модель Linear Regression на этих данных и сохраняем оценки весов признаков. То же самое мы делаем и с моделью Random Forest Regression, сохраняя значения "важности" признаков, полученные от этой модели. Кроме того, мы применяем метод f_regression для получения оценок важности каждого признака. + +Далее мы вычисляем среднее значение оценок признаков от трех методов / моделей. Затем мы выводим все оценки важности признаков. + +В конце кода мы выбираем четыре наиболее важных признака на основе средних оценок и выводим их значения. + +Важность признака определяется по его оценке/значению, где более высокие значения указывают на бОльшую важность. Очевидно, что самые важные признаки будут те, у которых оценки/значения выше всего. +**Результат** +*** +В результате получаем следующее: + +Признак 0: 0.8672604223819891 + +Признак 1: 0.7708510602186707 + +Признак 2: 0.03116023013554309 + +Признак 3: 0.6998726361290992 + +Признак 4: 1.0 + +Признак 5: 0.08986896281166205 + +Признак 6: 0.669155851030746 + +Признак 7: 0.1410044322180913 + +Признак 8: 0.043892111747763814 + +Признак 9: 0.5011547461825057 + +4 Наиболее значимых признака: + +Признак 3: 0.6998726361290992 + +Признак 1: 0.7708510602186707 + +Признак 0: 0.8672604223819891 + +Признак 4: 1.0 + +Вывод: Исходя из выполненного кода, мы получили оценки важности признаков для задачи регрессии с использованием моделей Linear Regression, Random Forest Regression и метода f_regression. + +Наиболее важные признаки, определенные на основе средних оценок, оказались: признак 1, признак 6, признак 0 и признак 4. + +Эти признаки имеют наибольшее влияние на результат задачи регрессии и следует обратить на них особое внимание при анализе данных и принятии решений. \ No newline at end of file diff --git a/kutygin_andrey_lab_2/lab2.py b/kutygin_andrey_lab_2/lab2.py new file mode 100644 index 0000000..c2a5489 --- /dev/null +++ b/kutygin_andrey_lab_2/lab2.py @@ -0,0 +1,42 @@ +import numpy as np +from sklearn.datasets import make_regression +from sklearn.linear_model import LinearRegression +from sklearn.ensemble import RandomForestRegressor +from sklearn.feature_selection import f_regression +from sklearn.preprocessing import MinMaxScaler + +# Создание случайных данных +X, y = make_regression(n_samples=100, n_features=10, random_state=42) + +# Масштабирование признаков +scaler = MinMaxScaler() +X_scaled = scaler.fit_transform(X) + +# Ранжирование признаков с помощью Linear Regression +linreg = LinearRegression() +linreg.fit(X_scaled, y) +linreg_scores = np.abs(linreg.coef_) + +# Ранжирование признаков с помощью Random Forest Regression +rfreg = RandomForestRegressor() +rfreg.fit(X_scaled, y) +rfreg_scores = rfreg.feature_importances_ + +# Ранжирование признаков с помощью f_regression +freg_scores, _ = f_regression(X_scaled, y) + +# Вычисление средней оценки +avg_scores = np.mean([linreg_scores, rfreg_scores, freg_scores], axis=0) + +# Масштабирование score в интервал от 0 до 1 +scaled_scores = avg_scores / np.max(avg_scores) + +# Вывод результатов +for i, score in enumerate(scaled_scores): + print(f"Признак {i}: {score}") + +# Получение индексов четырех наиболее важных признаков +top_features_indices = np.argsort(scaled_scores)[-4:] +print("4 Наиболее значимых признака:") +for idx in top_features_indices: + print(f"Признак {idx}: {scaled_scores[idx]}")