senkin_alexander_lab_2 is ready #110

Merged
Alexey merged 1 commits from senkin_alexander_lab_2 into main 2023-11-06 21:18:14 +04:00
4 changed files with 100 additions and 0 deletions

1
senkin_alexander_lab_2/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.idea/

View File

@ -0,0 +1,49 @@
Лабораторная №2
Вариант №2
Задание на лабораторную:
выполните ранжирование признаков с помощью указанных по
варианту моделей. Отобразите получившиеся значения\оценки каждого
признака каждым методом\моделью и среднюю оценку. Проведите анализ
получившихся результатов. Какие четыре признака оказались самыми
важными по среднему значению? (Названия\индексы признаков и будут
ответом на задание).
Модели:
- Линейная регрессия (LinearRegression)
- Рекурсивное сокращение
признаков (Recursive Feature Elimination RFE)
- Сокращение признаков
Случайными деревьями (Random Forest Regressor)
Как запустить лабораторную работу:
Чтобы увидеть работу программы, нужно запустить исполняемый питон файл senkin_alexander_lab_2.py, после чего в консоли будут выведены все признаки, их ранжирование и топ 4 признака по среднему значению значимости.
Библиотеки
Numpy. иблиотека для работы с массивами и матрицами чисел. Она используется для создания и манипуляции данными.
Sklearn. Предоставляет инструменты и алгоритмы, которые упрощают задачи, связанные с машинным обучением.
Описание программы:
- Генерируем набор данных из 100 точек данных используя функцию make_circles
- С помощью функции train_test_split разделяем данные на тестовые и обучающие в соотношении 20 к 80
- Добавляем дополнительные признаки, чтобы в сумме было 20 признаков
- Создаем 3 модели:
- Линейную регрессию (LinearRegression)
- Рекурсивное сокращение признаков (Recursive Feature Elimination RFE)
- Сокращение признаков Случайными деревьями (Random Forest Regressor)
- Обучаем модели и производим ранжирование
- Линейная регрессия дает ранжирование признаков на основе абсолютных коэффициентов.
- RFE (Рекурсивное сокращение признаков) ранжирует признаки на основе их значимости для модели.
- Random Forest Regressor оценивает важность признаков на основе их вклада в прогнозы модели.
- Посредством вычисления среднего ранжирования по всем трем методам мы определяем, какие признаки являются самыми важными с учетом всех трех методов.
![img.png](img.png)
Делаем вывод, что по среднему значению самыми важными признаками являются 3, 17, 19 и 20 признаки

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

View File

@ -0,0 +1,50 @@
import numpy as np
from sklearn.datasets import make_circles
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestRegressor
# Создаем данные
rs = 42 # Установите желаемый random_state
X, y = make_circles(n_samples=100, noise=0.2, factor=0.5, random_state=rs)
# Добавим дополнительные признаки
X = np.column_stack((X, X**2, X**3, X**4, X**5, X**6, X**7, X**8, X**9, X**10))
# Разделяем данные на обучающий и тестовый наборы
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=rs)
# Линейная регрессия
lr = LinearRegression()
lr.fit(X_train, y_train)
lr_feature_ranking = np.abs(lr.coef_)
# RFE (Рекурсивное сокращение признаков)
rfe = RFE(lr, n_features_to_select=1)
rfe.fit(X_train, y_train)
rfe_feature_ranking = rfe.ranking_
# Случайные деревья
rf = RandomForestRegressor(random_state=rs)
rf.fit(X_train, y_train)
rf_feature_importance = rf.feature_importances_
# Создаем матрицу, где строки - это признаки, а столбцы - это методы
feature_rankings = np.vstack((lr_feature_ranking, rfe_feature_ranking, rf_feature_importance))
# Вычисляем среднюю оценку для каждого признака
mean_rankings = np.mean(feature_rankings, axis=0)
# Выводим ранжирование признаков и средние оценки
feature_names = [f"Feature {i}" for i in range(1, X_train.shape[1] + 1)]
for i, feature in enumerate(mean_rankings):
print(f'{feature_names[i]}: Linear Regression Rank = {lr_feature_ranking[i]:.2f}, RFE Rank = {rfe_feature_ranking[i]}, Random Forest Importance = {rf_feature_importance[i]:.2f}, Mean Rank = {feature:.2f}')
# Сортируем признаки по среднему значению
sorted_features = np.argsort(mean_rankings)
top_4_features = sorted_features[:4]
print("\nTop 4 features by mean ranking:")
for feature_index in top_4_features:
print(f'{feature_names[feature_index]}')