arzamaskina_milana_lab_2 is ready
This commit is contained in:
parent
a8c58683dd
commit
7eda432471
50
arzamaskina_milana_lab_2/README.md
Normal file
50
arzamaskina_milana_lab_2/README.md
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
## Лабораторная работа №2
|
||||||
|
|
||||||
|
### Ранжирование признаков
|
||||||
|
|
||||||
|
Вариант №2
|
||||||
|
|
||||||
|
## Задание:
|
||||||
|
|
||||||
|
Используя код из [1] (пункт «Решение задачи ранжирования признаков», стр. 205),
|
||||||
|
выполните ранжирование признаков с помощью указанных по варианту моделей.
|
||||||
|
Отобразите получившиеся значения\оценки каждого признака каждым методом\моделью и среднюю оценку.
|
||||||
|
Проведите анализ получившихся результатов.
|
||||||
|
Какие четыре признака оказались самыми важными по среднему значению?
|
||||||
|
(Названия\индексы признаков и будут ответом на задание).
|
||||||
|
|
||||||
|
Модели:
|
||||||
|
+ Линейная регрессия (LinearRegression)
|
||||||
|
+ Рекурсивное сокращение признаков (Recursive Feature Elimination –RFE),
|
||||||
|
+ Сокращение признаков Случайными деревьями (Random Forest Regressor)
|
||||||
|
|
||||||
|
### Какие технологии использовались:
|
||||||
|
|
||||||
|
Используемые библиотеки:
|
||||||
|
* numpy
|
||||||
|
* pandas
|
||||||
|
* sklearn
|
||||||
|
|
||||||
|
### Как запустить:
|
||||||
|
|
||||||
|
* установить python, numpy, pandas, sklearn
|
||||||
|
* запустить проект (стартовая точка - main.py)
|
||||||
|
|
||||||
|
### Что делает программа:
|
||||||
|
|
||||||
|
* Генерирует данные и обучает модели: LinearRegression, Recursive Feature Elimination (RFE), Random Forest Regressor
|
||||||
|
* Производится ранжирование признаков с помощью моделей
|
||||||
|
* Отображение получившихся результатов: значения признаков для каждой модели и 4 самых важных признака по среднему значению
|
||||||
|
|
||||||
|
### 4 самых важных признака по среднему значению
|
||||||
|
* Признак №1 : 0.887
|
||||||
|
* Признак №4 : 0.821
|
||||||
|
* Признак №2 : 0.741
|
||||||
|
* Признак №11 : 0.600
|
||||||
|
|
||||||
|
#### Результаты работы программы:
|
||||||
|
|
||||||
|
![Result1](img_result_1.png)
|
||||||
|
![Result2](img_result_2.png)
|
||||||
|
![Result3](img_result_3.png)
|
||||||
|
![Result4](img_result_4.png)
|
BIN
arzamaskina_milana_lab_2/img_result_1.png
Normal file
BIN
arzamaskina_milana_lab_2/img_result_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 148 KiB |
BIN
arzamaskina_milana_lab_2/img_result_2.png
Normal file
BIN
arzamaskina_milana_lab_2/img_result_2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 146 KiB |
BIN
arzamaskina_milana_lab_2/img_result_3.png
Normal file
BIN
arzamaskina_milana_lab_2/img_result_3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 155 KiB |
BIN
arzamaskina_milana_lab_2/img_result_4.png
Normal file
BIN
arzamaskina_milana_lab_2/img_result_4.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
84
arzamaskina_milana_lab_2/main.py
Normal file
84
arzamaskina_milana_lab_2/main.py
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
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)
|
||||||
|
|
||||||
|
# Модели
|
||||||
|
model_LR = LinearRegression()
|
||||||
|
model_RFE = RFE(LinearRegression(), n_features_to_select=1)
|
||||||
|
model_RFR = RandomForestRegressor()
|
||||||
|
|
||||||
|
# Оценки моделей
|
||||||
|
model_scores = {}
|
||||||
|
|
||||||
|
# Cлучайные данные для регрессии
|
||||||
|
def generation_data_and_start():
|
||||||
|
np.random.seed(0)
|
||||||
|
size = 750
|
||||||
|
X_ = np.random.uniform(0, 1, (size, 14))
|
||||||
|
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))
|
||||||
|
|
||||||
|
# DataFrame для данных
|
||||||
|
data = pd.DataFrame(X_)
|
||||||
|
data['y'] = y_
|
||||||
|
|
||||||
|
models_study_and_scores(data.drop('y', axis=1), data['y'])
|
||||||
|
print_scores()
|
||||||
|
|
||||||
|
# Обучение и оценка моделей
|
||||||
|
def models_study_and_scores(X, y):
|
||||||
|
|
||||||
|
# Линейная регрессия
|
||||||
|
model_LR.fit(X, y)
|
||||||
|
# Нормализация коэффициентов признаков
|
||||||
|
norm_coef = MinMaxScaler().fit_transform(np.abs(model_LR.coef_).reshape(-1, 1))
|
||||||
|
model_scores["Линейная регрессия"] = norm_coef.flatten()
|
||||||
|
|
||||||
|
# Рекурсивное сокращение признаков
|
||||||
|
model_RFE.fit(X, y)
|
||||||
|
# Нормализация рангов
|
||||||
|
norm_rank = 1 - (model_RFE.ranking_ - 1) / (np.max(model_RFE.ranking_) - 1)
|
||||||
|
model_scores["Рекурсивное сокращение признаков"] = norm_rank
|
||||||
|
|
||||||
|
# Сокращение признаков Случайными деревьями
|
||||||
|
model_RFR.fit(X, y)
|
||||||
|
# Нормализация значений важности признаков
|
||||||
|
norm_imp = MinMaxScaler().fit_transform(model_RFR.feature_importances_.reshape(-1, 1))
|
||||||
|
model_scores["Сокращение признаков Случайными деревьями"] = norm_imp.flatten()
|
||||||
|
|
||||||
|
# Вывод оценок
|
||||||
|
def print_scores():
|
||||||
|
print()
|
||||||
|
print(f"---- Оценки признаков ----")
|
||||||
|
print()
|
||||||
|
for name, scores in model_scores.items():
|
||||||
|
print(f"{name}:")
|
||||||
|
for feature, score in enumerate(scores, start=1):
|
||||||
|
print(f"Признак №{feature}: {score:.3f}")
|
||||||
|
print(f"Средняя оценка признаков: {np.mean(scores):.3f}")
|
||||||
|
print()
|
||||||
|
|
||||||
|
# 4 наиболее важных признака по среднему значению
|
||||||
|
scores = np.mean(list(model_scores.values()), axis=0)
|
||||||
|
sorted_f = sorted(enumerate(scores, start=1), key=lambda x: x[1], reverse=True)
|
||||||
|
imp_features = sorted_f[:4]
|
||||||
|
print("Четыре наиболее важных признака:")
|
||||||
|
for f, score in imp_features:
|
||||||
|
print(f"Признак №{f}: {score:.3f}")
|
||||||
|
|
||||||
|
generation_data_and_start()
|
Loading…
Reference in New Issue
Block a user