Merge pull request 'romanova_adelina_lab_1 is ready' (#36) from romanova_adelina_lab_1 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/36
This commit is contained in:
commit
a062f64611
BIN
romanova_adelina_lab_1/1.png
Normal file
BIN
romanova_adelina_lab_1/1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 92 KiB |
BIN
romanova_adelina_lab_1/2.png
Normal file
BIN
romanova_adelina_lab_1/2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 93 KiB |
BIN
romanova_adelina_lab_1/3.png
Normal file
BIN
romanova_adelina_lab_1/3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 95 KiB |
69
romanova_adelina_lab_1/README.md
Normal file
69
romanova_adelina_lab_1/README.md
Normal file
@ -0,0 +1,69 @@
|
||||
|
||||
# Лабораторная №1. Вариант №21
|
||||
|
||||
## Тема:
|
||||
Работа с типовыми наборами данных и различными моделями
|
||||
## Задание:
|
||||
|
||||
Сгенерировать определённый тип данных, сравнить на нём разные модели и отобразить качество на графиках.
|
||||
|
||||
Данные: make_classification (n_samples=500, n_features=2, n_redundant=0, n_informative=2, random_state=rs, n_clusters_per_class=1)
|
||||
|
||||
Модели:
|
||||
- Линейная регрессия
|
||||
- Полиномиальная регрессия (со степенью 5)
|
||||
- Гребневая полиномиальная регрессия (со степенью 5, alpha = 1.0)
|
||||
|
||||
## Как запустить программу?
|
||||
Необходимо запустить файл **main.py**
|
||||
## Использованные технологии
|
||||
|
||||
Этот код использует несколько библиотек и технологий для создания синтетических данных, обучения различных моделей регрессии и визуализации результатов. Вот краткое описание использованных технологий:
|
||||
|
||||
1. **NumPy** - это библиотека для работы с массивами и матрицами чисел. Она используется для создания и манипуляции данными.
|
||||
|
||||
1. **Matplotlib** - это библиотека для создания графиков и визуализации данных. Она используется для отображения данных на графиках.
|
||||
|
||||
1. **Scikit-learn** - это библиотека машинного обучения, которая предоставляет множество инструментов для обучения моделей и анализа данных. В этом коде используются следующие модули из этой библиотеки:
|
||||
|
||||
- *make_classification* - используется для генерации синтетических данных классификации.
|
||||
- *train_test_split* - используется для разделения данных на обучающий и тестовый наборы.
|
||||
- *linearRegression* - используется для создания и обучения линейной регрессии.
|
||||
- *polynomialFeatures* - используется для создания полиномиальных признаков.
|
||||
- *ridge* - используется для создания и обучения гребневой полиномиальной регрессии.
|
||||
- *r2_score* - используется для вычисления коэффициента детерминации модели.
|
||||
|
||||
## Описание работы
|
||||
|
||||
Сначала программа использует функцию **make_classification** для создания синтетических данных. Эти данные представляют собой два признака и являются результатом задачи классификации. Всего создается 500 точек данных.
|
||||
|
||||
Сгенерированные данные разделяются на обучающий и тестовый наборы с использованием функции **train_test_split**. Обучающий набор содержит 80% данных, а тестовый набор - 20%.
|
||||
|
||||
Далее прооисходит обучение моделей. Для каждой строятся графики, на которых отображаются тестовые данные и предсказанные значения для оценки, насколько хорошо модель соответствует данным.
|
||||
|
||||
Для каждой модели программа вычисляет коэффициент детерминации с использованием функции **r2_score**.
|
||||
|
||||
Программа создает, обучает и визуализирует три модели регрессии и позволяет оценить их производительность на сгенерированных данных.
|
||||
|
||||
## Выходные данные
|
||||
Была выведена следующая точность у моделей:
|
||||
```
|
||||
Линейная регрессия с точностью 0.52
|
||||
Полиномиальная регрессия с точностью -0.20
|
||||
Гребневая полиномиальная регрессия с точностью -0.09
|
||||
```
|
||||
Графики результатов построены следующим образом:
|
||||
- Линейная регрессия
|
||||
|
||||
![](1.png "")
|
||||
|
||||
- Полиномиальная регрессия
|
||||
|
||||
![](2.png "")
|
||||
|
||||
- Гребневая полиномиальная регрессия
|
||||
|
||||
![](3.png "")
|
||||
|
||||
Линейная регрессия показала наилучшую точность с точностью, равной 0.52, что указывает на приемлемую предсказательную способность модели. Полиномиальная и гребневая полиномиальная регрессии со значениями -0.20 и -0.09 соответственно, демонстрируют низкую точность.
|
||||
|
79
romanova_adelina_lab_1/main.py
Normal file
79
romanova_adelina_lab_1/main.py
Normal file
@ -0,0 +1,79 @@
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
from sklearn.datasets import make_classification
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.linear_model import LinearRegression, Ridge
|
||||
from sklearn.preprocessing import PolynomialFeatures
|
||||
from sklearn.metrics import mean_squared_error, r2_score
|
||||
|
||||
# Данные:
|
||||
# make_classification (
|
||||
# n_samples=500 - Общее количество точек данных
|
||||
# n_features=2, - Количество признаков
|
||||
# n_redundant=0, - Количество избыточных признаков
|
||||
# n_informative=2 - Количество информативных признаков
|
||||
# random_state=rs - Задаем случайное состояние для воспроизводимости
|
||||
# n_clusters_per_class=1 - Количество кластеров для каждого класса)
|
||||
|
||||
# Используемые модели:
|
||||
# 1. Линейная регрессию
|
||||
# 2. Полиномиальная регрессия (со степенью 5)
|
||||
# 3. Гребневая полиномиальная регрессия (со степенью 5, alpha = 1.0)
|
||||
|
||||
# Генерация данных
|
||||
X, y = make_classification(n_samples=500, n_features=2, n_redundant=0, n_informative=2, random_state=42, n_clusters_per_class=1)
|
||||
|
||||
# Разделение данных на обучающий и тестовый наборы
|
||||
|
||||
# train_test_split - функция разделения данных на обучающий и тестовый наборы
|
||||
# test_size - доля данных, которая будет использоваться для тестирования модели (20% для тестирования)
|
||||
# random_state - установка начального состояния генератора случайных чисел
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
|
||||
|
||||
# Обучение моделей
|
||||
|
||||
# Линейная регрессия
|
||||
lr = LinearRegression()
|
||||
lr.fit(X_train, y_train)
|
||||
y_lr_pred = lr.predict(X_test)
|
||||
r2_lr = r2_score(y_test, y_lr_pred)
|
||||
|
||||
# Полиномиальная регрессия
|
||||
poly = PolynomialFeatures(degree=5)
|
||||
X_train_poly = poly.fit_transform(X_train)
|
||||
X_test_poly = poly.transform(X_test)
|
||||
lr_poly = LinearRegression()
|
||||
lr_poly.fit(X_train_poly, y_train)
|
||||
y_poly_pred = lr_poly.predict(X_test_poly)
|
||||
r2_poly = r2_score(y_test, y_poly_pred)
|
||||
|
||||
# Гребневая полиномиальная регрессия
|
||||
ridge = Ridge(alpha=1.0)
|
||||
ridge.fit(X_train_poly, y_train)
|
||||
y_ridge_pred = ridge.predict(X_test_poly)
|
||||
r2_ridge = r2_score(y_test, y_ridge_pred)
|
||||
|
||||
# Графики
|
||||
|
||||
# Функция для отображения точек на графике
|
||||
def plot_with_labels(X, y, title, xlabel, ylabel):
|
||||
plt.figure(figsize=(12, 6))
|
||||
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', marker='.', label='Тестовые данные')
|
||||
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap='viridis', marker='o', edgecolors='black', linewidths=0.5, label='Обучающие данные')
|
||||
plt.title(title)
|
||||
plt.xlabel(xlabel)
|
||||
plt.ylabel(ylabel)
|
||||
plt.legend()
|
||||
plt.show()
|
||||
|
||||
# График для линейной регрессии
|
||||
plot_with_labels(X_test, y_lr_pred, 'Линейная регрессия', 'Признак 1', 'Признак 2')
|
||||
print(f'Линейная регрессия - Точность: {r2_lr:.2f}')
|
||||
|
||||
# График для полиномиальной регрессии
|
||||
plot_with_labels(X_test, y_poly_pred, 'Полиномиальная регрессия', 'Признак 1', 'Признак 2')
|
||||
print(f'Полиномиальная регрессия - Точность: {r2_poly:.2f}')
|
||||
|
||||
# График для гребневой полиномиальной регрессии
|
||||
plot_with_labels(X_test, y_ridge_pred, 'Гребневая полиномиальная регрессия', 'Признак 1', 'Признак 2')
|
||||
print(f'Гребневая полиномиальная регрессия - Точность: {r2_ridge:.2f}')
|
Loading…
Reference in New Issue
Block a user