IIS_2023_1/simonov_nikita_lab_2/readme.md

152 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Лабораторная работа №2. Вариант 5.
## Задание
Выполнить ранжирование признаков с помощью указанных по варианту моделей. Отобразить получившиеся значения\оценки каждого признака каждым методом\моделью и среднюю оценку. Провести анализ получившихся результатов.
- Гребневая регрессия (Ridge)
- Рекурсивное сокращение признаков (Recursive Feature Elimination RFE)
- Сокращение признаков Случайными деревьями (Random Forest)
## Содержание
- [Лабораторная работа №2. Вариант 5.](#лабораторная-работа-2-вариант-5)
- [Задание](#задание)
- [Содержание](#содержание)
- [Введение](#введение)
- [Зависимости](#зависимости)
- [Запуск приложения](#запуск-приложения)
- [Описание кода](#описание-кода)
- [Заключение](#заключение)
- [Оценка работы моделей](#оценка-работы-моделей)
- [Общий вывод](#общий-вывод)
## Введение
Данный код демонстрирует, как провести анализ важности признаков при помощи различных моделей: гребневой регрессии (Ridge), рекурсивного сокращения признаков (RFE) и случайного леса (Random Forest). Кроме того, код рассчитывает среднюю важность признаков по всем моделям.
## Зависимости
Для работы этого приложения необходимы следующие библиотеки Python:
- Matplotlib
- scikit-learn
- NumPy
Вы можете установить их с помощью pip:
```bash
pip install numpy scikit-learn matplotlib
```
## Запуск приложения
Чтобы запустить эту программу, выполните следующую команду:
```bash
python lab2.py
```
В консоль выведется резудьтат.
## Описание кода
- Генерируется синтетический набор данных с 750 наблюдениями и 14 признаками.
```python
np.random.seed(0)
size = 750
X = np.random.uniform(0, 1, (size, 14))
```
- Задаем функцию-выход и добавляем зависимость признаков
```python
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))
```
- Для анализа важности признаков используются три разные модели: гребневая регрессия (Ridge), RFE и случайный лес (Random Forest).
```python
ridge = Ridge(alpha=1)
ridge.fit(X, Y)
lr = LinearRegression()
lr.fit(X, Y)
rfe = RFE(lr)
rfe.fit(X, Y)
rfr = RandomForestRegressor()
rfr.fit(X, Y)
```
- Модели обучаются на данных для оценки важности признаков.
- Две функции, `rank_ridge_rfr_to_dict` и `rank_rfe_to_dict`, нормализуют и возвращают рейтинги важности признаков в виде словарей.
```python
def rank_ridge_rfr_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))
def rank_rfe_to_dict(ranks, names):
new_ranks = [float(1 / x) for x in ranks]
new_ranks = map(lambda x: round(x, 2), new_ranks)
return dict(zip(names, new_ranks))
```
- В коде рассчитываются и выводятся рейтинги важности признаков для каждой модели и средний рейтинг важности признаков.
## Заключение
### Оценка работы моделей
В консоль выводятся оценки значимости признаков каждой модели, а также средние оценки значимости признаков всех моделей
```bash
Ridge
[('x4', 1.0), ('x1', 0.98), ('x2', 0.8), ('x14', 0.61), ('x5', 0.54), ('x12', 0.39), ('x3', 0.25), ('x13', 0.19), ('x11', 0.16), ('x6', 0.08), ('x8', 0.07), ('x7', 0.02), ('x10',
0.02), ('x9', 0.0)]
Recursive Feature Elimination
[('x1', 1.0), ('x2', 1.0), ('x3', 1.0), ('x4', 1.0), ('x5', 1.0), ('x11', 1.0), ('x13', 1.0), ('x12', 0.5), ('x14', 0.33), ('x8', 0.25), ('x6', 0.2), ('x10', 0.17), ('x7', 0.14),
('x9', 0.12)]
Random Forest Regression
[('x14', 1.0), ('x2', 0.84), ('x4', 0.77), ('x1', 0.74), ('x11', 0.36), ('x12', 0.35), ('x5', 0.28), ('x3', 0.12), ('x13', 0.12), ('x6', 0.01), ('x7', 0.01), ('x8', 0.01), ('x9',
0.01), ('x10', 0.0)]
Mean
[('x4', 0.92), ('x1', 0.91), ('x2', 0.88), ('x14', 0.65), ('x5', 0.61), ('x11', 0.51), ('x3', 0.46), ('x13', 0.44), ('x12', 0.41), ('x8', 0.11), ('x6', 0.1), ('x7', 0.06), ('x10', 0.06), ('x9', 0.04)]
```
Модель Ridge:
- Самыми значимыми признаками, оцененными с использованием модели Ridge, являются x4, x1 и x2, обладающие оценками важности близкими к 1.0. Также к значимым можно отнести x5 и x14, которого не должно быть.
- не был отмечен важный признак x3.
Модель Recursive Feature Elimination:
- Модель RFE довольно точно выделила важные признаки, включая x1, x2, x3, x4 и x5, которые получили оценку важности равную 1.0.
- Признаки x11 и x13 были ошибочно оценены как важные.
Модель Random Forest Regression:
- Важность признаков с использованием модели Random Forest Regression дает представление о том, как признаки влияют на предсказания модели.Самые важные признаки согласно этой модели включают x14, x2, x4 и x1, но важность x3 и x5 существенно ниже.
- Модель также ошибочно приписала важность признаку x14.
Средняя оценка:
Средняя оценка важности признаков была рассчитана на основе результатов трех моделей и даёт общее представление об их значимости.
Наиболее значимыми признаками, в среднем, оказались x1, x2, x4 и x5.
Важность признака x3 снизилась в среднем, но он все равно остается значимым.
Признаки x11 и x14 оцениваются как значимые средним образом, хотя это может быть результатом ошибок моделей.
### Общий вывод
- Модель Ridge и метод Recursive Feature Elimination (RFE) совершили по одной ошибке каждая, но RFE не потерял ни одного значимого признака.
- Модель RandomForestRegressor показала наименьшую точность в оценке значимости признаков, что привело к потере двух значимых признаков и добавлению одного лишнего.
- Однако, средняя оценка значимости признаков также содержит три ошибки, как и первая модель.
Исходя из этих результатов, можно заключить, что для ранжирования признаков предпочтительно использовать специализированные инструменты, такие как Recursive Feature Elimination (RFE), вместо оценки коэффициентов признаков в регрессионных моделях.