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