IIS_2023_1/romanova_adelina_lab_1/main.py

80 lines
4.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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}')