tsyppo_anton_lab_2 is ready #270
73
tsyppo_anton_lab_2/README.md
Normal file
73
tsyppo_anton_lab_2/README.md
Normal file
@ -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 также считаются
|
||||||
|
важными, занимая второе, третье и четвертое место соответственно. Оценки признаков варьируются в зависимости от метода,
|
||||||
|
что подчеркивает важность использования нескольких подходов для достоверного определения важности признаков. Важность
|
||||||
|
признаков оценивается как среднее значение оценок по трем методам._
|
||||||
|
|
||||||
|
---
|
||||||
|
|
BIN
tsyppo_anton_lab_2/img.png
Normal file
BIN
tsyppo_anton_lab_2/img.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 36 KiB |
63
tsyppo_anton_lab_2/main.py
Normal file
63
tsyppo_anton_lab_2/main.py
Normal file
@ -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)
|
Loading…
Reference in New Issue
Block a user