Merge pull request 'almukhammetov_bulat_lab_2' (#30) from almukhammetov_bulat_lab_2 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/30
This commit is contained in:
commit
19ed166e7b
40
almukhammetov_bulat_lab_2/README.md
Normal file
40
almukhammetov_bulat_lab_2/README.md
Normal file
@ -0,0 +1,40 @@
|
||||
Вариант 2
|
||||
|
||||
Задание:
|
||||
Используя код из [1](пункт «Решение задачи ранжирования признаков», стр. 205), выполните ранжирование признаков с помощью указанных по варианту моделей. Отобразите получившиеся значения\оценки каждого признака каждым методом\моделью и среднюю оценку. Проведите анализ получившихся результатов. Какие четыре признака оказались самыми важными по среднему значению? (Названия\индексы признаков и будут ответом на задание).
|
||||
|
||||
Данные:
|
||||
Линейная регрессия (LinearRegression)
|
||||
Рекурсивное сокращение признаков (Recursive Feature Elimination –RFE)
|
||||
Сокращение признаков Случайными деревьями (Random Forest Regressor)
|
||||
|
||||
Запуск:
|
||||
Запустите файл lab2.py
|
||||
|
||||
Описание программы:
|
||||
1. Генерирует случайные данные для задачи регрессии с помощью функции make_regression, создавая матрицу признаков X и вектор целевой переменной y.
|
||||
2. Создает DataFrame data, в котором столбцы представляют признаки, а последний столбец - целевую переменную.
|
||||
3. Разделяет данные на матрицу признаков X и вектор целевой переменной y.
|
||||
4. Создает список моделей для ранжирования признаков: линейной регрессии, рекурсивного сокращения признаков и сокращения признаков случайными деревьями.
|
||||
5. Создает словарь model_scores для хранения оценок каждой модели.
|
||||
6. Обучает и оценивает каждую модель на данных:
|
||||
7. Вычисляет ранги признаков и нормализует их в диапазоне от 0 до 1.
|
||||
8. Выводит оценки признаков каждой модели и их средние оценки.
|
||||
9. Находит четыре наиболее важных признака по средней оценке и выводит их индексы и значения.
|
||||
|
||||
Результаты:
|
||||
|
||||
![Alt text](image.png)
|
||||
|
||||
![Alt text](image-1.png)
|
||||
|
||||
![Alt text](image-2.png)
|
||||
|
||||
![Alt text](image-3.png)
|
||||
|
||||
![Alt text](image-4.png)
|
||||
|
||||
Выводы:
|
||||
|
||||
Четыре наиболее важных признака, определенных на основе средних оценок, включают Признак 6, Признак 1, Признак 2 и Признак 5. Эти признаки имеют наибольшую среднюю важность среди всех признаков.
|
||||
|
BIN
almukhammetov_bulat_lab_2/image-1.png
Normal file
BIN
almukhammetov_bulat_lab_2/image-1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
BIN
almukhammetov_bulat_lab_2/image-2.png
Normal file
BIN
almukhammetov_bulat_lab_2/image-2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
BIN
almukhammetov_bulat_lab_2/image-3.png
Normal file
BIN
almukhammetov_bulat_lab_2/image-3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.8 KiB |
BIN
almukhammetov_bulat_lab_2/image-4.png
Normal file
BIN
almukhammetov_bulat_lab_2/image-4.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.8 KiB |
BIN
almukhammetov_bulat_lab_2/image.png
Normal file
BIN
almukhammetov_bulat_lab_2/image.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.7 KiB |
75
almukhammetov_bulat_lab_2/lab2.py
Normal file
75
almukhammetov_bulat_lab_2/lab2.py
Normal file
@ -0,0 +1,75 @@
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from sklearn.datasets import make_regression
|
||||
from sklearn.linear_model import LinearRegression
|
||||
from sklearn.feature_selection import RFE
|
||||
from sklearn.ensemble import RandomForestRegressor
|
||||
from sklearn.preprocessing import MinMaxScaler
|
||||
|
||||
# Используя код из [1](пункт «Решение задачи ранжирования признаков», стр. 205), выполните ранжирование признаков
|
||||
# с помощью указанных по варианту моделей. Отобразите получившиеся значения\оценки каждого признака каждым
|
||||
# методом\моделью и среднюю оценку. Проведите анализ получившихся результатов. Какие четыре признака оказались
|
||||
# самыми важными по среднему значению? (Названия\индексы признаков и будут ответом на задание).
|
||||
|
||||
# Линейная регрессия (LinearRegression), Рекурсивное сокращение признаков (Recursive Feature Elimination –RFE),
|
||||
# Сокращение признаков Случайными деревьями (Random Forest Regressor)
|
||||
random_state = np.random.RandomState(2)
|
||||
|
||||
# Генерация случайных данных для регрессии
|
||||
X, y = make_regression(n_samples=100, n_features=10, noise=0.1, random_state=random_state)
|
||||
|
||||
# Создание DataFrame для данных
|
||||
data = pd.DataFrame(X, columns=[f'признак_{i}' for i in range(X.shape[1])])
|
||||
data['целевая_переменная'] = y
|
||||
|
||||
# Разделение данных на признаки (X) и целевую переменную (y)
|
||||
X = data.drop('целевая_переменная', axis=1)
|
||||
y = data['целевая_переменная']
|
||||
|
||||
# Создаем модели
|
||||
models = [
|
||||
("Линейная регрессия", LinearRegression()),
|
||||
("Рекурсивное сокращение признаков", RFE(LinearRegression(), n_features_to_select=1)),
|
||||
("Сокращение признаков Случайными деревьями", RandomForestRegressor())
|
||||
]
|
||||
|
||||
# Словарь для хранения оценок каждой модели
|
||||
model_scores = {}
|
||||
|
||||
# Обучение и оценка моделей
|
||||
for name, model in models:
|
||||
model.fit(X, y)
|
||||
if name == "Рекурсивное сокращение признаков":
|
||||
# RFE возвращает ранжирование признаков
|
||||
rankings = model.ranking_
|
||||
# Нормализация рангов так, чтобы они находились в диапазоне от 0 до 1
|
||||
normalized_rankings = 1 - (rankings - 1) / (np.max(rankings) - 1)
|
||||
model_scores[name] = normalized_rankings
|
||||
elif name == "Сокращение признаков Случайными деревьями":
|
||||
# Важность признаков для RandomForestRegressor
|
||||
feature_importances = model.feature_importances_
|
||||
# Нормализация значений важности признаков в диапазоне от 0 до 1
|
||||
normalized_importances = MinMaxScaler().fit_transform(feature_importances.reshape(-1, 1))
|
||||
model_scores[name] = normalized_importances.flatten()
|
||||
elif name == "Линейная регрессия":
|
||||
# Коэффициенты признаков для Linear Regression
|
||||
coefficients = model.coef_
|
||||
# Нормализация коэффициентов так, чтобы они находились в диапазоне от 0 до 1
|
||||
normalized_coefficients = MinMaxScaler().fit_transform(np.abs(coefficients).reshape(-1, 1))
|
||||
model_scores[name] = normalized_coefficients.flatten()
|
||||
|
||||
# Вывод оценок каждой модели
|
||||
for name, scores in model_scores.items():
|
||||
print(f"{name} оценки признаков:")
|
||||
for feature, score in enumerate(scores, start=1):
|
||||
print(f"Признак {feature}: {score:.2f}")
|
||||
print(f"Средняя оценка: {np.mean(scores):.2f}")
|
||||
print()
|
||||
|
||||
# Находим четыре наиболее важных признака по средней оценке
|
||||
all_feature_scores = np.mean(list(model_scores.values()), axis=0)
|
||||
sorted_features = sorted(enumerate(all_feature_scores, start=1), key=lambda x: x[1], reverse=True)
|
||||
top_features = sorted_features[:4]
|
||||
print("Четыре наиболее важных признака:")
|
||||
for feature, score in top_features:
|
||||
print(f"Признак {feature}: {score:.2f}")
|
Loading…
Reference in New Issue
Block a user