diff --git a/romanova_adelina_lab_1/1.png b/romanova_adelina_lab_1/1.png new file mode 100644 index 0000000..9e6b3db Binary files /dev/null and b/romanova_adelina_lab_1/1.png differ diff --git a/romanova_adelina_lab_1/2.png b/romanova_adelina_lab_1/2.png new file mode 100644 index 0000000..39c7106 Binary files /dev/null and b/romanova_adelina_lab_1/2.png differ diff --git a/romanova_adelina_lab_1/3.png b/romanova_adelina_lab_1/3.png new file mode 100644 index 0000000..3622674 Binary files /dev/null and b/romanova_adelina_lab_1/3.png differ diff --git a/romanova_adelina_lab_1/README.md b/romanova_adelina_lab_1/README.md new file mode 100644 index 0000000..282b8fa --- /dev/null +++ b/romanova_adelina_lab_1/README.md @@ -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 соответственно, демонстрируют низкую точность. + diff --git a/romanova_adelina_lab_1/main.py b/romanova_adelina_lab_1/main.py new file mode 100644 index 0000000..873a063 --- /dev/null +++ b/romanova_adelina_lab_1/main.py @@ -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}')